CAN通信协议

  • CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号,即振幅相等,相位相反的形式进行通讯。

物理层

  • 按照连接方式,可以分为闭环总线连接和开环总线连接

  • 闭环总线连接遵循ISO11898 标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps, 总线的两端各要求有一个“120 欧”的电阻。

    在这里插入图片描述

  • 开环总线连接遵循 ISO11519-2 标准的低速、远距离“开环网络”,它的最大 传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上 各串联有一个“2.2 千欧”的电阻。

    在这里插入图片描述

  • 控制器和收发器之间传递的是普通的逻辑信号,收发器和总线之间传递的是差分信号,收发器一个作用就是完成逻辑信号和差分信号的转换

  • CAN 协议中对它使用的 CAN_High 及 CAN_Low 表示的差分信号做了规定

    在这里插入图片描述

  • 在 CAN 总线中,必须使它处于隐性电平 (逻辑 1) 或显性电平 (逻辑 0) 中的其中一个状态。

协议层

  • CAN 属于异步通讯,没有时钟信号线,其会像串口一样,以约定的波特率进行传输
时序图

在这里插入图片描述

  • 图中的总线电平为,差分信号算出后的,总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个 Tq,就可以 确定 CAN 通讯的波特率。
  • SS(SYNC SEG)段为同步段,固定1Tq,在SS段内检测到总线电平的跳变,则表示该节点与总线的时序是同步的,
  • PTS(PROP SEG)传播时间段,这个时间段是用于补偿网络的物理延时时间。是总线上输入比 较器延时和输出驱动器延时总和的两倍。PTS 段的大小可以为 1~8Tq。
  • PBS1和PBS2(PHASE SEG1/2),为相位缓冲段,主要用来补偿边沿阶段的误差,长度在重新同步时可以进行相应的增加或缩短,PBS1仅进行加长,PBS2仅进行缩短,PBS1 段的初始大小可以为 1~8Tq,PBS2 段的初始大小可以为 2~8Tq
同步方式
  • 当在SS段没有检测到总线电平跳变时,说明该节点和总线上的时序是不同步的,需要进行同步,同步的方式可以分为硬同步和重新同步
硬同步
  • 某个 CAN 节点通过总线发送数据时,它会发送一个表示通讯起始的信号 (帧起始信号),该信号是一个由高变低的下降沿。而挂载到 CAN 总线上的通讯节点在不发送数据时,会时刻检测总线上的信号。

  • 当总线出现帧起始信号时,某节点检测到总线的帧起始信号不在 节点内部时序的 SS 段范围,所以判断它自己的内部时序与总线不同步,因而这个状态的采样点 采集得的数据是不正确的。所以节点以硬同步的方式调整,把***自己的位时序中的 SS 段和后面的部分都平移至总 线出现下降沿的部分***,获得同步

    在这里插入图片描述

重新同步
  • 硬同步只是当存在帧起始信号时才起作用,如果在一帧很长的数据内,节点信号与总线信号相位有偏移时,这种同步方式就无能为力了,因此引出了重新同步

  • 重新同步利用普通数据位的高至低电平的跳变沿来同步 (帧起始信号是特殊的跳变沿)

  • 重新同步与硬同步方式相似的地方是它们都使用 SS 段来进行检测,同步的目的都是使节点内的 SS 段把跳变沿包含起来。

  • 重新同步可以分为相位超前和相位滞后两种情况,首先超前和滞后均是指当前节点相对总线的时序,其次在对PBS1段仅能进行增加操作,对PBS2仅能进行减操作,进行加操作和减操作时,有个加减的最大值被称为SJW,SJW过大会导致总线的通信效率降低

  • 相位超前

    在这里插入图片描述

  • 相位滞后

    在这里插入图片描述

报文格式
  • CAN 一共规定了 5 种类型的帧

    在这里插入图片描述

数据帧
  • 数据帧格式

    在这里插入图片描述

  • SOF 段 (Start Of Frame),译为帧起始,帧起始信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其它节点通过帧起始信号的电平跳变沿来进行硬同步

  • 仲裁段:总线会根据仲裁段的内容决定哪个数据包能被传输,仲裁段的内容主要为本数据帧的 ID 信息 (标识符),CAN 协议不对挂载在它之上的节点分配优先级和地址,对总线的占有权是由信息的重要性决定的,即对于重要的信息,我们会给它打包上一个优先级高的 ID,使它能够及时地发送出去

    • 报文的优先级,是通过对 ID 的仲裁来确定的。根据前面对物理层的分析我们知道如果总线上同时出现显性电平和隐性电平,总线的状态会被置为显性电平,CAN 正是利用这个特性进行仲裁。
    • 当它们发送报文时,若首先出现隐性电平,则会失去对总线的占有权,进入接收状态。
    • 节点单元 1 发送的为隐性电平,而此时节点单元 2 发送的为显性电平,由于总线的“线与”特性使它表达出显示电平
    • CAN控制器大多具有根据 ID 过滤报文的功能,它可以控制自己只接收某些 ID 的报文。
  • RTR 位 (Remote Transmission Request Bit),译作远程传输请求位,它是用于区分数据帧和遥控帧的,当它为显性电平时表示数据帧,隐性电平时表示遥控帧。

  • IDE 位 (Identifier Extension Bit),译作标识符扩展位,它是用于区分标准格式与扩展格式,当它为显性电平时表示标准格式,隐性电平时表示扩展格式。

  • SRR 位 (Substitute Remote Request Bit),只存在于扩展格式,它用于替代标准格式中的 RTR 位。由于扩展帧中的 SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。

  • 在控制段中的 r1 和 r0 为保留位,默认设置为显性位。它最主要的是 DLC 段 (Data Length Code),译为数据长度码,它由 4 个数据位组成,用于表示本报文中的数据段含有多少个字节,DLC 段表示的数字为 0~8

  • 数据段即原始的数据信息,MSB(高位先行)

  • CRC :为了保证报文的正确传输,CAN 的报文包含了一段 15 位的 CRC 校验码,一旦接收节点算出的CRC 码跟接收到的 CRC 码不同,则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。

  • ACK:应答位,类似与I2C,在 ACK 槽位中,发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答

  • 帧结束,7个隐性电平

  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值