前言
CAN Transceiver是将MCU CAN Controller的数字信号和CANH/CANL的模块信号相互转换的设备。如果使用DIO控制(非SPI控制)的收发器(e.g., TJA1043),则收发器的控制比较简单,难的是收发器的休眠唤醒功能,因为收发器类型不一样,MCU也不一样,ECU设计也可能不一样导致收发器+MCU+SBC (可选)组合的方案非常多,休眠唤醒场景就复杂了。
在<<>>一文中我们解答了解答了以下两个问题:
. CanTrcv_SetOpMode被哪个模块调用,在什么场景下调用?
. CanTrcv和EcuM的关系,在什么场景下CanTrcv会调用EcuM_SetWakeupEvent?
在<<>>一文中我们知道,CanSM模块只会设置CanTrcv收发器到Standby模式(INH引脚未High电平状态),我们的User(一般在EcuM的callout函数EcuM_StartWakeupsource)代码应该设置CanTrcv收发器到Sleep模式,Can收发器进入Sleep模式后INH引脚是float高阻态,硬件设计上需要保证INH下拉到低电平,这样收发器在Sleep状态下收到唤醒事件后就能拉高INH引脚,INH引脚能产生一个低变高的脉冲给到SBC的唤醒引脚或者MCU的中断引脚,用于检测唤醒事件。
再次回顾CanTrcv模块后,还存在以下问题:
问题1:收发器硬件如何检测唤醒事件?
问题2:CanTrcv软件模块如何检测唤醒事件?
问题3:有无SBC的ECU在休眠前后应该进行什么操作才能保证CAN报文能唤醒MCU?
注意:本文以NXP TJA1043为例。
简写 | 全称 |
ICU | Input Capture Unit |
SBC | System Basic Chip |
注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!
正文
1.收发器硬件唤醒功能
1.1 什么是唤醒标志Wake flag
TJA1043收发器供电正常(供电不正常也会切换收发器状态)时候的硬件状态切换条件有三个硬件信号组成:
STB_N(低有效,拉低进入到Standby状态)
EN引脚(拉高,使能收发器)
Wake flag
STB_N和EN就是收发器的两个IO引脚,那Wake flag啥了?
TJA1043收发器内部有很多硬件Internal flags,这里我们着重介绍下唤醒相关的UVNOM和Wake flag.
1.1.1 UVNOM flag
以下两种场景会置位UVNOM flag:
VCC < Vuvd(VCC), 维持时间超过 tdet(uv)(100ms~350ms)
VIO < Vuvd(VIO) 维持时间超过 tdet(uv) (100ms~350ms)
UVNOM置位后的动作:TJA1043收发器进入到Sleep Mode
以下场景会清除UVNOM:
任何唤醒行为, 设置Pwon flag
STB_N 引脚出现LOW-to-HIGH变化
VCC 和VIO 都恢复。 CAN transceiver会基于引脚STB_N 和EN当前状态切换到对应的状态
1.1.2 Wake flag
以下场景置位Wake flag:
收发器硬件检测到本地唤醒事件(Wake Pin由低到高)
收发器硬件检测到远程唤醒事件(Wake pattern)
置位Wake flag后的动作:
清除UVNOM及对应的Timer
以下场景会清除Wake flag:
UVNOM被设置
收发器进入Normal Mode
1.2 什么是本地唤醒和远程唤醒
1.2.1 本地唤醒
WAKE引脚上电压水平由低到高或者由高到低,并且新切换的电平维持至少twake的时间。
1.2.2 远程唤醒
当CAN总线上收到一个完整的Wake-Up Pattern (ISO 11898-2) 会远程唤醒TJA1043收发器。
一个完整的WakeUp Pattern如下图所示,至少在tto(wake)bus这段时间内收到显性位(0)-隐性位(1)-显性位(0),显性位的持续时间大于等于twake(busdom)隐性位的持续时间大于等于twake(busrec)。
1.3 收发器的ERR_N引脚
顾名思义,ERR_N引脚好像是用来标识TJA1043收发器的错误状态的,但不仅仅如此。
通过ERR_N可以检测Internal flag. 以Wake flag为例,Wake flag置位后可以通过ERR_N引脚来检测Wake flag有没有被置位。
也就是说,TJA1043收发器的本地唤醒可以通过WAKE引脚来检测,远程唤醒可以通过ERR_N引脚来检测。
注意:一般收发器在Sleep模式下等待唤醒事件,如果发生远程唤醒,则:
STB_N引脚低电平
EN引脚为高电平
Wake flag set
这个时候如果软件要检测唤醒事件,应该同时检测STB_N引脚及ERR_N引脚,也就是说STB_N引脚既当输出引脚又是输入引脚。
2. CanTrcv模块检测唤醒事件
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...