一、Can协议
CAN为串行通讯协议,能有效地支持具有很高安全等级的分布实时控制。CAN的应用范围很广,从高速的网络到低价位的多路接线都可以使用CAN。在汽车电子行业里,使用CAN连接发动机控制单元、传感器、防刹车系统、等等,其传输速度可达1Mbit/s。同时,可以将CAN安装在卡车本体的电子控制系统里,诸如车灯组、电气车窗等等,用以代替接线配线装置。
技术规范的目的是为了在任何两个CAN仪器之间建立兼容性。可是,兼容性有不同的方面,比如电气特性和数据转换的解释。为了达到设计透明度以及实现灵活性,根据ISO/OSI参考模型,CAN 2.0规范细分为以下不同的层次:数据链路层和物理层。
在以前版本的CAN规范中,数据链路层的LLC子层和MAC子层的服务及功能分别被解释为“对象层”和“传输层”。
逻辑链路控制子层(LLC)的作用范围如下:
- 为远程数据请求以及数据传输提供服务。
- 确定由实际要使用的LLC子层接收哪一个报文。
- 为恢复管理和过载通知提供手段。
MAC子层的作用主要是传送规则,也就是控制帧结构、执行仲裁、错误检测、出错标定、故障界定。位定时的一些普通功能也可以看作是MAC子层的一部分。
物理层的作用是在不同节点之间根据所有的电气属性进行位的实际传输。
CAN具有以下的属性:
- 报文的优先权
- 保证延迟时间
- 设置灵活
- 时间同步的多点接收
- 系统内数据的连贯性
- 多主机
- 错误检测和错误标定
- 只要总线一处于空闲,就自动将破坏的报文重新传输
- 将节点的暂时性错误和永久性错误区分开来,并且可以自动关闭由OSI参考模型分层CAN结构的错误的节点。
二、基本术语
1、报文
总线上的报文以不同的固定报文格式发送,但长度受限。当总线空闲时任何连接的单元都可以开始发送新的报文。
2、信息路由
在CAN系统中,一个CAN节点不使用有关系统结构的任何信息(如站地址)。包含一些重要概念:
系统灵活性——节点可在不要求所有节点及其应用层改变任何软件或硬件的情况下,被接于CAN网络。
成组——由于采用了报文滤波,所有节点均可接收报文,并同时被相同的报文激活。
数据相容性——在CAN网络内,可以确保报文同时被所有节点或者没有节点接收,因此,系统的数据相容性是借助于成组和出错处理达到的。
3、位速率
不同的系统,CAN的速度不同。在一个给定的系统里,位速率是唯一的,并且是固定的。
4、优先权
在总线访问期间,识别符定义一个静态的报文优先权。
5、远程数据请求
通过发送远程帧,需要数据的节点可以请求另一节点发送相应的数据帧。数据帧和相应的远程帧是由相同的识别符命名的。
6、仲裁
只要总线空闲,任何单元都可以开始发送报文。具有较高优先权报文的单元可以获得总线访问权。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突。
仲裁的机制确保了报文和时间均不损失。当具有相同识别符的数据帧和远程帧同时初始化时,数据帧优先于远程帧。
仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一“隐性”电平而监视的是一“显性”电平(见总线值),那么单元就失去了仲裁,必须退出发送状态。
7、错误检测
要进行检测错误,必须采取以下措施:
- 监视(发送器对发送位的电平与被监控的总线电平进行比较)
- 循环冗余检查
- 位填充
- 报文格式检查
8、故障界定
CAN节点能够把永久故障和短暂扰动区别开来。故障的节点会被关闭。
9、总线值
总线有二个互补的逻辑值:“显性”或“隐性”。“显性”位和“隐性”位同时传送时,总线的结果值为“显性”。比如,在总线执行时,逻辑0代表“显性”等级,逻辑1代表“隐性”等级。
10、应答
所有的接收器检查报文的连贯性。对于连贯的报文,接收器应答,对于不连贯的报文,接收器作出标志。
三、Can信息包格式说明
1、帧
CAN信息包分为两部分:信息部分和数据部分。
头两个字节为信息部分,其前十一位为标识符,标识符中的前八位用作接收判断,应包含本信息包的目的站地址。
然后是一位RTR位(应设为0),最后是四位的DLC(数据长度位,即所发数据的实际长度,单位:字节)。
注:
- 帧起始(SOF)
- 替代远程请求(SRR)
- 远程发送请求(RTR)
在进行数据传送时,发出报文的单元称为该报文的发送器。该单元在总线空闲或丢失仲裁前恒为发送器。如果一个单元不是报文发送器,并且总线不处于空闲状态,则该单元为接收器。
对于报文发送器和接收器,报文的实际有效时刻是不同的:
- 对于发送器而言,如果直到帧结束末尾一直末出错,则对于发送器报文有效。如果报文受损,将允许按照优先权顺序自动重发送。为了能同其他报文进行总线访问竞争,总线一旦空闲,重发送立即开始。
- 对于接收器而言,如果直到帧结束的最后一位一直末出错,则对于接收器报文有效。
构成一帧的帧起始、仲裁场、控制场、数据场和CRC序列均借助位填充规则进行编码。
当发送器在发送的位流中检测到5位连续的相同数值时,将自动地在实际发送的位流中插入一个补码位。
数据帧和远程帧的其余位场采用固定格式,不进行填充。出错帧和超载帧同样是固定格式,也不进行位填充。
报文传送由 4 种不同类型的帧表示和控制:
- 数据帧携带数据由发送器至接收器;
- 远程帧通过总线单元发送,以请求发送具有相同标识符的数据帧;
- 出错帧由检测出总线错误的任何单元发送;
- 超载帧用于提供当前的和后续的数据帧的附加延迟。
数据帧和远程帧借助帧间空间与当前帧分开。
注:
数据帧、远程帧、出错帧、超载帧固定格式不进行位填充
2、同步
同步机制:
CAN总线的位同步只有在节点检测到“隐性位”(逻辑1)到“显性位”(逻辑0)的跳变时才会产生,当跳变沿不位于位周期的同步段之内时将会产生相位误差。该相位误差就是跳变沿与同步段结束位置之间的距离。
如果跳变沿发生在同步段之后采样点之前为正的相位误差;如果跳变沿位于同步段之前采样点之后为负的相位误差。
相位误差源于节点的振荡器漂移,网络节点之间的传播延迟以及噪声干扰等。CAN协议规定了两种类型的同步:硬同步和重同步。
(1)硬同步
硬同步只在总线空闲时通过一个下降沿(帧起始)来完成,此时不管有没有相位误差,所有节点的位时间重新开始。强迫引起硬同步的跳变沿位于重新开始的位时间的同步段之内。
(2)重同步
在消息帧的随后位中,每当有从“隐性位”到“显性位”的跳变,并且该跳变落在了同步段之外,就会引起一次重同步。重同步机制可以根据跳变沿增长或者缩短位时间以调整采样点的位置,保证正确采样。
CAN协议的位填充机制除实现仲裁场、控制场、数据场和CRC序列的数据的透明性外,还增加了从“隐性位”到“显性位”跳变的机会,也就是增多重同步的数量,提高同步质量。