SWM181定制UserBoot执行流程

电子说

1.3w人已加入

描述

01 存储器划分

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

 

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

02 执行流程

存储器

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

存储器

关于0x6000

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

UserBoot

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

 

04 程序下载

UserBoot

 

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

APP——可使用Keil下载

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

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

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

05 升级ISP

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

 

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。

责任编辑:haq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分