2.3 KiB
2.3 KiB
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 | 处理完成 |