微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32之CAN---错误管理分析

STM32之CAN---错误管理分析

时间:11-24 来源:互联网 点击:

且等于127时,将再次变为主动错误状态。

2.4 离线管理

如果一个节点的发送错误计数器的值超过255时,那么此节点将会处于离线状态。处于离线状态的节点不会对总线产生任何影响,它将不会发送消息帧,ACK,错误帧,过载帧等,至于会不会接收总线上的数据,取消于此节点的实现。

当一个处于离线状态下的节点接收到128次连接11位隐性位时,将变成主动错误状态,且同时设置发送错误计数器和接收错误计数器为0.

注:具体实现可能并不会与上述所描述的一模一样,比如离线还原,在STM32是有一开关来设置是否会自动还原,如果此功能禁止了,那么当处于离线状态下的节点接收到128次连接11连隐性位时也不会不还原成主动错误状态。

图1

3 STM32的bxCAN实现

3.1 bxCAN错误状态图

图2

3.2 出错管理

CAN协议描述的出错管理,完全由硬件通过发送错误计数器(CAN_ESR寄存器里的TEC域),和接收错误计数器(CAN_ESR寄存器里的REC域)来实现,其值根据错误的情况而增加或减少。软件可以读出它们的值来判断CAN网络的稳定性。此外,CAN_ESR寄存器提供了当前错误状态的详细信息。通过设置CAN_IER寄存器(比如ERRIE位),软件可以灵活地控制中断的产生――当检测到出错时。

3.3 离线恢复

当TEC等于255时,bxCAN就进入离线状态,同时CAN_ESR寄存器的BOFF位被置’1’。在离线状态下,bxCAN无法接收和发送报文。

根据CAN_MCR寄存器的ABOM位的设置,bxCAN可以自动或在软件的请求下,从离线状态恢复(变为错误主动状态)。在这两种情况下,bxCAN都必须等待一个CAN标准所描述的恢复过程(CAN RX引脚上检测到128次11个连续的隐性位)。

如果ABOM位为’1’,bxCAN进入离线状态后,就自动开启恢复过程。
如果ABOM位为’0’,软件必须先请求bxCAN进入然后再退出初始化模式,随后恢复过程才被开启。

注: 在初始化模式下,bxCAN不会监视CAN RX引脚的状态,这样就不能完成恢复过程。为了完成恢复过程,bxCAN必须工作在正常模式。

4 CAN错误状态寄存器 (CAN_ESR)

地址偏移量: 0x18
复位值: 0x0000 0000

图3

位31:24REC[7:0]: 接收错误计数器
这是对CAN协议的故障界定机制接收部分的实现。按照CAN的标准,当接收出错时,根据出错的情况该计数器加1或加8;而在每次接收成功后,该计数器减1,或减少其值为120-当该计数器的值大于127时。当该计数器的值超过127时,CAN进入错误被动状态。
位23:16TEC[7:0]: 发送错误计数器
与上面相似,这是对CAN协议的故障界定机制发送部分的实现。
位15:7保留位,硬件强制为0。
位6:4LEC[2:0]: 上次错误代码
在检测到CAN总线上发生错误时,硬件根据出错情况设置其为1~6的值。当报文被正确发送或接收后,硬件清除其值为’0’。
硬件没有使用错误代码7,软件可以设置该值,从而可以检测代码的更新。
000: 没有错误;
001: 位填充错;
010: 格式(Form)错;
011: 确认(ACK)错;
100: 隐性位错;
101: 显性位错;
110: CRC错;
111: 由软件设置。
位3保留位,硬件强制为0。
位2BOFF: 离线(Bus Off)标志
当进入离线状态时,硬件对该位置1。当发送错误计数器TEC溢出,即大于255时,CAN进入离线状态。
位1EPVF: 错误被动(Error Passive)标志
当出错次数达到错误被动的阈值时,硬件对该位置1。
(接收错误计数器或发送错误计数器的值>127)。
位0EWGF: 错误警告标志
当出错次数达到警告的阈值时,硬件对该位置1。
(接收错误计数器或发送错误计数器的值≥96)。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top