首页 > 其他分享 >深入探索SemiDrive E3系列的MCU SSDK

深入探索SemiDrive E3系列的MCU SSDK

时间:2024-07-25 16:58:11浏览次数:15  
标签:SSDK 寄存器 XIP SemiDrive MCU bootloader sf E3

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 部门:[email protected]   作者:Chelsea Tong / 佟强

作者:大大通特邀博主:汽车大牛

登录大大通,了解更多详情

标签:SSDK,寄存器,XIP,SemiDrive,MCU,bootloader,sf,E3
From: https://blog.csdn.net/wpgddt/article/details/140693731

相关文章

  • STM32F429IGT6 STMCubeMX PWM 控制 180 舵机
    设置PWM对应引脚PA2![[QQ_1721613625998.png]]定时器2受APB1控制![[QQ_1721613709674.png]]配置时钟为72MHZ![[QQ_1721613757231.png]]HAL库定义PWM/*TIM2initfunction*/voidMX_TIM2_Init(void){/*USERCODEBEGINTIM2_Init0*//*USERCODEENDTI......
  • WCH-LinkW无线下载仿真调试器&无线串口通信(主/从机模式)-RISC-V/ARM内核MCU无线DAP下
    LinkW-1V1 主机 硬创社搜索(WCH-LinkW):WCH-LinkW无线下载仿真调试器-硬创社 板载PCB天线:2.4G板载天线AD库资源-CSDN文库简介: WCH-LinkW无线下载仿真调试器&无线串口通信(主/从机模式)。应用场景: 1、用于RISC-V/ARM内核MCU无线DAP下载仿真调试器2、......
  • 串口通信操作方法及三种实现方式(基于百问网DshanMCU-F103)
    UART全称为通用异步收发器,英文全称(UniversalAsynchronousReceiver/Transmitter)。是一种串行、异步、全双工的通信协议。一、使用方法UART首先将接收到的并行数据转换成串行数据来传输,消息帧从一个低位起始位开始,后面是5-8个数据位,一个可用的奇偶位和一个或几个高低停止位......
  • 内存、存储中(计算机、MCU)的引导流程、存储器
    内存、存储中(计算机、MCU)的引导流程、存储器一、内存栈区(stack):存放非静态局部变量堆区(heap):存放malloc()、calloc()、realloc()、free()等函数动态分配的数据 ——malloc()-C语言标准库中的函数全局静态区:存放静态局部变量、全局变量代码区:存放程序代码栈......
  • 19集 两款ESP32开发板如何选择?-《MCU嵌入式AI开发笔记》
    19集两款ESP32开发板我们用哪款?-《MCU嵌入式AI开发笔记》有两款ESP32的开发板分别是ESP32S3和C3的,我们该如何选择?1、ESP32-S3-BOX-3在乐鑫官网上,https://www.espressif.com.cn/zh-hans/products/devkits有ESP32S3BOX开发板,链接如下:https://github.com/espressif/es......
  • 痞子衡嵌入式:瑞萨RA8系列高性能MCU开发初体验
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是瑞萨RA8系列高性能MCU开发上手体验。我们知道瑞萨半导体的通用MCU产品线主要包含基于自有内核8/16bitRL78系列以及32bitRX系列,还有这两年明显增加研发投入的基于ArmCortex-M内核的RA、Synergy......
  • 不同型号的GD32 MCU如何区分?
    大家是否碰到过以下应用场景:同一套软件代码希望跑在不同型号的GD32MCU中,但有些地方需要根据MCU型号进行调整?或者上位机或其他MCU与GD32MCU通信时需要知道对应的MCU型号是哪个?此时,我们就需要了解如何获取以及区分GD32MCU的型号。GD32MCU的型号区分可以通过PID进行区分,PID......
  • GD32MCU最小系统构成条件
    大家是否有这个疑惑:大学课程学习51的时候,老师告诉我们51的最小系统构成?那么进入32位单片机时代,gd32最小系统构成又是怎么样的呢?1.供电电路    需要确保供电的电压电流稳定,以东方红开发版为例,选用GD低压差大电流LDO作为电源转换芯片,保证后端电路的稳定。2.外部晶振电路......
  • 15集终于编译成功了-了个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》
    15集终于编译成功了-个球!编译TFLiteMicro语音识别工程-《MCU嵌入式AI开发笔记》还是参考这个官方文档:https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2全是干货!这里面提到的这个Micro工程已经移开了:https://github.com/tensorflow/tensorflow/t......
  • 初学者指南:如何选择嵌入式Linux和单片机(MCU)
    前言在嵌入式系统开发领域,选择合适的平台是项目成功的关键之一。对于初学者来说,如何在嵌入式Linux和单片机(MCU)之间做出选择可能是一项艰巨的任务。本文将详细解释这两种平台的特点、优缺点,以及在不同应用场景中的适用性,帮助初学者做出明智的选择。嵌入式Linux简介概述嵌入......