BSW之——CAN

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帧。

但是这样计算的都是极限值,理想状态,由于受到硬件影响,调度影响,芯片负载等等,具体的带宽能有多大要看具体情况。

 

posted @ 2024-09-03 14:41  西北小蚂蚁  阅读(55)  评论(0编辑  收藏  举报