CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
CAN总线基础知识
一.CAN总线在汽车上的应用
二.CAN的基本特征
三.CAN的分层结构
四.CAN物理层
-4.1.物理连接
-4.2.电平信号
-4.3.信号同步
-4.4.低速CAN电平信号
-4.5.CAN接口电路
五.CAN消息帧
-5.1.数据帧
-5.2.远程帧
-5.3.错误帧
-5.4.过载帧
-5.5.帧间空间
六.非破坏性按位仲裁
七.位填充
八.CRC校验
九.使用控制器收发CAN报文
-9.1.设置波特率
-9.2.发送CAN报文
-9.3.接收CAN报文
十.故障界定与总线管理
-10.1.故障界定
-10.2.故障界定规则
-10.3.总线故障管理
十一.TTCAN
回到顶部
CAN总线基础知识
一.CAN总线在汽车上的应用
二.CAN的基本特征
三.CAN的分层结构
四.CAN物理层
-4.1.物理连接
-4.2.电平信号
-4.3.信号同步
-4.4.低速CAN电平信号
-4.5.CAN接口电路
五.CAN消息帧
-5.1.数据帧
-5.2.远程帧
-5.3.错误帧
-5.4.过载帧
-5.5.帧间空间
六.非破坏性按位仲裁
七.位填充
八.CRC校验
九.使用控制器收发CAN报文
-9.1.设置波特率
-9.2.发送CAN报文
-9.3.接收CAN报文
十.故障界定与总线管理
-10.1.故障界定
-10.2.故障界定规则
-10.3.总线故障管理
十一.TTCAN
回到顶部
# CAN总线基础知识 CAN:Controller Area Network,控制器局域网,简称CAN总线。CAN总线是最为常用的车辆总线。ISO 11898标准是CAN总线最基础的协议,最高可以支持1Mb/s的通信速率,在此基础上开发的SAE J1939广泛应用于卡车、大客车、工程机械、农业机械等工业领域的高速通信,其通信速率为250kb/s,乘用车则是基于ISO 11898根据需求自定义通信协议。 在ISO 11898-2中定义了高速CAN,主要用于连接一些实时性要求较高的设备,例如发动机,电机等。 在ISO 11898-3中定义了低速CAN,主要用于连接一些实时性要求不高的设备,例如车身系统上的灯光控制,车门控制等。 两种CAN的传输速率与电平信号也有所区别,本文的内容以高速CAN为主,低速CAN将略微带过。 ## 一.CAN总线在车辆上的应用
CAN总线最初是为了解决汽车串行通信而研制的,随着CAN总线在各个行业和领域的广泛应用,对其通信格式标准化也提出了更严格的要求。 1991年CAN总线技术规范(Version2.0)制定并发布,简称CAN2.0,其包括A和B两个部分,区别在于数据帧的格式,2.0A只给出了标准帧格式,帧ID长度为11个位,2.0B则给出了标准帧与扩展帧两种格式,扩展帧ID长度扩展到了29个位。 目前国内外新能源车大多基于CAN组建车载网络,CAN总线主要用于连接动力系统与车身电子系统,乘用车基本以ISO 11898协议标准,由OEM自定义通信协议来搭建CAN网络,商用车、农业机械、工程机械大多以SAE J1939协议标准搭建CAN网络,故障诊断仪也大多采用CAN通信的方式接入,常用的协议为OBD诊断和UDS诊断。 车上各种基于CAN的网络通过网关连接在一起,在许多车载系统中,网关功能集成在智能仪表中。在新能源汽车中,整车控制器VCU是整个控制系统的核心,内部也会搭载网关功能。 尽管有其他通信协议在安全性、时效性方面更加优秀,在多媒体方面更为领先,但是CAN总线依靠其价格低廉并且拥有相对可靠的通信,占领了汽车网络较大的份额。 ## 二.CAN的基本特征
目前传统燃油车与新能源车基本都采用CAN总线组建车载通信网络。 CAN总线在设计之初,规定物理层的传输CAN_H和CAN_L使用双绞线连接,理论上当总线上遇到干扰时,两条CAN线之间的差分电平依旧保持不变,提高了抗干扰能力,如图2-1。 ![](images/2022-11-22-10-18-13.png)
图2-1 CAN总线差分信号
即便CAN总线自带抗干扰能力,但是也无法避免磁场、雷击、电磁脉冲等干扰因素,干扰不仅影响信号,甚至可能烧毁电子元器件,出现设备死机等情况,将CAN收发器信号共地,增加共模滤波器,为双绞线包裹屏蔽层,可以在一定程度上降低磁场的影响。为避免雷击与电磁脉冲只能更换无法被电磁干扰的传输介质,才能有效屏蔽干扰,例如光纤,但是也提高了成本。 CAN总线是一种串行数据通信总线,最高速率可达1Mb/s,最远距离可到10km,在CAN总线网络中,任意两个节点之间的传输速率与传输距离的关系如图2-2所示。 500kb/s和250kb/s是最为常用的传输速率。 ![](images/2022-11-12-09-49-40.png)
图2-2 CAN总线速率与距离
CAN总线经过位填充,循环冗余检验(CRC校验),报文格式检测等检测错误的工作,拥有了较强的错误检测能力,当总线上检测到错误时,会通过接收错误计数器判断当前错误状态是否允许该节点继续参与总线工作。 CAN总线的基本特点: 1. CAN总线以多主站竞争的总线模式,形成了一种广播式通信,任何节点在任何时候都可以向总线发送信息,我们称其为帧报文,报文内不包含物理地址,将数据块中的ID作为整个网络的标识符。网络中的各节点根据ID的优先级逐位仲裁,竞争向总线发送帧报文,其余节点对总线上的报文ID进行检测,判断该信息若与自己有关则进行处理,否则忽略。采用该模式的优点在于理论上网络内可以无限制地挂接节点(实际上受硬件限制),也可以使不同的节点接收同一条报文。 2. CAN总线采用非破坏性仲裁技术,如果在同一时刻有2个或2个以上的设备向网络上传输数据,会触发总线仲裁,判断报文优先级,发送优先级较低报文的节点将延后发送报文,或者竞争失败停止发送报文,优先级较高的报文则继续发送。等待总线空闲时间,将重新发送优先级较低的报文,以此避免总线冲突。 3. 同一节点发送的不同报文也会根据传输的数据内容分配优先级,故节点之间没有优先级之分,主要依靠报文中的ID进行总线仲裁。 4. CAN总线各节点可以设置接收滤波,决定总线上的数据帧ID与本节点是否匹配,若匹配成功,数据就被存入节点设备的相应寄存器中,否则就抛弃该数据,从而能够减轻总线控制器的工作量。 5. CAN总线支持远程数据请求,目标节点需发送一个远程帧,其中的标识符(ID)应与所需数据帧的标识符相匹配。随后,相应的数据源节点会发送一个数据帧以响应远程帧请求。 6. CAN总线节点配置相对方便,若挂接一个新的节点,该节点的作用仅为接收当前总线上已有的数据,则网络中的其余节点均不用做任何软硬件方面的调整。若该节点需要发送有效数据,或者需要追加新的接收数据,则需要对应的接收方与发送方作出调整。 7. 总线仲裁失败,或者被错误干扰的报文会在总线空闲时间自动重发,若空闲时刻依旧有2帧及以上的报文同时发送,同样会再次进行仲裁,以此反复,直到全部发送完毕。任何节点会对错误帧进行标记,通过错误计数器判定错误类型。 8. 所有接收器会校验接收报文的一致性,对数据块中的DLC数据长度进行比较,对一致性的帧做出应答,否则标记错误。 9. CAN总线能够区分临时故障与永久性故障,能够自动断开故障节点,使其脱离与总线的连接,无法进行报文的发送与接收。通常情况下,一个节点必定处于主动错误、被动错误、离线三种状态的其中一种。 ## 三.CAN的分层结构
CAN通信结构参考开放式系统互联通信参考模型,即OSI模型,如图3-1。OSI模型提供了一个通用的概念,给开发者一个可以用于连接不同系统,并且方便开发与完善的框架。 ![](images/2022-11-26-15-21-24.png)
图3-1 OSI模型
OSI将计算机网络体系结构划分为以下七层: 物理层: 将数据转换为可通过物理介质传送的电子信号,负责管理计算机通信设备和网络媒体之间的互通,包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等。 数据链路层:负责网络寻址、错误侦测和改错,决定访问网络介质的方式,例如CAN总线、以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。 网络层:决定数据的路径选择和转寄,传输网络数据,例如互联网协议(IP)。 传输层:提供终端到终端的可靠连接,例如传输控制协议(TCP)。 会话层:负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接,允许用户建立连接。 表示层:协商数据交换格式,把数据转换为能与接收者的系统格式兼容并适合传输的格式。 应用层:提供为用户的应用程序和网络之间的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET等。 CAN的结构体系遵循OSI模型,定义了物理层和数据链层,又按照局域网标准(LAN IEEE 802.2)将数据链路层细分为逻辑链路控制(LLC)和介质访问控制(MAC)。将物理层细分为物理信令(PLS)、物理介质附件(PMA)和介质附属接口(MDI),CAN的分层结构如下图3-2所示。 ![](images/2022-11-26-15-24-04.png) 图3-2 CAN的分层结构 物理层和数据链层均在ISO 11898-1~ISO11898-3中定义,MDI则在CIA DS-102中定义了建议使用Sub-D9接口。 LLC用于统一数据传输方式,CAN总线的传输方式为向网络中的所有节点发布数据,即广播传输,发送端不用确定接收端是否收到了帧。 MAC属于LLC下的一个子层,它定义了数据帧怎样在介质上进行传输。在共享同一个带宽的链路中,对连接介质的访问进行优先级判定,用于解决总线仲裁,拥有故障界定功能,能够区分短期干扰故障与永久性故障的自校验机制。 物理层中PLS用于发送数据时进行编码以及接收数据时进行解码。PMA用于发送和接收缓冲,在高频条件下很好地避免数据间的串扰。MDI定义了一个从物理层实现到物理介质传输数据的物理或电气/光学接口,即ECU与CAN总线相连的电路。 ## 四.CAN物理层
### 4.1.物理连接
CAN总线的物理连接如图4.1-1所示,在总线的CAN_L与CAN_H之间并联两个终端电阻,用RL表示,两个电阻分别位于总线的两端所以叫终端电阻。 ![](images/2022-11-11-14-24-25.png)
图4.1-1 CAN总线的物理连接
终端电阻主要用来抑制信号反射,当信号在传播中遇到阻抗不连续即会产生反射波,反射信号叠加在原信号上将会改变原信号的形状。若没有终端电阻,干扰波不能被有效的吸收,会造成总线传输的信号不稳定,直接影响各电控单元的正常工作。 按照ISO 11898协议中规定,一条总线上不允许超过32个节点,虽然理论上按照这种挂接的方式可以挂接无限的节点数,但是实际挂接数量取决于总线的电力负载。 例如常用的CAN收发器TJA1050,在官方资料中注明最多可以挂接110个CAN节点。 一般车辆CAN总线的长度<40m,连接两个距离最远的节点,也称其为干线,其余节点均从干线上引出支线连接,支线长度<1m,在乘用车中要求距离更短,大约<0.4m。 总线上终端电阻的取值范围如表4.1-1所示。 | 参数 | 单位 | 最小值 | 额定值 | 最大值 | 备注 | | --- | --- | --- | --- | --- | ----------- | | RL | Ω | 118 | 120 | 130 | 最小功耗:220 mW |
表4.1-1 终端电阻取值范围
物理层中的CiA DS-102协议,定义了物理接头 DB9,并且推荐使用DB9接头,但没有强制要求,这种建议的物理接口仅用于临时接入总线调试使用,如图4.1-2所示。 ![](images/2022-11-28-12-37-28-image.png)
图4.1-2 DB9接头
现场采用OBD接头的情况较多,如图4.1-3所示。 ![](images/2022-11-23-09-41-50.png)
图4.1-3 OBD接头
而ECU端则是专用线束,除了连接CAN总线以外,还包含了需要连接的传感器、执行器,电源输入等。 ### 4.2.电平信号
物理层用于实现ECU与总线相连的电路,ECU的连接数量取决于总线的电力负载。CAN总线能够使用多种物理介质,例如双绞线、光纤等,最常用的是价格相对低廉的双绞线。以高速CAN为例,两条信号线为CAN_H与CAN_L,信号采用差分电压传送,静态电压为2.5V,即差分电压为0,被称作隐性电平,逻辑表达为1。当CAN_H=3.5V,CAN_L=1.5V,差分电压为2V,称作显性电平,逻辑表达为0。 总线上的两种逻辑显性与隐性如图4.2-1所示。 ![](images/2022-11-12-10-10-06.png)
图4.2-1 显性电平与隐性电平
在隐性状态下,CAN_H与CAN_L的电压稳定在总线平均电压,差分电压几乎为0。 显性状态差分幅值最好保持在2V左右,若是低于1.3V,在强干扰的环境下可能导致收发器无法识别或误识别总线信号。 总线遵循线与逻辑,即显性位覆盖隐性位。 ### 4.3.信号同步
CAN总线传输速率最高可达1Mb/s,总线节点通常采用石英晶振作为时钟发生器。但是各节点的晶振频率,由于温度、电压、元器件的异常导致细微的误差,只要它的的振荡频率在容差范围内,各节点会通过再同步进行校正。 **1.位时间** 位时间的定义为1个位(bit)的持续时间,像ECU同步化动作、网络传输延时补偿和采样点定位等总线管理功能,它们均以位时间为架构执行,并且都是由CAN协议IC(集成电路)中的可编程位定时逻辑加以实现的。 额定位速率显示了理想发送器在不经再同步的情况下每秒送出的位数。 额定位时间定义为:额定位时间=1/额定位速率。 额定位时间可被认为是能够划分成几个互不重叠的分立时段。这些段组成位时间的情形如图4.3-1 所示。 ![](images/2022-11-19-15-40-28.png)
图4.3-1 额定位时间
- Sync_Seg(同步段):总线上挂载的各个ECU通过该时间段进行同步,预计在该时间段中会出现一个跳变沿。 - Prop_Seg(传播段):这一时间段用来对网络内物理延迟时间进行补偿,该延迟时间由信号在总线上的传播时间和ECU内部的延迟时间组成。 - Phase_Seg1,Phase_Seg2(相缓冲段1,相缓冲段2):这两个时间段用来补偿跳变沿的相位误差,这两段可以被再同步处理延长或缩短。 - 采样点:它是读取总线电平并将其转化为对应值的时刻,它位于Phase_Seg1的结尾。 信息处理时间是从采样点开始留出的一段用于计算后续位电平的时间。 **2.时间编排** 时间份额是从振荡器周期派生出来的一种定长时间单元。它存在一个可编程的分度值,它们都是整数,最小范围为1~32。 从最小时间份额开始,时间份额的长度可以是:时间份额=m×最小时间份额。其中,m为分度值,额定时间各时段长度定义如下: - Sync_Seg为一个时间份额长度; - Prop_Seg可根据情况设定为1,2,…,8或更多个时间份额长度; - Phase_Seg1可根据情况设定为1,2,…,8或更多个时间份额长度; - Phase_Seg2选Phase_Seg1和信息处理时间中较长的那段; - 信息处理时间小于或等于2个时间份额长度。 一个位时间内时间份额的总数目起码要做到可以在8~25这一范围内进行选择。同时必须协调不同ECU中振荡器的频率,使其产生一个能在全系统内有效的时间份额。 **3.同步** 硬同步和再同步是两种形式的同步过程。它们遵循如下准则: - 一个位时间内仅允许一种同步。 - 硬同步只有在总线空闲状态条件下隐性位到显性位的跳变沿发生时才进行,表明报文传输开始。 - 在其他情况下,所有从隐性到显性的跳变沿都将用于再同步处理,发送显性位的节点将不执行再同步处理。 在经过硬同步之后,位时间计数器随同步段重新开始计数。硬同步强行将已发生的跳变沿置于重新开始的位时间同步段内。 再同步可能导致相位缓冲段1被延长或相位缓冲段2被缩短。这两个相位缓冲段的延长时间或缩短时间上限由再同步跳转宽度(SJW)给定。SJW规定了相缓冲段的延长量和缩短量的上限,同步跳转宽度通常设置为2或者3,避免设置为1,因为1会导致总线兼容性大幅下降。 总线上绝大多数的同步都是由仲裁引起的,总线上的所有节点都要同步于最先开始发送的节点,但是由于总线延迟,节点的同步不可能达到理想的要求。 如果最先发送的节点没有赢得总线仲裁,那么所有接收节点都要重新同步于获得总线仲裁的节点。 ### 4.4.低速CAN电平信号
低速CAN收发器电平信号,如图4.4-1所示。 ![](images/2022-11-12-16-02-19.png)
图4.4-1 低速CAN电平信号
低速CAN的通信速率<125kb/s,过慢的速率使其不会产生反射波,不需要接终端电阻,应用场景也相对较少。 ### 4.5.CAN接口电路
推荐的CAN接口电路如图4.5-1所示,其中共模滤波器是可选的,实际电路中使用的TVS管、ESD电容、EMC电容等未包含在图中。 ![](images/CAN_Interface.png)
图4.5-1 推荐的CAN接口电路
CAN接口电路参数要求如下表,RapidECU控制器使用了上述CAN接口电路,电路参数与下表一致: | 标号 | 说明 | 参数要求 | | ----- | -------------------------------------------- | ------------------------------ | | R1、R2 | 终端电阻,对于不包含终端电阻的CAN接口无此电阻。 | 60R±5%,通常使用62欧姆电阻 | | Cs | 电容,对于不包含终端电阻的CAN接口无此电容。 | 4.7nF±10% | | C1、C2 | 总线对地总电容,包括EMC电容、TVS管结电容、ESD电容、寄生电容等的总线对地总电容。 | 20pF
20pF
在CAN2.0技术规范中,分为A、B两部分,2.0A的消息帧格式只允许标识符(ID)11位的标准帧,基于2.0A的总线网络只能收到这种格式的消息,标准帧结构如图5-1所示。 ![](images/2022-11-22-16-06-50.png)
图5-1 标准帧格式
在CAN2.0B中额外增加了扩展帧,它拥有29位标识符(ID),前11位与CAN2.0A的标识符相同,在此之后又增加了18位CAN2.0B专用的扩展标识符,其余结构完全相同,基于2.0B的总线网络既可以接收标准帧也可以接收扩展帧,但是在同一网络中通常只能出现一种帧格式,必须提前设定该网络是接收标准帧还是扩展帧,扩展帧结构如图5-2所示。 ![](images/2022-11-12-10-58-21.png)
图5-2 扩展帧格式
CAN消息帧根据用途分为四种: 数据帧:用于数据交互; 远程帧:用于远程请求发送数据; 错误帧:用于标记总线上出现的错误; 过载帧:用于延迟下一条数据帧或远程帧的发送。 ### 5.1.数据帧
数据帧由7个部分,即帧起始、仲裁场、控制场、数据场、校验场、应答场、帧结尾。 帧起始(SOF):长度1bit,表示数据帧的开始,在总线空闲时向总线发出一个显性位边沿信号,所有接收节点将根据最先发送数据的节点帧起始为位同步时钟信号。 仲裁场:在标准帧格式中,由11位标识符和RTR位组成,在扩展帧格式中,由29位标识符和SRR位、IDE位、RTR位组成,ID值越小,优先级越高。 - RTR:长度1bit,该位用于远程帧请求时为隐性位1,在数据帧的情况下必须是显性位0。 - SRR:长度1bit,在扩展帧格式中始终为隐性位1,总线通过接收到的RTR位和IDE位可以判断出当前数据的帧类型。 - IDE:长度1bit,表示标识符扩展位,在标准帧格式中表示显性位0,扩展帧格式中表示隐性位1,同一网络不能出现两种格式的帧。 控制场:由保留位和DLC组成,在标准帧格式中,IDE与保留位相同,均为显性位0。 - DLC:长度4bit,数据长度码,范围0-8,用于设定数据场长度0-8字节。 数据场(Data Field):0~8个字节,用于节点之间传递有效数据。 CRC场:长度16bit,包括CRC序列和CRC界定符,用于校验数据的准确性。 - CRC Sequence:长度15bit,校验序列,发送方从SOF到Data Field的所有数据进行编码后填写CRC序列并发送,接收方将对接收数据的SOF到Data Field的所有数据进行编码再与CRC序列进行比对,判断数据是否正确。 - DEL:长度1bit,隐性界定符,校验场和应答场的界定符作用相同,均为隐性位1。 应答场:长度2bit,由应答间隙和应答界定符组成,确认数据是否正常接收。 - ACK:发送方将发送隐性位1,由接收方进行确认,若收到消息,则返回一个显性位0,如果没有一个节点收到消息,应答间隙则保持隐性电平,将会报错。 帧结尾(EOF):长度7bit,每个数据帧和远程帧的帧结尾均由7个连续的隐性位组成,表示帧结束。 ### 5.2.远程帧
节点可以通过发送远程帧要求源节点发送数据,远程帧由6个部分,即帧起始,仲裁场、控制场、校验场、应答场、帧结尾,结构如下图5.2-1所示。 ![](images/2022-11-22-16-09-09.png)
图5.2-1远程帧格式
与数据帧的结构类似,区别在于: 1. 数据帧的 RTR 值为显性位“0”,远程帧的 RTR 值为隐性位“1”; 2. 远程帧没有数据场; 3. 远程帧的 DLC 表示请求发送单元发送的数据长度。 总线同时出现数据帧和远程帧时,数据帧的RTR位为显性位,数据帧将会在总线仲裁中胜出,获得优先控制权。 ### 5.3.错误帧
当某一节点检测到错误时,向总线发送错误帧,通知其他节点,错误帧的结构由错误标志和错误界定构成,帧结构如图5.3-1所示。 ![](images/2022-11-12-13-32-11.png)
图5.3-1错误帧格式
错误标志(Error Flag):长度6bit,当某一节点检测到错误,会向总线发送“错误标志”,主动错误节点会发送6个连续的显性位,被动错误节点会发送6个连续的隐性位。错误一旦产生就不是一个节点的问题了,发送节点与接收节点都会对错误做出响应。其他节点若检测到错误,发送节点停止发送报文,接收节点也停止接收报文,一同向总线发送错误标志。 第二个错误标志(Error Flag):用来叠加其他节点发送的错误标志,由于接收节点发现错误的时间可能不同,总线上的错误标志可能由6~12个显性位组成。 错误界定(Error Delimiter):由8个隐性位组成。当发现错误的节点发送完错误标志后,开始发送错误界定符,即8个隐性位,但是可能会出现另外的节点仍在发送错误标志,导致错误界定被显性位的错误标志覆盖,直到检测到总线上出现8个隐性位的界定符,才表示错误帧结束。 错误帧的作用就是用来标记总线上出现的错误,错误类型分为位错误,位填充错误,CRC错误,应答错误,格式错误。 1. 位错误:由发送节点对通过总线竞争的节点进行检测,节点向总线发送数据的某一位与回读的数据不同,则判定出现了位错误。 2. 位填充错误:由接收节点进行检测,对SOF~CRC Sequence最后一位进行位填充编码,出现5个连续的相同极性位就会插入一个相反极性的填充位,若总线上出现6个连续的相同极性位,就判定出现了位填充错误。 3. CRC错误:由接收节点检测,接收节点对SOF~Data Field的数据进行模2运算,计算出的校验序列与数据块中的校验序列进行比较,若不同,则判定出现了CRC错误。 4. 应答错误:由发送节进行点检测,应答间隙无人应答,则判定出现了应答错误。 5. 格式错误:由接收节点进行检测,CRC校验序列往后,从校验场的DEL开始不进行位填充,应该是固定格式,除了应答间隙(ACK)以外都应该是隐性位,若出现显性位,则判定出现了格式错误。 ### 5.4.过载帧
过载帧,已经被淘汰,与错误帧格式相同,包括过载标志和过载界定符,以下两种情况会发送过载帧: 1. 接收单元要求发送节点延迟下一个数据帧或远程帧的发送; 2. 在帧间隔(ITM)的3 位内,前两位检测到显性位。 超载标志由6个显性位构成,它破坏了帧间空间的固定格式,其他节点检测到后会各自发送一个超载标志。 超载界定符由8个隐性位自称,超载标志发送完毕后,每个节点都会对总线进行监测,直到出现一个隐性位,此时每个节点的超载标志全部发送完成,所有节点将发送7个隐性位,直到总线上检测到8个连续的隐性位,超载帧发送结束。 ### 5.5.帧间空间
由3个位的帧间隔和总线空闲组成,主动错误节点和被动错误节点发送任何报文结束后都会发送3个隐性位的帧间隔(ITM),之后进入总线空闲,但是被动错误节点在帧间隔后面还会发送8个隐性位的暂停发送。 ## 六.非破坏性按位仲裁
CAN总线上采用非归零(NRZ)编码,数据具有两种逻辑值,即显性电平和隐性电平。 NRZ编码的特点在于一个bit时间内电平保持不变,信号跳变减少,能够减少信号干扰。例如曼彻斯特编码则需要用信号跳变来表明当前信号状态,编码对比如下图6-1所示。 ![](images/2022-11-12-16-14-18.png)
图6-1 编码策略
显性电平用逻辑“0”表示显性位,隐性电平用逻辑“1”表示隐性位, 总线仲裁中遵循线与逻辑,显性电平覆盖隐性电平,被覆盖的节点将竞争失败,转为接收节点。 在CAN总线上的每条报文都拥有一个唯一标识符,11位或29位的ID号,按照逻辑与进行总线仲裁,即ID号越小报文的优先级越高。当总线空闲后,如果两个及以上的节点同时向总线发送报文,可利用CSMA/CD以及“非破坏性按位仲裁”方法来避免冲突,每个节点发送标识符并且检测总线电平,判断是否竞争成功,如图6-2所示。 ![](images/2022-11-12-16-42-55.png)
图6-2 非破坏性按位仲裁
如图6-2所示,标识符第5位,节点1与节点3为显性位,节点2为隐性位,根据与运算机制,隐性位被覆盖,总线信号第5位依旧表现为显性位,即节点2竞争失败,转为接收节点,之后的标识符均转变为隐性位信号。 同理,在标识符第0位处,节点1为隐性位,被节点3的显性位覆盖,竞争失败,转为接收节点。通过这种方式,节点3赢得了总线仲裁,优先发送数据。 节点1和节点2将等待节点3所有数据发送完毕,总线回到空闲状态,节点1和节点2将会再次竞争,节点1胜出,作为第二个向总线发送数据的节点,节点2作为第3个向总线发送数据的节点,这样就实现了非破坏性按位仲裁,所有节点都完成数据发送。 ## 七.位填充
位填充属于CAN总线抗干扰措施中的一种,在CAN消息帧中,帧起始、仲裁场、控制场和CRC校验序列以位填充方法进行编码,当检测到发送位中5个极性相同的连续位时,将自动插入一个极性相反的填充位,如图7-1所示。数据帧和远程帧的CRC界定符、ACK场、帧结尾格式固定,不需要进行位填充。 ![](images/2022-11-12-17-05-16.png)
图7-1 位填充过程示意图
如图7-1所示,共有3个填充位,其中第3个填充位之前的5个连续的相同极性位包含了第2个填充位,因此填充位也被视为总线数据,判断是否出现连续5个相同极性位。 ## 八.CRC校验
CRC校验场包括CRC序列和CRC界定符,是一种根据网络数据包生成简短固定位数校验码的信道编码技术,主要用来检测或校验数据传输或者保存后是否正确。 CAN消息使用的CRC校验序列长度为15位,需要将帧起始到数据场的这一串数据做模2运算,也就是异或运算。 它的对应多项式:G(x)=x
15
+x
14
+x
10
+x
8
+x
7
+x
4
+x
3
+1,即1100 0101 1001 1001。 该多项式相除的余数即为发送至总线的CRC序列,接收器接收数据时,按照同样的规则对接收到的数据进行CRC计算,然后把两个CRC序列进行比较,以判定数据是否出错。 ## 九.使用控制器收发CAN报文
RapidECU通常都提供了若干CAN通道,比如RapidECU-U34控制器提供了6个CAN通道,其它型号控制器类似。使用带CAN通道的控制器可以收发CAN报文。ECUCoder提供了CANCommucation CAN通信模块库,库中的模块用于收发CAN报文。 ### 9.1.设置波特率
U34控制器CAN模块默认设置波特率为500kbps,传统CAN网络,默认不启用CAN FD功能,如控制器用于传统CAN总线网络且波特率为500kbps,则无需再设置波特率。如波特率为其它数值,则需要修改CAN Baudrate 的值(在RapidECUSetting模块中可设置各个CAN通道的波特率),可供设定的范围为:1000、500、250、125,对应1Mbps、500kbps、250kbps、125Kbps,如果填写其它数值,控制器则自动设定为500。 ### 9.2.发送CAN报文
利用CANTransmit(或CAN0to2Transmit或CAN3to5Transmit)报文发送模块可以发送CAN报文。 CAN发送模块的功能:CANTransmit报文发送模块用于发送指定ID的CAN报文。 CAN发送模块的参数见下表: | 选项 | 选项说明 | 可选值 | | ---------------- | ------------ | ----------------------------------- | | CAN Module | CAN模块,即CAN通道 | 0、1、2、4、5 | | CAN Buffer | CAN缓存 | 0~63(与相应通道的CAN接收模块共用缓存,值随通道不同而有所不同) | | CAN Message ID | CAN 报文ID | ID(十六进制) | | CAN Message Type | CAN报文类型 | 标准帧、扩展帧 | | CAN Data Length | 数据长度 | 0~8 | | Sample Time | 采样时间 | 自定义,通常使用-1 | 模块的用法:将CAN发送模块拖入到模型中(通常是周期性任务中),按需求为模块设置所有参数,即可发送指定ID的CAN报文,如下图所示: ![](images/2023-07-31-18-56-31-image.png) ### 9.3.接收CAN报文
利用CANReceive(或CAN0to2Receive或CAN3to5Receive)报文接收模块可以接收CAN报文。 CAN接收模块的功能:CAN报文接收模块用于定时接收指定ID的CAN报文,适用于。 CAN接收模块的参数见下表: | 选项 | 选项说明 | 可选值 | | ---------------- | ------------ | ----------------------------------- | | CAN Module | CAN模块,即CAN通道 | 0、1、2、4、5 | | CAN Buffer | CAN缓存 | 0~63(与相应通道的CAN发送模块共用缓存,值随通道不同而有所不同) | | CAN Message ID | CAN 报文ID | ID(十六进制) | | CAN Message Type | CAN报文类型 | 标准帧、扩展帧 | | CAN Data Length | 数据长度 | 0~8 | | Sample Time | 采样时间 | 自定义,通常使用-1 | CAN接收模块有四个输出端口,端口说明见下表: | 端口名称 | 端口说明 | 数据类型 | | ------- | ---------------------- | ------------------- | | f() | 触发端口 | 专门用于触发子系统模块 | | CAN_OK | 是否接收到CAN 报文,接收到为1,否则为0 | uint8 | | ID | CAN报文ID | uint32 | | CAN Msg | CAN报文数据 | uint8(数据的维数取决于数据长度) | 模块的用法:将CAN接收模块拖入到模型中(通常是周期性任务中),按需求为模块设置所有参数,即可定时接收指定ID的CAN报文。通常情况下,CAN接收模块需要触发一个子系统模块,如下图所示: ![](images/2023-07-31-17-42-51-image.png) ## 十.故障界定与总线管理
### 10.1.故障界定
故障界定的目标是实现数据传输网络中,某个或多个节点发生故障的情况下依旧维持正常运行,因此故障界定策略需要区分短期故障和永久性故障,找出并断开故障节点。 故障界定策略需要每一个节点都配备两个错误接收器,分别记录在发送帧期间错误数目TEC和接收帧期间出现的错误数目REC。 若该节点的帧被正确发送或接收,相应的错误接收器的计数将减少,错误计数在任何时刻都反映了当前错误干扰的状况。 通过预定数值,可以禁止产生错误的节点向总线发送帧报文的操作,若错误计数超过限定值,将断开该节点。 ### 10.2.故障界定规则
对故障界定而言,一个节点根据错误计数的结果,可以处于以下三种状态之一:主动错误、被动错误或离线。 - 主动错误:在检测到错误时,发送主动错误标志(6位显性位)与错误界定符(8个隐性位),告知总线上所有节点发生了总线的错误,之后进行正常的收发操作。 - 被动错误:当检测到总线发生错误的时候,将停止报文发送,总线发送被动错误标志(6个隐性位)和错误界定符,虽然该节点依旧可以参与总线通信,但是在发送报文后会进入8个位的等待时间。 - 离线状态:当错误积累到一定程度后,该节点将会与总线隔离,进入离线状态,停止发送与接收任何报文,不再干扰总线,128 次出现11 个连续“隐性”位后并且用户请求重启节点,才可以恢复错误主动状态,错误计数器清零。 错误计数依照以下规则进行更改(在特定帧的传输过程中,可以有多条规则起作用),下面的TEC代表发送错误计数器计数,REC代表接收错误计数器计数。 - 当接收器检测到一个错误,将判断该错误是否为位错误时发送的主动错误,若不是,REC+1。 - 如果发送器送出一个错误标志,TEC+8。 - 例外:在主动错误状态下,发送器因检测到无人应答或者位填充错误的情况,计数不会增加。 - 如果发送器在发送主动错误标志期间检测到一个位错误,TEC+8。 - 如果接收器在发送主动错误标志或超载标志期间检测到一个位错误,REC+8。 - 任何节点在送出一个主动错误标志、被动错误标志或超载标志之后,至多允许连续出现7个显性位。在检测到一连串显性位中的第14个(出现一个活动错误标志或超载标志的情况下)或检测到认可错误标志随后的一连串显性位中的第8个之后,且再出现一连串8个显性位之后,每个发送器的TEC+8,同时每个接收器的REC+8。 - 成功送出一帧(收到应答,并且直到送完帧结束都没有检测出错误)之后,TEC-1,最小值为0。 - 成功接收一帧(接收过程直到应答间隙都没有出错,并且顺利送出应答)后,如果REC<127,则计数-1,最小值为0,如果127
127或TEC>127,该节点将进入被动错误状态,当被动错误节点的RCE≤127时,该节点就回到主动错误状态。 处于被动错误状态下的节点,当TEC>255 节点将进入离线状态。 离线状态下的节点将与总线断开通信,禁止再参与总线上的读写,除非用户请求重新开机或者使能了BusOff自恢复功能,并且总线上检测到128次连续的11个隐性位,才允许离线节点回到主动错误状态。 三种状态转换如图10.2-1所示。 ![](images/2022-11-23-10-11-41.png)
图10.2-1 节点状态转换图
### 10.3.总线故障管理
在总线正常运行期间,可能会发生一些总线故障,它们将对总线运行造成影响。这些故障及其引起的网络动作如下表所示。 ![](images/2022-11-23-10-22-18-image.png) ## 十一.TTCAN
TTCAN属于被时代淘汰的产物,此处不再赘述。