CAN总线协议

参考百度百科,和网络视频介绍,记录收集下的学习笔记,后面在扩展知识笔记,当前阶段只是初步了解CAN总线的原理构成。

特点

  • 网络节点不分主从

  • 差分信号(逻辑0,两线有压差为2V;逻辑1,两线压差为0V)

  • 差分信号和双绞线,都有抗干扰的作用。当一点收到干扰时,压差变动相等,对信号而言,等于无变化。

  • 理论传输距离,10Km(5kbps以下),40m(1Mbps)

协议

约定:下文中的高低电平,仅仅是对CAN总线协议的逻辑1,0来说的,并不是实际单片机的引脚的电压。在百度百科中,他们将代表CAN协议逻辑“1”的称呼为“隐性电平”,逻辑“0”的称呼为“显性电平”。1字节 = 8位。

四种帧

数据帧:

帧起始 仲裁域 控制域 数据域 CRC域 应答域 帧结尾

错误帧:

有两种形式的错误标志。

①激活(Active)错误标志。它由6个连续显性位组成。

②认可(Passive)错误标志。它由6个连续隐性位组成。

远程帧:

  远程帧也有标准格式和扩展格式,而且都由6个不同的位域组成:帧起始、仲裁域、控制域、CRC域、应答域、帧结尾。与数据帧相比,远程帧的RTR位为隐性,没有数据域,数据长度编码域可以是0~8个字节的任何值,这个值是远程帧请求发送的数据帧的数据域长度。当具有相同仲裁域的数据帧和远程帧同时发送时,由于数据帧的RTR位为低电平,所以数据帧获得优先。发送远程帧的节点可以直接接收数据。

过载帧:

由两个区域组成:过载标识域及过载界定符域。下述三种状态将导致过载帧发送:

  1. 接收方在接收一帧之前需要过多的时间处理当前的数据(接收尚未准备好);

  2. 在帧空隙域检测到显性位信号;

  3. 如果CAN节点在错误界定符或过载界定符的第8位采样到一个显性位节点会发送一个过载帧。

数据帧(标准格式)
  1. 帧起始(1位)

    • 固定为低电平,象征着CAN传输的开始。
  2. 仲裁域(12位)

    • ID

      ID,器件节点象征,以及优先级的表示。优先出现0的优先级高,就是ID数越小优先级越高。

    • RTR(远程发送请求)

      数据帧必须为低电平,远程帧必须为高电平。它是区别数据帧和远程帧的标志。

  3. 控制域(6位)

    • IDE(标志符扩展位)(1位)

    • R0(保留位)(1位)为协议后续发展,保留下位数。

    • DLC(数据长度码)(4位)它控制着后面的数据域,允许的数据长度值为0~8字节。

  4. 数据域(((DLC+1)*4)位)

    • 发送缓冲区中的数据按照长度代码指示长度发送。对于接收的数据,同样如此。它可为0~8字节,每个字节包含8位,首先发送的是MSB(最高位)。
  5. CRC校验码域(16位)

    • CRC域(15位)
    • CRCR边界符(1位)
  6. 应答域(2位)

    • 2个数据位,第一位称为应答间隙,第二位称为应答界定。当发送方,发送信息时,这两位全为高电平。当接受方,收到信息,并通过CRC校验后,会将应答间隙改写为低电平,并发送总线,以让发送方检测到有消息应答。因此,发送节点将一直监视总线信号已确认网络中至少一个节点正确地接收到所发信息。
  7. 帧结束域(7位)

    • 每一个数据帧或远程帧均由一串七个隐性位的帧结束域结尾。这样,接收节点可以正确检测到一个帧的传输结束。
数据帧(扩展格式)

扩展格式基本和标准格式一样,下面仅举例出不同之处

  1. 仲裁域

    • 标准格式:ID(11位) + RTR(1位)
    • 扩展格式:ID(11位) + SRR(1位) + IDE(1位) + ID(18位) + RTR(1位)
  2. 控制域

    • 标准格式:IED(11位) + R0(1位) + DLC(4位)
    • 扩展格式:R1(1位) + R0(1位) + DLC(4位)

你可能感兴趣的:(杂谈理解,嵌入式硬件,mcu)