介绍了CAN通讯的基本原理、CAN协议ISO11898中关于帧格式的规范。
-
引言
0.1 汽车电子技术发展:单一控制发展到综合控制——由发动机控制扩展到汽车的各个组成部分——汽车本身到融入外部社会环境。
0.2 现代汽车电子技术:
单独控制系统:由一个电子控制单元(ECU)控制一个工作装置或系统的电子控制系统,如发动机控制系统、自动变速器等。
集中控制系统:由一个电子控制单元(ECU)同时控制多个工作装置或系统的电子控制系统。如汽车底盘控制系统。
控制器局域网络系统(CAN总线系统):由多个电子控制单元(ECU)同时控制多个工作装置或系统,各控制单元(ECU)的共用信息通过总线互相传递。 -
CAN总线概述
1.1 定义:CAN(Controller Area Network)是控制器局域网络。CAN总线是一种现场总线,在汽车上用于设计微控制器通讯,车载各电子控制装置ECU交换信息,形成电子控制网络。//【拓展】现场总线是自动化系统中一种把大量现场级设备和操作级设备相连的工业通讯系统。定义为:一种用于智能化现场设备和自动化系统的开放式、数字化、双向串行、多节点的通信总线。
1.2 CAN总线是一种串行数据通信协议,其通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。//【拓展】串行通信(Serial communication)是指在计算机总线或其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。与之对应的是并行通信,它在串行端口上通过一次同时传输若干位元数据的方式进行通信。 -
CAN的组成
2.1 物理组成
CAN-BUS系统组成:1控制器、1收发器、2数据传输终端、2传输总线。
CAN控制器:接受控制单元中的微处理器中数据,处理数据传给收发器,同时接收收发器的数据,处理传给微处理器。
CAN收发器: 安装在控制器内部,同时兼具接受和发送的功能,将控制器传来的数据化为电信号并将其送入数据传输线。
数据传输终端:是一个电阻,防止数据在线端被反射,以回声的形式返回,影响数据的传输。
数据传输线:双向数据线,由高低双绞线组成。
2.2 目前汽车上的网络连接方式主要采用2条CAN:
一条用于驱动系统的高速CAN,速率达到500kb/s。主要面向实时性要求较高的控制单元,如发动机、电动机等
另一条用于车身系统的低速CAN,速率是100kb/s。主要是针对车身控制的,如车灯、车门、车窗等信号的采集以及反馈。其特征是信号多但实时性要求低,因此实现成本要求低。
CAN数据传输系统:
a).CAN驱动数据总线控制单元有:发动机控制单元、ABS-控制单元、 ESP-控制单元、变速器控制单元、安全气囊控制单元、组合仪表。
b).CAN舒适/ Infotainment数据总线控制单元有:全自动空调/空调控制单元、车门控制单元、舒适控制单元、收音机和导航显示单元控制单元。
- CAN的基本原理
3.1 显性位与隐性位
收发器通过使用电路进行控制。根据总线电平高低,判断逻辑“0”“1”。
“1”表示所有控制器断开,总线未激活。为隐性。
“0”表示某一控制器闭合,总线激活。为显性。
在显性状态和隐性状态之间转换时CAN导线上的电压变化。静止状态下两条导线作用有相同预先设定值(静电平2.5V),静电平为隐性状态,所连接的所有控制单元都可以修改它。显性状态时,high线会升高一个值,low线会降低一个值,在总线上high线就处于激活状态。以驱动系统为例,静电平为2.5V,升高和降低都至少为1V,所以canHigh线就处于激活状态,其电压不低于3.5(2.5V+1V=3.5V),而CAN-Low线上的电压值最多可降至1.5V(2.5V-1V=1.5V)。而舒适系统的Canbus信号和驱动系统有很大区别:Can-High的高电平为:3.6V,低电平为:0V;Can-Low 的高电平为: 5V,低电平为:1.4V。规定逻辑“1”:Can-high=3.6V,Can-low=1.4V;逻辑“0”:Can-high=0V,Can-low=5V。
3.2 数据传输过程描述:
总系统:通过网关将各个控制单元联成网络(如图)
网关:由于不同区域Canbus总线的速率和识别代号不同,因此一个信号要从一个总线进入到另一个总线区域,必须把它的识别信号和速率进行改变,能够让另一个系统接受,这个任务由网关(Gateway)来完成。另外,网关还具有改变信息优先级的功能。
数据传输的原理:
CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。CAN总线上任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现自由通信。
位仲裁:只要总线空闲,任何单元都可以开始发送报文。具有较高优先权报文的单元可以获得总线访问权。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突。 仲裁的机制确保了报文和时间均不损失。当具有相同识别符的数据帧和远程帧同时初始化时,数据帧优先于远程帧。
仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一“隐性”电平而监视的是一“显性”电平(见总线值),那么单元就失去了仲裁,必须退出发送状态。
CSMA/CD 是“载波侦听多路访问/冲突检测”(Carrier Sense Multiple Access with Collision Detect)的缩写。利用 CSMA 访问总线,可对总线上信号进行检测,只有当总线处于空闲状态时,才允许发送。利用这种方法,可以允许多个节点挂接到同一网络上。当检测到一个冲突位时,所有节点重新回到‘监听’总线状态,直到该冲突时间过后,才开始发送。在总线超载的情况下,这种技术可能会造成发送信号经过许多延迟。为了避免发送时延,可利用 CSMA/CD 方式访问总线。当总线上有两个节点同时进行发送时,必须通过“无损的逐位仲裁”方法来使有最高优先权的的报文优先发送。在 CAN 总线上发送的每一条报文都具有唯一的一个 11 位或 29 位数字的 ID。CAN 总线状态取决于二进制数‘0’而不是‘1’,所以 ID 号越小,则该报文拥有越高的优先权。因此一个为全‘0’标志符的报文具有总线上的最高级优先权。
- CAN的功能实现
协议规范:为了在任何两个CAN仪器之间建立兼容性。
数据传输功能
CAN协议(底层协议)CAN2.0、ISO11898:数据链路层和物理层面
数据传输过程:提供数据(控制单元向控制器提供发送的数据)——发送数据(收发器接收控制器传来的数据转为电信号发送)——接收数据(所有控制单元变为接收器)——检查数据(判断接收的数据是所需要的数据)——接受数据(判断接受与否)
CAN协议(高层协议)应用层 CAL、CANopen、DeviceNet、SDS、CANKingdom
4.1 底层协议的内容CAN2.0/11898
物理层:
作用:不同节点之间根据所有的电气属性进行位的实际传输。定义信号是如何实际地传输的,因此涉及到位时间、位编码、同步的解释。技术规范没有定义物理层的驱动器/接收器特性,以便允许根据它们的应用,对发送媒体和信号电平进行优化。
包括差分信号:CANH、CANL,显性位/隐性位。
LLC(logical link control)逻辑链路控制子层:
作用:涉及报文滤波、过载通知、以及恢复管理。为远程数据请求以及数据传输提供服务;确定由实际要使用的LLC子层接收哪一个报文。
MAC(medium access control)介质访问控制子层:
作用:MAC是CAN协议的核心。主要是传送规则,也就是控制帧结构、执行仲裁、错误检测、出错标定、故障界定。【报文分帧、仲裁、应答、错误检测和标定】位定时的一些普通功能也可以看作是MAC子层的一部分。它把接收到的报文提供给LLC子层,并接收来自LLC子层的报文。MAC子层也被称作故障界定的管理实体监管。此故障界定为自检机制,以便把永久故障和短时扰动区别开来。
数据链路层的LLC子层和MAC子层的服务及功能分别被解释为“对象层”和“传输层”。
4.2帧(Frame)的格式与类型:
数据链路层的协议数据单元,标识符的长度不同形成2种帧格式,标准帧位长度—44-108bits=>136bits;扩展帧位长度-64-128bits=>156bits。按照功能不同分为四种类型的帧。
数据帧Data Frame:携带数据由发送器至接收器。用于传递0-8byte数据;
远程帧Remote Frame:用于要求其他节点发送相同ID的数据帧,通过总线单元发送,以请求发送具有相同标识符的数据帧;
出错帧Error Frame:由检测出总线错误的任何单元发送,总线上任何节点发现错误均可发送错误帧;至少有6个显性电平和8个隐性电平,至多12个显性电平和8个隐性电平。
超载帧Overload Frame:用于提供当前的和后续的数据帧的附加延迟。总线负荷过高时,数据帧或者远程帧之间产生。
数据帧和远程帧借助帧间空间与当前帧分开。【ITM帧间空间3位】
分别介绍每种类型帧的组成:
数据帧有7个不同位场:
帧起始(Start of Frame)—标志数据帧起始,由一个显性位组成,只有总线空闲时才允许节点开始发送信号。【注意】所有站必须同步于首先开始发送报文的站的帧起始前沿。(与位同步有关)
仲裁场(Arbitration Frame)—CAN报文ID(标准格式2.0A11位,扩展格式2.0B29位);远程发送请求位(RTR)【0:数据帧/1:远程帧—no data field】;替代远程请求位(SRR)(仅扩展格式);ID扩展位(IDE)【0:标准帧/1:扩展帧】(仅扩展格式)
控制场(Control Frame)—6个位,前两位对扩展格式为保留位,必须为显性;标准格式第一位为IDE,显性;第二位为保留位,显性。后四位为数据长度代码(DLC),有效数值0-8.
数据场(Data Frame)—根据控制场的定义,0-8个字节,首先发送MSB
CRC场(CRC Frame)—CRC序列(CRC SEQUENCE)15位,由循环冗余码求得的帧检查序列,校验对象有帧起始、仲裁场、控制场、数据场;CRC界定符(CRC DELIMITER)一个单独的隐性位。
应答场(ACK Frame)应答间隙(ACK SLOT)【发送节点1接收节点0】应答界定符(ACK DELIMITER)【1个隐性位】该场里发送站发送两个隐性位,接收器正确地接收到有效的报文,接收器就会在应答间隙期间向发送器发送一个显性位以示应答。
帧结尾(End of Frame)7个隐性位组成,无填充位。
远程帧由6个不同的位场组成
RTR的极性反映了帧是数据帧还是远程帧。
错误帧:表明发生错误。
由2个不同的位场组成:不同站提供的错误标志(ERROR FLAG)的叠加、错误界定符;
错误标志:有主动错误(6个显性位)和被动错误(6个隐性位),无填充位。
错误标志的格式违背了位填充规则,破坏了ACK或EOF的固定格式,其他站也会检测到错误发送错误标志。显性位的序列是各个站发送的不同的错误标志叠加的结果,6-12位。
错误界定符:8个隐性位,传送错误标志后,每一站发送一个隐性位,一直监视总线直到检测出隐性位,发送其余7个隐性位。
过载帧:延缓其他节点发送报文,每个节点最多连续发送两条过载帧;适用于节点接收器电路尚未准备好。
过载标识和过载界定符。3种情况:1.接收器内部原因2.间歇的第一位和第二位检测到显性位3.在错误界定符或过载界定符最后一位采样到显性位,节点发送过载帧。2.3的过载帧起始于检测到显性位之后的一个位。
帧间空间(interframe space):数据帧远程帧与前面帧的分隔。
包括间歇、总线空闲2个位场。如果是发送前一个报文的被动错误站,还包括“挂起传送(suspend transmission)”的位场。
间歇3个隐性位,所有站不可以传送数据帧和远程帧,只可以标识过载条件。
总线空闲(Bus Idle)时间任意。
挂起传送(suspend transmission)被动错误的站发送报文后,在下一报文开始传送前或确认总线空闲之前发出8个隐性位跟随在间歇后面。
4.3报文
CAN报文分为两部分:信息部分和数据部分。
头两个字节为信息部分,其前十一位为标识符,标识符中的前八位用作接收判断,应包含本信息包的目的站地址。
然后是一位RTR位(应设为0),最后是四位的DLC(数据长度位,即所发数据的实际长度,单位:字节)。
其余八个字节是数据部分,存有实际要发的数据。详见下图:
4.4位填充规则
构成一帧的帧起始、仲裁场、控制场、数据场和CRC序列均借助位填充规则进行编码。
当发送器在发送的位流中检测到5位连续的相同数值时,将自动地在实际发送的位流中插入一个补码位。 数据帧和远程帧的其余位场采用固定格式,不进行填充。出错帧和超载帧同样是固定格式,也不进行位填充。
CAN协议的位填充机制除实现仲裁场、控制场、数据场和CRC序列的数据的透明性外,还增加了从“隐性位”到“显性位”跳变的机会,也就是增多重同步的数量,提高同步质量。