0%

通讯协议

通讯协议

CAN总线协议

1、CAN总线概述

CAN 总线(控制器局域网总线)是一种通信协议,最初由 Robert Bosch GmbH 在 1980 年代开发,主要用于减少汽车中电气布线的复杂性和成本。它允许多个电子控制单元(ECU)通过两根扭绞线(CAN 高和 CAN 低)进行高效通信,类似于人体神经系统连接不同部位。

CAN总线特征:

  • 两根通信线:CAN_H、CAN_L,线路少,无需接地。

  • 差分信号通信、抗干扰能力强

  • 高速CAN(ISO11898):125K-1Mbps,《40米

  • 低速CAN(ISO11519):10K-125kbps,《1KM

  • 11位/29位报文ID(标识符),用于区分消息功能,同时决定优先级,进行仲裁

  • 配置1-8字节的有效载荷,可以灵活的选择发送数据的字节数

  • 可以实现广播式和请求式两种传输方式

  • 应答、CRC校验、位填充、位同步、错误处理等特性

  • 协议为:串行、半双工、异步。

2、工作原理

CAN总线使用差分信号传输数据,就是通过测量两根线两端的电压差来传输信息。这种方式可以抵抗电磁干扰。

  • 物理层:由CAN高(通常为黄色),和CAN低(通常为绿色)组成,支持速率40kbit/s至1Mbit/s。
  • 数据链路层:消息以数据帧的形式进行传输,每个帧包括起始位、标识符(11或29位)、数据字段(最多8字节,CAN FD可达64字节)、循环冗余校验(CRC)和结束位。
  • 仲裁机制:如果多个节点发送消息,则根据标识符的优先级进行判断,优先级高的继续发送,优先级低的转为接收。

3、CAN总线的硬件电路

  • 每个设备通过CAN接收器挂载在CAN总线网络上。
  • CAN控制器引出的TX和RX与CAN总线的收发器相连,CAN收发器引出的CAN_H和CAN_L和TX、RX。
  • 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120欧的终端电阻
    • 终端电阻的作用:
      • 防止信号反射
        • 不加,在电平变换时,会产生振荡信号,使产生干扰。
        • 加上后,电平变换平稳。
      • 这个电阻和IIC的上拉电阻类似。当成一个弹簧,当输出0时,拉开弹簧;输出1时,松开。在电路中就是当输出1,就不去触碰CAN总线。
  • 低速CAN使用开环网络,CAN_H和CAN_L其中一端调价2.2k欧的终端电阻,另一端悬空。

4、CAN电平标准

  • CAN总线采用差分信号,即两线电压差代表传输的数据位。
  • 高速CAN规定:
    • 电压差为0V时,代表逻辑1(隐性电平)
    • 电压差为2V时,代表逻辑0(显性电平)
    • 总线回归隐形电平快,传输速度就快。
  • 低速CAN规定:
    • 电压差为-1.5V时,代表逻辑1(隐形电平)
    • 电压差为3V时,代表逻辑0(显性电平)
    • 逻辑0和1的差别大的原因是:
      • 传输距离远,干扰就越多。
      • 当逻辑0和1差别大时,就可以更好的判断逻辑0还是逻辑1.
    • 总线回归隐形电平慢,传输速度就慢。

5、CAN收发器-TJA1050(高速CAN)

  • 右上角是收发器的引脚图
    • 总共8根线
      • TXD连接主控芯片的CAN控制器RXD。
      • RXD连接主控芯片的CAN控制器TXD
      • VCC和GND提供5V的供电
      • CAN_H和CAN_L和CAN总线连接。
      • Vref:参考电压输出(可以不用)
      • s:高速模式或者静默模式。(可以不用)
  • 左边是芯片内部的结构:
    • 左边CAN_H和CAN_L和CAN总线相连。
    • 中间三角型:时刻检测CAN总线的电压差。
    • RXD接收数据:
      • 当CAN_H和CAN_L没有电压差时,输出到三角型为0.
      • 再经过左边两个场效应管的输出驱动器,当0过来时,上面导通,下面闭合,输出1.
      • 当CAN_H和CAN_L有电压差时,输出到三角型为1.
      • 再经过左边两个场效应管的输出驱动器,当1过来时,上面闭合,下面导通,输出0.
      • 有一个电平反转的作用。
    • TXD发送数据:
      • 当TXD想发送1时,后面的驱动器(DRIVER)会让后面两个场效应管断开,不去连接CAN总线。总线在外部终端电阻的作用下收紧,呈现默认的隐形电平。
      • 当TXD发送0时,后面的驱动器(DRIVER)会让后面两个场效应管打开,让其一端接VCC,一端接GND,呈现显性电平0的状态。
  • 物理层特性

6、CAN总线帧格式

CAN协议规定的5种类型的帧:

  • 数据帧
    • 发送设备主动发送数据(广播式)
    • 帧起始(SOF)
      • 要以显性0为开头。打破一帧空闲,开始传输数据。
    • 仲裁段()
      • 报文ID
        • 紫色代表即可是显性0,也可是隐形1.
        • 报文ID可以用于后面数据的信息,告诉接收方是干什么用的。
        • 还可以用于仲裁。
        • ID小的继续发送,大的停止发送。
      • RTR:
        • 占据一位。
        • 作用:远程请求位。用于区分数据帧还是遥控帧。
        • 在数据帧中,必须为显性0.
      • RTR在仲裁段的作用不止区分数据帧和遥控帧。还可以当数据帧和遥控帧的ID相同时数据帧的优先级大于遥控帧。
    • 控制段
      • IDE:
        • ID扩展标志位。
        • 用于区分标准格式,还是扩展模式。
          • 标准格式:固定显性0
          • 扩展模式:固定隐性1
      • r0:
        • 保留位
        • 必须为显性0.
        • 暂时不用
      • DLC:
        • 表示数据段的长度。
      • Data:
        • 数据段就是有效的载荷的数据。
    • CRC段
      • 校验算法。
      • CRC界定符:
        • 必须为隐性电平1.
    • ACK段
      • ACK槽:
        • 应答作用
      • ACK界定符:
        • 必须为隐性电平1.
    • 帧结束
  • 遥控帧
    • 接收设备主动请求数据(请求式)
    • 遥控帧无数据段,RTR为隐性电平1,其他部分和数据帧相同。
  • 错误帧
    • 某给设备检测出错误时向其他设备通知错误
    • 总线上所有设备都会监督总线上的数据,一旦发现位错误或者填充错误后者CRC校验错误或者格式错误或者应答错误,这些设备就会发送错误帧,破坏数据,同时终止当前发送设备。
  • 过载帧
    • 接收设备通知其未做接收准备
    • 当接收方收到大量数据而无法处理时,其可以发送过载帧,延缓发送放的数据发送,用于平衡总线的负载,避免数据丢失。
  • 帧间隔
    • 用于将数据帧及遥控帧与前面的帧进行分离

位填充:

  • 在发送数据帧之前,要进行位填充。
  • 填充规则:
    • 发送方每发送5个相同电平后,自动追加一个相反的电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原数据。
  • 填充的作用:
    • 增加波形的定时信息,利于接收方执行”再同步”,防止波形长时间无变化,导致接收方不能精确的掌握数据采样的时机。
    • 将正常的数据与“错误帧“和过载帧区分开,标志着错误帧和过载帧的特性。
    • 保持CAN总线再发送正常数据流时的活跃状态,防止被误认为总线空闲。

波形示例

  • 标准数据帧:
  • 扩展数据帧:
  • 标准遥控帧:

接收方数据采样

  • CAN总线上没有时钟线,总线上所有设备通过约定波特率的方式确定每一个数据位的时长。
  • 发送方以约定的位时长每隔固定时间输出一个数据位
  • 接受方以约定的位时长每隔固定的时间采样总线上的电平,输入一个数据位
  • 理想状态下,接收方能依次采样到发送方发出每个数据位,且采样点位于数据位的中心附近。

位时序

  • 为了灵活的调整每个采样点的位置,使采样点对齐数据位中心附近、CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(ss)、传播时间段(PTS)、香味缓冲段(PBS1)、相位缓冲段2(PBS2),每个段都有若干个最小时间单位(TQ)构成。
  • ss=1Tq
    • 同步段是电平发生变换的期间,在ss范围内,则代表数据位同步是正确的。
  • PTS=1-8Tq
    • 传播时间段是给数据传输一点时间,在电平变化后,传输过程需要时间才能传输到位。
  • PBS1=1-8Tq
    • PBS1和PBS2的中间位置是采样位置。调整两个的时间,可以稍微的改变采样点的位置在前,还是在后。
  • PBS2=2-8Tq

硬同步

  • 每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文(ID),其他设备(接收方)收到SOF(帧起始)的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步。
  • 硬同步只在帧的第一个下降沿(SOF下降沿)有效。
  • 经过硬同步后,若发送方和接收方的时钟没有误差,则后续的所有数据位的采样点都是在数据中心附近。

再同步

  • 若发送方或者接收方的时钟存在误差,随着数据的发送,误差会越来越大,数据位的边沿逐渐偏移SS段,则此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段,或者缩短PBS2段,以调整同步。
  • 再同步可以发生咋i第一个下降沿之后的每一个数据位跳变边沿。

7、仲裁

  • CAN总线只有一对差分信号线,同时间只能有一个设备操作总线发送数据。

  • 资源分配规则:

    • 先占先得:

      • 若当前已经有设备发送数据帧或遥控帧,则其他设备就不能在同步发送数据帧或者遥控帧,但是可以发送错误帧或者过载帧破坏当前数据。
      • 任何设备检测到连续的11个隐性电平(逻辑1),即认为总线空闲,只有在总线空闲时,设备才能发送数据帧和遥控帧。
      • 一旦有设备正在发送数据帧或者遥控帧,总线就会变为活跃状态,必然不会出现连续的11隐性电平,其他设备也不会破坏当前发送。
      • 若总线活跃时,其他设备有发送需求,则需要等待总线空闲,才能执行发送请求。
    • 非破坏式仲裁

      • 若多个设备的发送需求同时到来,或者等待上一个结束而同时到来,则CAN总线协议会根据ID号(仲裁段)惊醒非破坏式仲裁,ID小的优先级高,ID小的先得到总线的控制权,而ID大的继续等待。

      • 实现非破坏是仲裁的两个要求;

        • 线与特性:总线上任何一个设备发送显性电平0时,总线呈现显性电平0状态,只有当所有设备都发送隐性电平时,总线才会呈现隐性电平1状态。

          即:0 & 任何 = 0;1 & 1& 1=1.

        • 回读机制:每个设备发送一个数据位后,都会读回总线当前的电平状态,以确定自己发送出去的电平是否真的发送出去了。根据线与特性,发送0,则读回0,发哦是那个1,则读回不一定是1。

UART

I2C

SPI