嵌入式学习笔记 - CAN总线
一 CAN总线物理结构
以闭环网络为例,闭环网络速度快可达1M,传输距离近通常最长不超过40米,开环网络传输距离远通常可达km,速度100kb左右
二 CAN总线使用差分信号传输:
三 差分信号的优点:
四 CAN总线上每一个数据位的结构分解
CAN总线上每一个数据位被分解为4个段,SS段,PTS段,PBS1段,PBS2段
Tq是CAN总线上各节点商量好的一个值,各节点之间是一样的,比如都为1us,
那么如下的示例中,CAN总线上每一个逻辑电平包含19位,也就是包含19个Tq,然后每个节点根据与总线的相位差可以调整每一个逻辑电平的Tq的数量
五 CAN总线同步
CAN总线虽然有两根传输线,但是由于是差分线,实际上等效于只有一根线在传输数据,也就是各节点之间没有时钟信号线,他们按照约定的时钟(相同的Tq)进行信号传输,各自都按照这个时钟在运行着,当总线发出起始信号时,节点便调整自己的相位使自己的相位与总线一致,造成这个相位差的原因可以是多方面的,收发器不同的物理结构等,同步方式有两种硬同步以及重新同步如下图:
硬同步只能用于在帧起始位。
六 CAN 总线怎么处理低优先级数据帧
上图为数据帧的结构,CAN总线通过仲裁段判定数据的优先级,
以下是Deepseek的回答,非常详细与清楚:
低优先级帧的仲裁失败处理
-
逐位仲裁与退出发送
- 当多个节点同时发送数据时,低优先级帧在ID逐位比较中因发送隐性位(逻辑1)而检测到总线电平为显性位(逻辑0),立即退出发送并转为接收模式27。
- 例如:ID为
0x200
(二进制001000000000
)的帧与ID为0x100
(二进制000100000000
)的帧竞争中,前3位001
与000
对比时,0x200
在第3位退出发送78。
-
自动重传机制
- 仲裁失败的节点通过硬件自动缓存原始数据,并在检测到总线空闲时立即尝试重传,无需软件干预56。
- 重传次数受硬件错误计数器限制,若累计错误超阈值则节点进入总线关闭状态8。
低优先级帧的发送机会保障
-
总线空闲检测
- CAN总线空闲定义为连续11位隐性电平(逻辑1)3,低优先级帧在总线空闲时可直接发起发送5。
- 若此时其他节点同时发送,则再次触发仲裁流程78。
-
动态优先级反转规避
- 尽管CAN协议本身无主动优先级反转处理机制,但通过以下策略规避:
- ID分配策略:将需要实时响应的关键功能分配更小ID值(如ABS制动
0x060
优先级高于车窗控制0x3E0
)17。 - 负载均衡:限制高优先级帧的发送频率,避免长期占用总线6。
- ID分配策略:将需要实时响应的关键功能分配更小ID值(如ABS制动
- 尽管CAN协议本身无主动优先级反转处理机制,但通过以下策略规避:
低优先级帧的延迟优化
-
错误帧中断与恢复
- 低优先级帧在传输中若发生错误(如CRC校验失败),发送节点立即发送错误帧(全显性位)强制终止当前传输,自身进入重同步状态后重新发送48。
- 错误帧具有最高优先级,可打断正在传输的低优先级帧8。
-
时间触发调度(协议扩展)
- 在时间敏感型网络(如CAN FD TSN)中,通过时间槽分配为低优先级帧预留固定发送窗口,绕过仲裁机制直接传输1。
- 例如:新能源车BMS的周期数据帧(ID:
0x18FF50E5
)被分配至特定时间槽,不受实时仲裁影响1。
七 STM32 CAN 控制器筛选器工作模式总结
CAN的筛选器可以工作在16位宽或者32位宽模式,
CAN的筛选器可以工作在标识符屏蔽位模式或者标识符列表模式。
最终可以总结为以下表格: