【发布时间】:2017-01-24 12:55:57
【问题描述】:
我正在尝试了解(并随后实施)clean flight quadrocopter 固件用于 srxl 包验证的 crc16 验证。
SRXL 是一种简单的串行协议,用于通过单条串行线传输伺服值。
包结构是这样的:
crc16 由以下函数验证:
//srxlFrameLength is the package length
//srxlFrame is the received package buffer
uint16_t crc_calc = 0;
for (i = 0; i < srxlFrameLength; i++) {
crc_calc = crc16_CCITT(crc_calc, srxlFrame[i]);
}
if(crcCalc == 0){ //package is valid }
我不明白这是如何工作的。如果我要实现这个,我会迭代地计算包的所有字节的 crc,直到我到达保存的 crc,然后与保存的 crc 进行比较。为什么这个实现也有效?
我还想为发送方实现一个包生成器代码。 是否可以像这样实现 crc 生成:
uint16_t crc_calc = 0;
for(int i = 0; i < packetLength; ++i){
crc_calc = crc16_CCITT(crc_calc, packet[i]);
}
//concat calculated crc16 to packet here.
提前致谢,
麦芽酒
【问题讨论】:
标签: c arduino serial-port microcontroller crc