...
下图描述了SLAMWARE Core和外部系统之间的通信连接框图。
SLAMWARE Core内部模块框图 CTRL BUSPWM外部系统SLAMWARE CORE主系统电池电机电机
ADC测距传感器触碰传感器ADCGPIO Anchor
...
SR001 SLAMWARE Control Bus Protocol
...
Inter-chip通讯协议规范
...
Inter-chip通讯协议简介
通讯特性
本协议所假设的通讯介质是以点对点或者总线方式组织的网络,其中同一时间最多只有2个通讯端点(Peer)可以相互之间通讯,但是如果通讯介质网络允许实现广播,则可以允许由一个通讯端点同时向多个其他端点单向的发送消息。
通讯介质本身可以是基于字节流模式的信道,比如USART、TCP以太网,也可以是基于数据包的信道,比如USB、I2C。Inter-chip Protocol并不要求通讯介质实现数据包的同步机制,协议本身可以利用每个数据包头部的同步信号自动实现同步。
当通讯发生时,传输在通讯介质上的消息永远是以具有固定格式的数据包形式存在的。每个数据包允许承载不同长度的数据,但在数据包头部均具有长度一致、数据结构定义一致的数据,该数据用语描述数据包自身的信息以及期望接收端采取的处理方式。 当通讯发生时,传输在通讯介质上的消息永远是以具有固定格式的数据包形式存在的。每个数据包允许承载不同长度的数据,但在数据包头部均具有长度一致、数据结构定义一致的数据,该数据用语描述数据包自身的信息以及期望接收端采取的处理方式。
数据传输顺序
Inter-chip Protocol要求信道传输数据时遵循FIFO原则,并且要求使用小字端传输数据包中协议所定义的公共数据结构,如包头部的描述数据。
...
基于不同应用场合的需求,Inter-chip Protocol包含了几个具体的子模式(sub-profile)。不同的子模式定义了各自的网络通讯方式、具体采用的包头数据结构等信息。在当前的实现中,Standard Profile是协议默认使用的子模式。它定义了一种采用请求-应答机制的通讯网络。
...
...
Inter-chip通讯协议规范
数据包结构纵览
Wiki Markup |
---|
<span style="color: #262626">每个Inter-chip Protocol规范的数据包均符合如下的格式定义。</span>
FlagExFlag\[n\]AddrExAddr\[n\]LenLenHCMDPayload\[n\]CHKSUM发送顺序u8u8\[n\]u8u8\[n\]u8u8u8u8\[n\]u8
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="06a3462b-9a47-4368-93ec-e0310b7e7def"><ac:parameter ac:name="">_Toc465950215</ac:parameter></ac:structured-macro><span style="color: #44546a"><em>图表</em></span> <span style="color: #44546a"><em>3-1</em></span> <span style="color: #44546a"><em>Inter-chip Protocol</em></span> <span style="color: #44546a"><em>数据包格式定义</em></span>
<span style="color: #262626">其中,底色为灰色的部分为可选字段。不同的Sub-Profile会使用这些可选字段的某些部分。白色的字段是所有Inter-chip Protocol规范的数据包均会带有的。后文将就单个字段进行描述。</span> |
Flag字段
...
字段名
...
描述
...
ExtBit
Wiki Markup |
---|
设置为1时表示数据包的下一个字节是ExFlag字段,即ExFlag\[n\]将出现在本数据包中。其中将携带更多的标志位信息。 |
...
LongFrame
...
设置为1时表示本数据包将使用16bit的长度字段,此时LenH字段将包含在本数据包中。该数据包可以装载最多65534字节的数据。
...
AddrEn
Wiki Markup |
---|
设置为1时表示Addr将包含在数据包中,并且ExAddr\[n\]也可能存在于本数据包。Inter-chip Protocol协议栈将可能解析存在于Addr以及ExAddr\[1..n\]中的地址进行相应处理。 |
...
CheckSumEn
...
设置为1时,本数据包将在最末尾包含一个校验和字节数据。即CHKSUM字段将包含在本数据包中。Inter-chip Protocol协议栈将被要求对本数据包的数据进行校验并和CHKSUM做对比。
每个Inter-chip Protocol规范的数据包均符合如下的格式定义。
数据类型 | u8 | u8[n] | u8 | u8[n] | u8 | u8 | u8 | u8[n] | u8 |
---|---|---|---|---|---|---|---|---|---|
字段 | Flag | ExFlag[n] | Addr | ExAddr[n] | Len | LenH | CMD | Payload[n] | CHKSUM |
发送顺序 | → |
其中,底色为灰色的字段为可选字段。不同的Sub-Profile会使用这些可选字段的某些部分。其它字段是所有Inter-chip Protocol规范的数据包均会带有的。后文将就单个字段进行描述。
Flag字段
MSB +7 +0 LSB | ||||||||
Flag: | ExtBit | LongFrame | AddrEn | CheckSumEn | 0 | 0 | 0 | 0 |
该字段为一个数据包的起始标识,占用一个字节。随着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数据。
当Flag字段的LongFrame位设置为1时,LenH字段也将出现在数据包中,并与Len字段构成一个16bit的联合字段。此时数据包可以携带65534字节的数据。
注意:当Len/LenH字段设置为0时,本数据包将被视为无效数据包而被协议栈丢弃。
CMD字段
MSB +7 +0 LSB | ||||||||
CMD: | CMD[7..0] |
该字段带有期望协议栈或者接收方处理程序对本数据包执行操作的命令信息。不同的Sub-Profile会保留一部分的CMD取值用于实现协议栈自身的通讯机制。例如在Standard Profile下,0x0至0xF被用于协议栈占用。其具体含义请参考本文的后续章节。
Payload字段
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] |
当Flag中CheckSumEn位被设置为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所定义的行为,进行额外的处理。
...
Len与LenH字段
Wiki Markup |
---|
Len\[7..0\]MSB+7+0LSBLen:Len\[15..8\]LenH:
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="ccead844-2786-4fee-8aaa-89c99df9d717"><ac:parameter ac:name="">_Toc465950218</ac:parameter></ac:structured-macro><span style="color: #44546a"><em>图表</em></span> <span style="color: #44546a"><em>3-4</em></span> <span style="color: #44546a"><em>Inter-chip Protocol</em></span> <span style="color: #44546a"><em>Len和LenH</em></span> <span style="color: #44546a"><em>字段格式说明</em></span>
<span style="color: #262626">该字段用于表示本数据包携带的数据长度信息。其定义为Payload字段和CMD字段长度的总和,即:</span>
<span style="color: #262626">Len=</span> <span style="color: #262626"><ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="fda16bd4-863f-41b7-9c0e-371304aee555"><ac:plain-text-body><![CDATA[sizeof(Payload\[n\])+1 |
由于Len字段为一个字节,因此当只有Len字段出现时,当前的数据包只能携带至多254字节的Payload数据。 当Flag字段的LongFrame位设置为1时,LenH字段也将出现在数据包中,并与Len字段构成一个16bit的联合字段。此时数据包可以携带65534字节的数据。 注意:当Len/LenH字段设置为0时,本数据包将被视为无效数据包而被协议栈丢弃。]]>
CMD字段
Wiki Markup |
---|
CMD\[7..0\]MSB+7+0LSBCMD:
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="ae95f435-4702-4c6f-9bf7-3b40784d25c6"><ac:parameter ac:name="">_Toc465950219</ac:parameter></ac:structured-macro><span style="color: #44546a"><em>图表</em></span> <span style="color: #44546a"><em>3-5</em></span> <span style="color: #44546a"><em>Inter-chip Protocol</em></span> <span style="color: #44546a"><em>CMD字段格式说明</em></span>
<span style="color: #262626">该字段带有期望协议栈或者接收方处理程序对本数据包执行操作的命令信息。不同的Sub-Profile会保留一部分的CMD取值用于实现协议栈自身的通讯机制。例如在Standard Profile下,0x0至0xF被用于协议栈占用。其具体含义请参考本文的后续章节。</span> |
Wiki Markup |
---|
Payload\[n\]字段 |
Wiki Markup |
---|
Data\[0\]MSB+7+0LSBPayload\[0\]:Data\[1\]Payload\[1\]:Data\[n-1\]Payload\[n-1\]:...
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="201cb4fe-ac5d-478b-aef4-686cf25a8e09"><ac:parameter ac:name="">_Toc465950220</ac:parameter></ac:structured-macro><span style="color: #44546a"><em>图表</em></span> <span style="color: #44546a"><em>3-6</em></span> <span style="color: #44546a"><em>Inter-chip Protocol</em></span> <span style="color: #44546a"><em>Payload字段格式说明</em></span>
<span style="color: #262626">该字段记录了数据包发送方希望携带的有效信息负载。其数据长度由Len/LenH字段表示。如果发送方没有任何需要传输的信息时,该字段将被省略。</span> |
CHKSUM字段
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> |
...
AnchorInfo数据域 | 类型 | 描述 |
id | u16 | 表示Anchor的id。 |
distance | u16 | 表示当前Anchor的距离单位为毫米。 |
Max error | u8 | 表示距离的标准差。单位为毫米。(如果传感器不支持标准差测量,则没有此数据域。) |
u8[n]