CAN总线技术是汽车电子开发中绕不开的一条,绝大部分相关岗位的招聘要求中都有“Good knowledge of CAN technology” or "tool experience on CANoe/CANanalyzer/CANStress… is preferred"这种加分项。那什么是CAN总线技术呢?招聘方又希望我们用它能干些啥呢?
CAN总线介绍
CAN全称为Controller Area Network,即控制器域网络。由博世和Intel开发,为了解决车辆内部电子设备数量日益增长而带来的通信线束长度和复杂程度大幅增长问题。
CAN总线从通信角度有以下特征:串口,同步,半双工,CRC校验。通信速率一般不超过1Mbps,速率与通信距离成反比,我所在的动力域控制器常用的速率为250Kbps/500Kbps。
CAN总线标准只定义了物理层和数据链路层。
在物理层,CAN使用屏蔽双绞线传输及差分信号判定显性(0)和隐性(1),可有效较低干扰。CAN收发器(常见有TJA1050)用于物理信号和差分信号之间转换,由于总线上的电路特性(单个节点可理解为用接地的开关控制信号输出电压的高低),当多个节点同时进行传输时,只要有一个节点输出为低电平(接地),则总线为低电平,此为各节点报文进行仲裁的原理。
CAN总线的同步设定在每个电平跳变沿,为了消除同电平较长导致的累计误差,在每5个相同电平后插入一个相反的填充位,强行跳变进行同步。
在数据链路层,CAN发展到2.0后标识符有11位标准帧和29位扩展帧之分,最常用的数据帧报文结构组成如下:
- SOF:帧起始,1个显性位,即低电平代表总线上有信号了。
- 仲裁段(12或32位)
- 标识符:占11或29位,即帧ID,
- RTR:远程传输请求,占1位,显性低电平(因此,数据帧与远程帧仲裁获胜)
- IDE(扩展帧):标识符扩展位,占1位,隐性高电平(因此,扩展帧与标准帧仲裁失败)
- SRR:代用远程请求,占1位,显性低电平
- CAN控制器监测总线上的电平与发送数据对比,如果仲裁段不同(说明总线上有更高优先级的节点报文)则停止发送,退出总线竞争。
- 控制段(6位)
- IDE(标准帧):标识符扩展位,占1位,显性低电平
- r0,r1:保留位,占1位,隐性高电平
- DLC:数据长度码,占4位,BCD编码(8421码),0-8
- 数据段(64位),最大传输8字节(Byte0-Byte7),MSB(最高有效字节/位)先传输,即先传Byte7。属于短帧,实时性高。
- CRC段(16位)
- CRC:占15位,发送时根据CRC之前的数据(帧起始+仲裁段+控制段+数据段)算出一个值,接收节点根据接收到的数据用同样算法算出一个值,两者比较是否一致,从而判断数据有效性
- CRC分隔符:占1位,隐性高电平
- ACK段(2位):应答段,分ACK槽和ACK界定符,各1位;对于发送节点,2位均为隐性高电平,接收节点接收到本帧数据后在该帧ACK槽对应时间发送显性低电平到总线上,如果发送节点此时接收到总线上的ACK槽位为显性低电平(自己的高电平被与掉了),说明此时有节点接收到了数据,否则报ACK错误。
- EOF:帧结束,7个连续隐性位,连续高电平表示传输结束。
除了数据帧,CAN报文里还有远程帧,错误帧,过载帧,均无数据段。其中远程帧用于请求发送数据,组成结构与数据帧类似。错误帧在判断出故障后发送,分主动错误和被动错误标识,此时故障节点仍可正常通信,REC(接收错误计时器)和TEC(发送错误计时器)累加到127后从主动错误转至被动错误,TEC累加到255以上触发Busoff,停止收发。过载帧是接收节点在未准备好接收下帧数据时用于通知发送节点,让其延后发送。
PS:正常面试应该不需要回答这些背景知识,了解即可,所以这里也不写太多,网上多的是。
CAN通信协议(待补充)
ISO11898
高速CAN的物理层和数据链路层通信标准,低速CAN的为ISO11519。