芯课堂 | SWM181定制UserBoot操作指南

芯课堂 | SWM181定制UserBoot操作指南_第1张图片

 

01. 存储器划分

SWM181xB的Flash总大小为120K,其中前96K用于APP,后24K用于UserBoot,芯片上电先执行UserBoot,然后跳转到APP。

芯课堂 | SWM181定制UserBoot操作指南_第2张图片

SWM181xC的Flash总大小为248K,UserBoot在96K起始的24K处,若程序大小超过96K,则需要在Keil中做如下设置:

芯课堂 | SWM181定制UserBoot操作指南_第3张图片

 

02. 执行流程

芯课堂 | SWM181定制UserBoot操作指南_第4张图片

B0接低时,上电后芯片直接执行APP。

B0接高时,上电后芯片检查地址0x18020处内容:

  • 若内容不是0x0B11FFAC,则执行ISP代码,可通过串口烧录APP。

  • 若内容是0x0B11FFAC,则跳转到UserBoot。

03. 工程设置

UserBoot 和 APP

startup_SWM181.s中需要如下设置,确保程序的0x20、0x24、0x28三个地址处有正确取值:

DCD 0x0B11FFAC

DCD 0x6000

DCD SRAM_SWITCH

芯课堂 | SWM181定制UserBoot操作指南_第5张图片

关于0x6000

UserBoot和APP中的0x6000分别指定了UserBoot和APP的大小为24k,若它们的大小不是24k,可修改对应值缩短代码拷贝时长;设定值必须是0x1000的整数倍,且大于等于实际程序大小。如果对上电时间没有苛刻要求,建议不要修改。

UserBoot

UserBoot的连接使用分散加载文件控制。

芯课堂 | SWM181定制UserBoot操作指南_第6张图片

04. 程序下载

UserBoot

芯课堂 | SWM181定制UserBoot操作指南_第7张图片

可使用SWMProg、SYNWIT_ISP等可将代码下载到指定位置的软件下载。

APP——可使用Keil下载

下载时不要选全擦,否则会把之前下载的UserBoot擦掉。

使用其他工具给SWM181xC下载时需要注意:若程序大于96K需要避免下载工具将0x18000-0x1E000的UserBoot覆写掉。

可以将APP和UserBoot的bin文件合并成一个然后再用批量工具烧录。

05. 升级ISP

检查0x18020地址处内容并跳转到UserBoot的工作其实是由ISP代码完成的,旧版ISP代码没有此功能,因此需要给带有旧版ISP代码的芯片升级ISP。

芯课堂 | SWM181定制UserBoot操作指南_第8张图片

06. 跳转前的清理工作

UserBoot程序中,跳转到APP之前,需要执行以下清理操作:

(1)关闭UserBoot中开启的外设中断;

(2)关闭UserBoot中使用过的外设(给外设的控制寄存器恢复默认值);

比如如果UserBoot中使用了Timer中断,在跳转到APP之前没有关闭Timer的话,那么进入APP之后这个Timer还会触发中断,而APP中没有给这个Timer写ISR的话,就会执行默认ISR,是个死循环。

注意事项:

下载UserBoot后,ISP程序无法再执行,若App中关闭了SWD,则芯片无法再通过JLink和ISP串口更新程序,只能通过UserBoot更新或擦除App。

 

你可能感兴趣的:(单片机,嵌入式硬件)