分享

CAN总线简明易懂教程——《CAN总线呕心沥血教程》

 xpxys99 2017-10-25 发布于江苏

因为公司的部分产品涉及到CAN总线传输信号,所以有段时间一直在网上找相关的资料了解,但大部分资料介绍的都比较正式,看的话很难把握要点。

CAN总线简明易懂教程——《CAN总线呕心沥血教程》

后来在网上看到这篇文章,整个文章讲的浅显易懂,很是受益,在此分享给大家:


哥很郁闷,为了CAN 研究了不少,看了不少资料,现在我给大家总结一下

先看看工作原理

当 CAN 总线上的一个节点(站)发送数据时,它以报文的形式广播给网络中所有节点,对每个节点来说,无论数据是否是发给自己的,都对其接收。

每组报文开头的11 位字符为标识符,定义了报文的优先级,这种报文格式成为面向内容的编制方案。同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文,当几个站同时竞争总线读取时,这种配置十分重要。

大体的工作原理我们搞清了,但是根本的协议我们还要花一番功夫。下面介绍一个重要的名词,显性”和“隐性”:

在我看到的很多文章里,有很多显性和隐性的地方,为此我头痛不已,最终我把它们彻底弄明白了。

首先 CAN 数据总线有两条导线,一条是黄色的,一条是绿色的------分别是CAN_High 线和CAN_Low 线,当静止状态时,这两条导线上的电平一样,这个电平称为静电平,大约为2.5 伏。

这个静电平状态就是隐形状态,也称隐性电平,也就是没有任何干扰的时候的状态称为隐性状态。当有信号修改时,CAN_High 线上的电压值变高了,一般来说会升高至少1V;而CAN_Low 线上的电压值会降低一个同样值,也是1v。

那么这时候,CAN_High 就是 2.5v+1v=3.5v,它就处于激活状态了。而CAN_Low 降为2.5v-1v=1.5v。可以看看这个图

CAN总线简明易懂教程——《CAN总线呕心沥血教程》

由此我们得到

在隐性状态下,CAN_High 线与CAN_Low 没有电压差,这样我们看到没有任何变化也就检测不到信号。但是在显性状态时,改值最低为2V,我们就可以利用这种变化才传输数据了。所以出现了那些帧,那些帧中的场,那些场中的位,云云~~~~~~~~~~~

在总线上通常逻辑1 表示隐性。而0 表示显性。这些1 啊,0 啊,就可以利用起来为我们传数据了。利用这种电压差,我们可以接收信号。

一般来说,控制单元通过收发器连接到 CAN 驱动总线上,这个收发器(顾名思义,可发送,可接收)内有一个接收器,该接收器是安装在接收一侧的差动信号放大器。然后,这个放大器很自然地就放大了CAN_High 和CAN_Low 线的电平差,然后传到接收区。如下图

CAN总线简明易懂教程——《CAN总线呕心沥血教程》

由上图可知,当有电压差,差动信号放大器放大传输,将相应的数据位转化为0。

下面我们进入重点难点-----报文

所谓报文,就是CAN 总线上要传输的数据报,为了安全,我们要给我们传输的数据报编码定一下协议,这样才能不容易出错,所以出现了很多的帧,以及仲裁啊,CRC 效验。这些都是难点。

识别符的概念

识别符顾名思义,就是为了区分不同报文的可以鉴别的好多字符位。有标准的,和扩展的。标准的是11 位,扩展的是29 位。他有一个功能就是可以提供优先级也就是决定哪个报文优先被传输,报文标识符的值越小,报文具有越高的优先权。

CAN 的报文格式有两种,不同之处其实就是识别符长度不同,具有11 位识别符的帧称为标准帧,而还有29 位识别符的帧为扩展帧,CAN 报文有以下4 个不同的帧类型。分别是:

(1) 数据帧:数据帧将数据从发送器传输到接收器;

(2) 远程帧:总线节点发出远程帧,请求发送具有同一标识符的数据帧;

(3) 错误帧:任何节点检测到总线错误就发出错误帧;

(4) 过载帧:过载帧用已在先行的后续的数据帧(或远程帧)之间提供一附加的延时。


有点长,放下一篇了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多