高速CAN:ISO 11898
低速CAN:ISO 11519-2
单线CAN:SAE J2411
OSI开放系统互连模型
层次 | 功能 |
---|---|
应用层 | 用户、软件、网络终端等之间用来进行信息交换 |
表示层 | 将两个应用不同数据格式的系统信息转化为能共同理解的格式 |
会话层 | 依靠低层的通信功能来进行数据的有效传递 |
传输层 | 两通信节点之间数据传输控制,操作如:数据重发,数据错误修复 |
网络层 | 规定了网络连接的建立、维持和拆除的协议,如:路由和寻址 |
数据链路层 | 规定了在介质上传输数据位的排列和组织,如:数据校验和帧结构 |
物理层 | 规定通信介质的物理特性,如:电气特性和信号交换的解释 |
Controller Area Network,控制器局域网。CAN-bus规范定义了物理层和数据链路层,CANopen、DeviceNet等定义应用层,应用层可自行设计。支持多主通信模式。
通信 = 相同层次间的信息沟通
物理层把各种信息用收发器转换成物理信号,并将这些信号由电缆传输到其它目标设备。物理层相同的节点才能进行通信。
单线CAN:
显性电平为4V(接收时高于1.8-2.2V就会被判为显性),隐性电平为0V;
正常通讯模式波特率为33.333Kbps,高速通讯模式的波特率为83.333Kbps;
单条CAN-bus
CAN收发器将逻辑信号(TXD、RXD)和物理信号(CANH、CANL)相互转换。CANH和CANL连接双绞线,信号差分传输,可以有效抑制共模干扰。CANH-CANL > 0.9V时为显性,对应逻辑信号为0,CANH-CANL < 0.5v时为隐性,对应逻辑信号为1。显性电平优先级高于隐性电平。
为了消除波特率偏差带来的影响,CAN总线规定在信号的跳变沿时刻进行同步(重同步),对于连续多个相同电平导致误差累加的情况,通过连续5个相同位后面插一个相反位的位填充规则来得到跳变沿进行同步。硬同步只发生在帧起始。同步都发生在隐性电平到显性电平转换的跳变沿。
CAN-bus的通信距离和通信速率成反比,传输速率最快可以达到1Mbps,通信距离最远可以达到10km。
低速CAN总线在CANH和CANL上分别串接2.2kΩ的电阻
高速CAN总线在CANH和CANL之间串接120Ω的电阻
目的:使线路阻抗连续,信号波形完整。
单线CAN、低速CAN、高速CAN在数据链路层都相同,支持CAN2.0规范。数据链路层解决收发目标选择、数据校验、总线竞争、错误机制等问题。CAN-bus规定了5种通信帧——数据帧、远程帧、错误帧、过载帧、帧间隔。CAN控制器实现了数据链路层的全部功能以及物理层的位定时功能。
特点:用于传输数据,使用最多,分为标准帧CAN2.0A和扩展帧CAN2.0B。(报文滤波如何实现的?)
1bit显性电平,助记符为SOF。作用是进行硬同步。
对于CAN2.0A,仲裁段由11bit ID和RTR位组成,ID规定了数据帧的优先级,ID越小优先级越高;RTR位是远程发送请求位,标明该帧是数据帧还是远程帧,数据帧该位为显性,远程帧该位为隐性,因此,当ID相同时,数据帧的优先级高于远程帧。ID高7位ID10-ID4不得全为隐性。
对于CAN2.0B,差别仅仅在于在标准帧11位ID后面插入了1bit显性的替代远程帧请求位SRR,将标准帧中位于控制段的扩展识别位IDE接在SRR后面,然后接上扩展的18bit ID。扩展帧ID有29位。标准帧的优先级高于扩展帧。标准帧IDE为显性,扩展帧为隐性。
CAN控制器会监测数据线上的电平与发送位的电平,如果不相同,停止发送,如果该位在仲裁段,则退出总线竞争,如果不在仲裁段,则产生错误(除了ACK段和被动错误标志传输时)。
ID禁止高7位全为隐性。在任何情况下,总线上不可能有多个设备在同一时刻使用同一个ID传输数据帧。
(疑问:标准远程帧和扩展远程帧如何仲裁?标准帧位于控制段的IDE是否参与仲裁?为什么要将标准帧IDE归于控制段?)
目前的理解:这种情况下,即使过了仲裁段,总线上的竞争还在继续,同一时刻存在显性和隐性电平竞争总线时总是显性电平获得总线,而此时扩展帧仍处于仲裁段,还是会进入只听模式,相当于标准帧的IDE参与了仲裁,至于为什么标准帧IDE被归于控制段,暂时没有查到依据。
对于CAN2.0A,控制段由IDE、保留位r0、4位的数据段长度码DLC共6位组成。DLC表示数据段数据的字节数,取值0到8,用BCD码表示。
对于CAN2.0B,控制段由保留位r1、r0和4位长度码DLC共6bit组成。
数据段包含0到8个字节,byte0在前,每个字节先传MSB。数据量小,实时性高。
CRC校验,将前4段所有位进行模2除以多项式[X15+X14+X10+X8+X7+X4+X^3+1]得到15位CRC值,再加上一位隐性的CRC界定符组成16位的CRC段。
由一位ACK槽和一位ACK界定符组成。ACK槽期间发送节点发送隐性电平,接收正确节点发送显性电平将总线上信号拉低。ACK界定符位1位隐性电平。要保证发送节点在应答间隙期间接收到应答的显性位,对总线长度有了限制。
7个连续的隐性位,助记符EOF。
远程帧与数据帧点区别在于没有数据段,RTR为隐性,其余相同。
具有同样ID的数据帧被请求。
远程帧的数据长度码的值表示对应请求的数据帧的数据长度码。
区别于数据长度为0的数据帧,这种帧可以被各单元用来作为周期连接确认/应答,或者仲裁域本身带有实质性信息。
CAN-bus错误类型:CRC错误、应答错误、位发送错误、帧格式错误、位填充错误。
错误帧 = 错误标志 + 错误界定符
主动错误发送6显+8隐;被动错误6隐+8隐
发送错误>255时总线关闭。
接收节点没有做好接收下一帧的准备,发出过载帧。
6显过载标志+8隐过载帧界定符
将数据帧或远程帧和他们之前的帧分离开,错误帧和过载帧前不能插帧间隔。
通过应用层协议来规范,工业领域主要有CANopen、Devicenet等协议。
数据类型 | 特点 |
---|---|
实时数据 | 优先级高,采用无连接无应答点传输方式 |
非实时数据 | 优先级较低,通常基于连接和应答机制 |
状态数据 | 主站可以了解各个从站节点是否工作正常 |
节点间的传递模式:
生产者消费者模式——无论是否有听众,都发,听众选择需要的频道。
客户端服务器模式——一对一,开始前建立联系,结束后断开联系,通常传输非实时数据。
参考书目:周立功《项目驱动CAN-bus现场总线基础教程》