This is my study note of CAN.

概述

CAN是Controller Area Network的缩写,主要用于汽车领域。有点可以减少汽车的线束,减少布线占的空间和车的重量。

协议及组成

种类

  • ISO11898:针对通信速率为125Kbps~1Mbps的高速通信标准(闭环)
  • ISO11519:针对通信速率为125Kbps以下的低速通信标准(开环)

组成

  • CPU和CAN控制器集成在一起,再外接CAN收发器(stm32采用的方式)
  • CPU和CAN控制器分开,使用时需要配置CAN接口电路
    1
    2
    CAN收发器用于TTL电平与差分电压信号相互转换的,TTL电平即单片机引脚直接提供的电平,逻辑0代表低电平,逻辑1代表高电平,
    差分电压信号则为固定的电压值。

通信

CAN通信是通过两根线完成的:

  • CAN_High
  • CAN_Low
    1
    2
    3
    CAN_High - CAN_Low < 0.5v时为隐性的,表现为“逻辑1”,即高电平。
    CAN_High - CAN_Low > 0.9v时是显性的,表现为“逻辑0”,即低电平。
    (CAN总线使用的是差分信号,差分信号稳定性更好,CAN_High变化时,CAN_Low也会发生同等级的变换)
    显性(0)的优先级比隐性(1)高,在总线上显性电平具有优先权,只要有一个节点输出显性电平,总线上即为
    显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平

通信过程

  • 空闲状态
    1
    2
    当总线上的上出现连续的11位隐性电平(两根线电压差小于0.5V),表示总线就处于空闲状态。由于显性、隐性优先权的关系导致,需要
    所有的主机连续发送11个隐性电平才会被认为是空闲状态。
  • 数据传输
    1
    2
    每次发送数据时都会监听总线的状态,如果总线为空闲时,会立即向总线上发送自己的数据,这个数据里不仅有数据还有本身ID信息以及其他
    控制命令。

帧的分类

  • 数据帧:用于节点向外传送数据
  • 遥控帧:用于向远端节点请求数据
    1
    与数据帧相似,没有数据帧中的数据段。
  • 错误帧:用于向远端节点通知校验错误,请求重新发送上一个数据
    1
    2
    3
    4
    5
    6
    7
    8
    1.错误标志
    ①主动错误标志:6个位的显性位
    ②被动错误标准:6个位的隐性位
    2.错误界定符
    由8个位的隐性位构成
    3.错误标志之后还有0~6个错误标志重叠部分
    处于主动错误状态的节点检测到错误时会发送主动错误标志,6个连续显性位会违反位填充规则和位场的固定形式,进而造成其它节点也检测
    到错误并发送错误标志。所有节点所发送的显性序列叠加组成错误标志重叠部分,错误标志重叠部分的长度在6-12个显性位之间。
  • 过载帧:用于通知远端节点,本节点尚未做好接收准备
    1
    2
    3
    4
    5
    6
    (1) 过载标志
      6 个位的显性位。
      过载标志的构成与主动错误标志的构成相同。
    (2) 过载界定符
      8 个位的隐性位。
      过载界定符的构成与错误界定符的构成相同。
  • 帧间隔:用于将数据帧及遥控帧与前面的帧分离开来
    1
    2
    3
    4
    5
    6
    7
    8
    (1) 间隔
      3 个位的隐性位。
    (2) 总线空闲
      隐性电平,无长度限制(0 亦可)。
      本状态下,可视为总线空闲,要发送的单元可开始访问总线。
    (3) 延迟传送(发送暂时停止)
      8 个位的隐性位。
      只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

仲裁机制

1
2
显性的优先级高于隐性,即仲裁比较的就是哪个ID中的0多,0最多的那个就可以获得发送权,比如 000000 00010 就比 000000 00011 的优先级
要高,仲裁的过程由硬件实现。

位时序

1
2
3
CAN总线通讯协议的每一个数据帧可以看作一连串的电平信号,每一个电平信号代表一位(一个字节8位的位),所以一帧中包含了很多个位,由
发送单元在非同步的情况下发送的每秒钟的位数称为位速率。 一位又分为4段, 同步段(SS)、传播时间段(PTS)、相位缓冲段 1(PBS1)、
相位缓冲段 2(PBS2)。分解后最小的时间单位是 Tq,而一个完整的位由 8~25 个 Tq 组成。
  • SS段:同步段,当总线出现起始信号时,其他控制器根据总线上SS段的下降沿进行时序调整。
  • PTS段:传播时间段,用于补偿网络的物理延时时间,至少要为延时时间和的两倍
  • PBS1段:相位缓冲段,当前节点SS段超前于总线SS时,可以延长该段,匹配时序。
  • PBS2段:相位缓冲段,当前节点SS段滞后于总线SS时,可以减少该段,匹配时序。
    1
    2
    SJW (reSynchronization Jump Width):重新同步补偿宽度,即在重新同步的时候,PBS1 和 PBS2 段的允许加长或缩短的时间长度,SJW 加大
    后允许误差加大,但通信速度下降。

同步方式

  • 硬同步
    1
    将各节点时序强行与总线SS段处于同一起跑线,用于对齐。
  • 重新同步
    1
    通过延长 PBS1 段或缩短 PBS2 段,来获得同步。

位填充

1
为防止突发错误而设定,CAN协议中规定,当相同极性的电平持续五位时,则添加一个极性相反的位。

错误的种类

Alt text