技术热线: 4007-888-234

单片机开发:什么是CRC(循环冗余校验)?

更新时间: 2020-09-26
阅读量:8171

许多单片机开发工程师经常使用各种通讯协议,而且设备之间的成功通信是嵌入式系统正常运行的关键。嵌入式系统依赖并使用通讯协议,通讯协议是一组用于管理设备之间发送和接收的数据的传输、同步和错误检查的规则来起作用的。

由于该协议是可工作的嵌入式系统的重要组成部分,因此正确运行至关重要。由于通信错误不可避免,因此许多协议(包括USB,CAN和A2B)都包含错误检查机制,例如循环冗余校验或CRC。

CRC用于标记损坏的数据并防止其通过总线发送。当今的协议通常支持更高的带宽和速度,因此CRC对于保持嵌入式系统中数据的简洁和可靠至关重要。

word-image-15.png

一、通信协议中的CRC

通信协议通常在数据包中使用两种CRC:一种用于保护数据包的标头,另一种用于保护数据包的数据部分。

尽管CRC的实现在协议之间有所不同,但目的仍然是相同的:为系统创建一种方法来检测错误并发起重传或忽略数据的请求。

CRC如何生成以及如何工作?所有这些都是基于算法计算的,该算法用于检测正在发送和接收的数据之间的不一致。本质上,CRC是从多个数据字节计算得出的值,以形成唯一的多项式密钥,该密钥被附加到传出消息中。在接收端执行相同的过程。然后,接收器将消息除以与发送器使用的相同多项式,如果此除的结果为零,则表示传输成功。但是,如果结果不等于零,则表明发生了错误。

二、USB协议中的CRC

所述USB协议,或通用串行总线,在传输过程中使用循环冗余检查,以保护所有非PID字段中从错误标记和数据分组。在USB 2.0中,令牌和帧开始(SOF)数据包包括5位CRC(CRC5),而数据数据包包括更长的16位CRC(CRC16),以为数据有效载荷提供足够的支持,直至1024个字节。

在USB 3.1数据包中,可以在标头数据包中找到CRC,该标头数据包由标头数据包框架,数据包标头和链接控制字组成。标头受16位CRC(CRC16)保护,链接控制字受5位CRC(CRC5)保护。数据有效载荷数据包包括一个32位CRC(CRC32),以容纳较大的数据有效载荷。此外,用于控制各种特定于链路的功能的链路命令包还包括5位CRC(CRC5)。

三、CAN协议中的CRC

的CAN协议,或控制器区域网络,被称为其健壮和可靠的通信,因为它包含多个错误检查机制,包括位错误检测,格式错误检测,填充错误检测,响应错误检测和CRC检错。CRC字段包含在数据帧和远程帧中。

CRC错误检测通过在数据帧中包含15位CRC来验证消息是否通过总线正确发送而起作用。就像前面讨论的CRC如何工作一样,发送节点计算15位CRC值,然后在CRC字段中发送该值。所有节点将接收此消息,相互计算CRC,然后比较这些值以确定它们是否确实相同。否则,接收节点将通过总线发送错误帧。此外,CAN协议还包括一个1位隐性CRC分隔符,有助于防止格式错误,并确保这些位在总线上正确广播并在接收端正确接收。

四、A2B协议中的CRC

的A2B协议,或汽车音频总线,是另一种协议,该协议使用错误检查机制,以验证正确的通信。其中一种措施是在特定帧内使用CRC,以帮助检测总线上的错误。

同步控制帧(SCF)充当节点的控制帧或控制头,而同步响应帧(SRF)充当节点的响应帧或响应头。整个A2B帧结构称为超帧,它以SCF开始,包括可选的数据时隙,以SRF结尾。这些帧都包含循环冗余码(CRC),以帮助检测上游和下游数据错误。

对于下游数据错误检测,在SCF中使用16位CRC,它确定在接收方传输期间发生的任何SCF数据错误。SCF包括一个指示超帧开始的前同步码,并提供从机用于时钟和帧同步的位模式。如果从机未检测到帧同步,则从机将指示CRC错误。

对于上游数据错误检测,在SRF中还使用16位CRC来确定在接收方传输期间发生的任何SRF数据错误。中断请求字段在SCF中具有一个附加的CRC,以避免错误的中断被触发。SRF还具有一个前导以指示响应帧的开始,并提供上游节点用于时钟和帧同步的位模式。如果上游节点未检测到帧同步,则将指示CRC错误。

以上就是英锐恩单片机开发工程师分享的单片机通讯CRC算法的相关知识。英锐恩专注单片机应用方案设计与开发,提供8位单片机、16位单片机、32位单片机、运放芯片和模拟开关。