1、遵循ISO/OSI标准模型,CAN分为数据链路层(包括逻辑链路层LLC和媒体访问控制层MAC;CAN2.0A中描述为目标层和传输层)和物理层。
2、CAN技术规范(Version2.0)包括2.0A和2.0B,2.0A的报文标识符为11位2.0B有标准和扩展两种报文格式,前者的标识符11位,后者29位。
3、CAN网络拓扑
CAN控制器:接收来自控制单元(如MCU)的数据,并将数据处理后传到收发器。
CAN收发器:由一个发射器和一个接收器组合而成,将从控制器接收的数据转化成能通过CAN-bus传输的电信号或者反之。
传输线:双向传输的导线,分为CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输。
终端电阻:为了避免信号的反射和干扰,需要在CAN_H和CAN_L之间接终端电阻。终端电阻并非固定120欧,跟使用的导线有关。
4、信号表示:
CAN总线采用的"线与"的规则进行总线冲裁,即1&0=0,即总线上只要有一个节点将总线拉到低电平(逻辑0),总线就为低电平(逻辑0),表现在CAN总线中即是说总线上只要有一个节点为显性,则总线状态位显性,而不管总线上有多少节点处于传输隐性状态;只有当所有节点都为隐性时,总线才为隐性状态。这个特性在仲裁时非常有用。
5、帧结构
数据帧:由7个不同的位场组成,分别是帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束。
帧起始——1个显性位,标志数据帧或远程帧的开始
仲裁场——由报文标识符合远程发送请求位(RTR)组成报文优先权信息。
标识符 标准帧11bit,扩展帧29bit
RTR位 1bit数据帧为显性,远程帧为隐性,所以数据帧的优先权高于远程帧
IDE位 1bit标准帧为显性,位于控制场,扩展帧为隐性,位于仲裁场
SRR位 1bit扩展帧当中用于替代远程帧请求位,显性
控制场——标准帧的控制场由IDE位(1bit)、保留位R0(1bit)和数据长度代码DLC(4bit)组成,共6bit。扩展帧中则由保留位R1、R0(2bit)和DLC(4bit)组成,共6bit。
数据场——1个数据帧传输0~8个字节数据,传输时MSB在前
CRC场——CAN-bus使用CRC校验数据,CRC校验值放在CRC场,由CRC校验值(15bit)和CRC界定符(1bit)构成
ACK场——接收节点接收的帧起始到CRC场之间的内容没有发生错误时,将在ACK场发送一个显性位。包括发送应答信号的ACK槽(1bit)和ACK界定符(1bit,隐性)共2bit组成。
帧结束——由7个连续的隐性位组成
远程帧:与数据帧相比,远程帧没有数据场,同样有标准帧和扩展帧之分。
错误帧:CAN-bus支持的错误类型有五类
1)CRC错误,CRC校验不符
2)应答错误,发送节点在ACK场未收到应答信号
3)格式错误,传输的数据帧格式不符合任何合法帧格式
4)位发送错误,发送节点发送时发现总线电平与发送电平不相同
5)位填充错误,通信线缆上信号违反“位填充规则”
发生以上五种错误任何一种时,发送或接受节点将发送错误帧
其中错误标识分为主动错误标识和被动错误标识。
为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通讯,CAN-bus规定了节点的三种状态及行为。
过载帧:有三种情况发送过载帧
1)当某个节点没有做好接受下一帧数据的准备时
2)在间歇的第一和第二字节监测到一个显性位
3)节点在错误界定符或过载界定符的第8位采样到一个显性位,则发送一个过载帧且错误计数不会增加
*由于存在多个节点同时过载且过载帧发送有时间差的问题,可能出现过载标志叠加后超过6位的现象。
帧间隔:帧间隔用于将数据帧和远程帧与他们之前的帧分离开,过载帧和错误帧前面不需要插入帧间隔。
6、通信速度和最大总线长度
影响总线长度的因素
1)物理线缆并非理想状态,实际上是有一定的线上延迟的,CAN总线的应答机制决定了通信速率越高,通信距离越短,对物理传输线的要求就越高,通信速率与通信距离的关系大致如下图。(主要因素)
2)信号在节点内部的延时
3)振荡器的容差
综合考虑各方面的因素,有如下推荐值表
7、几个重要的概念
CAN总线协议 CAN总线是一个广播类型的总线,所以任何在总线上的节点都可以监听总线上传输的数据。也就是说总线上的传输不是点到点的,而是一点对多点的传输,这里多点的意思是总线上所有的节点。总线上的节点通过这种本地过滤的功能可以过滤掉一些和自己无关的数据,而保留一些和自己有关的信息。本地过滤所使用的就是位于数据帧或远程帧仲裁场的标识符(ID)。
总线仲裁 只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。CAN使用了标识符的逐位仲裁方法解决这个问题。
在仲裁期间,每一个发送器都对发送的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一"隐性"电平而监视到的是一"显性"电平,那么这个节点失去了仲裁,必须退出发送状态。如果出现不匹配的位不是在仲裁期间则产生错误事件。
帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。
位填充 位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。位填充的数据不需要编程控制,由控制器自动完成。其目的也是提高CAN总线的稳定性。
1)发送单元的工作 在发送数据帧和远程帧时,SOF~CRC 段间的数据,相同电平如果持续5位,在下一个位(第6个位)则要插入1位与前5位反型的电平。
2)接收单元的工作 在接收数据帧和远程帧时,SOF~CRC 段间的数据,相同电平如果持续5位,需要删除下一个位(第6个位)再接收。如果这个第6个位的电平与前5位相同,将被视为错误并发送错误帧。