0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Tricore芯片的AUTOSAR架构下的多核Shutdown介绍

832065824 来源:汽车电子嵌入式 2023-11-06 09:09 次阅读

正文

1. EcuM模块中关于Multicore下电的流程概述

当ECU满足休眠条件时,根据ECU的硬件设计会走Sleep或者Shutdown的过程。一般情况下,有SBC的ECU满足休眠条件后走Shutdown流程下电;无SBC的ECU满足休眠条件后走Sleep系统休眠的流程。

1.1 多核ECU走Sleep过程休眠

一般配置使用Flexible EcuM的项目在BswM模块会自定义一个描述ECU状态的状态机,在ECU系统满足休眠条件后会触发Action调用EcuM_SelectShutdownTarget(ECUM_SHUTDOWN_TARGET_SLEEP),之后根据需求调用EcuM_GoHalt(深度休眠系统一般调用GoHalt)或者EcuM_GoPoll().

121ac23a-7c38-11ee-939d-92fbcf53809c.png

Figure 1: SLEEP Phase

12297d3e-7c38-11ee-939d-92fbcf53809c.png

12412632-7c38-11ee-939d-92fbcf53809c.png

Figure 2: Master Core GoSleep Sequence

Master Core的GoSleep Sequence中需要调用EcuM_EnableWakeupSource()这个Callout函数(需要用户自定义)配置ECU休眠后的唤醒源。

125d19e6-7c38-11ee-939d-92fbcf53809c.png

Figure 3: Slave Core GoSleep Sequence.

Slave Core的GoSleep Sequence同样需要调用EcuM_EnableWakeupSource()这个Callout函数。

Note: 个人理解Slave Core的GoSleep Sequence中调用EcuM_EnableWakeupSource()不需要做啥,因为唤醒的时候Master Core会调用StartCore唤醒Slave Core。

126e1d40-7c38-11ee-939d-92fbcf53809c.png

Figure 4: Master Core Halt Sequence

Master Core进入到Halt Sequence后会先等待Slave Core,多核完成同步后调用MCAL_MCU模块提供的Mcu_SetMode()接口设置Master Core进入HALT深度休眠状态。休眠后唤醒过程,本文暂不深入论述。

12821c00-7c38-11ee-939d-92fbcf53809c.png

Figure 5: Slave Core Halt Sequence.

Slave Core的Halt Sequence过程基本和Master Core的过程一样。

Note:多核ECU走Sleep休眠过程没有OS的参与。

单核ECU走Sleep过程请参考:AUTOSAR架构下RH850芯片深度休眠配置实践-Conifig EcuM and BswM

1.2 多核ECU走Shutdown下电

在ECU系统满足休眠条件后触发Action调用EcuM_SelectShutdownTarget(ECUM_SHUTDOWN_TARGET_OFF),之后根据需求调用EcuM_GoDown().

129a834e-7c38-11ee-939d-92fbcf53809c.png

Figure 6: Shutdown Phase.

12b250a0-7c38-11ee-939d-92fbcf53809c.png

12c85724-7c38-11ee-939d-92fbcf53809c.png

Figure 7: Master Core OffPreOS Sequence

Master Core进入OffPreOS Sequence后最关键的就是调用ShutdownAllCores完成多核同步。

12e929c2-7c38-11ee-939d-92fbcf53809c.png

Figure 8: Master Core OffPostOS Sequence

Master Core完成多核同步后进入OffPostOS Sequence,调用EcuM_AL_SwitchOff()这个Callout函数完成ECU Shutdown Off。

Example:

VoidEcuM_AL_SwitchOff(void)
{
  Cdd_SBC_GotoSleep();//给MCU下电
};

12faf9ae-7c38-11ee-939d-92fbcf53809c.png

Figure 9: Slave Core OffPreOS Sequence.

因为Master Core调用EcuM_AL_SwitchOff ()后MCU已经下电了,Slave Core不用也来不及做啥操作了。

13152220-7c38-11ee-939d-92fbcf53809c.png

Figure 10: Slave Core OffPostOS Sequence.

2. OS模块中关于多核Shutdown的描述

MasterCore满足Shutdown Off条件后调用ShutdownAllCores(), 在ShutdownAllCores()中发送Signal给到Slave Core触发Shutdown, 同时在ShutdownAllCores()中实现多核同步(Note: 后文实例代码讲解)。然后,所有的核都会àShutdowHook() àEcuM_Shutdown() àEcuM_AL_SwitchOff (Callout函数,中间调用用户自定义的真正的Shutdown函数) àCdd_SBC_GotoSleep().

132d97ba-7c38-11ee-939d-92fbcf53809c.png

Figure 11: Example of a shutdown procedure.

13469c38-7c38-11ee-939d-92fbcf53809c.png

3. 多核下电的具体实现

3.1 MICROSAROS中X-Signal

135a398c-7c38-11ee-939d-92fbcf53809c.png

13725670-7c38-11ee-939d-92fbcf53809c.png

X-Signal用于MICROSAROS中跨核通信,具体通过MCU中未被使用的ISR中断资源实现。

3.2 MICROSAR中Multicore Sleep

MICROSAR在Multicore上走SleepSequence时可以配置只有Master Core走Sleep,也可以选择多Master andSlaveCore都走Sleep Sequence。如果走多核Sleep,则在BswM模块中需要需要为每个Core配置ECU状态机,满足ECU Sleep条件后调用EcuM_GoHalt()/EcuM_GoPoll().

1389972c-7c38-11ee-939d-92fbcf53809c.png

多核同步在EcuM_GoHalt()或EcuM_GoPoll()中完成。

3.3 MICROSAR中Multicore Shutdown

MICROSAR在Multicore上走Shutdown Sequence时所有的核都得走Shutdown Sequence,那么在BswM模块需要为每个Core配置ECU状态机,满足Shutdown Off条件后调用EcuM_GoDown().

13a6a7b8-7c38-11ee-939d-92fbcf53809c.png

EcuM_ShutdownOS这个Callout函数中调用OSAPIShutdowAllCores()完成多核同步。

3.4 ShutdownAllCores中的核同步

Action 1:Master Core中Os_ShutdownAllCores()调用Os_TrapCallShutdownAllCores().

Action 2:Master Core中Os_TrapCallShutdownAllCores()调用Os_Api_ShutdownAllCores().

Action 3:Master Core中Os_Api_ShutdownAllCores()调用Os_SystemShutdown().

Action 4:Master Core中Os_SystemShutdown()调用Os_XSigSend_ShutdownAllCores()给Slave Cores发送Shutdown信号

13c1919a-7c38-11ee-939d-92fbcf53809c.png

Action 5:Slave Core接收到Signal后调用Os_CoreShutdowAllLocal().

13e3bdb0-7c38-11ee-939d-92fbcf53809c.png

Action 6:Slave Core中Os_CoreShutdowAllLocal()调用Os_CoreShutdown().

Action 7:Master Core和Slave Cores都调用Os_CoreShutdown(),通过OsBarriers机制完成多核同步,最后都调用ShutdownHook().

13f65452-7c38-11ee-939d-92fbcf53809c.png

OsBarriers机制参考:AUTOSAR架构下多核启动

3.5 EcuM_GoHalt中的核同步

Master Core和Slave Core都调用EcuM_GoHalt(),然后:

MasterCore在EcuM_GoHalt()调用EcuM_EnterSleep().

SlaveCore在EcuM_GoHalt()调用EcuM_EnterSleepOnSlave().

14178a64-7c38-11ee-939d-92fbcf53809c.png

MasterCore中EcuM_EnterSleep()调用EcuM_ShutdownSynchronization().

MasterCore中EcuM_ShutdownSynchronization()通过一个do while()循环等待所有Slave Core是否到达Sleep状态,EcuM_GetCoreStatusValue()就是获取Slave Core状态。

Master Core在调用EcuM_ShutdownSynchronization()之前会调用EcuM_SetCoreStatusValue()设置MasterCore进入到Sleep状态。

143b0368-7c38-11ee-939d-92fbcf53809c.png

Slave Core中EcuM_EnterSleepOnSlave()调用EcuM_SetCoreStatusValue()设置Slave Cores进入到Sleep状态,最后调用EcuM_McuSetMode()进入深度休眠Halt.

1470b7ce-7c38-11ee-939d-92fbcf53809c.png

EcuM_SetCoreStatusValue(CoreID)和EcuM_GetCoreStatusValue(CoreID, CORE_STATE)其实就是在设置和访问三个标识核状态的全局变量。

149537ac-7c38-11ee-939d-92fbcf53809c.png

Note: 标识三个核状态的全局变量应该链接在三个核都能访问的共享RAM里面,保证三个核都能访问的到。

4. 总结

问题 1: ECU走Sleep过程休眠过程如何实现多核同步?

:Multicore ECU走Sleep过程通过EcuM_GoHalt()/EcuM_GoPoll()实现核同步,具体参考3.5章节。

问题 2:ECU走Shutdown Off过程下电如何实现多核同步?

:Multicore ECU走Shutdown过程下电通过ShutdownAllCores()实现核同步,具体参考3.4章节。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AUTOSAR
    +关注

    关注

    10

    文章

    341

    浏览量

    21383
  • SBC
    SBC
    +关注

    关注

    0

    文章

    72

    浏览量

    19109
  • ecu
    ecu
    +关注

    关注

    14

    文章

    865

    浏览量

    54267
  • 状态机
    +关注

    关注

    2

    文章

    489

    浏览量

    27411
  • MCU芯片
    +关注

    关注

    3

    文章

    244

    浏览量

    11281

原文标题:AUTOSAR架构下多核Shutdown

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AUTOSAR架构多核通信介绍

    随着汽车ECU迅速的往域控制器方向发展,ECU要处理的任务越来越多,单核CPU的负载越来越大,多核ECU势在必行。AUTOSAR架构OS支持多核
    的头像 发表于 11-13 09:24 1763次阅读
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>架构</b><b class='flag-5'>下</b>的<b class='flag-5'>多核</b>通信<b class='flag-5'>介绍</b>

    AUTOSAR分层架构

    AUTOSAR分层架构
    发表于 09-26 11:12

    介绍芯片命名系统资源最小系统的搭建原理图

    目录写在前面芯片资源介绍芯片命名系统资源最小系统的搭建原理图PCB写在前面根据今年比赛规则的要求,双车组和信标组需要使用Infineon公司的Tricore
    发表于 07-21 09:13

    功能安全---AUTOSAR架构深度解析 精选资料分享

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析AUTOSAR的分层式设计,用于支持完整的软件和硬件模块的独立性(Indep
    发表于 07-23 08:34

    AUTOSAR架构深度解析 精选资料推荐

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析目录AUTOSAR架构深度解析
    发表于 07-28 07:40

    AUTOSAR架构深度解析 精选资料分享

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析AUTOSAR的分层式设计,用于支持完整的软件和硬件模块的独立性(Indep
    发表于 07-28 07:02

    关于AUTOSAR架构的知识点看完你就懂了

    关于AUTOSAR架构的知识点看完你就懂了
    发表于 10-18 07:41

    如何在Tricore上移植μC/OS-III

    本文是《在Tricore上移植μC/OS-III》系列文章的第一篇,先简单介绍整个项目。Tricore是英飞凌旗下的一款单片机内核,目前汽车电子领域常用的TC2XX和TC3XX等系列
    发表于 01-27 08:17

    AUTOSAR架构的WdgDriver WdgIf WdgM模块

    本文主要介绍AUTOSAR 架构的WdgDriver WdgIf WdgM 模块,分析模块之间的依赖关系以及运行原理以帮助快速理解。本文以MPC5746R为主控
    的头像 发表于 09-09 11:17 6186次阅读

    AUTOSAR分层架构介绍及SmartSAR studio使用总结

    AUTOSAR分层架构
    发表于 03-28 16:44 10次下载

    AUTOSAR是什么?AUTOSAR软件架构简介

    AUTOSAR的全称是AUTomotive Open System Architecture,直译为汽车开放系统架构
    的头像 发表于 07-08 17:26 1.2w次阅读
    <b class='flag-5'>AUTOSAR</b>是什么?<b class='flag-5'>AUTOSAR</b>软件<b class='flag-5'>架构</b>简介

    理一理AUTOSAR架构的唤醒源事件

    最近的项目负责网络管理部分,网路唤醒和ECU系统的休眠关系紧密,对系统的唤醒源事件感觉理解的不是很透彻,今天就来理一理AUTOSAR架构的唤醒源事件。
    的头像 发表于 07-14 09:11 3165次阅读
    理一理<b class='flag-5'>AUTOSAR</b><b class='flag-5'>架构</b><b class='flag-5'>下</b>的唤醒源事件

    AutoSAR构架以及在多核汽车MCU的运行

    小二之前只开发过异构双核的芯片,各跑各的软件(比如各自运行一套FreeRTOS,反正组件裁剪下也不大),针对类似Stellar,AURIX这样的同构多核的软件不了解; 比如针对AutoSAR,在
    的头像 发表于 07-24 10:57 2287次阅读
    <b class='flag-5'>AutoSAR</b>构架以及在<b class='flag-5'>多核</b>汽车MCU的运行

    基于Tricore架构的RTThread多核实现

    在《基于Hightec+TC375TP的RT-Thread移植详解 》一文中,基于Tricore实现了单核RTThread的移植。最近,花了些时间完成遗留的任务:基于Tricore多核移植。目前
    的头像 发表于 09-12 18:40 929次阅读

    基于Tricore芯片AUTOSAR架构多核启动

    随着汽车ECU迅速的往域控制器方向发展,ECU要出来任务越来越多,单核CPU的负载越来越大,多核ECU势在必行。AUTOSAR架构OS支持多核
    的头像 发表于 10-23 10:15 2655次阅读
    基于<b class='flag-5'>Tricore</b><b class='flag-5'>芯片</b>的<b class='flag-5'>AUTOSAR</b><b class='flag-5'>架构</b><b class='flag-5'>下</b>的<b class='flag-5'>多核</b>启动