SemiDrive E3 系列 MCU SSDK : XIP 模式
一、 前言
本文介绍基于 SSDK3.0 调试 XIP 运行模式。
硬件平台:芯驰 E3_LQFP176_E3200_A03_048 开发板
软件平台:SemiDrive SSDK3.0

二、 模式简介
SF Core 的程序 XIP 运行在 FLASH 上,XIP 程序启动前,需先在 IRAM 中运行 SF Core 的 BootLoader 程序,对 XSPI 以及 FLASH 进行初始化,然后启动 SF Core 的 XIP 程序;通常客户会有使用 CAN 进行 OTA 升级的需求,这时可以参考 XIP 例程,在 BootLoader 程序中接收升级文件,写入 FLASH 中,升级完成后跳转至 FLASH XIP 模式运行。
三、 测试过程
1. BootLoader 程序分析
例程路径:E3_SSDK_PTG3.0_Source_Code\ssdk\boards\e3_176_ref\app_demo\xip\bootloader

BootLoader 中做了时钟、IO、FLASH 的初始化,以及跳转命令。跳转地址为
SF_MEM_BASE 0x10140000,与 iar_flashboardcfg_bootloader.board 文件中描述的 sf.flash 文件地址一样。在跳转前会输出 log:SSDK E3 Bootloader Success!
2. Sf 程序分析
Sf 程序初始化时钟、PIN 脚、输出 log:SSDK E3 XIP Demo, SF Boot Success。

3. 编译
首先在 debug 模式编译 sf 程序,并配置生成 sf.bin 文件。

然后在 flashdebug 模式编译 BootLoader 程序,Linker 文件会把 BootLoader、SFS、sf.bin 一起合并成一个 .out 文件。

下载到板子中,重新启动,可以看到 log
说明程序先从 bootloader 启动,然后跳转至 flash XIP 运行。
四、 参考文档
- 《AppNote_E3_Boot_and_OTA_Rev01.03.pdf》
- 《SemiDrive_E3_SSDK_User_Guide_Rev103.pdf》
SemiDrive E3 系列 MCU SSDK : bootloader
一、 前言
本文介绍基于 SSDK3.0 调试 XIP 运行模式。
硬件平台:芯驰 E3_LQFP176_E3200_A03_048 开发板
软件平台:SemiDrive SSDK3.0

二、 应用简介
客户在实际应用中通常都会用到 OTA 升级功能,通常都是由 bootloader + app 程序组成,bootloader 程序运行在 RAM 中,对 FLASH 程序进行升级,芯驰已经提供 Demo 程序,本文就 Demo 程序进行分析,并测试把升级标志位写在 RAM 内。
三、 测试过程
1. BootLoader 程序分析
例程路径:E3_SSDK_PTG3.0_Source_Code\ssdk\boards\e3_176_ref\app_demo\xip\bootloader

BootLoader 中做了时钟、IO、FLASH 的初始化,以及跳转命令。跳转地址为
SF_MEM_BASE 0x10140000,与 iar_flashboardcfg_bootloader.board 文件中描述的 sf.flash 文件地址一样。在跳转前会输出 log:SSDK E3 Bootloader Success!
2. Sf 程序分析
Sf 程序初始化时钟、PIN 脚、输出 log:SSDK E3 XIP Demo, SF Boot Success。

3. 编译
首先在 debug 模式编译 sf 程序,并配置生成 sf.bin 文件。

然后在 flashdebug 模式编译 BootLoader 程序,Linker 文件会把 BootLoader、SFS、sf.bin 一起合并成一个 .out 文件。

下载到板子中,重新启动,可以看到 log

说明程序先从 bootloader 启动,然后跳转至 flash XIP 运行。
4. 参考例程
增加 sdrv_rstgen_write_general(&reset_genral_reg_test,4);函数,参考 ssdk\boards\e3_gateway\app_demo\boot_core\sf 例程可以向寄存器写入变量,且使用 reboot_global();进行复位时不会丢失。

5. 程序 log 分析

(1) SSDK E3 Bootloader Success!//进入 bootloader
(2) bootloader read flag: 0//读取寄存器中值为 0
(3) SSDK E3 XIP Demo, SF Boot Success//进入 sf 程序
(4) sf read flag: 0//读取寄存器中值为 0
(5) sf write-->read flag: 4//写入寄存器中值为 4
(6) SSDK E3 Bootloader Success!//跳转回 bootloader
(7) bootloader read flag: 4//读取寄存器中值为 4
(8) ota mode!!!!!//进入 OTA 模式,并写入寄存器为 8
(9) global reset!!!!!//假设 OTA 完成,复位
(10) SSDK E3 Bootloader Success!//进入 bootloader
(11) bootloader read flag: 8//读取寄存器值 8
(12) SSDK E3 XIP Demo, SF Boot Success//跳转到 sf
(13) sf read flag: 8//读取寄存器值 8
(14) sf write-->read flag: 4//写入寄存器中值为 4
(15) SSDK E3 Global Reset Demo Success!//复位
(16) SSDK E3 Bootloader Success!//进入 bootloader
(17) bootloader read flag: 4//读取寄存器中值为 4
(18) ota mode!!!!! //进入 OTA 模式,并写入寄存器为 8
(19) global reset!!!!! //进入 OTA 模式,并写入寄存器为 8
(20) SSDK E3 Bootloader Success! //进入 bootloader
(21) bootloader read flag: 8//读取寄存器值 8
(22) SSDK E3 XIP Demo, SF Boot Success//进入 sf
(23) sf read flag: 8//读取寄存器值 8
(24) sf write-->read flag: 4//写入寄存器中值为 4
(25) SSDK E3 Global Reset Demo Success!//复位
四、 总结
经过以上步骤可以验证出,reboot_global 进行复位,通用寄存器并不会丢失,客户可以根据此特性把升级标志位写在寄存器中。
五、 参考文档
- 《AppNote_E3_Boot_and_OTA_Rev01.03.pdf》
- 《SemiDrive_E3_SSDK_User_Guide_Rev1.03.pdf》
SemiDrive E3 系列 MCU SSDK : ota_eth
一、 前言
本文介绍基于 SSDK3.0 调试以太网并通过以太网进行升级
硬件平台:芯驰 E3640 Gateway 开发板
软件平台:SemiDrive SSDK3.0

二、 应用简介
客户在实际应用中会用到以太网功能,Gateway 开发板板载 3 路以太网接口,本文介绍如何调试以太网接口及做 OTA 升级。
测试例程:
ssdk\boards\e3_gateway\app_demo\eth-xip\eth_freertos_tcp_client
ssdk\boards\e3_gateway\app_demo\ota_eth
三、 测试过程
1. Eth 初始化
通过程序可以看出 eth2 使用的是 RJ45 接口,IP 配置如下:

2. 电脑端设置 IP
PC 端 IP 地址设置,需要与板端同一网段

3. PC 测试
电脑端 ping 板子,可以 ping 通

4. 测试 TCPServer 功能
SSCOM 设置成 TCPServer,配置如下,本地 IP 与
static void tcp_echo(void *pvParameters) 函数、PC 端 IP 设置一致,则通过 SSCOM 软件给开发板发送数据,开发板会将收到的数通过 ETH 原样发送出来,SSCOM 软件窗口可以查看接收到的数据。


串口会打印成功 log

5. 测试 ota_eth
测试例程 ssdk\boards\e3_gateway\app_demo\ota_eth
Main 函数中添加 log 用来区分 ota 后的程序

烧录到开发板,观察开机 log

6. 制作升级文件
6.1 修改输出 log ,用来区分升级文件

6.2 使用打包命令进行打包
E:\E3_SSDK_PTG3.0_Source_Code\ssdk>prebuilts\windows\python-3.7.0\python.exe tools\genpac.py -b e3_gateway -p ota_eth -v IAR -c Debug -f devices\E3640\pacconfig\pac_config_sf.json --chipid=E3640 -d Flashloader
6.3 使用 SDToolBox 工具提取出 boot0.bin,并修改名字为 boot0.img

6.4 参考 《SemiDrive_9_Series_Boot 与升级指南》 文档,修改 boot0.img 文件的 PSN 号

6.5 网线连接电脑和开发板 RJ45 接口,PC 安装 Tftp64 软件,设置 IP 及 boot0.img 文件路径

6.6 开发板上电,通过串口输入命令 ota -d flash1 -f eth0:boot0.img -b 开始升级,升级完成后,再次上电开发板,观察 log 可以看出运行的是升级后的程序。

四、 总结
调试以太网 OTA 升级,首先要确认以太网功能正常,可以和电脑 ping 通,然后再调试 OTA 功能。E3640 DEV_KIT 开发板测试 ota_eth 升级时需要移植 Gateway 路径下的例程,因为硬件上的差异需要修改 pinmux.c 以及 eth_cfg.c,则可以正常实现升级。
五、 参考文档
- 《SemiDrive_E3系列_Boot_and_OTA_开发指南.pdf》
- 《SemiDrive_E3_SSDK_User_Guid.pdf》
欢迎登录大大通,在该博文下方提问,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:Chelsea Tong / 佟强
作者:大大通特邀博主:汽车大牛
登录大大通,了解更多详情!