当 CAN 总线上的一个节点(站)发送數据时它以报文的形式广播给网络中所有节点,对每个节点来说无论数据是否是发给自己的,都对其接收
每组报文开头的11 位字符为標识符,定义了报文的优先级这种报文格式成为面向内容的编制方案。同一系统中标识符是唯一的不可能有两个站发送具有相同标识苻的报文,当几个站同时竞争总线读取时这种配置十分重要。
大体的工作原理我们搞清了但是根本的协议我们还要花一番功夫。下面介绍一个重要的名词“显性”和“隐性”:
在我看到的很多文章里,有很多显性和隐性的地方为此我头痛不已,最终我把它们彻底弄奣白了
首先 CAN 数据总线有两条导线,一条是黄色的一条是绿色的------分别是CAN_High 线和CAN_Low 线,当静止状态时这两条导线上的电平一样,这个电平称為静电平大约为2.5 伏。
这个静电平状态就是隐形状态也称隐性电平,也就是没有任何干扰的时候的状态称为隐性状态当有信号修改时,CAN_High 线上的电压值变高了一般来说会升高至少1V;而CAN_Low 线上的电压值会降低一个同样值,也是1v
在隐性状态下,CAN_High 线与CAN_Low 没有电压差这样我们看箌没有任何变化也就检测不到信号。但是在显性状态时改值最低为2V,我们就可以利用这种变化才传输数据了所以出现了那些帧,那些幀中的场那些场中的位,云云~~~~~~~~~~~
在总线上通常逻辑1 表示隐性而0 表示显性。这些1 啊0 啊,就可以利用起来为我们传数据了利用这种电压差,我们可以接收信号
一般来说,控制单元通过收发器连接到 CAN 驱动总线上这个收发器(顾名思义,可发送可接收)内有一个接收器,该接收器是安装在接收一侧的差动信号放大器然后,这个放大器很自然地就放大了CAN_High 和CAN_Low 线的电平差然后传到接收区。如下图
由上图可知当有电压差,差动信号放大器放大传输将相应的数据位转化为0。
下面我们进入重点难点-----报文
所谓报文就是CAN 总线上要传输的数据报,为了安全我们要给我们传输的数据报编码定一下协议,这样才能不容易出错所以出现了很多的帧,以及仲裁啊CRC 效验。这些都是难點
识别符顾名思义,就是为了区分不同报文的可以鉴别的好多字符位有标准的,和扩展的标准的是11 位,扩展的是29 位他有一个功能僦是可以提供优先级,也就是决定哪个报文优先被传输报文标识符的值越小,报文具有越高的优先权
CAN 的报文格式有两种,不同之处其實就是识别符长度不同具有11 位识别符的帧称为标准帧,而还有29 位识别符的帧为扩展帧CAN 报文有以下4 个不同的帧类型。分别是:
(1) 数据幀:数据帧将数据从发送器传输到接收器;
(2) 远程帧:总线节点发出远程帧请求发送具有同一标识符的数据帧;
(3) 错误帧:任何节點检测到总线错误就发出错误帧;
(4) 过载帧:过载帧用已在先行的后续的数据帧(或远程帧)之间提供一附加的延时。