CAN-bus控制器局域网络总线

引言

CAN总线知识积累,2024 SRTP 面向CAN总线的入侵检测系统

CAN总线系统结构

CAN总线网络拓扑结构采用总线式结构。

就是把所有的节点连接在一条线上进行通信,拓扑图类似于零线and火线?

CAN总线节点结构

CAN总线上的每个节点大体上可分为以下三个结构:

  • 应用程序:接收总线传输的数据并执行相应的功能
  • CAN收发器:直接与总线的高线与低线相连,用于将差分信号转化为逻辑值0,1
  • CAN控制器:接收控制单元中微处理器发出的数据,处理数据并传给CAN收发器。或接收CAN收发器传回的数据。
    • 这里CAN控制器和CAN收发器通过两条线路向量:
      • CAN_Tx : 负责当前节点向CAN总线传输数据
      • CAN_Rx :负责从CAN总线上接收数据,回传给控制器

CAN总线电气特性

CAN结点通过CAN_High和CAN_Low两根线接入CAN总线网络。(习惯性把他们叫做高线和低线)

CAN收发器将CAN_Tx输出的逻辑值0,1转化为电气上的差分信号,通过高线和低线向总线输出。同时将总线上的差分信号转换为逻辑值0,1,通过CAN_Rx向CAN收发器传输。

关于高线和低线的差分信号与0,1值之间的关系如图:(ISO11898标准)

逻辑值 CAN_High CAN_Low 差分电压
0 3.5V 1.5V 2V
1 2.5V 2.5V 0V
  • CAN收发器在接收到总线上的高线和低线的信号时,计算高线和低线的差分电压(电压差),然后转化为相应的逻辑值。

在真实的物理环境下,CAN总线呈双绞线,即高线和低线拧成麻花。这样在收到外界干扰的时候,高线和低线的电压会一起变化(一起升高,或者一起降低),二者的电压差不会变,在一定程度上保证了总线传输的正确性。

根据表中的数据,我们称差分电压为0V的位的显性位, 差分电压为2V的位为隐性位

CAN结构系统数据格式

CAN-bus的通信帧共分为五种:数据帧,远程帧,错误帧,过载帧和帧间隔。

帧类型 描述
1 数据帧 用于发送节点向接收节点传送数据的帧。(发送)
2 远程帧 用于接收节点向具有相同ID的发送节点传送数据的帧。(回传)
3 错误帧 用于当检测出错误时向其他节点通知错误的帧。(报错)
4 过载帧 用于接收节点通知其尚未做好准备的帧。(等待)
5 帧间隔 用于将数据帧及远程帧与前面的帧分隔开来。

帧结构如下图所示:

  • 帧起始:由一个显性位构成,(逻辑值1,差分电压0)标志帧的开始
  • 帧结束:由七个隐性位构成,(逻辑值0,差分电压2)标志帧的结束
  • CRC段:为检查帧传输错误的段,由15个位的CRC值和1个位的CRC界定符构成(界定符隐性
    • 标准格式与扩展格式相同。根据帧的其他部分通过多项式生成,用于检测帧在传输的过程中有没有发生错误。计算范围包括帧起始,仲裁段,控制段,数据段
    • 接收方在接受数据帧后,用相同的方式计算CRC值并进行比较,如果不一致生成错误帧请求重新发送
  • ACK段:包含ACK槽位,ACK界定符两个位(界定符保持隐性)
    • 发送单元:两个位的隐性位(发送ACK
    • 接收单元:接收到正确消息,在ACK槽位发送显性位,通知发送单元正常接收结束。(返回ACK
  • 数据段:8个bytes(好少好抠啊),从最高位开始输出(大端格式
  • 控制段:由6个位构成,表示数据段的字节数(0-8)
    • 扩展格式:保留位r0, r1必须全是显性
    • 数据长度码(DLC):数据的字节数必须为0-8字节
  • 仲裁段:表示数据帧优先级的段,标准格式与扩展格式的构成有所不同,均禁止高7位为隐性
    • RTR位:用于区分数据帧和遥控帧
      • 显性电平为数据帧,隐性电平为遥控帧
    • IDE位:标识符扩展位,用于区分标准格式与扩展格式。
      • 显性电平是位标准格式
      • 隐性电平时为扩展格式
    • SRR位:只存在于扩展格式,代替标准格式中的RTR位。
      • 由于扩展帧中的SRR位固定为隐性,RTR在数据帧中为显性。两个相同ID的标准格式与扩展格式,标准格式的优先级更高。
    • ID段:标准格式ID有11位,扩展格式的ID有29位。均禁止高7位为隐性
      • ID越小,消息优先级越高!

CAN总线数据传输规范

CAN总线节点上的节点发送数据是以报文的形式广播给网络中所有节点。收发器接收到数据就把数据传送给控制器,再由控制器检查判断是不是所需数据。不是则忽略。

  • 网络上任何一个节点在任何时候都可以发送数据
  • 多个节点发送数据,优先级低主动退出发送
  • 短帧结构,每帧数据信息为0~8字节(具体用户定义),对数据编码而不是地址编码
  • CAN每帧都有CRC校验和其他检验措施,严重错误的情况下具有自动关闭输出的功能

CAN总线上的各个节点同时占有CAN主线,也可以理解为,这条电缆单位时间只能传输一条数据,现在假如A要向B发送一条消息,A就会通过某种方式把总线抢到自己手里,总线上只能跑A发送的这条消息,同时,所有的其他的节点也都会接收到这条消息。