CAN数据帧详解及其仲裁机制
CAN数据帧详解及其仲裁机制
CAN(Controller Area Network)总线是一种用于汽车和工业自动化领域的串行通信协议,其数据帧结构和仲裁机制是理解CAN通讯的关键。本文将详细介绍CAN数据帧的各个组成部分及其功能,并深入解析CAN数据帧的仲裁机制。
在CAN通讯系列3中,我们介绍了CAN通讯如何传递信号,并引出了CAN数据帧的ID、长度和数据段的概念。CAN协议帧共有5种类型,而本文将重点介绍其中的数据帧。
CAN数据帧
CAN数据帧有两种格式:标准格式和扩展格式。尽管这两种格式的ID长度和ID数量不同,但它们都具有相同的帧结构,由7个段组成:帧起始(SOF)、仲裁段、控制段、数据段、CRC段、ACK段和帧结束。
帧起始(SOF)
帧起始表示一帧数据的开始,由一个显性位组成。当总线处于空闲状态时为隐性位,因此帧起始的显性位可以用来识别数据帧的开始。
仲裁段
仲裁段用于确定数据帧的优先级,ID数值越小,优先级越高。标准格式的仲裁段有12位,最大可支持2^11个ID;扩展格式的仲裁段有32位,最大可支持2^29个ID。此外,通过RTR/SRR位可以区分标准格式和扩展格式。
控制段
控制段由6个位组成,主要包含数据长度码(DLC),用于指示数据段的有效字节数。DLC可以取0-15的值,但9-15的值没有实际意义,因为数据段最多只能容纳8个字节的数据。
数据段
数据段用于承载实际的数据信息,最多可以包含8个字节的数据,从最高位(MSB)开始输出。
CRC段
CRC段用于检测帧的传输错误,由15个位的CRC序列和1个位的CRC界定符组成。CRC序列是根据多项式生成的CRC值,CRC的计算范围包括帧起始、仲裁段、控制段和数据段。
ACK段
ACK段用于确认数据帧是否被正确接收,由ACK槽和ACK界定符两个位组成。发送单元默认发送两个隐性位,而接收单元如果正确接收到数据帧,则会在ACK槽发送显性位。
帧结束
帧结束由7个位的隐性位构成,表示一帧数据的结束。
仲裁机制
CAN总线采用多主竞争式访问方式,当多个节点同时发送数据时,需要通过仲裁机制来确定优先级。仲裁机制基于仲裁段的定义,分为三种情况:
标准格式的仲裁:在11位ID范围内进行比较,采用线与机制(逢0变0),一旦某位出现不同,显性位覆盖隐性位,仲裁结束,显性位的对应节点胜出。
扩展格式的仲裁:与标准格式的仲裁类似,但在32位ID范围内进行比较。
标准格式与扩展格式的仲裁:先比较前11位ID,如果相同,则标准格式的节点胜出,因为标准格式的RTR位恒为显性,而扩展格式的SRR位恒为隐性。
由上述分析可知,ID越小,其优先级越高。因此,在设计CAN通讯时,应将优先级高的信号分配到ID号小的CAN报文中。
小结
通过本文对CAN数据帧的详细解析,我们对报文ID和数据长度有了更深入的理解。同时,我们也了解到显性和隐性等概念,这些都为后续学习CAN总线的其他内容奠定了基础。