Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

每个Inter-chip Protocol规范的数据包均符合如下的格式定义。

数据类型u8u8[n]u8u8[n]u8u8u8u8[n]u8
字段FlagExFlag[n]AddrExAddr[n]LenLenHCMDPayload[n]CHKSUM
发送顺序

其中,底色为灰色的字段为可选字段。不同的Sub-Profile会使用这些可选字段的某些部分。其它字段是所有Inter-chip Protocol规范的数据包均会带有的。后文将就单个字段进行描述。

Flag字段

存储顺序MSB +7
+0 LSB
Flag:

ExtBit

LongFrame

AddrEnCheckSumEn0000

该字段为一个数据包的起始标识,占用一个字节。随着Sub-Profile的不同,其取值有着不同的定义。其每个标志位的具体解释如下:

字段名

描述

ExtBit

设置为1时表示数据包的下一个字节是ExFlag字段,即ExFlag[n]将出现在本数据包中。其中将携带更多的标志位信息。

LongFrame

设置为1时表示本数据包将使用16bit的长度字段,此时LenH字段将包含在本数据包中。该数据包可以装载最多65534字节的数据。

AddrEn

设置为1时表示Addr将包含在数据包中,并且ExAddr[n]也可能存在于本数据包。Inter-chip Protocol协议栈将可能解析存在于Addr以及ExAddr[1..n]中的地址进行相应处理。

CheckSumEn

设置为1时,本数据包将在最末尾包含一个校验和字节数据。即CHKSUM字段将包含在本数据包中。Inter-chip Protocol协议栈将被要求对本数据包的数据进行校验并和CHKSUM做对比。

SR001 SLAMWARE Control Bus Protocol

Len与LenH字段

存储顺序MSB +7
+0 LSB
Len:Len[7..0]
LenH:Len[15..8]

该字段用于表示本数据包携带的数据长度信息。其定义为Payload字段和CMD字段长度的总和,即:

Len=sizeof(Payload[n])+1

由于Len字段为一个字节,因此当只有Len字段出现时,当前的数据包只能携带至多254字节的Payload数据。

...

注意:当Len/LenH字段设置为0时,本数据包将被视为无效数据包而被协议栈丢弃。

CMD字段

存储顺序MSB +7
+0 LSB
CMD:

CMD[7..0]

该字段带有期望协议栈或者接收方处理程序对本数据包执行操作的命令信息。不同的Sub-Profile会保留一部分的CMD取值用于实现协议栈自身的通讯机制。例如在Standard Profile下,0x0至0xF被用于协议栈占用。其具体含义请参考本文的后续章节。

...

Payload[n]字段

存储顺序MSB +7
+0 LSB
Payload[0]Data[0]
Payload[1]Data[1]
...
Payload[n-1]Data[n-1]

该字段记录了数据包发送方希望携带的有效信息负载。其数据长度由Len/LenH字段表示。如果发送方没有任何需要传输的信息时,该字段将被省略。

CHKSUM字段

存储顺序MSB +7
+0 LSB
CHKSUM:

CHKSUM[7..0]

FlagCheckSumEn位被设置为1时,该字段将附加在数据包的末尾,用于记录对数据包中正确数据的校验和。其计算方式如下:

CHKSUM[0..7]=0 xor Packet[0] xor Packet[1] xor…xor Packet[N]

其中, Packet表示即将发送的当前数据包去除CHKSUM字段的其他所有部分。Packet[N]表示即将发送的当前数据包的第N个字节。

当CHKSUM字段启用后,接收方协议栈将会在完成一个数据包接收后,重新计算一个新的CHKSUM并和数据包中附带的原始CHKSUM字段进行对比。如果不匹配,协议栈将丢弃当前数据包,并按照Sub-Profile所定义的行为,进行额外的处理。

Wiki Markup
CHKSUM\[7..0\]MSB+7+0LSBCHKSUM:
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="15dcbfc4-37a5-49e6-8fcd-c47003f56ca9"><ac:parameter ac:name="">_Toc465950221</ac:parameter></ac:structured-macro><span style="color: #44546a"><em>图表</em></span> <span style="color: #44546a"><em>3-7</em></span> <span style="color: #44546a"><em>Inter-chip Protocol</em></span> <span style="color: #44546a"><em>CHKSUM字段格式说明</em></span>
<span style="color: #262626">当Flag中CheckSumEn位被设置为1时,该字段将附加在数据包的末尾,用于记录对数据包中正确数据的校验和。其计算方式如下:</span>
<span style="color: #262626">CHKSUM0..7=0 xor Packet0</span> <span style="color: #262626">xor Packet1</span> <span style="color: #262626">xor...xor</span> <span style="color: #262626">PacketN</span> 
<span style="color: #262626">其中,Packet表示即将发送的当前数据包去除CHKSUM字段的其他所有部分。PacketN表示即将发送的当前数据包的第N个字节。</span>
<span style="color: #262626">当CHKSUM字段启用后,接收方协议栈将会在完成一个数据包接收后,重新计算一个新的CHKSUM并和数据包中附带的原始CHKSUM字段进行对比。如果不匹配,协议栈将丢弃当前数据包,并按照Sub-Profile所定义的行为,进行额外的处理。</span>
Wiki Markup
ExFlag\[N\]字段
Wiki Markup
ExFlagN\[6..0\]MSB+7+0LSBExFlag\[N\]:ExtBit
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="2e8b7da4-5ed7-4007-899c-af2a44751d9c"><ac:parameter ac:name="">_Toc465950222</ac:parameter></ac:structured-macro><span style="color: #44546a"><em>图表</em></span> <span style="color: #44546a"><em>3-8</em></span> <span style="color: #44546a"><em>Inter-chip Protocol</em></span> <span style="color: #44546a"><ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="0a3eec14-53da-44bf-b674-3956bb3e63ce"><ac:plain-text-body><![CDATA[_ExFlag\[N\]字段格式说明_
Wiki Markup
每一个字节ExFlag中的ExtBit位用于表示是否还存在一个额外的ExFlag字节紧跟在本ExFlag字节之后。当设置为0时,表示当前的ExFlag字节即是整个ExFlag\[N\]字段的终结。请参考具体Sub-Profile的定义了解本字段具体位定义。
Wiki Markup
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="5b8ba3c4-6d51-4798-920f-67e1f1b353a8"><ac:parameter ac:name="">_Toc390031739</ac:parameter></ac:structured-macro>Addr与ExAddr\[N\]字段
Wiki Markup
Addr\[6..0\]MSB+7+0LSBAddr:ExtBitExAddrN\[6..0\]ExAddr\[N\]:ExtBit
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="0548a352-ddb1-4d47-8506-0ff9cacaf322"><ac:parameter ac:name="">OLE_LINK7</ac:parameter></ac:structured-macro><ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="2319e6e3-8941-4da7-883e-5575e7228ba8"><ac:parameter ac:name="">OLE_LINK8</ac:parameter></ac:structured-macro><ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="decf2606-30de-43c1-a37c-d832449d789d"><ac:parameter ac:name="">_Toc465950223</ac:parameter></ac:structured-macro><span style="color: #44546a"><em>图表</em></span> <span style="color: #44546a"><em>3-9</em></span> <span style="color: #44546a"><ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="d2f6c670-e2b1-4eb6-b549-c1ca20fae6bc"><ac:plain-text-body><![CDATA[_Inter-chip Protocol Addr和ExAddr\[N\]字段格式说明_

当Flag中AddrEn位被设置为1时,数据包中将包含一个Addr字段,用于记录本数据包需要发送的目标设备地址。不同的Sub-Profile实现下,协议栈将对该字段的数据作出不同的处理。

Wiki Markup
在Addr字段中,使用了7个bit的区域用于表示0-127个设备地址号。如果希望使用更长的设备地址,则可以将Addr字段的ExtBit设置为1,此时,更多的地址数据位将被使用。它们将存储在后续的ExAddr\[N\]字段当中。
Wiki Markup
当Addr以及每个ExAddr\[N\]字段字节中的ExtBit设置为1时,表示当前字节后将紧跟一个ExAddr字节,直到ExtBit为0时为止。

...

ExFlag[n]字段

存储顺序MSB +7
+0 LSB
ExFlag[N]:ExtBitExFlagN[6..0]

当Flag中ExtBit位被设置为1时,数据包中将包含一个或多个字节的ExFlag字段。该字段包含了额外的标志位用于描述数据包本身的信息或者Sub-Profile所额外定义的内容。同时,用户应用程序也可以将额外的信息附加在本字段中。
每一个字节ExFlag中的ExtBit位用于表示是否还存在一个额外的ExFlag字节紧跟在本ExFlag字节之后。当设置为0时,表示当前的ExFlag字节即是整个ExFlag[N]字段的终结。请参考具体Sub-Profile的定义了解本字段具体位定义。

Addr与ExAddr[N]字段

存储顺序MSB +7
+0 LSB
Addr:ExtBitAddr[6..0]
ExAddr[N]:ExtBitExAddrN[6..0]

当Flag中AddrEn位被设置为1时,数据包中将包含一个Addr字段,用于记录本数据包需要发送的目标设备地址。不同的Sub-Profile实现下,协议栈将对该字段的数据作出不同的处理。
在Addr字段中,使用了7个bit的区域用于表示0-127个设备地址号。如果希望使用更长的设备地址,则可以将Addr字段的ExtBit设置为1,此时,更多的地址数据位将被使用。它们将存储在后续的ExAddr[N]字段当中。
当Addr以及每个ExAddr[N]字段字节中的ExtBit设置为1时,表示当前字节后将紧跟一个ExAddr字节,直到ExtBit为0时为止。

SR001 SLAMWARE Control Bus Protocol

...

Standard Profile

Inter-chip Protocol的Standard Profile定义了一种基于应答请求通讯模式的可靠点对点包交换网络。并且预留了一定的CMD取值用于协议栈内部实现通讯机制。

...

Standard Profile要求网络中同一时刻只有2个通讯端点相互进行通讯。并且,其中一方将始终首先向另一方发送数据。另一方将始终在接收到发送数据方的数据包后做出回应,发送对应的回应数据。
这里定义上述始终首先发送数据的通讯端点为宿主(Master),而始终先接收数据再发出回应数据包的通讯端点为从机(Slave)
Standard Profile使用了相同的格式用于Master以及Slave发出的数据包,即Flag字段的定义一致。不过根据通讯角色的不同,其发送的数据包的某些字段具有不同的含义。
对于由Master发出的数据包被称为请求命令数据包(简称请求命令),而由Slave发出的数据包被称为应答数据包(简称应答)
请求命令与应答必须是成对出现的,每个应答总对应与一个请求命令。而Master必须在发送一个请求命令后,在接收到Slave发送应答数据包或者通讯超时后,方可进行下一个请求命令的发送。
MasterSlave请求命令1应答1请求命令2应答2
Anchor_Toc465950224_Toc465950224图表 3-10基于Inter-chip Protocol的Master和Slave通讯规则Image Added

Flag字段定义


0MSB001000+7+0LSBStandard:0101000Long Frame:00

Anchor
_Toc465950225
_Toc465950225
图表 3-11 Inter-chip Protocol Flag字段格式说明
Standard Profile允许使用如下2种Flag字段的数据包格式:

...