CAN的主要功能是进行数据通讯,CAN知识点总结(一)里面总结了CAN网络中的CAN节点和CAN总线以及标准11898。总结(二)来说一下CAN的帧格式。
首先记住,显性电平对应逻辑“0”,隐形电平对应逻辑“1”,千万别混淆了!
一、下图是CAN的数据帧(Data Frame)的格式。
图中只有蓝色色块的数据段Data Field才是要传递的数据。问题来了,为什么数据段的前后还有这么多信息块呢?
这是因为CAN网络里面只有两根线,一根高线一根低线。物理层面的简单注定CAN的数据格式必须含有大量的通讯协议。
一个标准的数据帧包含以下内容:
SOF 起始位(Start of Frame ):起始位代表着数据帧的传输开始,它占位1Bit。它由发送器发送,并通过将边沿从隐性(总线空闲)更改为显性来确保全网同步。
ID 标识符(Identidier):SOF之后是标识符(ID)。ID确定了数据帧的优先级,并负责CAN网络中发送器和收发器的关系。
RTR 远程传输请求(Remote Transmission Request):发送器使用RTR位将帧类型(数据帧或远程帧)通知接收器。如果RTR是显性位,那表明这是数据帧。(隐性位表明是远程帧)
IDE 标识符拓展(Identifier Extension):IDE位用于区分标准格式和扩展格式。标识符的标准格式为11位,扩展格式为29位。下图就是“标准格式和扩展格式的数据格式”。
DLC 数据长度代码(Data Length Code):DLC将有效字节的数量发送到接收器。DLC是多少,Data Field中就有多少个字节。
Data Field 数据段:一个数据帧最多可以传输八个有用字节。这八个字节放在数据段里面。
CRC 循环冗余校验(Cyclic Redundancy Check):能检测出错误,是传输安全性的保证。
- 原理:根据要传输的位(从起始位到数据段)和由ISO 11898-1定义的多项式G(x)计算出一段CRC序列,然后在要传输的位后面加上这个CRC序列。整个多项式对应于要传输的位的倍数。如果多项式的除法得到了余数,则接收器能够检测到传输错误。
应答ACK(Acknowledgement):根据CRC除法的结果,接收器会向发送器回应传输是否正确。如果正确,接收器会在ACK时隙(ACK Slot)期间发送一个显性电平的ACK信号给发送器,来表示应答。注意:在接收器确认之前,ACK的信号之前一直都是隐性电平。只有传输正确之后,才改为显性电平。(看上图中ACK Slot在传输正确和传输错误时不同的电平)。
- ACK Error 应答错误:应答非常重要,如果接收器不向发送器发送显性电平,那就到不了EOF那一位,也就是说发送失败,报文需重新发送。发送失败又分几种形式: 1. 接受器在ACK时隙期间,除了向发送器发送电平,也会监视总线上的数据,如果数据与发送的数据不一致,那就表示发送失败。2. 在ACK时隙期间,如果发送器检测到ACK位依然是隐性位,那么发送失败。
DEL 界定符(Delimiter):ACK Del始终是隐性传输(图中灰线为逻辑“1”)。
EOF 结束位(End of Frame ):7个隐性位代表数据帧的传输结束。
二、数据传输正确的条件下的应答过程(应答为positive):
第一步,发送器(Sender)向总线发送报文,从上图中可以看出,报文从SOF一直传输到了数据段(Data Field)。此时只有发送器和总线上有数据传输。
第二步,接着传输CRC 段。此时接收器上依然没有数据传输。
第三步,到了ACK时隙段,接收器要做出应答。图中两个接收器给出的应答均为传输正确,从上图中可以看出接收器发送的ACK时隙段的信号为显性电平。此时接收器那儿开始有信号传输了。
第四步,发送ACK界定符信号。ACK界定符永远为隐性位。
第五步,传输EOF,数据帧传输完成。
第六步,帧间隔ITM发送,整个过程完毕。
三、CAN的其他帧。除了用于数据传输的数据帧之外,CAN还规定了其他的格式,例如远程帧 Remote Frame和错误帧Error Frame。
远程帧Remote Frame: 远程帧是一种帧类型,通过该帧类型可以从任何CAN节点请求用户数据,即数据帧。但是,这些几乎不用于汽车中,因为汽车里的数据基于信息生产者的主动性。
- 远程帧可以用标准格式和扩展格式传输。
- 远程帧和数据帧的区别:
除缺少数据字段外,远程帧的结构与数据帧的结构相对应。数据和远程帧之间的区别是使用RTR位(远程传输请求)。RTR显性位表明该帧是数据帧,隐性位表明该帧是远程帧。
- 作用原理:
1. CAN节点一接收到ID与其自身数据帧的ID相同的远程帧,便会回复相应的数据帧。
2. 对于带有对象存储的CAN控制器,CAN控制器会自动应答远程帧。没有对象存储的CAN控制器必须通知主机,以便它可以启动响应。
3. 一般来说,远程帧的请求后紧跟相应数据帧的请求答案。但是,可以在请求和答案之间推送优先级更高的CAN消息。
错误帧 Error Frame:错误帧可用于发信号通知在通信过程中发现的错误。错误帧的传输伴随正在进行的消息传输的终止。
来源:所有图均来源于Vector官网 https://elearning.vector.com/