STM32之CAN---错误管理分析
且等于127时,将再次变为主动错误状态。
2.4 离线管理
如果一个节点的发送错误计数器的值超过255时,那么此节点将会处于离线状态。处于离线状态的节点不会对总线产生任何影响,它将不会发送消息帧,ACK,错误帧,过载帧等,至于会不会接收总线上的数据,取消于此节点的实现。
当一个处于离线状态下的节点接收到128次连接11位隐性位时,将变成主动错误状态,且同时设置发送错误计数器和接收错误计数器为0.
注:具体实现可能并不会与上述所描述的一模一样,比如离线还原,在STM32是有一开关来设置是否会自动还原,如果此功能禁止了,那么当处于离线状态下的节点接收到128次连接11连隐性位时也不会不还原成主动错误状态。
图1
3 STM32的bxCAN实现
3.1 bxCAN错误状态图
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
位31:24 | REC[7:0]: 接收错误计数器 这是对CAN协议的故障界定机制接收部分的实现。按照CAN的标准,当接收出错时,根据出错的情况该计数器加1或加8;而在每次接收成功后,该计数器减1,或减少其值为120-当该计数器的值大于127时。当该计数器的值超过127时,CAN进入错误被动状态。 |
位23:16 | TEC[7:0]: 发送错误计数器 与上面相似,这是对CAN协议的故障界定机制发送部分的实现。 |
位15:7 | 保留位,硬件强制为0。 |
位6:4 | LEC[2:0]: 上次错误代码 在检测到CAN总线上发生错误时,硬件根据出错情况设置其为1~6的值。当报文被正确发送或接收后,硬件清除其值为’0’。 硬件没有使用错误代码7,软件可以设置该值,从而可以检测代码的更新。 000: 没有错误; 001: 位填充错; 010: 格式(Form)错; 011: 确认(ACK)错; 100: 隐性位错; 101: 显性位错; 110: CRC错; 111: 由软件设置。 |
位3 | 保留位,硬件强制为0。 |
位2 | BOFF: 离线(Bus Off)标志 当进入离线状态时,硬件对该位置1。当发送错误计数器TEC溢出,即大于255时,CAN进入离线状态。 |
位1 | EPVF: 错误被动(Error Passive)标志 当出错次数达到错误被动的阈值时,硬件对该位置1。 (接收错误计数器或发送错误计数器的值>127)。 |
位0 | EWGF: 错误警告标志 当出错次数达到警告的阈值时,硬件对该位置1。 (接收错误计数器或发送错误计数器的值≥96)。 |
分
STM32CAN错误管 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)