CanTrcv_SetOpMode被哪个模块调用?在什么场景下调用?

前言
汽车工程师对can收发器应该都比较熟悉,但是最近在复盘autosar架构下的cantrcv模块的时发现对can收发器及cantrcv模块还有几个疑问:
(1)cantrcv_setopmode被哪个模块调用,在什么场景下调用?
(2)cantrcv和ecum的关系,在什么场景下cantrcv会调用?
(3)不同类型的can收发器主要使用场景是?
本文我们来一起探索并回答这些问题。
正文
1. cantrcv_setopmode被哪个模块调用,在什么场景下调用?
1.1 cansm模块切换cantrcv模块状态
cantrcv模块在上电后的初始状态配置,一般配置初始状态为sleep状态。而后,cantrcv模块的状态通过其他模块调用cantrcv_setopmode来切换。如果没有bswm的参与(action中切换cantrcv状态),一般都是cansm模块调用canif_settrcvmode --> cantrcv_setopmode来切换cantrcv模块的状态。
cansm的cansm_bsm_s_pre_nocom和cansm_bsm_s_pre_fullcom两个状态会调用
canif_settrcvmode切换cantrcv模块的状态。
cansm_bsm_s_pre_nocom的子状态cansm_bsm_deinitpnnotsupported会调用canif_settrcvmode将cantrcv切换到normal状态后又立马切换到standby状态(note: 不知道为啥有这个操作?)。
在cansm_bsm_s_nocom状态下如果检查到有来自com模块的通信请求(t_full_com_mode_request)后会切换到cansm_bsm_pre_fullcom状态,然后调用canif_settrcvmode将cantrcv模块状态切换到normal状态。
1.2 bswm的action切换cantrcv模块的状态
如果cansm对cantrcv的模式状态管理不能满足项目实际的需求,我们可以通过bswm设计在满足特定条件下调用cantrcv_setopmode来快速切换cantcv模式状态。
1.3 ecum的callout函数中切换cantrcv模块的状态
ecum通过中断或轮询检测到来自can收发器或控制器的唤醒事件后,就可以对该唤醒事件进行验证。ecum通过打开相应的can收发器和控制器来实现唤醒事件验证。ecum模块调用集成代码ecum_startwakeupsource来打开相应的can收发器和控制器。
注意:虽然控制器和收发器已打开,但can接口模块(canif)不会将can消息转发到任何上层模块。只有当canif对应的pdu通道模式设置为“在线”时,才会转发can消息。
ecu状态管理器模块将通过通信管理器模块comm继续正常启动can网络。否则,它将调用ecum_stopwakeupsources关闭can控制器和收发器。
2.cantrcv和ecum的关系,在什么场景下cantrcv会调用ecum_setwakeupevent?
在回答这个问题前,先介绍一下ecu系统设计相关的一些知识。
ecu在设计时根据具体需求可以在硬件上添加sbc或无sbc。如果ecu有sbc,ecu就是一个断电系统。那么ecu在系统下电(shutdown)流程的最后一步会调用sbc的服务接口断掉mcu的电,整个mcu在休眠中是处于断电状态的。在外部信号(can transceiver/lin transceiver的inh引脚,dio唤醒引脚 )唤醒mcu时,sbc重新给mcu供电,mcu重新冷启动。
如果ecu无sbc,ecu就是一个深度休眠系统。那么ecu在系统下电(shutdown)流程的最后一步会调用mcu的服务进入到deep sleep深度休眠状态(mcu陷入深度休眠状态,程序不在运行,但是mcu还有电存在)。在外部信号(can transceiver/lin transceiver的inh引脚,dio唤醒引脚 )通过中断唤醒mcu,mcu被唤醒后,程序可以选择软件复位,整个软件重新运行,也可以选择从上次停止的地方接着运行。
如果是深度休眠系统且ecu被唤醒后接着跑的话,我们可以通过配置(ecum中enable sleep support,ecum实现ecum_enbalewakeupsource集成代码,中断函数中调用ecum_checkwakeup)最后在cantrcv_checkwakeup函数中调用ecum_setwakeupevent来实现唤醒源检测。
如果是断电系统或者深度休眠系统被唤醒后软件复位,那么上图的整个交互过程就不存在了。程序重启后需要在其他设计的模块(cdd_wksm)开启唤醒源检测,如果检测到唤醒源就需要调用ecum_setwakeupevent来设置唤醒源事件。
问题:cantrcv和ecum的关系,在什么场景下cantrcv会调用ecum_setwakeupevent?
答:如果是休眠系统且ecu被唤醒后继续跑,则cantrcv需要进行唤醒源检测并调用ecum_setwakeupevent设置唤醒源事件。如果是断电系统,或者休眠系统且ecu被唤醒后软件复位,则cantrcv不用做唤醒源检测,也不会调用ecum_setwakeupevent设置唤醒源事件,需要自定义起码模块是西安唤醒源检测。
3.不同类型的can收发器主要使用场景是?
生产can收发器的厂商比较有名是nxp,infineon,ti等,类型很多,收发器支持的功能也不近一样。这里介绍nxp的三种比较有代表性的收发器,tja1044,tja1043,tja1145。
  是否有stb引脚 是否有en引脚 是否有inh引脚 是否有spi引脚 是否支持pn局部网络管理 使用场景
tja1044 y n n n n 休眠系统,任意can报文在can_rx引脚上产生中断唤醒
tja1043 y y y n n 断电系统,任意报文唤醒收发器,inh接到sbc
jta1145 n n n y y 局部网络管管理,特定报文唤醒收发器,inh引脚接到sbc
tja1044收发器相比基础版本增加了standby的低功耗模式,此模式的功耗在10ua左右。同时can收发器处在standby模式时会开启can总线唤醒功能,当can总线上有数据时,rxd会产生从高到低的跳变沿,此跳变沿可以被mcu用来做唤醒源。此种收发器一般用在kl30(长电)和kl15同时供电的产品上,如仪表,中控,导航等产品。
standby模式下的功耗已经很低了,如果车厂要求功耗做的更低,或者要求支持本地唤醒,此时就需要使用带sleep模式,inh引脚和wake引脚的收发器了。以tja1043为例,当mcu配置tja1043进入sleep模式之后,inh引脚拉低,ldo关闭输出,mcu关闭不消耗电流。当can总线有唤醒信号,或者wake引脚有跳变沿,inh引脚被拉高,ldo打开输出,mcu启动并配置tja1043进入normal模式接收can报文。传统的vcu,bms等产品就使用了此收发器。
像t-box这类应用,一般对低功耗的要求更严格,如果使用tja1043这类收发器,一旦被和自己不相关的can报文唤醒之后,需要软件进行判断处理,尽快的再次进入休眠模式。此时就对can收发器提出了新的功能需求,既局部网络唤醒功能,相关标准为11898-6:2013。nxp支持该功能的收发器为tja1145,可以通过spi接口配置唤醒报文的速率,id和数据,不满足条件的can报文无法唤醒tja1145。
需要提醒的是,tja1145不支持can fd的局部网络唤醒功能,如果tja1145被用于can fd总线中,需要选用tja1145t/fd and tja1145tk/fd,其他型号接收到can fd的唤醒信号会识别为错误信号。


高德智感:红外热成像技术在人体识别中的应用
诺基亚X6上线印度官网支持页_或将近期开售值得期待
怎样控制变频器实现电机调速?变频器的频率源给定有几种方式呢?
可穿戴医疗技术将为慢性病患者带来福音
全球超低功耗20nA 物联网MCU航顺HK32L08X
CanTrcv_SetOpMode被哪个模块调用?在什么场景下调用?
无人机或成美空军中坚力量 提升空军规模和作战能力
未来国产机器人产业要如何取得突破性的发展?
配置出色还有一身黑科技,360手机N5再掀性价比狂潮
热释电红外传感器前置放大电路的设计
无线压电雨量水位报警站介绍
康力优蓝重磅推出新品智能教育机器人Hello Kitty
寒武纪紧跟技术前沿潮流,展现出了惊人的研发速度
中国广电近年财务数据披露,连续两年处于亏损状态
德国中小型太阳能光伏系统历史创新高
柔宇科技推出的柔性显示技术创新应用与众不同
全球首款L4级自动驾驶量产版轿车,计划于2021年正式交付用户
英特尔2024年Q1财测披露:营收预计在122亿至132亿美元之间
电池巨头启动IPO!
用于现场仪表和工厂自动化的创造性低功耗解决方案