58 lines
2.3 KiB
Markdown
58 lines
2.3 KiB
Markdown
|
||
|
||
|
||
CRC16 校验长度为 16-256字节较为合适。
|
||
|
||
ACK丢了不重发
|
||
|
||
|
||
|
||
|
||
# 发送指令流程
|
||
1.发送数据后,始终要等待ack
|
||
2.接收数据后,始终要回复ack
|
||
3.获得ack不代表指令成功
|
||
4.crc校验不成功,发送repeat包
|
||
5.指令号=端口号
|
||
|
||
## 正常传输
|
||
| host | slave |
|
||
| ---------------- | ---------------- |
|
||
| 发送指令 | 等待指令 |
|
||
| 等待ACK回复 | 发送ACK |
|
||
| 等待指令处理完成 | 处理指令 |
|
||
| 等待指令处理完成 | 发送resp |
|
||
| 发送resp_ack | 等待resp_ack回复 |
|
||
| 处理完成 | 处理完成 |
|
||
## 指令丢失
|
||
| host | slave |
|
||
| ---------------- | --------------------- |
|
||
| 发送指令 | 等待指令 |
|
||
| 发送指令丢失 | 等待指令 |
|
||
| 超时重发指令 | 等待指令 |
|
||
| 等待ACK回复 | 指令接收成功,发送ACK |
|
||
| 等待指令处理完成 | 处理指令 |
|
||
| 等待指令处理完成 | 发送resp |
|
||
| 发送resp_ack | 等待resp_ack回复 |
|
||
| 处理完成 | 处理完成 |
|
||
## cmd ack 丢失
|
||
| host | slave |
|
||
| ---------------- | -------------------------- |
|
||
| 发送指令 | 等待指令 |
|
||
| 等待ACK回复 | 指令接收成功,发送ACK |
|
||
| 超时重发 | 指令已经开始行,发现重发包,发送ACK|
|
||
| 等待ACK回复 | 处理指令 |
|
||
| 等待指令处理完成 | 处理指令 |
|
||
| 等待指令处理完成 | 发送resp |
|
||
| 发送resp_ack | 等待resp_ack回复 |
|
||
| 处理完成 | 处理完成 |
|
||
## resp ack 丢失
|
||
| host | slave |
|
||
| ---------------- | ---------------- |
|
||
| 发送指令 | 等待指令 |
|
||
| 等待ACK回复 | 发送ACK |
|
||
| 等待指令处理完成 | 处理指令 |
|
||
| 等待指令处理完成 | 发送resp |
|
||
| 发送resp_ack | 等待resp_ack回复 |
|
||
| 处理完成 |发送resp |
|
||
| 发送resp_ack | 处理完成 | |