CAN总线原理
一、基础信息
CAN总线为异步、半双工通信,线路分为闭环与开环,常见模式为闭环线路,采用双绞线、差分信号形式
隐形状态为1,CAN_H和CAN_L压差为0v,所有设备不使能;
显性状态为0,CAN_H和CAN_L压差为2v,分别为3.5v和1.5v,设备使能,因此在总线仲裁的时候0状态优先级高;
二、仲裁机制
1、服从先来后到,只有连续监测到11个高电平的时候才可以发送数据,因此需要在消息帧的数据段进行位填充,避免其他设备误认为总线空闲;
2、当有多个设备同时发送数据时,启用仲裁机制,最先发送0最多的设备获胜,该机制能够在不破换有效数据的情况下完成仲裁,具有较高的效率;
三、帧结构
CAN总线的帧结构包括标准帧和扩展帧两种形式,由1位标志位IDE判断。帧结构包含以下7部分(场):
| 场序列 | 字段名 | 长度 | 说明 |
| 1 | 帧起始(SOF) | 1 bit | 一个显性位('0'),表示一帧开始,用于同步。 |
| 2 | 仲裁场 | 11bit / 29 bit | 决定报文优先级和帧类型,包含ID和关键控制位。 |
| 3 | 控制场 | 6 bit | 包含数据长度代码(DLC),指明数据场有多少个字节。 |
| 4 | 数据场 | 0-8 byte | 实际要传输的数据,长度由DLC指定。 |
| 5 | CRC场 | 16 bit | 循环冗余校验码,用于校验传输是否正确。 |
| 6 | ACK场 | 2 bit | 发送器发出隐性位,任何正确接收的节点用显性位应答。 |
| 7 | 帧结束 | 7 bit | 7个隐性位,表示帧结束。 |
其中ACK的总线权限短暂交由接受设备接管,由接收设备发送标志位0来确认收到,因此ACK标志位前后各有一个空闲位用于权限交接,CRC场的最后一位和ACK场的最后一位。