CAN总线协议
一、简介
CAN:
控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。 该协议的健壮性使其用途延伸到其他自动化和工业应用。 CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。
CAN FD:
CAN FD 是CAN with Flexible Data rate的缩写,翻译为【可变速率的 CAN】。 也可以简单的认为是传统CAN的升级版,其中要说明的是,只升级了协议,物理层没有改变。
(注:可变速不是所有字段,而是部分字段,从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率)
二、帧介绍
CAN:
SOF: 起始帧。
ID: 11位或者29位的CAN ID。
RTR: 远程帧请求,远程帧为 0,表示是数据帧,否则是远程帧。远程帧表明接受该帧的节点即不主动发送数据,当他收到远程帧时,才开始发送数据,减少占用 CAN 的通信。
IDE: 扩展帧标识位。
FDF: 是否是CAN FD。
DLC: 数据长度。
Data: 数据段。
CRC: CRC校验。
DEL: 分隔符,无意义,为 1。
ACK: 当接收端接收到有效数据后,就会给发送端发送个低电平表示接收的数据是准确的。
DEL: 分隔符。
EOF: 结束字段。
ITM: 帧间隔。
CAN FD:
BRS: 之后数据段传输是否变换速度,BRS 之前属于仲裁段,会以低速传输;BRS 开始到 CRC 分隔符为止,属于数据段,可以高速传输。CRC 分割符之后,由于需要 ACK 应答,因此又变为低速传输。
ESI: 用来告知其余节点,发送方的错误状态。ESI=1,Tx Node处于被动错误状态;ESI=0,Tx Node处于主动错误状态
- 错误主动状态(Error Active):节点能够正常发送和接收数据,并参与总线仲裁。在错误主动状态下,节点会发送错误帧来报告错误。
- 错误被动状态(Error Passive):节点仍然能够发送和接收数据,但在检测到错误时不会发送错误帧,而是会在ACK槽中发送隐性位(1)来指示错误。
三、计算极限
计算一下1ms理论上能够发多少帧数据。
CAN
CAN按照500k/b的波特率算,那么发送1bit所用的时间为:(1/500k)s = 0.002ms。
CAN一帧数据共有11+1+1+1+4+64+15+1+1+1+7+3=110bit。
所以发送一帧数据需要110*0.002=0.22ms。
那么1ms可以发送 1/0.22 = 4.54帧 ≈ 4帧。
CAN FD
CAN按照500k/b,2M/b的波特率算,低速1bit时间为:0.002ms,高速1bit时间为:0.0005ms。
由于可变速不是所有字段,而是部分字段,从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率。
所以需要时间为:92*0.0005+28*0.002=0.102ms。
那么1ms可以发送 1/0.102 = 9.8帧 ≈ 9帧。
(但是这样计算的都是极限值,理想状态,由于受到硬件影响,调度影响,芯片负载等等,具体的带宽能有多大要看具体情况。)