【经验】先楫半导体MCU HPM6000系列常见的两种二级Bootloader方案介绍
作为高性能、低功耗的嵌入式MCU产品,先楫半导体的HPM6000 系列产品广泛应用于多个领域。在嵌入式系统的开发中,Bootloader 常常是开发者可能会遇到的第一个技术难点。应用程序运行环境能否正确构建,内核能否启动成功,都取决于Bootloader 能否正确工作。一个功能完善的嵌入式系统,还需要Bootloader 能够实现系统OTA更新升级的能力,即除了usb烧录、串口烧录等方式外,还预留给客户通过以太网等方式实现快捷固件升级的窗口。
本文以HPM6450为例,基于HPM6000 系列产品嵌入式系统的硬件平台和RT—thread 软件平台,描述系统引导程序Bootloader 的设计思路,阐述了设计时需要考量的因素和遇到的技术难点及操作,希望能给大家一些启发。
二级boot方案思路分析
(图1:整体思路分析)
如上图所示,整个方案涉及3个部分:
FLASH空间的分区
二级boot
APP固件
因本次我们讨论的重点是“二级boot”,所以下文内容仅涉及前两部分。
1、FLASH空间的分区
HPM6700/6400系列的单片机和我们常用的stm32、at32这类的单片机最大的不同是该系列MCU 是通过 xpi 总线外挂外部FLASH,即代码存储在外部FLASH。
查阅芯片用户手册可知,该系列MCU支持通过 XPI0 或XPI1外挂FLASH(FLASH外挂方式,如图2所示)。
其中xpi0映射的地址空间是0x80000000,xpi1映射的地址空间是 0x90000000, CPU可对这两块地址空间直接寻址并运行代码(如图3所示)。
(图2:外部FLASH挂载于xpi0原理图)
(图3:地址空间映射关系)
为实现固件升级,FLASH空间需要进行合理的划分,如Bootloader分区、用户程序分区、OTA升级分区、用户数据分区等。在RT-Thread上,FAL组件提供了方便的分区划分机制。
本文分享的两种方案均以W25Q256为例,该FLASH大小为32MB,挂载于XPI0外设上,首地址为0x80000000,通过FAL组件对FLASH的分区详情如下图所示:
(图4:Flash 分区表)
注意,其中:
boot分区表示二级boot,该分区预留了1MB的存储空间,为未来的功能升级留足了空间。
app 分区可根据实际需要来分配大小,本方案中预留了1MB的空间。
download分区用于下载固件,在APP执行过程中,新固件通过OTA下载于该分区,并在重启后由boot分区的bootloader完成合法性检验和新固件升级操作。
Filesystem 分区用于实现文件系统,在此分区上面可以挂载littelfs格式文件系统,可以避免因频繁掉电导致数据丢失的问题。
Easyflash 分区可用于存储一些简单的参数等。
2、二级boot
二级boot由芯片BootROM引导,从芯片的用户手册可知:HPM6700系列支持多种启动方式,可到先楫半导体官网上查看“HPM6700/6400用户手册”的19.1内容部分,如下:
(图5:官方代码启动描述)
由上可知当从串行nor flash启动的时候,可支持“原地代码执行”和“拷贝到内部RAM”执行。“启动方式一” 表示代码存储在外部flash,并由CPU直接在flash上执行代码;“启动方式二” 表示代码存在flash里面,然后通过BootROM复制代码到内存后再执行。
受BootROM支持的两类启动方式的启发,笔者经过分析以及与官方的技术支持讨论得出如下结论:
采用FLASH原地执行的方式,系统可支持更大尺寸的应用程序,如支持GUI的应用。在cache的加持下,该方式可实现成本和执行速度的平衡。(需要注意的是:由于FLASH固有属性的限制(多数FLASH不支持RWW),在需要支持FLASH擦写的应用中,用户代码需要做一些防止产生RWW场景的保护。)
采用拷贝到RAM中执行的方式,可实现如下优势:
✔ 用户代码以更高的性能执行(RAM的随机访问性能优于FLASH)
✔ 规避了FLASH不支持RWW的限制,由于代码执行于RAM,在需要FLASH擦写的应用中逻辑会更简单。
考虑到HPM6700/HPM6400系列有高达2MB连续空间的RAM,若用户代码及代码所需要的RAM所占用的空间总和小于或等于2MB,“启动方式二” 是一种值得考虑的选择。
由于二级boot 同时支持以上两种启动方案,接下来,我们将针对每种方案分别进行讨论。
方案一:FLASH原地执行
在该方案下,app 在FLASH里执行。如上所述,app 存储于FLASH 1MB偏移处,需要将链接脚本中的FLASH首地址改为0x80100000。
需要注意的是,由于app是被二级 Bootloader 引导,因此应用程序中不应再携带用于 BootROM 引导识别的启动头(boot header)。
Boot 的 FLASH 脚本不改,最终跳转逻辑为:
Boot启动
检查download分区是否有新固件,如果有则拷贝到APP
关闭中断
跳转到0x80100000地址,就启动了APP。
这样就完成了二级boot的设计。
这里最关键的就是如何修改连接脚本。
(图6:启动地址修改)
修改好app的链接脚本后,需要在boot里面进行跳转,跳转代码参考如下:
(图7:Boot 里跳转)
其中app_addr 为跳转偏移地址,如下:
(图8:偏移地址计算)
二级boot完成App跳转后,App在FLASH中原地执行。该方案的优势是与复制到RAM相比,应用的尺寸可以大至数十MB。考虑到FLASH的固有限制(随机访问性能稍弱,不支持RWW等),当应用程序执行于FLASH上, 开发者需要注意以下几点:
对于需要高频执行的、对性能有要求的代码,用户程序需要将其复制到RAM中执行,否则会影响程序的效率(若cache未命中)。
若需要执行FLASH擦写操作,需要保证在FLASH擦写期间,没有程序或者其他外设访问FLASH(具体的实现方式有:关全局中断、关调度器等)。
完成FLASH擦写操作后,用户代码需要保证cache 一致性,否则可能会导致未预期的后果(如读到错误代码/数据)。
方案二:内存执行
若用户代码加代码所需的RAM总和小于2M,基于HPM6700/HPM6400有高达2MB的连续RAM,为规避FLASH固有限制带来的不便,产品可采用方案二,即:App本身在RAM中执行。启动过程中,二级boot将App复制到RAM中并中转到APP的目标地址执行。
(图9:内存系统描述)
采用该方案时,需要注意以下三点:
二级boot所使用的RAM不应和用户App所在RAM区域重叠,否则在拷贝中会产生错误。
二级boot在跳转到用户App前需要恢复中断到默认状态(关闭中断)。
boot采用flash link的编译方式,APP要采用ram link的编译方式,即APP是通过内存方式的链接脚本,因此APP编译后无法通过下载到flash的方式调试,必须使用USB或者其他的方式下载固件到0x80100000处。
(图10:工作示意图)
以下为boot里面的链接修改,供大家参考:
(图11:Boot链接脚本参考)
(图12:App ram link方式链接文件参考)
在方案二中,二级boot需要做的操作比flash boot的方式多了一个步骤,需要先将APP分区的代码拷贝至内存,然后再跳转至内存执行。
(图13:代码拷贝至内存)
(图14:代码跳转至内存执行)
注意跳转前,需要关闭各种中断。
(图15:运行效果示意图)
3、注意事项
选择链接脚本时,要注意看左侧的链接脚本是否正确,如下图所示:
(图16:链接脚本示意图)
如果链接脚本不能执行,请检查下图的设置。
(图17:勾选newlib-nano)
编译的时候,需要把nerlib-nano勾选上,否则当使用memcpy的时候,有可能会出现 “非法指令” 的错误。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由ll转载自先楫半导体HPMicro公众号,原文标题为:先楫半导体 HPM6000 系列常见的两种二级Bootloader 方案介绍,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关研发服务和供应服务
相关推荐
先楫HPM6000系列高性能MCU在Linux环境下自动生成SDK本地化工程
本文介绍先楫半导体HPM6000系列高性能MCU在Linux环境下自动生成SDK本地化工程,SDK下载地址可通过世强FAE获取并提供技术支持。工程支持世强整合的SekormStudio(eclipse+GCC)以及第三方Segger Studio集成开发环境。
设计经验 发布时间 : 2024-11-07
先楫半导体HPM 16 位ADC+ENET开发案例:以2MSPS进行采样,通过ENET LWIP TCP方式发送到上位机
本文以先楫半导体 HPM6300 开发板为例介绍以 2MSPS 采样率进行 16 位 ADC 采样并将采样数据通过 ENET LWIP TCP 的方式发送到上位机的应用,ADC 采样使用抢占转换模式、PWM 触发的方式,ENET LWIP TCP 每次发送 1024 个 16 位采样数据。在HPM6300EVK 上进行测试验证,验证结果表明该方案是可行的。
设计经验 发布时间 : 2023-12-06
【经验】MCU HPM6750使用ISP烧录程序步骤及注意事项
先楫半导体推出的HPM6750是一款高性能MCU,采用双RISC-V内核,主频可达816MHz,使用自主的创新总线架构、高效的L1缓存和本地存储器,高达9220CoreMark和高达4651 DMIPS的MCU性能纪录;同时整个MCU还整合了一系列高性能外设。
设计经验 发布时间 : 2023-05-23
国产高性能MCU又一力作,集成授权EtherCAT,助力工业伺服走向海内外
最近,先楫半导体发布中国首款拥有德国倍福公司正式授权EterhCAT从站控制器的高性能MCU产品HPM6E00系列,将国产高性能MCU在工业领域的应用推向新高度。
原厂动态 发布时间 : 2024-07-02
【IC】先楫半导体最新款高性能MCU HPM5301,搭载单核32位RISC-V处理器,主频高达360MHz
先楫半导体于2023年11月24日宣布推出高性能HPM5300系列MCU最新款——HPM5301芯片。这款MCU搭载单核32位RISC-V处理器,采用QFN48封装,是迄今为止先楫推出的最简单易用的产品。该芯片的开发板HPM5301EVKLite也同步上市。
产品 发布时间 : 2023-11-25
先楫半导体(HPMicro)HPM6000家族MCU选型指南
描述- 上海先楫是一家致力于高性能嵌入式解决方案的半导体公司,产品覆盖微控制器、微处理器和周边芯片,以及配套的开发工具和生态系统。 目前已经量产的两个高性能通用MCU产品系列HPM6700/6400及HPM6300,性能领先国际同类产品,并完成AEC-Q100认证,全力服务中国工业,汽车和消费市场。公司成立于2020年6月,总部坐落于上海市张江高科技园区,并在天津、深圳和南京均设立分公司。 核心团队来自世界知名半导体公司管理团队,具有15年以上,超过20个SoC的丰富的研发及管理经验。
型号- HPM6320IEP,HPM6454IAN,HPM6754IAN,HPM6450,HPM6750IAN,HPM6350,HPM6754IVM,HPM6300系列,HPM6450IAN,HPM6454IVM,HPM6750IVM,HPM6320IPA,HPM6000家族,HPM6360IPA,HPM6360IEP,HPM6364IPA,HPM6430IVM,HPM6300,HPM6400,HPM6320,HPM6364,HPM6364IEP,HPM6700,HPM6430IAN,HPM6350IPA,HPM6340,HPM6000,HPM6360,HPM6730IAN,HPM6340IEP,HPM6730IVM,HPM6350IEP,HPM6340IPA,HPM6700系列,HPM6450IVM,HPM6454,HPM6730,HPM6430,HPM6400系列,HPM6750,HPM6754
震撼首发!先楫携手致远电子打造基于HPM6450的多通道车载以太网分析仪
先楫半导体携手致远电子打造多通道车载以太网分析仪,VBNET系列产品内置HPM6450 MCU,可实现主从模式和速率自适应,大大降低操作时间和试错成本,让测试与刷写更高效简单。
应用方案 发布时间 : 2024-10-13
媒体视角 | 先楫半导体HPM6E00系列MCU填补国内空白,EtherCAT中国首授权
2023年12月先楫半导体正式推出中国首款拥有德国倍福公司正式授权EtherCAT从站控制器的高性能MCU产品HPM6E00系列。先楫半导体HPM6E00系列产品采用国际流行的RISC-V架构,主频高达600MHz,有单双核选项,集成了德国倍福公司授权的EtherCAT从站控制器,具备高性能运动控制、高实时工业以太网互联的特性。
原厂动态 发布时间 : 2024-07-17
【应用】基于RISC-V的高主频MCU HPM6750用于LED大屏,双千兆以太网透传实现实时控制
基于RISC-V的高主频MCU能让LED大屏显示系统实现更高的驱动频率及更高的实时性。HPM6750是先楫半导体开发的采用RISC-V 内核、具有高主频及创新总线架构的双核高性能MCU,能通过双千兆以太网透传的方案加双核加持完美解决高速的链路设计。
应用方案 发布时间 : 2022-12-22
兆松ZStudio为先楫MCU开发带来全新体验,编译优化助力性能提升
兆松发布的 ZStudio 3.2.4 已经对先楫高性能 RISC-V MCU 进行了全面支持,并对先楫 SDK 导入进行了优化适配,极大地简化了用户在 ZStudio 中针对先楫 MCU 进行嵌入式开发的流程。1nfinite 社区已提供了详细的教程。不仅为先楫 MCU 用户提供了便捷友好的开发环境,更通过其一流的编译及算法优化能力助力先楫 MCU 实现进一步性能提升。
原厂动态 发布时间 : 2024-10-11
先楫半导体MCU选型表
先楫半导体提供高性能MCU选型,:主频最高达816MHz,高性能外设:包括JPEG编解码器,有16位和24位LCD,4×8通道PWM,2×8通道PWM,最高有千兆以太网,CAN FD等通讯接口,高速12位和高精度16位模数转换器,工作温度:-40℃-105℃Ta/-40℃-125℃Ta
产品型号
|
品类
|
内核
|
最高主频(MHz)
|
SRAM(KB)
|
CAN
|
USB
|
SPI
|
I²C
|
UART
|
比较器
|
封装形式
|
HPM5301IEG1
|
高性能微控制器
|
32 位 RISC-V 处理器
|
360MHz
|
288KB
|
CAN FD
|
USB HS 带 PHY ×1
|
4
|
4
|
9
|
2
|
6*6 QFN48 P0.4
|
选型表 - 先楫半导体 立即选型
打造高效自动化的利器,先楫HPM6200系列高性能MCU芯片携手钧舵机器人推出精密装配方案
末端执行器作为整个自动化领域的核心所在,承载着精准抓取、稳定操作以及高效执行各种任务的重要职责。苏州钧舵机器人有限公司推出的搭载先楫半导体HPM6200系列高性能MCU芯片的LRA系列直线旋转执行器(ZR轴)凭借其精确力控补偿、软着陆算法、恒力磁性弹簧技术以及高精度光编技术等多项创新技术,为半导体封测、芯片贴装、3C精密装配等行业提供强大支持。
原厂动态 发布时间 : 2024-05-18
HPM6700/6400 系列开创国产高性能 MCU 新时代
型号- HPM6400 系列,HPM64A0A,HPM64G0,HPM64A0,HPM6400,HPM6700 系列,HPM6700,HPM6750EVKMINI,HPM6750EVK2
【IC】有动静!先楫出了颗适用机器人的国内首款内嵌ESC高性能MCU——HPM6E00
先楫半导体(HPMicro)推出的新款MCU——HPM6E00,引发了外界的广泛关注。这家成立仅四年的公司,凭借“国内首款内嵌ESC的高性能MCU”,再次证明了其在MCU领域的创新实力。
产品 发布时间 : 2024-07-03
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。
最小起订量: 1pcs 提交需求>
登录 | 立即注册
提交评论