diff --git a/README.md b/README.md
index 1f8c83f..3fa766c 100644
--- a/README.md
+++ b/README.md
@@ -334,6 +334,13 @@ JT808Serializer DT2JT808Serializer = new JT808Serializer(DT2JT808Config);
 
 [可以参考Simples的Demo15](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo15.cs)
 
+### 举个栗子16
+
+场景:
+兼容2011协议的注册消息
+
+[可以参考Simples的Demo15](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo16.cs)
+
 ## NuGet安装
 
 | Package Name| Version| Preview  Version |Downloads|Remark|
diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs
index affce6f..d492903 100644
--- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs
+++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs
@@ -153,5 +153,58 @@ namespace JT808.Protocol.Test.MessageBody
             byte[] bytes = "7e0100405401000000000222222222220001000000003030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b65303032303030303030303030303030303030303030303030304b6f696b6530303202d4c1413132333436107e".ToHexBytes();
             string json = JT808Serializer.Analyze<JT808Package>(bytes);
         }
+
+        [Fact]
+        public void Test2011_1()
+        {
+            JT808Package jT808_0X0100 = new JT808Package
+            {
+                Header = new JT808Header
+                {
+                    MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(),
+                    ManualMsgNum = 10,
+                    TerminalPhoneNo = "123456789",
+                },
+                Bodies = new JT808_0x0100
+                {
+                    AreaID = 40,
+                    CityOrCountyId = 50,
+                    MakerId = "1234",
+                    PlateColor = 1,
+                    PlateNo = "粤A12345",
+                    TerminalId = "CHI123",
+                    TerminalModel = "tk12345"
+                }
+            };
+            var hex = JT808Serializer.Serialize(jT808_0X0100, JT808Version.JTT2011).ToHexString();
+            Assert.Equal("7E01000021000123456789000A002800323132333400746B3132333435004348493132330001D4C1413132333435857E", hex);
+        }
+
+        [Fact]
+        public void Test2011_2()
+        {
+            byte[] bytes = "7E01000021000123456789000A002800323132333400746B3132333435004348493132330001D4C1413132333435857E".ToHexBytes();
+            JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes);
+            Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId);
+            Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion);
+            Assert.Equal(10, jT808_0X0100.Header.MsgNum);
+            Assert.Equal("123456789", jT808_0X0100.Header.TerminalPhoneNo);
+
+            JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies;
+            Assert.Equal(40, JT808Bodies.AreaID);
+            Assert.Equal(50, JT808Bodies.CityOrCountyId);
+            Assert.Equal("1234", JT808Bodies.MakerId);
+            Assert.Equal(1, JT808Bodies.PlateColor);
+            Assert.Equal("粤A12345", JT808Bodies.PlateNo);
+            Assert.Equal("CHI123", JT808Bodies.TerminalId);
+            Assert.Equal("tk12345", JT808Bodies.TerminalModel);
+        }
+
+        [Fact]
+        public void Test2011_3()
+        {
+            byte[] bytes = "7E01000021000123456789000A002800323132333400746B3132333435004348493132330001D4C1413132333435857E".ToHexBytes();
+            string json = JT808Serializer.Analyze<JT808Package>(bytes);
+        }
     }
 }
diff --git a/src/JT808.Protocol.Test/Simples/Demo16.cs b/src/JT808.Protocol.Test/Simples/Demo16.cs
new file mode 100644
index 0000000..6087ce5
--- /dev/null
+++ b/src/JT808.Protocol.Test/Simples/Demo16.cs
@@ -0,0 +1,83 @@
+using JT808.Protocol.Enums;
+using JT808.Protocol.Interfaces;
+using JT808.Protocol.Internal;
+using JT808.Protocol.Extensions;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+using JT808.Protocol.MessageBody;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
+using System.Text.Json;
+using JT808.Protocol.MessageBody.CarDVR;
+using System.Linq;
+using JT808.Protocol.Test.JT808LocationAttach;
+using static JT808.Protocol.MessageBody.JT808_0x8105;
+using System.Buffers.Binary;
+using Newtonsoft.Json;
+
+namespace JT808.Protocol.Test.Simples
+{
+    public class Demo16
+    {
+        JT808Serializer JT808Serializer;
+
+        public Demo16()
+        {
+            IServiceCollection serviceDescriptors = new ServiceCollection();
+            serviceDescriptors.AddJT808Configure();
+            //通常在startup中使用app的Use进行扩展
+            IServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();
+            JT808Serializer = serviceProvider.GetRequiredService<IJT808Config>().GetSerializer();
+        }
+
+        [Fact]
+        public void Test1()
+        {
+            JT808Package jT808_0X0100 = new JT808Package
+            {
+                Header = new JT808Header
+                {
+                    MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(),
+                    ManualMsgNum = 10,
+                    TerminalPhoneNo = "123456789",
+                },
+                Bodies = new JT808_0x0100
+                {
+                    AreaID = 40,
+                    CityOrCountyId = 50,
+                    MakerId = "1234",
+                    PlateColor = 1,
+                    PlateNo = "粤A12345",
+                    TerminalId = "CHI123",
+                    TerminalModel = "tk12345"
+                }
+            };
+            var hex = JT808Serializer.Serialize(jT808_0X0100, JT808Version.JTT2011).ToHexString();
+            Assert.Equal("7E01000021000123456789000A002800323132333400746B3132333435004348493132330001D4C1413132333435857E", hex);
+        }
+
+        [Fact]
+        public void Test2()
+        {
+            var bytes = "7E01000021000123456789000A002800323132333400746B3132333435004348493132330001D4C1413132333435857E".ToHexBytes();
+            JT808Package jT808_0X0100 = JT808Serializer.Deserialize<JT808Package>(bytes);
+            //  采用2011协议 的终端注册消息解析
+            Assert.Equal(JT808MsgId.终端注册.ToUInt16Value(), jT808_0X0100.Header.MsgId);
+            Assert.Equal(1, jT808_0X0100.Header.ProtocolVersion);
+            Assert.Equal(10, jT808_0X0100.Header.MsgNum);
+            Assert.Equal("123456789", jT808_0X0100.Header.TerminalPhoneNo);
+
+            JT808_0x0100 JT808Bodies = (JT808_0x0100)jT808_0X0100.Bodies;
+            Assert.Equal(40, JT808Bodies.AreaID);
+            Assert.Equal(50, JT808Bodies.CityOrCountyId);
+            Assert.Equal("1234", JT808Bodies.MakerId);
+            Assert.Equal(1, JT808Bodies.PlateColor);
+            Assert.Equal("粤A12345", JT808Bodies.PlateNo);
+            Assert.Equal("CHI123", JT808Bodies.TerminalId);
+            Assert.Equal("tk12345", JT808Bodies.TerminalModel);
+        }
+    }
+}
diff --git a/src/JT808.Protocol/Enums/JT808Version.cs b/src/JT808.Protocol/Enums/JT808Version.cs
index 77b341b..fe7730c 100644
--- a/src/JT808.Protocol/Enums/JT808Version.cs
+++ b/src/JT808.Protocol/Enums/JT808Version.cs
@@ -9,10 +9,14 @@ namespace JT808.Protocol.Enums
     /// </summary>
     public enum JT808Version:byte
     {
+        /// <summary>
+        /// 2011
+        /// </summary>
+        JTT2011 = 0,
         /// <summary>
         /// 2013
         /// </summary>
-        JTT2013=1,
+        JTT2013 =1,
         /// <summary>
         /// 2019
         /// </summary>
diff --git a/src/JT808.Protocol/JT808.Protocol.xml b/src/JT808.Protocol/JT808.Protocol.xml
index ba6685a..754eb13 100644
--- a/src/JT808.Protocol/JT808.Protocol.xml
+++ b/src/JT808.Protocol/JT808.Protocol.xml
@@ -1596,6 +1596,11 @@
             JT808版本号
             </summary>
         </member>
+        <member name="F:JT808.Protocol.Enums.JT808Version.JTT2011">
+            <summary>
+            2011
+            </summary>
+        </member>
         <member name="F:JT808.Protocol.Enums.JT808Version.JTT2013">
             <summary>
             2013
@@ -8583,6 +8588,7 @@
         <member name="P:JT808.Protocol.MessageBody.JT808_0x0100.TerminalModel">
             <summary>
             终端型号
+            2011版本  8个字节  ,此终端型号由制造商自行定义,位数不足时,后补空格
             2013版本   20 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
             2019版本   30 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
             </summary>
diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0100.cs b/src/JT808.Protocol/MessageBody/JT808_0x0100.cs
index 791a452..46e1644 100644
--- a/src/JT808.Protocol/MessageBody/JT808_0x0100.cs
+++ b/src/JT808.Protocol/MessageBody/JT808_0x0100.cs
@@ -47,6 +47,7 @@ namespace JT808.Protocol.MessageBody
 
         /// <summary>
         /// 终端型号
+        /// 2011版本  8个字节  ,此终端型号由制造商自行定义,位数不足时,后补空格
         /// 2013版本   20 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
         /// 2019版本   30 个字节,此终端型号由制造商自行定义,位数不足时,后补“0X00”。
         /// </summary>
@@ -83,17 +84,25 @@ namespace JT808.Protocol.MessageBody
             JT808_0x0100 jT808_0X0100 = new JT808_0x0100();
             jT808_0X0100.AreaID = reader.ReadUInt16();
             jT808_0X0100.CityOrCountyId = reader.ReadUInt16();
-            if(reader.Version== JT808Version.JTT2019)
+            if (reader.Version == JT808Version.JTT2019)
             {
                 jT808_0X0100.MakerId = reader.ReadString(11);
                 jT808_0X0100.TerminalModel = reader.ReadString(30);
                 jT808_0X0100.TerminalId = reader.ReadString(30);
             }
-            else
+            else if (reader.Version == JT808Version.JTT2013)
             {
-                jT808_0X0100.MakerId = reader.ReadString(5);
-                jT808_0X0100.TerminalModel = reader.ReadString(20);
-                jT808_0X0100.TerminalId = reader.ReadString(7);
+                if (reader.ReadCurrentRemainContentLength() > 33)
+                {
+                    jT808_0X0100.MakerId = reader.ReadString(5);
+                    jT808_0X0100.TerminalModel = reader.ReadString(20);
+                    jT808_0X0100.TerminalId = reader.ReadString(7);
+                }
+                else {
+                    jT808_0X0100.MakerId = reader.ReadString(5);
+                    jT808_0X0100.TerminalModel = reader.ReadString(8);
+                    jT808_0X0100.TerminalId = reader.ReadString(7);
+                }
             }
             jT808_0X0100.PlateColor = reader.ReadByte();
             jT808_0X0100.PlateNo = reader.ReadRemainStringContent();
@@ -111,16 +120,21 @@ namespace JT808.Protocol.MessageBody
             writer.WriteUInt16(value.CityOrCountyId);
             if (writer.Version == JT808Version.JTT2019)
             {
-                writer.WriteString(value.MakerId.PadRight(11, '\0').ValiString(nameof(value.MakerId),11));
+                writer.WriteString(value.MakerId.PadRight(11, '\0').ValiString(nameof(value.MakerId), 11));
                 writer.WriteString(value.TerminalModel.PadRight(30, '\0').ValiString(nameof(value.TerminalModel), 30));
                 writer.WriteString(value.TerminalId.PadRight(30, '\0').ValiString(nameof(value.TerminalId), 30));
             }
-            else
+            else if (writer.Version == JT808Version.JTT2013)
             {
                 writer.WriteString(value.MakerId.PadRight(5, '\0').ValiString(nameof(value.MakerId), 5));
                 writer.WriteString(value.TerminalModel.PadRight(20, '\0').ValiString(nameof(value.TerminalModel), 20));
                 writer.WriteString(value.TerminalId.PadRight(7, '\0').ValiString(nameof(value.TerminalId), 7));
             }
+            else {
+                writer.WriteString(value.MakerId.PadRight(5, '\0').ValiString(nameof(value.MakerId), 5));
+                writer.WriteString(value.TerminalModel.PadRight(8, '\0').ValiString(nameof(value.TerminalModel), 8));
+                writer.WriteString(value.TerminalId.PadRight(7, '\0').ValiString(nameof(value.TerminalId), 7));
+            }
             writer.WriteByte(value.PlateColor);
             writer.WriteString(value.PlateNo);
         }
@@ -149,17 +163,32 @@ namespace JT808.Protocol.MessageBody
                 jT808_0X0100.TerminalId = reader.ReadString(30);
                 writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端ID(30)", jT808_0X0100.TerminalId);
             }
-            else
+            else if (reader.Version == JT808Version.JTT2013)
             {
-                ReadOnlySpan<byte> midSpan = reader.ReadVirtualArray(5);
-                jT808_0X0100.MakerId = reader.ReadString(5);
-                writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(5)", jT808_0X0100.MakerId);
-                ReadOnlySpan<byte> tmSpan = reader.ReadVirtualArray(20);
-                jT808_0X0100.TerminalModel = reader.ReadString(20);
-                writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(20)", jT808_0X0100.TerminalModel);
-                ReadOnlySpan<byte> tidSpan = reader.ReadVirtualArray(7);
-                jT808_0X0100.TerminalId = reader.ReadString(7);
-                writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端ID(7)", jT808_0X0100.TerminalId);
+                var length = reader.ReadCurrentRemainContentLength();
+                if (length > 33)
+                {
+                    ReadOnlySpan<byte> midSpan = reader.ReadVirtualArray(5);
+                    jT808_0X0100.MakerId = reader.ReadString(5);
+                    writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(5)", jT808_0X0100.MakerId);
+                    ReadOnlySpan<byte> tmSpan = reader.ReadVirtualArray(20);
+                    jT808_0X0100.TerminalModel = reader.ReadString(20);
+                    writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(20)", jT808_0X0100.TerminalModel);
+                    ReadOnlySpan<byte> tidSpan = reader.ReadVirtualArray(7);
+                    jT808_0X0100.TerminalId = reader.ReadString(7);
+                    writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端ID(7)", jT808_0X0100.TerminalId);
+                }
+                else {
+                    ReadOnlySpan<byte> midSpan = reader.ReadVirtualArray(5);
+                    jT808_0X0100.MakerId = reader.ReadString(5);
+                    writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(5)", jT808_0X0100.MakerId);
+                    ReadOnlySpan<byte> tmSpan = reader.ReadVirtualArray(8);
+                    jT808_0X0100.TerminalModel = reader.ReadString(8);
+                    writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(8)", jT808_0X0100.TerminalModel);
+                    ReadOnlySpan<byte> tidSpan = reader.ReadVirtualArray(7);
+                    jT808_0X0100.TerminalId = reader.ReadString(7);
+                    writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端ID(7)", jT808_0X0100.TerminalId);
+                }
             }
             jT808_0X0100.PlateColor = reader.ReadByte();
             writer.WriteNumber($"[{jT808_0X0100.PlateColor.ReadNumber()}]车牌颜色", jT808_0X0100.PlateColor);