美文网首页
CAN通讯学习下集

CAN通讯学习下集

作者: 那个混子 | 来源:发表于2021-08-04 21:20 被阅读0次

    大家好啊,我来啦!

    今天接着之前上次的CAN通讯的介绍说,收个尾。

    我就自己接触学的大概记录一下吧,这次我将介绍一下CAN通讯的报文结构,主要针对数据帧的格式,各个部分简单的介绍。因为实际上协议底层都是已经实现好的,我们需要去应用发送报文什么的,在通讯中,数据帧就很重要了。

    CAN的报文格式

    在总线中传送的报文,每帧由7部分组成。CAN两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。(这里对于标准帧和扩展帧,可以这种理解就是扩展帧就是一个补充而已,可能在使用中标准帧优先级什么的不够用了,多出来的东西)。

    数据帧

    数据帧是使用最多的帧,结构上由7段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

    数据帧是由:帧起始-仲裁断-控制端-数据段-CRC段-CK段-帧结束构成。

    如图所示。


    数据帧类型及结构

    帧起始:

    由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。

    帧结束:

    由7个连续的隐形位组成。

    仲裁段

    这个又是数据帧中重要的东西了,因为它控制数据传输中的优先级,其实我理解的是它类似于IIC那些通讯的“地址”。
    CAN-bus是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。
    CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种(这个就标准帧与扩展帧的区别)。如图所示

    仲裁段

    如图所示CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。
    这里看一下上期的接线图,可以很好理解,CAN通讯上,对于各个节点,是一种“线与”的关系。公司培训的有两页PPT很形象,但是我没得办法搞到。总线上就是只要有某一个节点为显性信号(对应的是低电平),总线信号就为显性信号,但是如果要为隐形信号,就必须发送出来的所有节点信号必须为隐形信号(对应高电平)。也就是线与了,对比C语言的&理解呗。

    仲裁处理

    假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是(如图所示):


    仲裁机制
    从该分析过程得出结论是:帧ID值越小,优先级越高;(显性优先原则)
    对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理

    控制段

    控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成如图所示。
    重点关注一下IDE位就可以了,就是区分数据帧函数遥控帧。

    控制段格式

    数据段

    一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合如图27所示。


    数据段

    这里需要提醒注意一下数据传输中的格式

    inter:

    低位信号和低位存储字节对应,高位信息对应高位存储字节(从习惯上看起来是反的)

    motorola:

    低位信号和高位存储字节对应,高位信号对应低位存储字节(从习惯是看起来是顺)
    (可以去百度了深入了解,这里不展开了,很重要的,需要能够辨别哦)

    CRC段

    CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成如图所示。


    CRC段

    ACK段

    当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平如图所示。


    ACK段

    小结

    就记录这种多了,实际上东西比这种多的,我本次记录只是记录了自己在学的过程中接触到的,还有这些都是常用的,其他额外的大家可以去搜了学,如果需要资料的可以后台和我要,我手里面也有一些文档资料的。嗯,睡觉了,明天继续搬砖!

    欢迎大家关注我哦,微信搜索“那个混子”即可找到我哦!一个带给你快乐、技术、情感人生分享的混子!

    相关文章

      网友评论

          本文标题:CAN通讯学习下集

          本文链接:https://www.haomeiwen.com/subject/fxhsvltx.html