一、 概述
本文主要介绍在接触 SemiDrive E3 期间,遇到的一些名词的解析说明,方便刚接触 Semidrive E3 的用户能更快速的了解并上手。
二、 名词说明
2.1 SSDK 和 MCAL
SSDK 和 MCAL 是芯驰推出的两种软件包。
SSDK 采用常见的 MCU SDK 架构,默认不依赖 RTOS,但提供 FreeRTOS 示例,用户可以根据需要,在工程中参考 FreeRTOS 示例进行配置,启动 FreeRTOS 调度器。每个 IP 的 Driver 直接向应用层提供接口,为每个驱动提供多个单独的 demo 工程,展示驱动的用法。
MCAL 是位于 AUTOSAR 软件架构中基础软件的底层,可以直接访问 MCU 寄存器和内部外设的底层驱动,E3 MCAL 是基于 AUTOSAR 4.3.1 标准文档开发。
芯驰 E3 从硬件设计上是属于同构多核,即所有的核具用相同的架构。从软件设计上,其中 SSDK 属于非对称多处理(AMP),指的是不同的核运行不同的程序;MCAL 属于对称多处理(SMP),指的是所有的核运行同一套程序(一般通过 CoreID 来实现不同的核执行不同的操作)。详见《在 IAR Embedded Workbench for Arm 中进行多核调试》(My Pages)。
2.2 IRAM 和 XIP 运行方式
IRAM 的运行方式,指的是程序烧录在 flash 中,芯片启动时会加载到 RAM 中运行。
XIP 指的是 eXecute In Place 就地执行,是指用用程序直接在 Flash 内运行,而不再读代码至 RAM 中运行。使用该方式时,常见的结构为 bootloader + APP,芯片上电后,会由 ROM 将 bootloader 加载到 IRAM 运行,执行 XSPI training,然后由 bootloader 跳转至用户程序 APP 运行。
用户在实际开发时,建议使用 IRAM 方式,即用户程序加载至 RAM 中运行,因为程序在 RAM 中相较于程序在 Flash 中运行速度会更快一些。但如果用户程序占用空间较大,芯片内的 RAM 大小无法满足,则需要使用 XIP 方式,但可以将一些较为重要跟系统性能紧密相关的代码放置在 IRAM 中运行,参考 app_demo/xip 示例中的 /* example function exe in RAM */ 或 readme.md 中的 “ 如何将整个文件的函数放在 ram 上 ”。参考稳定《AppNote: Memory Layout for AutoSAR》 第 5 章性能优化。
关于如何配置为 IRAM 和 XIP 方式,可以参考 《SemiDrive E3 SSDK User Guide》的 2.2.3 调试章节,通过选择不同的 flashloader 文件。
2.3 boot mode
E3 的 GPIO_A0 - A3 为启动模式引脚 Boot Mode Pin。芯片上电后,集成于芯片内部的 ROM 程序在启动核(CPU cluster0 core)中开始运行,以完成芯片的启动过程。ROM 程序会通过读取 Boot Mode Pin 的配置,即高低电平状态,进入不同的模式,如下:
图 2.1 boot mode 设置项说明
其中常用的为 1110 模式,E3 上电后会进入 JTAG/SWD 烧录模式。以及 0000 模式,E3 上电后会从 flash 启动。
2.4 Flashloader 和 Dloader
Flashloader 是用于 JTAG/SWD 烧录 Flash 的程序文件,其内部包含了一组对 Flash 进行读、写和擦的函数组合。Flashloader 在 JTAG/SWD 下载过程中被工具加载到 IRAM 中运行,上位机通过芯片的 JTAG/SWD 接口调用 Flashloader 中的函数完成对目标镜像和 eFuse 的烧录。JTAG/SWD 烧录时仅支持烧录 Flash。
Dloader 是用于 USB 烧录的程序文件,烧录时也是会被工具加载到 E3 芯片的 RAM 汇总运行,通过 Flashboot 协议与上位机交互,完成对存储设备的烧录,可对 Flash、eMMC 进行烧录。
在 E3 SSDK 和 MCAL 软件包中,均预置了各个 PART_ID 的 Flashloader 和 Dloader。SSDK 软件包位于 ssdk/devices/$(PART_ID)/flashloader(dloader) 文件夹下,MCAL 软件包位于 MCAL_release/tools/IAR_Ddf/flashloader/SemiDrive/$(PART_ID) 文件夹下。
在 E3 SSDK 软件包中也提供了 flashloader 和 dloader 的 demo 源码,位于 ssdk/boards/$(board)/app_demo/flashloader(dloader)。用户可以根据需要进行修改并生成新的编译产物,替换预置的文件。
比如开发板在烧录程序时,会通过串口打印烧录的过程 log。用户制作的板子如果修改了 UART 串口号,则可以通过修改 Flashloader(Dloader) 工程中 pinmux_cfg.c 文件内定义的 pin 脚为制作的板子上对应 UART 的 pin 脚,这样在烧录时可以观察 log,如果遇到错误能进行分析改正。
2.5 PAC 包
代码可以通过 IAR 等 IDE 烧录至 Flash 中,也可以通过芯驰提供的 SDFactoryTool 工具,该工具的烧录对象就是 PAC 包。PAC 包是通过打包的方式生成,将编译产物 bin 文件转换为 Boot Package 格式,再将 Boot Package 形成 PAC 文件,PAC 文件中包含了 Dloader/Flashloader 和 SFS 等其他需要烧录或参与烧录过程的文件。
打包方式可以参考 《AppNote_E3_Boot_and_OTA》 的 “9.1 打包” 章节,烧录过程可以参考 《AppNote_E3_烧录流程》 的 “3 通过 USB 接口烧录” 和 “4 通过 JTAG/SWD 接口烧录” 章节。
2.6 SFS 文件
SFS 文件用于存储 Flash 信息,供 ROM 启动时读取。在 boot mode 配置为 0000 模式,从 Flash 启动时,ROM 程序会从 XSPI1 Port A 读取 SFS,并根据 SFS 的配置初始化 Flash,根据 SFS 里的 Boot Package 地址信息寻找 Normal Boot Package、Backup Boot Package 和 Third Try Boot Package。
芯驰在提供的 SSDK 和 MCAL 软件包中,都预置了 sfs 文件。SSDK 目录为 ssdk\tools\sdtools\sfs,MCAL 目录为 MCAL_release\tools\sfs,提供的几种固件如下:
图 2.2 sfs 文件说明
当 Flash 类型有变化时,或者运行不同模式需要切换 sfs 文件,可以参考 《SemiDrive E3 SSDK User Guide》 的 “ 3.6.2 修改 sfs 文件 ” 章节。
比如 E3640 gateway 参考板默认使用的为 HyperFlash,如果用户自己制作的板子使用的为 NorFlash 时,就需要修改为 NorFlash 对应的 sfs 文件,如 sfs_mt35-1-1-1.img 或 sfs_is25-1-1-4.img。
三、 参考文档
- 《SemiDrive E3 SSDK User Guide》
- 《SemiDrive E3 MCAL User Guide》
- 《在IAR Embedded Workbench for Arm中进行多核调试》
- 《AppNote:Memory Layout for AutoSAR》
- 《AppNote_E3_烧录流程》
- 《AppNote_E3_Boot_and_OTA》
欢迎在博文下方留言评论,我们会及时回复您的问题。
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:Eason Wang / 王寅森