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