CAN总线技术详解
一、基本概念
1、总线(Bus)
信息传递的公共通路,可分为数据总线、地址总线、控制总线。
2、现场总线(Field bus)
现场总线是一种工业数据总线,是自动化领域中底层数据通信网络。解决工业现场的智能化仪器仪表、控制器、执行机构等现场设备间的数字通信及其与高级控制系统之间的信息传递问题。
3、分布式控制系统(Distributed Control System)
集中管理和分散控制的计算机控制系统。以微处理器为核心,控制功能分散,呈多级分层、合作自治的金字塔结构。
4、控制器局域网(Controller Area Network)
属于现场总线,是一种支持分布式控制系统的串行通信网络,下文简称为CAN。
二、CAN总线
1、架构
CAN总线有国际标准化协议,,可划分为高速CAN和低速CAN,集中器上使用的CAN属于高速CAN,将作为本文中主要介绍的内容。
ISO-11898-2定义了通信速率为125kbps~1Mbps的高速CAN通信标准,属于闭环总线,总线长度≤40m。
图2.1.1 高速CAN总线
2、结构
将图2.1.1细化可看到CAN总线结构由CAN_H,CAN_L两根线和多个节点组成。CAN_H,CAN_L以双绞线形式缠绕,节点包含CPU、CAN收发器、CAN控制器。使用双绞线是为了防止差分信号受到干扰,要求双绞线33绞/m,线缆的芯截面积大于0.35-0.5㎡,还可使用带屏蔽层的双绞线抗干扰,更深入的抗干扰技术不在此叙述。
3、信号
CAN总线通过CAN_H和CAN_L线上的电位差来表示CAN信号,分为显性电平和隐形电平,规定显性电平逻辑为0,隐性电平逻辑为1。规定电压差在1.5v-2.5v内认为是显性电平。
图2.3.1 ISO-11898的CAN信号
4、信号传输
2.2结构中提及到的节点完成2.3中表述的差分电平与逻辑电平转换,可分为发送与接收两个过程。发送时CAN控制器将CPU信号转换为逻辑电平,CAN收发器将逻辑电平转换为差分电平输出到总线;接收时CAN收发器将CAN_H和CAN_L上的差分电平转换为逻辑电平,CAN控制器再将逻辑电平转换为相应的信号发给CPU。
三、CAN总线特性
1、多主工作方式
CAN 总线上的节点没有主从之分,在总线空闲的状态下,任意节点都可以向总线上发送信息。最先发送的节点获得总线发送权,多个节点同时发送时据仲裁结果决定,由3.2介绍。
2、非破坏性仲裁
非破坏性仲裁机制是一种既不会造成已发送数据的延迟,也不会破坏已经发送的数据的仲裁机制。理解该特点需要理解CAN协议帧结构、线与机制。
线与简单来说是位进行与运算,即2.3中提到的显性电平会覆盖隐形电平。
表 3.2.1 线与运算*
A B C BUS
D D D D
D D R D
D R D D
R D D D
D R R D
R D R D
R R D D
R R R R
Dominant:显性
这里通过一个仲裁例子帮助理解:
图3.3.1 仲裁
假设CAN总线上只有两个节点A、B,它俩的ID用逻辑电平表示,规定:从SOF位开始,从左往右逐位比较,只要出现位不一样,比较就结束,显性电平者胜出,有权发送。
当节点A,B都发送请求时,开始逐位比较,直到它俩的ID7位,节点A为显性电平,节点B为隐性电平。根据线与机制,节点A胜出,优先发送。这就是一个大致的非破坏性仲裁过程。
3、系统的柔软性
CAN总线没有地址,因此在总线增加节点时其他节点的软硬件应用层都不需要改变。
4、信息广播
同一总线上某一节点发送信息,所有节点均会收到。节点发送的信息带有标识符(ID),其他节点接收信息与否与其设置有关,丢弃信息过程与报文过滤有关。
5、通信速度
根据网络规模设置适合的通信速度,同一网络中,所有单元通信速度必须一致。
6、远程请求
可通过遥控帧请求其他单元发送数据。
四、CAN协议帧结构
图4.1 标准CAN ID
图4.2 扩展CAN ID
简单的物理层结构对应着复杂的协议,3.2中提及的协议帧有五种类型,分别为:
数据帧:用于发送单元向接收单元传送数据的帧。
遥控帧:用于接收单元向具有相同ID的发送单元请求数据的帧。
数据帧与遥控帧类似,有以下不同:
• 遥控帧的RTR位恒为隐性位,没有数据段。可通过RTR位区分没有数据段的数据帧和遥控帧。
• 遥控帧的数据长度码以所请求数据帧的数据长度码表示。
• 没有数据段的数据帧可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。
数据帧由帧起始(SOF)、仲裁段(AF)、控制段(CF)、数据段(DF)、CRC段、ACK段、帧结束(EOF)构成。
帧起始:一个显性位。
仲裁段:表示数据优先级。标准格式与扩展格式在此构成不同。仲裁可以根据表4.1得出优先级。
表 4.1 数据帧与遥控帧仲裁段格式
标准格式 RTR 扩展格式 RTR 数据帧 RTR-SRR 遥控帧 IDE
数据帧 D 数据帧 D 标准格式 D 标准格式 D
遥控帧 R 遥控帧 R 扩展格式 R 扩展格式 R
控制段:表示数据段的字节数,6个位构成,前两位为IDE/r1(标准/扩展)和r0(保留),后四位为DLC(数据长度码)。
数据段:包含0-8字节的数据,从MSB(最高位)开始输出。
CRC段:检查帧传输错误的段,由15个位的CRC序列和一个位的CRC界定符(用于分隔位,恒隐)构成。
ACK段:确认是否正常接收,由ACK槽和ACK界定符2个位构成。
帧结束:7个隐性位构成。
错误帧:用于当检测出错误时向其它单元通知错误的帧。
由错误标志和错误界定符构成。错误标志分主动与被动,主/被动标识符处于主/被动错误状态下的单元检测出错误时传输出错误标志。错误界定符由8个隐形位构成。
错误类型:位错误、填充错误、CRC错误、格式错误、ACK错误。
错误处理:主动错误状态、被动错误状态、总线关闭态。
发送时间:发生CRC错误时紧随ACK界定符后的位发送错误帧,其他类型在错误产生的那一位的下一位开始发送错误帧。
过载帧:用于接收单元通知其尚未做好接收准备的帧。
由过载标志(6个显性位)和过载界定符(8个隐形位)构成。接收节点达到接收极限时,会发出过载帧到总线上。
过载原因:
• 接收节点自身原因。
• 在帧间隔的间歇段的第一位和第二位检测到一个显性位(正常的间歇段都是隐性位)。
• CAN节点在错误界定符或过载界定符的第八位(最后一位)听到一个显性位0,节点会发送一个过载帧,且错误计数器不会增加。
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。
五、补充
1、总线仲裁
通过分析表4.1,我们可以知道在前11位 ID 号相同时,根据协议设定的 RTR , SRR , IDE ,就可以保证如下:
• RTR :保证数据帧优先级高于遥控帧;
• SRR:保证标准数据帧的优先级高于扩展数据帧;
• IDE :保证标准遥控帧的优先级高于扩展遥控帧。
2、监听
CAN总线有监听功能(非自发自收),在发送一个位时,需要在RXD端产生反馈,以便报文ID仲裁。正常发送时,接收器不储存接受到的报文,只是在发送完毕收到应答位后而进入接收模式。
这就意味着,对于一个节点,它发数据的时候,其他节点由于不打算发数据,或者冲裁失败,已经做好了接收数据的准备。因此,当电信号在总线上传播,经过总线上的各个节点时,各个节点根据自己的过滤器设置,选择性地将接收此数据。而该发送数据的节点在发送完毕,进行接收工作时,刚才的电信号传播已经结束了,因此没有机会接收自己刚刚发完的数据。
3、报文过滤
CAN总线没有地址,通过报文ID实现收发数据,总线上每个节点有一个验收滤波ID表,如果总线上的报文ID在表中,那么此帧报文就会被节点接收。
4、数据传输同步…
后续其他内容现阶段暂时不做了解,故略。
更多可参考CAN总线、通信理论综述(CAN、串口、SPI、I2C)。
作者:山艮