CAN协议基础
CAN总线原理
(1) CAN总线概述
CAN(Controller Area Network)总线是车内电子装置中的一个独立系统,它就是数据线,用于在连接的控制单元之间进行信息交换。常用的CAN总线分为:单线CAN、低速容错CAN、高速CAN,这三种总线的主要区别在于电平逻辑。
这个区别可以从以下几种情况来说明:空闲时、有效时、睡眠时、唤醒时。这里假设收发器的电源为标准的5V和12V。
1、空闲时(即通常说的隐性位)。
2、有效时(即通常说的显性位)。
3、睡眠时
4、唤醒时
(2)帧格式:
①标准帧
②扩展帧
(3)报文传输类型
①数据帧
数据帧将数据从发送器传输到接收器。
②远程帧
总线单元发出远程帧,请求发送具有同一标识符的数据帧。
③错误帧
任何单元检测到总线错误就发出错误帧。
④过载帧
过载帧用于在先行和后续数据帧(或远程帧)提供一附加的延时。
(4)帧元素
①帧起始:它标志着数据帧和远程帧的起始,由一个独立的“显性”为组成。只有在总线空闲时,才允许帧开始发送。
②仲裁场:
识别符:基本可以理解为CAN帧的ID号;
RTR位:该位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”;
SRR位(扩展格式):SRR的全称是“替代远程请求位”(Substitute Remote Request BIT)。SRR是一隐性位。它在扩展格式的标准帧RTR位位置,因此代替标准帧的RTR位。因此,标准帧与扩展帧的冲突是通过标准帧优先于扩展帧这一途径得以解决的。
IDE位(扩展格式):IDE的全称是“识别符扩展位”(Identifier Extension BIT)。IDE位属于:
(1) 扩展格式的仲裁场;
(2) 标准格式的控制场;
标准格式里的IDE位为“显性”,而扩展格式里的IDE位为“隐性”。
③控制场:
④数据场:数据场由数据帧中的发送数据组成。它可以为0~8个字节,每字节包含8个位,首先发送MSB;
⑤CRC场:CRC场包括CRC序列(CRC Sequence),其后是CRC界定符(CRC delimiter);
⑥帧结尾:每一个数据帧和远程帧均由一标志序列界定。这个标志序列由7个“隐性”位组成;
⑦应答场:
(5)性能特点:
(1)多主方式工作;
(2)有不同的优先级;
(3)采用非破坏性总线仲裁技术;
(4)CAN只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据,无需专门的“调度”;
(5)节点数主要取决于总线驱动电路;
(6)采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果;
(7)CAN的每帧信息都有CRC校验及其他检错措施,保证了数据出错率极低;
(8)CAN节点在错误严重的情况下具有自动关闭输出的功能,以使总线上其他数据的操作不受影响;
(9)直接通讯距离最远可达10Km(速率在5Kbps以下),通信速率可达1Mbps(通信距离最长为40m)。
(6)总线仲裁:
(1)总线上“显性”电平支配“隐性”电平;
(2)逻辑“0”=“显性”电平;逻辑“1”=“隐性”电平;
(3)总线空闲时,任何节点可以开始发送报文;
(4)总线上每条报文都具有唯一的一个11位或29位标识符;
(5)报文标识符的值越小,报文具有越高的优先权;
(6)多个节点同时发送时,总线在“仲裁场”进行“逐位仲裁”;
(7)传送高优先级报文的节点赢得仲裁,并继续传输报文;
(8)失去仲裁的节点在总线空闲时重新传送。
总线仲裁示意图:
(7)位流编码(BIT Coding):
(1)位流编码采用“不归零”(NRZ)方法编码;
(2)在完整的位时间里,位电平要么为“显性”,要么为“隐性”;
(3)有足够的跳变沿利于总线各节点重新同步;
(4)要求采取“位填充”(BIT Stuffing)。
(8)位填充:
(1)当发送器检测到位流里有5个连续相同值的位,便会自动在位流里插入一补充位,接收器会自动删除这个补充位。
①最多经过5个位时间,各节点可以重同步;
②能够通过总线上的错误标志(Error Flag 6个连续相同的位)反映发送错误。
(3)在固定的位场中不适用位填充。
(9)错误检测机制:
(1)进行检测错误,采取以下措施:
①监视(对发送为的电平与被监控的总线电平进行比较)
②循环冗余检查
③位填充
④报文格式检查
(2)错误检测的机制具有以下的属性:
①检测到所有的全局错误
②检测到发送器所有的局部错误
③可以检测到报文里多达5个任意分布的错误
④检测到报文里长度低于15位的突发性错误
⑤检测到报文里任意奇数个错误
(3)对于没有被检测到的错误报文,其剩余的错误可能性概率低于:报文错误率4.7*。
错误类型