原文:一口气从零读懂CAN总线以及应用_can fd mailbox-CSDN博客
在汽车领域应用
汽车ECU(电子控制单元)
总线技术
点对点通信
总线通信
CAN网络的消息是广播式的,即在同一时刻网络上所有节点侦测的数据是一致的,它是一种基于消息广播模式的串行通信总线。
连接在CAN总线上的设备叫做节点设备(CAN Node),CAN网络的拓扑一般为线型。线束最常用的是双绞线,线上传输为对称的差分电平信号
差分线CAN_High和CAN_Low
高速CAN总线最高信号传输速率为1Mbps,支持最长距离40m
CAN收发器的作用则是把逻辑信号转换为差分信号。
在差分信号中,逻辑0和逻辑1是用两根差分信号线的电压差来表示。
当处于逻辑1,CAN_High和CAN_Low的电压差小于0.5V时,称为隐性电平(Recessive);
当处于逻辑0,CAN_High和CAN_Low的电压差大于0.9V,称为显性电平(Dominant)。
CAN总线遵从“线与”机制:“显性”位可以覆 盖“隐性”位;只有所有节点都发 送“隐性”位, 总线才处于“隐性” 状态。这种“线与”机制使CAN总线呈现显性优先的特性。
从线与逻辑的实现来看,结构上是多个晶体管的漏极输出接到一起(输出节点),再接上一个电阻到Vdd。那么输出节点能观察到的电压值就是上拉电阻和这些并联的晶体管的漏极到地的输出电阻的分压。
多主机,对总线接入的去中心化,即每个节点都有接入总线的能力
通信是事件驱动,不必遵循预先的时序,节点介入总线速度快,ms级应用
寻址机制,消息的标识符不设定节点地址
CAN总线通信原理可简单描述为
多路载波侦听
+基于消息优先级的冲突检测
和非破坏性的仲裁机制(CSMA/CD+AMP)。
CSMA(Carrie Sense Multiple Access)指的是所有节点必须都等到总线处于空闲状态时才能往总线上发送消息;
CD+AMP(Collision
Detection + Arbitration on Message Priority)指的是如果多个节点往总线上发送消息时,具备最高优先级的消息获得总线。
多路载波侦听:网络上所有节点以多点接入的方式连接在同一根总线上,且发送数据是广播式的。网络上各个节点在发送数据前都要检测总线上是否有数据传输:若网络上有数据,暂时不发送数据,等待网络空闲时再发;若网络上无数据,立即发送已经准备好的数据。
冲突检测:节点在发送数据时,要不停的检测发送的数据,确定是否与其他节点数据发送冲突,如果有冲突,则保证优先级高的报文先发送。
非破坏性仲裁机制:通过ID仲裁,ID数值越小,报文优先级越高。
高优先级的报文不能中断低优先级报文的发送。
CAN控制器大多具有根据ID过滤报文的功能
同步
CAN总线使用位同步的方式来确保通信时序,以及对总线的电平进行正确采样。
位同步(比特同步)是指接收端时钟已经调整到和发送端时钟完全一样,因此接收端收到比特流后,就能够在每一位的中间位置进行判决(如下图所示)。位同步(比特同步)的目的是为了将发送端发送的每一个比特都正确地接收下来。这就要在正确的时刻(通常就是在每一位的中间位置)对收到的电平根据事先已约定好的规则进行判决。例如,电平若超过一定数值则为1,否则为0。

Time Quantum 时间份额tQ :CAN控制器工作的最小时间单位,通常对系统时钟分频得到。
波特率:单位时间内(1s)传输的数据位,公式:1/位时间
举个栗子,系统时钟频率36MHz,预分频因子为4,则CAN时钟频率9MHz,则Tq=1/9M。假设一个CAN位包含10个Tq,则一个位周期T=10Tq,从而波特率为1/T=0.9MHz.