一篇文章理解LRC校验:
LRC校验:像给快递里的物品称重(把所有数据“加起来”),收件方称总重,和标注的一致就没问题。优点是简单,缺点是容易漏检(比如两个物品重量错了但总和刚好对)。
LRC校验(纵向冗余校验)是一种简单的数据错误检测方法,核心逻辑就是“数据累加取补”,计算简单、占资源少,适合低速简单的通信(比如串口、RS232)。
用“发数据0x01、0x02”举例,两步走懂全流程:
1. 发送端算LRC校验码(3秒搞定)
规则:所有数据累加 → 用256减累加和(取8位补码),结果就是LRC码。
• 数据累加:0x01 + 0x02 = 0x03(十进制3);
• 算LRC码:256 - 3 = 253 → 十六进制0xFD。
然后把“数据+LRC码”一起发:0x01 → 0x02 → 0xFD(LRC粘在末尾)。
2. 接收端校验(1步判断)
接收端收到3个字节后,把所有字节累加:
• 0x01 + 0x02 + 0xFD = 0x100 → 只看低8位是0;
• 结果为0 → 校验通过(数据没传错);结果非0 → 校验失败(数据错了)。
一句话总结
LRC就是给数据算个“补数”当凭证,收发端靠“累加和是否为0”判断数据对错,比CRC简单得多,但容错能力弱一些。
LRC校验针对的是8位二进制数据(STM32常用的单字节数据),8位二进制能表示的数值范围是0~255(总共256个值)。用256减累加和,本质是取这个8位累加和的“补码”,这样才能保证“原始数据+LRC码”的累加和刚好是256(低8位为0),方便接收端一眼判断对错。
不管你的数据累加和是多少(比如3、100、200),都固定用256去减,这样规则简单统一,收发端不用额外约定其他数值。
