CAN总线详细介绍
一、CAN简介
1.1 CAN是什么?
CAN,全称为“Controller Area Network”,即控制器局域网,是一种串行异步数据通信协议。
CAN 最初出现在 80 年代末的汽车工业中,由德国 Bosch 公司最先提出。当时,提出 CAN 总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线, 所有的外围器件可以被挂接在该总线上。CAN 最终成为国际标准 ( ISO11898(高速应用)和 ISO11519(低速应用)),是国际上应用最广泛的现场总线之一。
1.2 CAN总线特点
- 多主方式
可以多主方式工作,网络上任意一个节点均可以在任意时刻主动地向网络上的其他节点发送信息,而不分主从,通信方式灵活。 - 仲裁总线机制
采用非破坏性位仲裁总线机制,当两个节点同时向网络上传送信息时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响地继续传输数据。 - 数据传送方式
可以点对点、一点对多点(成组)及全局广播几种传送方式接收数据。 - 传输距离
直接通信距离最远可达10km(速率5Kbps以下)。 - 通信速率
通信速率最高可达1MB/s(此时距离最长40m)。 - 节点数
节点数实际可达110个。
采用短帧结构,每一帧的有效字节数为8byte。 - 错误检测功能
每帧信息都有CRC校验及其他检错措施,数据出错率极低。
节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使总线上的其他操作不受影响。 - 通信介质
通信介质可采用双绞线,同轴电缆和光导纤维,一般采用廉价的双绞线即可,无特殊要求。
二、CAN协议介绍
2.1 CAN总线物理结构
CAN 控制器根据两根线(CAN_H、CAN_L)上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。显性电平为逻辑 0,隐性电平为逻辑 1。发送方通过使总线电平发生变化,将消息发送给接收方
2.1.1 高速总线物理层
CAN 物理层的形式主要有两种,图中的 CAN 通讯网络是一种遵循 ISO11898 标准的高速、短距离 “闭环网络”。
它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各有一个“120 欧”的电阻
2.1.2 低速总线物理层
下图是遵循 ISO11519-2 标准的低速、远距离“开环网络”,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,每根总线上各串联有一个“2.2千欧”的电阻
2.2 CAN的传输模型
CAN 协议的传输模型是OSI模型,不过只用定义了传输层、数据链路层及物理层
ISO/OSI 基本参照模型
CAN 在OSI模型中的位置
2.3 CAN协议格式
CAN通信是主要靠一帧一帧数据进行传输的,帧的种类有5种,分别为:数据帧、遥控帧、错误帧、过载帧、帧间隔。
数据帧和遥控帧有标准格式和扩展格式两种格式。 标准格式有 11 位的标识符(Identifier: 称 ID) ,扩展格式有 29 位。
- 帧种类 帧用途
- 数据帧 用于发送单元向接收单元传送数据的帧。
- 遥控帧 用于接收单元向具有相同 ID 的发送单元请求数据的帧。
- 错误帧 用于当检测出错误时向其它单元通知错误的帧。
- 过载帧 用于接收单元通知其尚未做好接收准备的帧。
- 帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧。
2.3.1 数据帧组成
数据帧由7个段组成,分别为:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束
(1) 帧起始 :表示数据帧开始的段。
(2) 仲裁段:表示该帧优先级的段。
(3) 控制段:表示数据的字节数及保留位的段。
(4) 数据段:表示数据的内容的段,可发送 0~8 个字节的数据。
(5) CRC 段:检查帧的传输错误的段。
(6) ACK 段:表示确认正常接收的段。
(7) 帧结束:表示数据帧结束的段。
1)帧起始
表示帧开始的段。1 个位的显性位(标准格式、扩展格式都相同)。
2)仲裁帧
决定数据优先级的段
3) 控制段
控制段由 6 个位构成,其中2位保留位,4位表示数据段的字节数。
注意:
*1 保留位(r0、r1)
保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
*2 数据长度码(DLC)
数据长度码与数据的字节数的对应关系如表 8 所示。
数据的字节数必须为 0~8 字节。但接收方对DLC = 9~15 的情况并不视为错误。
4)数据段
数据段可包含 0~8 个字节的数据。从MSB(最高位)开始输出
5)CRC段
CRC 段是检查帧传输错误的帧。由15 个位的CRC 顺序 和1 个位的CRC 界定符(用于分隔的位)构成。
CRC 顺序:
CRC 顺序是根据多项式生成的CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据
段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
6)ACK段
ACK 段用来确认是否正常接收。由ACK 槽(ACK Slot)和ACK 界定符2 个位构成。
7)帧结束
帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
2.3.2 遥控帧
接收单元向发送单元请求发送数据所用的帧。遥控帧没有数据帧的数据段。遥控帧由 6 个段(帧起始、仲裁段、控制段、CRC段、ACK段,帧结束)组成。
遥控帧的组成
遥控帧的特点:
- 遥控帧的RTR 位为隐性位,没有数据段
- 遥控帧没有数据段,遥控帧的数据长度码以所请求数据帧的数据长度码表示
- 遥控帧可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况
2.3.3 错误帧
用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
- 错误标志:错误标志包括主动错误标志和被动错误标志两种。
- 主动错误标志:6 个位的显性位。被动错误标志:6 个位的隐性位。
- 错误界定符:错误界定符由 8 个位的隐性位构成。
2.3.4 过载帧
过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。
1, 过载标志:6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。
2, 过载界定符 :8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。
2.3.5 帧间隔
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、
遥控帧、错误帧、过载帧)分开。但过载帧和错误帧前不能插入帧间隔。
三、错误的种类
错误共有 5 种。多种错误可能同时发生。
• 位错误
• 填充错误
• CRC 错误
• 格式错误
• ACK 错误
原文链接:https://blog.csdn.net/Richard_Brown/article/details/127499386
CAN FD总线详细介绍
前言
前面的文章介绍了CAN协议、本文介绍一下CAN FD,对比一下这两者的区别。希望看完后,能对你有所帮助。
一、CAN FD简介
1.1 CAN FD是什么?
CAN FD,全称为CAN with Flexible Data rate。继承了CAN的主要特性,弥补了CAN的数据长度和带宽的限制。可简单认为CAN FD就是CAN的升级版。
2011年,开始CAN FD协议的开发,2012年发布第一个版本,2015年ISO11898-1进行了修订,将CAN FD加入其中。
1.2 为什么要CAN FD?
随着汽车功能越来越复杂,也越来越往智能化发展,传统的CAN总线已经跟不上时代的速度了。主要原因有如下几点:
CAN 总线最高速率为 1Mbit/s,实际使用中通常只有是 500k,随着功能的逐渐增多,各 ECU 之间的信息交互也越多,导致总线负载持续增加;
CAN 报文中只有约 40~50%的带宽用于实际数据传输;
最大总线速度受到响应机制的限制,例如 CAN 控制器中的 ACK
生成延迟;收发器传播延迟;导线延迟等。
为了解决CAN总线的局限,就对其进行升级,CAN FD就此应运而生了。
1.3 CAN FD的特点
传输速率是可变的。从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,最高速率可达到8Mbps。其他部分与CAN相同。
数据长度不同。CAN FD支持的最大数据长度为64byte。
帧格式不同。CanFD新增了FDF、BRS、ESI位
二、CAN FD协议
2.1 CAN FD帧结构
CAN FD数据帧结构与CAN一样,一共有:帧起始SOF,仲裁段,控制段,数据段,CRC段,ACK段,帧结束,共7个部分
CAN 标准帧结构
CAN FD 标准帧结构
2.1.1 帧起始
CAN FD与CAN使用相同的SOF标志位来标志报文的起始。帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步的作用
2.1.2 仲裁段
与传统CAN相比,CAN FD取消了远程帧,用RRS位替换了RTR位,为常显性。IDE位仍为标准帧和扩展帧标志位,若标准帧与扩展帧具有相同的前 11 位 ID,那么标准帧将会由于 IDE 位为 0,优先获得总线。
RTR(Remote Transmission Request Bit):远程发送请求位,RTR位在数据帧里必须是显性,而在远程帧里为隐性。
RRS(Remote Request Substitution):远程请求替换位,即传统CAN中的RTR位,CAN FD中为常显性。
CAN和CAN FD 仲裁段的对比
2.1.3 控制段
控制段中CANFD与CAN有着相同的IDE,res,DLC位。同时增加了三个控制bit位,FDF、BRS、ESI。
- FDF(Flexible Data Rate Format):原CAN数据帧中的保留位r。FDF常为隐性,表示CAN FD 报文。
- BRS(Bit Rate Switch):位速率转换开关,当BRS为显性位时数据段的位速率与仲裁段的位速率一致,当BRS为隐性位时数据段的位速率高于仲裁段的位速率。
- ESI(Error State Indicator):错误状态指示,主动错误时发送显性位,被动错误时发送隐性位。
- DLC同样是4bit表示数据段的长度,对应的关系如下:
2.1.4 数据段
CAN FD不仅能支持传统的0-8字节报文,同时最大还能支持12, 16, 20, 24, 32, 48, 64字节
2.1.5 CRC段
为了避免位填充对CRC的影响,CAN FD在CRC场中增加了stuff count记录填充位的个数对应8的模,并用格雷码表示,还增加了奇偶校验位。FSB(fixed stuff-bit)固定为前一位的补码。
Stuff Count由以下两个元素组成:
- 格雷码计算:CRC区域之前的填充位数除以8,得到的余数(Stuff bit count modulo 8)进行格雷码计算得到的值(Bit0-2)
- 奇偶校验(parity):通过格雷码计算后的值的奇偶校验(偶校验)
CAN FD对CRC算法进行了改进,CRC对填充位也加入了计算。在校验和部分为避免有连续位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分割,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作出错处理。
CAN的CRC的位数是15位,而在CAN FD中,CRC场扩展到了21位,如下:
- 当传输数据为0~8字节或更少时:CRC 15位
- 当传输数据为9~16字节或更少时:CRC 17位
- 当传输数据超过17~64个字节时:CRC 21位
2.1.6 ACK段
与CAN相比,在CAN FD中最多可接受2个位时间有效的ACK,允许1个额外的位时间来补偿收发器相移和传播延迟)
由从高速的数据场到慢速的仲裁场时,时钟切换会引起收发器相移和总线传播延迟。为了补偿其相移和延迟,相比传统的CAN,在CAN FD中多加了这额外的1位时间。
在ACK之后,发送ACK界定符。这是一个表示ACK结束的分隔符,为是1位隐性位。
2.1.7 帧结束
与CAN一样,CAN FD的帧结尾也为连续7位的隐性位
总结:
CAN FD 兼容CAN,可以正常收发传统CAN报文,但是传统CAN不能正确收发CAN FD报文,帧格式不一致,会导致传统CAN发送错误帧。就像平常的软件版本一样,高版本向下兼容。
CAN FD能传输的数据更多,速率也更高,安全性也更高。
原文链接:https://blog.csdn.net/Richard_Brown/article/details/128052248
没有回复内容