一、CAN的概述及发展历史
CAN总线的概述及发展历史
CAN发展的时间线:
1983年,Bosch开始研究汽车网络技术
1986年,Bosch在SAE大会正式公布CAN的协议
1987年,Intel和philips公司先后推出CAN控制器芯片
1991年,Bosch颁布CAN2.0技术规范
1991年,CAN总线最新在Benz S系列轿车上实现
1993年,ISO颁布CAN国际标准ISO-11898
1994年,由CiA组织举办第一届国际CAN大会(iCC)
2015年,CAN FD的ISO标准化
2021年,CAN XL第三代使用的规范CIA-610
CAN概述
CAN(Controller Area Network,控制器局域网)是一种串行通信技术,专门用于在汽车电子控制单元(ECU)之间实现可靠的数据交换。
CAN通信特点
1)节点间采样多主通讯的方式
2)采用短帧结构,报文帧的有效字节数为8个,可达汽车到实时响应的要求
3)报文ID越小,优先级别越高。报文ID可分成不同的优先级,进一步满足汽车网络报文的实时性要求
4)非破坏性总线仲裁处理机制
5)可靠的CRC校验方式,传输数据出错率极低,满足汽车数据传输的可靠性要求
6)报文帧仲裁失败或传输期间被破坏有自动重发机制
7)节点在错误严重的情况下,具有自动脱离总线的功能,切断它与总线的联系,不影响总线的正常工作。
8)通讯距离最远达10KM
9)通讯速率最高1MB/S(此时距离最长40m)
10)节点数实际可达110个
11)CAN节点设计成本较低,通讯介质采用双绞线
通信网络参考模型OSI
应用层:人家交互
表示层:压缩解压、加密解密、编码解码
会话层:会话建立、维护中止会话隔离
物理层:提供电气规格,数据bit的传输100101011
二、CAN的物理层
CAN使用总线传输方式
早期汽车使用点对点的通讯方式,现在使用总线式的线束连接,减少了通讯线的数量、通过多个网络进行大量数据的高速传输、诊断和做线缆简单。
CAN物理电平说明
容错CAN优缺点:通讯速率低,承载的节点少,但具有更高的抗干扰能力。
CAN的编码规则
CAN编码采用的NRZ非归零编码(5个相同电平加入一个填充位),相同带宽的情况下,NRZ编码方式的信息量更大。
NRZI编码:当电平状态发生变化时,表示数据0,信号电平不变表示1(7个1变换一次0USB2.0通讯使用的编码方式就是NRZI编码。
RZ编码
NRZ编码
NRZI编码
CAN的传输介质
传输介质:非屏蔽双绞线
终端电阻:120Ω
双绞线的作用:外部干扰在两根导线上产生的噪声(在专业领域里,把无用的信号叫做噪声)相同,以便后续的差分电路提取出有用信号,差分电路是一个减法电路,两个输入端同相的信号(共模信号)相互抵消(m-n),反相的信号相当于x-(-y),得到增强。
CAN的终端电阻
CAN总线终端电阻的作用有3个:
1.提高抗干扰能力,让高频低能量的信号迅速走掉
2.确保总线快速进入隐性状态,让寄生电容的能量更快走掉
3.提高信号质量,放置在总线的两端,让反射能量降低
寄生电容进行充电和放电
CAN终端电阻选择
如图所示是CAN总线的经典拓扑图。终端电阻一般选择放在最远的两个节点上。如果其中一个放在中间位置,终端电阻外面的CAN收发器处于支路上,这将大大增加该节点的信号反射,进而影响总线通讯。
在CAN总线中使用的典型线缆,将它们扭制成双绞线,就可根据上述方法得到特征阻抗大约为120Ω,这也是CAN标准推荐的终端电阻阻值,所以这个120Ω是测出来的,不是算出来的,都是根据实际的线束特性进行计算得到的。
根据标准需要考虑短路到18V的情况,假设CANH短路到18V,电流会通过终端电阻流到CANL上,而CANL内部由于限流的原因,最大注入电流为50mA(TJA1145的规格书上标注),这时候120Ω电阻的功率就是50mA*50mA*120Ω=0.3W。
CAN总线的电平逻辑
CAN的数据采样点
采样点:是总线数据被读取并被解释为相应位值的时间点。
三、数据链路层
帧类型类型
数据帧
分类:标准帧和扩展帧
SOF:1bit,起始位,显性
Identifier:11bit/29bit, ID位
RTR:远程帧和数据帧位,远程帧“1”,数据帧“0”
SRR:替代远程帧位,“1”
IDE:扩展帧和标准帧,扩展帧“1”,标准帧“0”
r:预留
DLC:4bit,数据长度位
Data Field:0-8 Byte,数据位
CRC:15bit,数据CRC校验SOF----CRC前
DEL:校验和应答界定符
ACK:1bit,确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 CRC 错误。发送节点将此位为1,接收节点正常接收数据后将此位置为”0”;(1 bit)
DEL:校验和应答界定符,隐形“1”
EOF:7bit,结束标志位,连续7bit隐形位表示帧结束
CRC和ACK位
EOF结束位
远程帧
错误帧
错误帧:错误帧可用于指示通信期间检测到的错误。错误帧将强行中止正在进行的错误数据传输。
错误帧的结构与数据帧或远程帧明显不同,仅由两部分构成:错误标志(error flag)和错误界定符。
错误帧分类:
位错误:发送节点检查,发送数据后回读数据,检查发送是否错误
填充错误:接收节点检测。CRC之前,连续6个显性或隐形位
ACK错误:发送节点检测。发送数据后ACK位没有置低
格式错误:CRC之后11bit固定的格式位,
CRC错误:接收节点检测
位填充
位填充从以SOF的传输为开始,以CRC序列的最后一位的传输为结束。因此在传输包含8个数据字节的标准格式的数据帧时,在极限情况下,应有24个填充位。所以,理论上标准格式数据帧最多包含132位。
错误检测
错误跟踪
错误处理流程
过载帧和帧间隙
过载帧:接收节点向总线上其它节点报告自身接收能力达到极限的帧。
帧间隔:是用来隔离数据帧(或者远程帧)的,也就是说,数据帧(或者远程帧)经过插入帧间隔能够将本帧与先行帧
(数据帧、远程帧、错误帧、过载帧)分隔开来。
主动错误状态下的间隙帧
被动错误状态下的间隙帧
发送仲裁机制
特点:
1.仲裁发送在仲裁段
2.采用“线与”机制
3.ID值越小,优先级越高
4.仲裁失败进入“只听”模式,等待空闲发送
上图在多个节点同时发送报文时,首次出现不同,且发送显性位的节点占用总线。由于CAN报文首先发送的为ID段且显性位为逻辑“0”,因此ID越小该帧的优先级越高。
发送仲裁机制
上图:数据帧A的优先级高于数据帧B的优先级,总线空闲时,数据A先发。
仲裁场
仲裁流程
几种状态仲裁错误
仲裁场相同,数据场不一致
相同帧无应答,产生应答错误
相同帧有应答,隐藏了错误
位同步机制
同步的目的其实就是保证采样点采集时,采集的位数不会错乱,并且都是接收端同步。发送端发送一个帧,如果接收端有延时,并不做同步,那么就可能会出现,发送端发送第2位时,接收端还是按照第1位的时序来采样,导致接收端认为采集的到是第1位。显然就出错了。
1)同步段(Synchronization Segment):长度固定,1个时间量子Tq;一个位的传输从同步段开始;同步段用于同步总线上的各个节点,一个位的跳边沿在此时间段内。
2)传播段(Propagation Segment):传播段用于补偿报文在总线和节点上传输时所产生的时间延迟;传播段时长 ≥ 2 × 报文在总线和节点上传输时产生的时间延迟 ;传播段时长可编程(1~8个时间量子Tq)。
3)相位缓冲段1(Phase Buffer Segment1):用于补偿节点间的晶振误差;允许通过重同步对该段加长;在这个时间段的末端进行总线状态的采样;长度可编程(1~8个时间量子Tq)。
4)相位缓冲段2(Phase Buffer Segment2):用于补偿节点间的晶振误差;允许通过重同步对该段缩短;长度可编程(1~8个时间量子Tq)。
同步段时钟机制
系统时钟→CAN时钟→CAN位时间
波特率 = 1 / CAN位时间
位同步特点
一个位时间内只允许一种同步方式,要么硬同步要么重同步;
任何一个从“隐性”到“显性”的下降沿 都可以用于同步;
硬同步发生在报文的SOF位,所有接收节点调整各自当前位的同步段,使其位于发送的SOF位内;
重同步发生在一个报文SOF位之外的其它段,当下降沿落在了同步段之外时发生重同步;
在SOF到仲裁场发送的时间段内,如果有多个节点同时发送报文,那么这些发送节点对跳变沿不进行重同步。
硬同步
重同步
重同步,PBS1延长
重同步,PBS2缩短
同步跳转宽度
在重同步时,有个同步跳转宽度(SJW,Synchro Jump Width)的概念,表示的是PBS1和PBS2重同步时允许跳转的最大宽度。
同步跳转宽度必须满足以下几个条件:
SJW必须小于PBS1和PBS2的最小值
SJW最大值不能超过4
同步段规则
CAN报文在CAN总线上的传输时,物理延迟包含两个部分:
在CAN-BUS上传输造成的延迟
在节点内部传输造成延迟
按照CAN通信协议的规定,补偿给传播延迟的时间长度要至少等于实际实际传播延迟时长的2被,
即:tPTS≥2×tdel=2×(tdel+tBus)
四、CAN应用层
定义ID的规则
定义控制命令和节点
定义索引对象
分段报文写---起始帧
分段报文写---传输帧和结束帧
分段报文读-----起始帧
分段报文读----传输过程