引言
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总线电气特性
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越小,消息优先级越高!
- RTR位:用于区分数据帧和遥控帧
CAN总线数据传输规范
CAN总线节点上的节点发送数据是以报文的形式广播给网络中所有节点。收发器接收到数据就把数据传送给控制器,再由控制器检查判断是不是所需数据。不是则忽略。
- 网络上任何一个节点在任何时候都可以发送数据
- 多个节点发送数据,优先级低主动退出发送
- 短帧结构,每帧数据信息为0~8字节(具体用户定义),对数据编码而不是地址编码
- CAN每帧都有CRC校验和其他检验措施,严重错误的情况下具有自动关闭输出的功能
CAN总线上的各个节点同时占有CAN主线,也可以理解为,这条电缆单位时间只能传输一条数据,现在假如A要向B发送一条消息,A就会通过某种方式把总线抢到自己手里,总线上只能跑A发送的这条消息,同时,所有的其他的节点也都会接收到这条消息。