本帖最后由 szt1993 于 2022-9-21 13:55 编辑
1、CRC是用来干嘛的?
一般都知道是用来校验的,检测数据传输过程中是否出现错误(某些位,或某几位,或者某块区域位错误),一旦检测。
2、CRC是否能校正数据传输中的错误?
CRC只能检错,不能纠错。如果发现错误,可根据双方协议规定要求发送方重新发送,以避免错误数据导致的问题发生。
3、CRC是否能100%检错?
不是100%检错。只能说检错的概率比较高。由于程序设计等各方面因素可能导致漏检错检但绝大多数可以检出来。
4、CRC为什么检错比较高效?
原始信息中某位发生变化,则CRC值发生翻天覆地的变化。而不像其他校验,原始信息中某位发生变化时,可能最后的校验是一样的,如和检验。
5、CRC校验的过程是什么?
发送方根据发送报文,计算出CRC值。将原始信息和该CRC值一起发送给接收方。接收方根据原始信息,按照同样的算法,计算CRC。如果计算的CRC值不正确的话,则表明在数据传输的过程中,原始信息(或者CRC值)发生错误。
6、CRC校验的原理是什么?
CRC校验,本质上是模2除法求余。将发送信息M(x)当做被除数,发送方和接收方共同约定一个除数G(x),然后求余R(x),该余数R(x)即为CRC值。
7、CRC检验为什么要采用模2除法?
模2运算加减乘除和二进制加减乘除一样,唯一不同就是不进位,也不借位。因此硬件实现比较简单,可以用XOR异或门来搭建,加法和减法效果相同。所以硬件CRC也就逐渐兴盛起来,直接靠硬件就可以知道此数据是否错误,大大增加了检验效率,这也是此前所有硬件检验的基础,当然软件也是一样的,只不过需要自己去计算。
芯源的MCU普遍都有CRC硬件校验,这样就大大减少了程序员进行检验的编程难度,提高了编程效率。
|