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

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

3天内不再提示

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

832065824 来源:汽车电子嵌入式 2023-10-23 10:15 次阅读

前言

随着汽车ECU迅速的往域控制器方向发展,ECU要出来任务越来越多,单核CPU的负载越来越大,多核ECU势在必行。AUTOSAR架构下OS支持多核处理,本系列文章将详细介绍AUTOSAR架构下的多核机制。本文介绍基于Tricore芯片的AUTOSAR架构下的多核启动

d02e2b7c-7148-11ee-939d-92fbcf53809c.png

缩略词

简写 全称
UCB User Configuration Block
SSW Startup Software
BMHD Boot Mode Headers
SYSCON System Configuration Register

参考文档

1. TriCoreTM TC1.6.2 core architecture manual

2. AURIXTC3XX_um_part1_v2.0.pdf

注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!

正文

1. Tricore多核启动

背景知识1:UCB_BMHD0_ORIN.STAT的启动地址是配置Tricore启动后SSW从用户程序的哪个地址开始运行,LD链接文件里面的入口地址EntryPoint是配置链接器把上电就执行的用户入口代码地址链接到Entry Point,二者应该是同一个地址,也就是说:UCB_BMHD0_ORIN.STAT的启动地址 要等于LD链接文件中的Entry Point启动地址

参考文档:

TC3xx芯片的UCB详解

Note: 想arm-cotexM4芯片(e.g. S32K144),没有SSW这个固化程序,一上电默认就从0地址启动,所以我们的LD文件需要把我们的Reset_Handler放到0地址处。

参考文档:

S32K平台学习(1)-S32K144启动流程分析

问题1:Tricore是多核ECU,为什么上电后只有Core0在Runing状态? Core1/2/…是在halt状态?

如下三个图所示,Tricore上电后,CPU0默认进入RUN状态,CPU1和CPU2默认进入halted状态。

d042080e-7148-11ee-939d-92fbcf53809c.png

d049cb8e-7148-11ee-939d-92fbcf53809c.png

d056db12-7148-11ee-939d-92fbcf53809c.png

如下图所示,Tricore芯片的CPU0(Core0)在上电(Reset)后默认是进入RUN状态的,其他CPUx默认是进入HALT状态的,这是芯片特性。

我们可以通过配置SYSCON寄存器的BHALT位=0b使得CPUx进入RUN状态。

d06c67f2-7148-11ee-939d-92fbcf53809c.png

d07d71fa-7148-11ee-939d-92fbcf53809c.png

:这是CPU芯片特性定义的。

背景知识2:我们可以在Core0启动后,通过配置SYSCON寄存器的BHALT位域来启动其他Slave核,在其实Slave核的同时应该配置Slave Core的PC指针到我们想要Slave Core启动的地址处。

d09751ec-7148-11ee-939d-92fbcf53809c.png

2.OS多核启动时序

AUTOSAR架构下, 多核系统分主核(Mater Core,通常也是BSWCore,Tricore芯片下的CPU0)和从核(Slave Core)。系统启动后MasterCore自动启动,Slave Core由Master Core启动OS后再通知启动。

图一为Core0的启动时序,ECU上电后(或者Reset)只有Master Core会Run起来,Master Core的启动代码Startup()会跳转到main()函数,main函数调用EcuM_Init()开始Master Core 0的StartSequence:

StartCore: 调用Os_Hal_CoreStart启动所有Slave Core.

Os_Hal_CoreStart: 配置芯片寄存器真正启动Slave Core(后文详细分析).

StartOS: 启动OS.

Os_BarrierSynchronize: 开始进行核同步,也就是等待Slave Core运行到这个地方,没有完成核同步钱,Master Core会阻塞在这个地方(后文详细分析OSBarriers机制)。

Rte_Start: 完成核同步后,OS调度进入Core0的Init Task,InitTask中调用Rte_Start。

Note:Core0 的Init Task一般不会mapping任何的SWC的Runnable,这样Init Task就需要手动实现(不会由RTE自动生成),在Init Task中就能手写我们想要运行的代码,比如:e.g. 调用Rte_Start().

完成以上的任务后,Core0完成了StartSequence,开始Cyclic Task的调度。

d09fad24-7148-11ee-939d-92fbcf53809c.png

Figure 1: OS Core0 start sequence.

Master Core调用Os_Hal_CoreStart()后,Slave Core就会立刻启动,启动Sequence和Core0基本一样,只不过没有启动Slave的步骤。值得注意的是,Slave Core先调用Rte_Start(),而后再调用Os_BarrierSynchronize().

d0aae3c4-7148-11ee-939d-92fbcf53809c.png

Figure 2: OS Core1 start sequence.

3. 多核启动关键步骤分析

3.1 StartCore分析

StartCore()最后会调用Os_Hal_CoreStart()启动Slave Core, 代码如下所示,最主要的就是

1.配置PC指针指向Slave Core的启动地址,这个启动地址可以在Davinci工具中配置(_start_core1)。

d0bfdf68-7148-11ee-939d-92fbcf53809c.png

d0def772-7148-11ee-939d-92fbcf53809c.png

2. 配置SYCON寄存器控制Slave Core从Halt状态切换到Run状态(SYSCON.BHALT位域写入0)。

OS_FUNC_ATTRIBUTE_DEFINITION(OS_LOCAL_INLINE void, OS_CODE, OS_ALWAYS_INLINE,
Os_Hal_CoreStart,
(
P2CONST(Os_Hal_CoreConfigType, AUTOMATIC, OS_CONST) Core
))
{
  /* #10 Write the foreign PC with the startup code symbol for core 1. */
  *((volatile uint32*)Core->ProgramCounterRegister) = (uint32)(Core->StartLabelAddress);                                
  /* #20 Reset the core. */
  *((volatile uint32*)Core->DBGSRRegister) = OS_HAL_DBGSR_START_CORE;                                                   
  /* #30 Release the core. */
  *((volatile uint32*)Core->SYSCON_CORECON_Register) &= ~OS_HAL_SYSCON_BHALT_MASK;                                               
}

3.2 Os_BarrierSynchronize分析

Os_BarrierSynchronize()就是OsBarriers的具体实现,如果一个Barrier被多个Task引用了,那么只有引用这个Barrier的所有Task都调用了Os_BarrierSynchronize(Same BarrierID)后Task才会跳出阻塞状态,这样就能实现核同步。

d0e3b398-7148-11ee-939d-92fbcf53809c.png

参考文档:MICROSAR Classic OS Technical Reference.

问题2:为什么要让Slave Core的Rte_Start先调用了?

:Vector的推荐代码这么写的。

d0f9c1d8-7148-11ee-939d-92fbcf53809c.png

参考文档:How to deal with MICROSAR Multi-Core Projects.

4. 总结

a. Tricore芯片Reset后只有Master Core0会进入到Run状态,Slave Cores处于Halt状态。

b. AUTSARMaster Core的OS调用StartCore()启动Slave Core.

c. StartCore()最终调用Os_Hal_CoreStart()配置Tricore芯片的PC指针和SYSCON寄存器启动Slave Core.

d. OS通过OsBarriers机制实现核同步。

审核编辑:汤梓红

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

    关注

    447

    文章

    47788

    浏览量

    409123
  • AUTOSAR
    +关注

    关注

    9

    文章

    329

    浏览量

    21130
  • ecu
    ecu
    +关注

    关注

    14

    文章

    821

    浏览量

    53883
  • TriCore
    +关注

    关注

    0

    文章

    13

    浏览量

    11696
  • 域控制器
    +关注

    关注

    0

    文章

    222

    浏览量

    2452

原文标题:AUTOSAR架构下多核启动

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

收藏 人收藏

    评论

    相关推荐

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

    当ECU满足休眠条件时,根据ECU的硬件设计会走Sleep或者Shutdown的过程。
    的头像 发表于 11-06 09:09 1110次阅读
    基于<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>Shutdown介绍

    AUTOSAR架构下的多核通信介绍

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

    AUTOSAR分层架构

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

    功能安全---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

    AUTOSAR软件架构是由哪些部分组成的

    章节回顾AUTOSAR软件架构(一)中描述了以下内容:Application Layer应用层Runtime Environment (RTE)运行时环境Basic Software (BSW
    发表于 12-09 07:30

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

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

    介绍在ARM64架构启动多核的两种方式

    1、ARM64的多核启动流程分析工作中遇到的多核 ARM CPU 越来越多,总结分享一些多核启动的知识,希望能帮助更多小伙伴。在 ARM64
    发表于 06-13 18:23

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

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

    多核CPU的启动方式

    工作中遇到的多核 ARM CPU 越来越多,总结分享一些多核启动的知识,希望能帮助更多小伙伴。 在 ARM64 架构下如果想要启动
    的头像 发表于 06-22 10:04 1150次阅读

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

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

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

    小二之前只开发过异构双核的芯片,各跑各的软件(比如各自运行一套FreeRTOS,反正组件裁剪下也不大),针对类似Stellar,AURIX这样的同构多核的软件不了解; 比如针对AutoSAR
    的头像 发表于 07-24 10:57 1548次阅读
    <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 502次阅读