Can总线上的电平及物理层仲裁
CAN总线采用差分信号传输,通常情况下只需要两根信号线(CAN-H和CAN-L)就可以进行正常的通信。在干扰比较强的场合,还需要用到屏蔽地即CAN-G(主要功能是屏蔽干扰信号),CAN协议推荐用户使用屏蔽双绞线作为CAN总线的传输线。
在“隐性”状态下,CAN-H与CAN-L的输入差分电压为0V(最大不超过0.5V),共模输入电压为2.5V。
在“显性”状态下,CAN-H与CAN-L的输入差分电压为2V(最小不小于0.9V),如下图 1所示。
数据总线上面就是上面的真实电压,但是can收发器会把真实的物理电压转换为逻辑电压,
隐性,差分电压(低)——>逻辑1
显性,差分电压(高)——>逻辑0
CAN总线上,“显性”的优先级要高于“隐性”;当“显性”位和“隐性”位同时发送到总线上时,总线上的数值表现为“显性”。
可以理解为:
逻辑 1-->“隐性”,总线处于高阻,任何一个CAN节点都可以将总线驱动成“显性”。
逻辑 0-->“显性”,在总线上的电平优先级要高于“隐性”,所以1个接收节点在总线上产生的“显性"位可以导致发送节点在这个时刻发送“隐性”时的物理仲裁错误。
CAN节点的物理层仲裁
CAN节点出于发送状态的时候,TX引脚发送数据bit流,同时RX引脚在接收总线上的bit流;由于总线上“显性”位的优先级要高于“隐性”位;所以在RX引脚上接收到的这个时刻的bit电平与TX引脚上发送的bit电平不一致,就导致该发送节点发送失败,也可理解成为:发送总线仲裁错误。
这样就可以用来解决,2个节点在同一时刻开始往总线上发送数据,只要2个节点发送的bit流不一致,就可以区分开来。先发送“显性”位(逻辑 0)的节点能将完整的数据帧发送到总线上;而另外的那个节点因为发送“隐性”位( 逻辑 1)的时刻,RX引脚上检测到总线上“显性”位( 逻辑 0),因此产生总线仲裁错误而退出发送状态。