CAN协议
概述
CAN总线是异步,半双工,信号差分(非单端)
CAN总线硬件电路
每个设备通过 CAN 收发器 (如 TJA1050 ) 挂载在 CAN 总线网络上, CAN 控制器(即芯片里的 CAN 控制器)引出的 TX 和 RX 与 CAN 收发器 相连, CAN 收发器引出的 CAN_H 和 CAN_L 分别 与 总线的 CAN_H 和 CAN_L 相连。
高速 CAN 使用闭环网络, CAN_H和CAN_L的两端添加120 Ω的终端电阻(终端电阻可以①抑制信号反射,使信号平稳;②在空闲时收紧信号,使得高低两条线的电压一致,即为 逻辑 “ 1 ”) 。
CAN通信-物理实现
CAN_H/CAN_L 与 TX/RX 与逻辑的对应关系如左图,右图为不同标准对 CAN_H 和 CAN_L 电压差的规定:
• 当某个ECU想发出逻辑0时,TX引脚向CAN收发器发出低电平,CAN收发器会将CAN_H拉高,将CAN_L 拉低。总线上的其他 CAN 收发器就可以通过将 CAN_H 和 CAN_L 做差判断出当前为逻辑 0 ,然后通过 RX 引脚向 ECU 发送低电平。
• 同理,逻辑 1在CAN总线上表现为CAN_H等于CAN_L 。
• CAN 通讯的速度(通讯速度由通讯各方约定):
高速CAN:ISO11898:125k-1Mbps,<40m (常用)
低速CAN:ISO11519:10k-125kbps,<1km
CAN 总线 - 双绞线
为什么采用双绞线?
• 为什么采用差分形式 : 抗干扰能力强。当外界有强电场或电磁干扰时,由于两根信号线受到的影响基本相同,因此它们之间的电压差(即差分信号)受到的影响较小。这样,即使在恶劣环境下, CAN 总线也能保持较高的通信可靠性。
• 在差分传输应用中,双绞线不仅可以降低自身对外界的干扰,同时可以消除与外界干扰源的电容耦合和感应耦合。
CAN总线帧格式
接下来我们主要讲述数据帧,即各ECU广播式地向总线上发送自己的信息,这也是为什么我们能周期性地获得比如五门一盖、座椅占位状态、整车电源模式等报文(Message)。
• SOF ( Start of Frame ):帧起始,表示后面一段波形为传输的数据位。• ID ( Identify ):标识符,区分功能,同时决定优先级(根据仲裁规则, ID 小的优先发送)。• RTR ( Remote Transmission Request ):远程请求位,区分数据帧和遥控帧( 0 表示数据帧, 1 表示遥控帧)。• IDE ( Identifier Extension ):扩展标志位,区分标准格式和扩展格式( 0 表示标准格式, 1 表示拓展格式)。• r0/r1 ( Reserve ):保留位,为后续协议升级留下空间,比如 r1 被用作 IDE 位。• DLC ( Data Length Code ):数据长度,指示数据段有几个字节。