[TOC]
基于江科大的CAN通信协议笔记
1、CAN是什么?
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
2、CAN 的特点
(1) 多主控制
在总线空闲时,所有的单元都可开始发送消息(多主控制)。
最先访问总线的单元可获得发送权
多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权。
(2) 消息的发送
在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。
*ID 并不是表示发送的目的地址,*而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
(3) 系统的柔软性
与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
(4) 通信速度
根据整个网络的规模,可设定适合的通信速度。
**在同一网络中,所有单元必须设定成统一的通信速度。**即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。
(5) 远程数据请求
可通过发送“遥控帧” 请求其他单元发送数据。
(6) 错误检测功能·错误通知功能·错误恢复功能
所有的单元都可以检测错误(错误检测功能)。
检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。
正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
(7) 故障封闭
CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
同过判断是持续错误还是暂时错误来进行诊断,持续错误会被总线踢出,直到总线达到128个空闲周期之后才能恢复发送。
3、错误
错误分为三种状态
-
主动错误状态
可以正常参加总线通信 ,测出错误时,输出主动错误标志。
-
被动错误状态
虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。
处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的
处于被动错误状态的单元检测出错误时,输出被动错误标志。 另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8 个位的隐性位)。
-
总线关闭态
不能参加总线上通信
这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关
4、CAN总线物理层定义
CAN 收发器根据两根总线( CAN_High 和 CAN_Low)的电位差来判断总线电平。总线电平分为显性电平和隐性电平两种。 总线必须处于两种电平之一。 总线上执行**逻辑上的线“与”**时,显性电平为“0”,隐性电平为“1”。
5、CAN协议帧格式
通信是通过以下 5 种类型的帧进行的。
组成:
(1) 帧起始表示数据帧开始的段。
(2) 仲裁段表示该帧优先级的段。
标准格式和扩展格式在此的构成有所不同。
(3) 控制段表示数据的字节数及保留位的段。
控制段由 6 个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。
(4) 数据段数据的内容,可发送 0~8 个字节的数据。
(5) CRC 段检查帧的传输错误的段。
(6) ACK 段表示确认正常接收的段。
1 发送单元的 ACK 段发送单元在 ACK 段发送 2 个位的隐性位。
2 接收单元的 ACK 段接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位, 通知发送单元正常接收结束。
(7) 帧结束表示数据帧结束的段。
-
遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧
• 数据帧和遥控帧的不同
遥控帧的 RTR 位为隐性位,没有数据段。
• 遥控帧没有数据段,数据长度码该如何表示?
遥控帧的数据长度码以所请求数据帧的数据长度码表示。
• 没有数据段的数据帧有何用途?
例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。
-
错误帧:用于当检测出错误时向其它单元通知错误的帧。
错误帧由错误标志和错误界定符构成 ,错误标志包括主动错误标志和被动错误标志两种。
主动错误标志: 6 个位的显性位
被动错误标志: 6 个位的隐性位
-
过载帧:用于接收单元通知其尚未做好接收准备的帧
-
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。
(1) 间隔
3 个位的隐性位。
(2) 总线空闲
隐性电平,无长度限制(0 亦可)。
本状态下,可视为总线空闲,要发送的单元可开始访问总线。
(3) 延迟传送(发送暂时停止)
8 个位的隐性位。只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段
6 优先级决定
1、先入为主
2,非破环性总裁
总裁段线与逻辑,显性0优先级别高。
3、标准格式和扩展格式的优先级
标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。
7、位填充
位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。
作用:
区分错误帧,总线空闲帧等,避免长串的帧对逻辑分析出现干扰。
对长串的1或者0信号,提供下降沿用于数据对其同步。
8、位错误
-
错误帧的输出
发送单元发送完错误帧后,将再次发送数据帧或遥控帧。
9、位时序
1、当发送端开始发送信号的时候,在发送的第一个位(起始信号)的同步段SS,所有接受段进行同步,开始自己的SS,至此,各个设备的位时序都同步到SS段。由于协议规定了相同的Tq,所以在没有干扰的理想情况下,信号接受与发送会实现同步而不会出现问题:
2但是实际情况中的干扰不可消除,在多次的累计中会达出现很大的干扰。信号的时序之间有比较大的出入。此时需要再同步。
再同步过程中,接收方通过对比自己的时序与发送方的同步SS位置偏差,判断是自己快了(增加PBS1补偿宽度1-4Tq),慢了(删除PBS2补偿款度)
1