本文框架
- 1. 概述
- 2. CAN通信的线与机制
- 3. ACK应答机制理解
1. 概述
本文为Autosar通信入门系列介绍,如您对AutosarMCAL配置,通信,诊断等实战有更高需求,可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读
本篇我们一起看下一帧Can通信的线与机制与ACK应答,下述文章里我们会首先对线与机制是什么?有什么作用?ACK场的应答机制是怎样的?内容虽然简单,但背后的逻辑可能大家并没有深入去思考过。本文大纲如下:
2. CAN通信的线与机制
在对CAN通信的线与机制介绍前,我们首先需要知道CAN通信的显性与隐性,CAN 收发器根据两根总线(CAN_High 和 CAN_Low)的电位差来判断总线电平,
CAN_High电压:2.5~3.5V;
CAN_Low电压:1.5~2.5V。
CAN总线CAN_High与CAN_Low通过差分信号划分为显性电平和隐性电平两种,总线处于两种电平之一,其中显性电平为“0”,隐性电平为“1”,“显性”意味着“优先”,只要有一个节点输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)
接下来,我们借助“线与机制"介绍下仲裁场CAN ID的仲裁过程,如下图,当总线上同时接收到A、B、C三个节点的报文,在仲裁场时,节点发出的ID越小,仲裁后其显性位较其他节点报文单独出现时会胜出,仲裁失败的节点将进入只听状态,等待该节点报文发送完成参与下一轮仲裁。
线与机制也是为什么在CAN通信中,ID越小,优先级越高,仲裁越容易胜出的原因。
3. ACK应答机制理解
CAN发送是个双向互动的过程,发送节点一边发送,一边对节点进行回读确认数据正确,而接收节点也时刻接收,ACK应答即是接收节点对于发送节点在恰当时刻的一种正反馈,用于确认报文是否被当前节点正确接收。
如下图在CAN帧格式中,ACK场长度为 2 个Bit,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。在应答场里,发送站发送两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送 ACK 信号)向发送器发送一个“显性”的位以示应答。
这里同样用到了总线的“线与机制”,当接收节点正确接收到报文后发送显性位,经过总线的“线与机制”仲裁后结果为0(显性),接收节点回读到显性ACK位即知道有节点已经成功接收到报文了。
额外提一下,在节点Busoff故障制造时,可以通过Vector VH6501干扰ACK位来进行制造No ACK错误,在错误计数器达到255后即可产生Busoff。