ZHCU951A March 2018 – April 2022
为了帮助 Piccolo 查找事务的开始,应在命令数据包中命令字节(字节 1)的开头之前发送一个特殊的起始字符。十六进制字符 0xA5 用作这种特殊的起始字符。起始字符 0xA5 不应出现在主器件发送的字节流中的任何其他位置。
如果主器件需要在字节流中发送 0xA5(并非作为起始字符),则它应利用另一个名为转义字符的特殊字符 0x5A。连续发送 0x5A 0x00 将视为单个数据字节 0xA5。
下表说明了如何解释各种字节组合。
字节 | 解释说明 |
0xA5 | 事务开始。下一个字节是命令字节。 |
0x5A 0x00 | 数据字节 0xA5 |
0x5A 0x5A | 数据字节 0x5A |
0x5A | 数据字节 0xYY,当 YY 是紧跟在 0x5A 之后的十六进制字节且 0xYY 为非零时。 |
转义字符 (0x5A) 可以替代图 1-3 中说明的命令数据包中的任何字节。
起始字符可用于中止任何现有命令。每当从器件接收到 0xA5 时,它会清除所有未完成的命令,并重新开始,同时将下一个字节视为命令字节。
下面的图说明了写入和读取命令的完整结构。
写入 | 字节 0 | 字节 1 | 字节 2 | 字节 3 | 字节 4 | … | 字节 n+2 | 字节 n+3 | 字节 n+4 | 字节 n+5 | 字节 n+6 |
主机(主器件) | 0xA5 | CMD | LEN | D1 | D2 | … | Dn | CKSUM | 0 | 0 | 0 |
Piccolo(从器件) | FF | FF | FF | FF | FF | … | FF | FF | FF | FF | 响应 |
读取 | 字节 0 | 字节 1 | 字节 2 | 字节 3 | 字节 4 | … | 字节 n+2 | 字节 n+3 | 字节 n+4 | 字节 n+5 |
主机(主器件) | 0xA5 | CMD | LEN | D1 | D2 | … | Dn | CKSUM | 0 | 0 |
Piccolo(从器件) | FF | FF | FF | FF | FF | … | FF | FF | FF | FF |
读取 | 字节 n+6 | 字节 n+7 | 字节 n+8 | 字节 n+9 | … | 字节 n+m+7 | 字节 n+m+8 |
主机(主器件) | 0 | 0 | 0 | 0 | … | 0 | 0 |
Piccolo(从器件) | 响应 | LEN | D1 | D2 | … | Dm | CKSUM |
请注意,起始字符和转义字符不适用于由从器件发送的数据。