CAN基础
物理层与差分通信
CAN是靠can_h和can_l两根线的压差来表达0和1的
如何表达1:当两个线没有电压差的时候,就是1的意思,
如何表达0:当两个线有电压差的时候,就是0的意思
位时序

采样点在两个相位缓冲段之间采样,保证采样的稳定
当检测到SOF,立即设置自己的 Sync_Seg(同步段),这是硬同步
以同步段为预期,与bit边沿对比,做再同步
如果跳变边沿滞后,相位缓冲1就增加一点
如果跳变边沿提前,相位缓冲2后边砍掉,提前进入下一个CAN位时间
不过对相位缓冲的设置受SJW限制,SJW=2则最多增减两个tq(时钟周期×分频系数)
从差分信号到逻辑电平,需要一个CAN收发器翻译为TTL电平,发送则相反
为了解决压摆率和阻抗匹配,需要加一个终端电阻,参考终端电阻
如果还是对抗干扰不满意:信号线防干扰
帧类型
CAN总线特性
多主从:
在总线空闲状态(逻辑1)下,任意节点都可以向总线上发送信息 。另外:最先向总线发送信息的节点获得总线的发送权;当多个节点同时向总线发送消息时,所发送消息的优先权高的那个节点获得总线的发送权。
这里当一个节点发送完时,可能有多个节点同时发送信息,这时候是优先级的作用体现出来了
错误检测与重发
总线仲裁
当节点同时发送的时候,所有的节点也会进行回读(节点在向总线上发送报文的过程中,同时也对总线上的二进制位进行“回读”,对比该节点发出的二进制位与总线上当前的二进制位是否一致,就可节点数据是否被正确接收。)当发1收0则优先级较低,停止发送
前提: 前 11 位基础 ID 完全相同。
铁律: 0 (显性) 永远秒杀 1 (隐性)。
1. 终极优先级排名
标准数据帧 > 标准遥控帧 > 扩展数据帧 > 扩展遥控帧
RTR (数据/遥控开关) SRR (扩展帧专属卧底)
IDE (长短 ID 开关)
报文过滤
MCU里设置CAN控制器,里面有个验收滤波器,当ID传进来,会与设定的掩码逐位匹配,不对的直接过滤掉
CAN FD
- 仲裁段与确认段(低速)
- 数据段(高速)
- 数据载荷从 8 字节扩展至 64 字节
Intel 格式(小端)
Motorola 格式(大端)
DBC(DataBase CAN) 是由德国 Vector 公司制定的一种标准文本文件(扩展名为 .dbc),用于定义整车或设备系统的 CAN 通信协议。