2024-10-29 08:42:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 | 处理完成 |
|