【车载开发系列】CAN通信总线再理解(中篇)
- 九. CAN总线标准
- 十. CAN物理层
- 十一. CAN数据链路层
- 1)CAN的通信帧类型
- 2)CAN的标准帧格式
- 1. CAN ID
- 2. 数据场
- 3)CAN总线仲裁
- 十二. CAN应用层
- 1)CANopen
- 2)J1939
- 3)DeviceNet
九. CAN总线标准
- CAN总线标准有两个,即ISO11898和ISO11519,两者差分电平特性不同。
- ISO11898高低电平幅度低(高电压3.5V,低电压1.5V),对应的传输速度快,所以适用于高速CAN;
- ISO11519高低电平幅度大(高电压4.0V,低电压1.0V),对应的传输速度慢些,所以适用于低速CAN;
十. CAN物理层
- 多个节点连接,只要有一个为低电平,总线就为低电平,只有所有节点输出高电平时,才为高电平。所谓"线与"。
- CAN总线有5个连续相同位后,就插入一个相反位,产生跳变沿,用于同步。从而消除累积误差。
- CAN的传输速度与距离成反比。
- CAN总线上的终端电阻是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线
十一. CAN数据链路层
1)CAN的通信帧类型
- CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。
帧类型 | 英文 | 帧作用 |
---|---|---|
数据帧 | Data Frame | 用于发送单元向接收单元传送数据的帧,使用最多的帧类型 |
遥控帧 | Remote Frame | 用于接收单元向具有相同ID的发送单元请求数据的帧 |
错误帧 | Error Frame | 用于当检测出错时向其他单元通知用的错误的帧 |
过载帧 | Overload Frame | 用于接收单元告诉发送单元,通知其尚未做好接收准备的帧 |
间隔帧 | Inter Frame Space | 用于将数据帧及遥控帧与前面的帧分离开来的帧 |
2)CAN的标准帧格式
位名 | 位名 | 位数 | 说明 |
---|---|---|---|
SOF | 起始位 | 1位 | 是一个显性电平逻辑0 |
Identifier(ID) | 仲裁段(识别码) | 11/29位 | 用来确定数据信息发送给那个设备,每一个设备都有一个属于自己的识别码,11 位标识符的帧称为标准格式,而具有29位标识符的帧为扩展格式 |
RTR | 仲裁段(RTR位) | 1位 | 用来区分数据帧(0)或者远程请求帧(1) |
SRR※ | 仲裁段(SRR位) | 1位 | 只用在扩展格式,替代RTR;不是扩展模式不需要这个 |
IDE | 控制段(IDE位) | 1位 | 用来区分标准帧(0)还是拓展帧(1) |
R0 | 控制段(空闲位) | 1位 | 保留位 |
DLC | 控制段(DLC) | 4位 | 用来控制数据长度 |
Data Field | 数据段 | 8-64位 | 数据的内容。DLC为1时数据码8位(标准CAN),为8时数据码64位(CAN FD) |
CRC15 | CRC码 | 15位 | 15位CRC位+1位CRC界定符,循环冗余校验码,检测到错误时会自动重传 |
DEL | CRC界定位 | 1位 | 1位CRC界定符,为了把后面信息隔开 |
ACK | 应答位(ACK码) | 1位 | 接收站使用应答位来表示是否已正确接收报文 |
DEL | 应答位(ACK界定位) | 1位 | 一个隐性的位,为了把后面信息隔开 |
EOF | 结束位 | 7位 | 表示数据帧传输结束,7个隐形信号 |
1. CAN ID
CAN帧中包含ID,在数据链路层只起到优先级判断的作用。ID的数值越小,CAN帧的优先级越高,会获得总线控制权。多节点同时开始发送数据时,按照电路设计,ID按每一bit传输时,ID小的数据会覆盖ID大的值,即0&1=0,此时只要判断到自己发出的bit1实际是收到bit0,就停止发送后续的bit,稍后重试。
CAN ID值的业务意义由应用层决定。一种典型用法是,部分bit代表消息类型,部分bit代表发送者设备,即ID和设备绑定。只要ID的前几bit代表设备号,后几bit代表业务值,就能兼顾优先级判断的规范。
2. 数据场
数据场是放高层业务数据的地方。
数据链路层协议只规定了一帧的格式,数据跨越多帧的情况由应用层协议实现拆包和重组。
经典CAN,数据场最多8bytes;CAN FD最多64bytes;CAN XL最多2048bytes,即一帧可以有更多业务数据。当一帧的业务数据量>8且
003C64时,用CAN FD就不需要在业务层把数据拆成多帧和重组了,这也提升了性能。
3)CAN总线仲裁
- CAN总线仲裁是通过优先级决定的。
- CAN总线处于空闲状态时,最先发送消息的单元获得发送权。
- 多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐形电平的单元失去对总线的占有权变为接收。
- 仲裁段(识别码Identifier)值越小,说明显性电平(逻辑0)越多,那么优先级越高。
- 仲裁失败的单元,会自动检测总线空闲,在第一时间再次尝试发送。
- 该仲裁机制是利用“如果总线上同时出现显性电平和隐形电平,总线的状态会被置为显性电平”这个特性进行仲裁。
十二. CAN应用层
狭义的CAN,指的是物理层和数据链路层。简单地以“CAN”作为关键字去搜索,都是这两层的知识,而广义的CAN,包括应用层协议,主流有以下3种。
1)CANopen
基于CAN2.0A定义的标准帧,由CiA提出和维护。最初是为工业自动化设计的,但很快应用在了其它领域
2)J1939
基于CAN2.0B定义的扩展帧,由SAE提出。多用于重型机械,如大巴、挖掘机、拖拉机、坦克、消防车等。
3)DeviceNet
基于CAN2.0A定义的标准帧,由美国的Allen-Bradley公司所开发。主要应用包括资讯交换、安全设备及大型控制系统,在美国的市场占有率较高。比起CANopen,对物理层的要求更严格,从而使得不同厂商的设备更通用。