• 819查看
  • 0回复

[芯片硬件] 关于CanTrcv模块的几点思考

[复制链接]


该用户从未签到

发表于 29-8-2023 08:13:33 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


前言

汽车工程师对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模块的状态。

关于CanTrcv模块的几点思考w1.jpg

CanSM的CANSM_BSM_S_PRE_NOCOM和CANSM_BSM_S_PRE_FULLCOM两个状态会调用

CanIf_SetTrcvMode切换CanTrcv模块的状态。

关于CanTrcv模块的几点思考w2.jpg

CANSM_BSM_S_PRE_NOCOM的子状态CANSM_BSM_DeInitPnNotSupported会调用CanIf_SetTrcvMode将CanTrcv切换到Normal状态后又立马切换到StandBy状态(Note: 不知道为啥有这个操作?)。

关于CanTrcv模块的几点思考w3.jpg

关于CanTrcv模块的几点思考w4.jpg

在CANSM_BSM_S_NOCOM状态下如果检查到有来自COM模块的通信请求(T_FULL_COM_MODE_REQUEST)后会切换到CANSM_BSM_PRE_FULLCOM状态,然后调用CanIf_SetTrcvMode将CanTrcv模块状态切换到NORMAL状态。

关于CanTrcv模块的几点思考w5.jpg

1.2 BswM的Action切换CanTrcv模块的状态

如果CanSM对CanTrcv的模式状态管理不能满足项目实际的需求,我们可以通过BswM设计在满足特定条件下调用CanTrcv_SetOpMode来快速切换CanTcv模式状态。

关于CanTrcv模块的几点思考w6.jpg

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控制器和收发器。

关于CanTrcv模块的几点思考w7.jpg

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被唤醒后,程序可以选择软件复位,整个软件重新运行,也可以选择从上次停止的地方接着运行。



关于CanTrcv模块的几点思考w8.jpg

如果是深度休眠系统且ECU被唤醒后接着跑的话,我们可以通过配置(EcuM中enable sleep support,EcuM实现EcuM_EnbaleWakeupSource集成代码,中断函数中调用EcuM_CheckWakeup)最后在CanTrcv_CheckWakeup函数中调用EcuM_SetWakeupEvent来实现唤醒源检测。



关于CanTrcv模块的几点思考w9.jpg

如果是断电系统或者深度休眠系统被唤醒后软件复位,那么上图的整个交互过程就不存在了。程序重启后需要在其他设计的模块(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的唤醒信号会识别为错误信号。

参考文献:

[1]Specification of ECU State ManagerAUTOSAR CP Release 4.3.1

[2]Specification of CAN Transceiver DriverAUTOSAR CP Release 4.3.1

[3] https://mp.weixin.qq.com/s/hTgPpdzrxpzZyyE7eI6QzQ



该用户从未签到

发表于 18-3-2025 10:08:00 | 显示全部楼层
针对您关于CanTrcv模块的疑问,以下是专业回复:

关于问题一,CanTrcvSetOpMode通常由CanSM(CAN通信管理模块)调用,当需要设置CAN收发器的操作模式时,例如从接收模式切换到发送模式。

问题二中,CanTrcv与EcuM(电子控制单元管理模块)紧密相关。在AUTOSAR架构中,EcuM负责对ECU内部的所有模块进行管理,包括CanTrcv。CanTrcv会在接收到来自网络或其他模块的通信请求时,由EcuM调度进行相应操作。

关于不同类型的Can收发器的主要使用场景,这取决于具体的车辆应用和网络需求。例如,高速CAN用于实时性要求高的场景,如发动机控制;低速CAN则用于信息传输要求不高的辅助系统。

针对您的具体问题,当CanSM模块需要切换CanTrcv模块的工作模式时(例如从接收切换到发送),会调用CanTrcvSetOpMode来设置。这是为了确保CAN通信能够按照需求正确地进行收发操作。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 18-3-2025 10:08:00 | 显示全部楼层
针对上述问题,以下是专业的回复:

关于CanTrcvSetOpMode的思考:

1. CanTrcvSetOpMode通常由CanSM(CAN通信管理模块)调用。在需要设置CAN收发器的工作模式时,如初始化、休眠或唤醒等场景下,CanSM会根据需求调用此函数。
2. CanTrcv与EcuM(ECU管理模块)紧密相关。在ECU的CAN通信过程中,CanTrcv会负责具体的CAN通信收发操作。例如,当ECU需要与外部CAN设备进行通信时,EcuM会调度CanTrcv进行通信操作。
3. 不同类型的Can收发器的主要使用场景取决于其特性及应用需求。例如,高速Can收发器适用于需要高速通信的场景,如汽车底盘控制;低速Can收发器则适用于对通信速率要求不高的场景,如车身舒适系统。具体使用哪种类型的Can收发器,需要根据实际应用场景和需求进行选择。

后续我们将继续探讨这些问题,深入分析AUTOSAR架构下CanTrcv模块的运作机制。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 07:22 , Processed in 0.341466 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.