(一)五种基本的帧类型作用以及介绍
数据帧 : 是用于传输数据的基本单元。它包含一个帧头、标识符、控制位、数据长度和数据等字段。
遥控帧 : 是一种特殊的CAN数据帧,用于向其他节点发送命令或请求。
错误帧 : 是指在CAN总线上出现了错误,例如误码、冲突等,无法正确接收的数据帧。
过载帧 : 是指当总线上的通信负载过高时,为了防止数据丢失,控制器会发送过载帧,通知其他节点减少发送数据。
帧间隔 : 是指两个连续数据帧之间的时间间隔。它的作用是控制数据帧的传输速度,避免冲突和数据丢失。
总的来说,CAN数据帧用于传输数据,遥控帧用于发送命令或请求,错误帧表示出现了错误,过载帧用于通知其他节点减少发送数据,帧间隔用于控制数据帧的传输速度。
(二)数据帧详解
数据帧是在CAN总线网络中用于数据传输的基本单位。它定义了数据的格式和传输规则,能够支持高效、可靠的通信,特别适用于汽车电子系统和工业控制领域。
1)数据帧传输特点
-
异步传输:节点可以在任何时候发送数据帧,无需预定时间片。
-
广播通信:所有节点都可以接收发送到总线上的数据帧,但只有接收到标识符与自身匹配的节点才会处理数据。
-
优先级机制:CAN总线支持基于标识符的优先级,较低优先级的数据帧在总线忙时可以被较高优先级的数据帧抢占。
2)数据帧拆分详解
数据帧由七部分构成,如图所示。
帧起始+仲裁段+控制段+数据段+CRC段+ACK段+帧结束
表示为完整的一帧
1.帧起始:表示数据帧开始的段 为1位显性位。此时CAN_H为3.5V,CAN_L为1.5V。代表逻辑0.
2.仲裁段:表示该帧优先级的段,根据仲裁段ID码长度的不同,分为标准帧(CAN 2.0A)和扩展帧(CAN 2.0B)。标准数据帧的仲裁段由11位ID和1位RTR位(远程发送请求位)组成。RTR用来区分数据帧(显性电平)和遥控帧(隐性电平)。
在扩展数据帧中,SRR位表示 substituted remote request(替代的远程请求)。它用于指示发送方是否发送了远程请求帧。当SRR位为0时,表示发送方没有发送远程请求帧;当SRR位为1时,表示发送方发送了远程请求帧。
IDE位表示 identifier extension(标识符扩展)。它用于指示扩展数据帧中的标识符字段是否使用了扩展格式。当IDE位为0时,表示标识符字段使用了标准格式(11位);当IDE位为1时,表示标识符字段使用了扩展格式(29位)。扩展格式允许更大的标识符范围,但需要更多的位来表示标识符。
3.仲裁过程:ID越小优先级越高,标准帧的优先级高于扩展帧
假设节点A,节点B,节点C,都是标准数据帧,以下为竞争过程。
在ID的第五位,节点A,节点C都为显性,节点B为隐性。至此节点B仲裁失败,处于监听状态。由剩下两节点继续进行仲裁,在ID第3位,节点C位隐性,节点A为显性,节点C仲裁失败,处于监听状态,节点B可优先向总线发送数据。
4.控制段:表示数据的字节数及保留位的段
r1和r0位代表着"远程帧标志位"。这两个位用于指示CAN节点是否发送远程帧,即请求其他节点发送数据。 r1和r0位可以设置为以下几种组合:
- r1=0,r0=0:数据帧,表示节点发送的是数据包。
- r1=0,r0=1:远程帧请求,表示节点请求其他节点发送数据。
- r1=1,r0=0:保留位,未定义。
- r1=1,r0=1:错误帧,表示节点发送的是错误信息。
通过r1和r0位的不同组合,CAN总线上的节点可以发送不同类型的帧,并进行相应的通信操作。
DLC占4位,它的取值范围为0到8个字节,表示消息数据帧中包含的数据字节数。通过DLC字段,接收方可以知道要接收的数据的长度,从而正确解析数据。例如0001代表数据字节数为1,0101代表字节数为5.
5.数据段:通信中用来传输数据的部分,数据段可包含 0~8 个字节的数据。从 MSB(最高位)开始输出。
6.CRC段:CRC段的作用是用于检测数据帧的传输错误。
CRC(循环冗余校验)是一种通过对数据进行计算生成的校验码,用于检测数据传输过程中出现的错误。发送方在发送数据帧时,会根据数据计算出CRC值,并将其添加到数据帧的CRC段中。接收方在接收到数据帧后,会重新计算CRC值,并与接收到的数据帧中的CRC值进行比较。如果计算出的CRC值与接收到的CRC值不匹配,说明在传输过程中发生了错误,接收方将丢弃该数据帧。这样可以保证数据传输的可靠性。
CRC顺序:根据多项式计算生成的一个值,计算的范围为:帧起始至数据段。
CRC界定符为用于分隔的位。
7.ACK段:ACK 段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。
在CAN总线的通信过程中,当一个节点发送完一个消息后,其他节点会对该消息进行接收。接收节点会检测该消息的校验和、控制位和数据位等,并对其进行解析。如果接收节点成功解析了消息,并且校验和、控制位等都正确,那么它会在ACK段发送一个ACK位,表示消息已经成功接收。
发送节点在接收到ACK位后,会认为消息已经被成功接收,可以继续发送下一个消息。如果发送节点在规定的时间内没有接收到ACK位,那么它会认为消息发送失败,需要进行重发。
发送方:ACK段发送2个隐形位
接收方:若接收到正确的消息(无填充错误,无格式错误,无CRC校验错误)后,ACK槽发送显性位,通知发送方,“我”已经收到了。
8.帧结束:帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
标签:接收,--,总线,ACK,发送,CRC,解析,数据,节点 From: https://blog.csdn.net/kian9one/article/details/139899769