当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]深入谈谈IAP升级

 最近做过51_IAP和ARM_IAP升级,感觉到他们的相同点和不同点,特记录如下:

共同点:

做好IAP的关键都是中断向量映射(REMAP)问题

一般都分为bootloader区和用户区

不同点:

单片机的中断向量位置是固定的,位于0x0000的底部。

ARM的中断向量也一般是在0x0000的底部,但有的ARM可以中断向量的映射机制,可以将RAM或其他地址的FLASH映射到0x0000底部

单片机没有中断向量管理机制。一般0x0000-0x0002是一个3个字节的LJMP指令(该指令跳转到用户程序,注意不一定是main函数,可能是包括一些堆栈,寄存器初始化的汇编的初始化部分,然后跳转到main函数),后面是各种具体中断的跳转函数的入口地址,例如串口,I2C等等。

ARM有中断管理机制。(cortex-M3内核又不一样)

在ARM体系中,异常中断向量表的大小为32字节,其中每个异常中断占据4个字节大小,保留了4个字节空间

0x00 复位

0x04 未定义的指令

0x08 软件中断

0x0C 指令预取终止

0x10 数据访问终止

0x14 保留 未使用

0x18 IRQ模式 这个就是我们常用各种中断(串口,i2c等)的一个总中断入口,后面再根据中断其他寄存器进行判断处理

0x1C FIQ模式

中断向量从0x0000000--0x00000001C共4*8=32个字节,还应包括后面到0x00000040之前的代码都应该映射,因为后面包括具体跳转的地址。(所以要映射从0x0000000----0x000003F共64个字节,自己看汇编觉得)

对于下载的程序,必须要在KEIL设置好Ro_Base地址,然后将生成好的bin文件下载到R0_Base地址处。原因是绝对地址不同造成,也就是说对某个bin文件并不是想下载到哪个地方都可以运行。

值得注意:

1.MC51设置R0_Base, 只表示用户代码的存放区,R0_Base这个地址并不存放中断向量表,也不是main的入口地址

2.ARM设置R0_Base, R0_Base开始处就是中断向量表

MC51设置Ro_Base位置在于BL51 Locate--》Code Range

ARM设置ro_base位置在于target-->IROM

做过升级的例子:

(1)C8051F02*将用户的中断向量复制到0x0003之后,同时0x000-0x0002保留bootloader跳转地址,另外找个地方保存用户跳转地址,用于从bootloader区跳转到用户区。值得注意:bootloader区由于其他中断向量表被用户中断向量表占用,bootloader代码中不能出现中断函数。

(2) STR912 内部有bank0,bank1的映射功能,即可将bank0映射到0x0000,亦可将bank1映射到0x0000,这样就可以将一个bank作为bootloader ,另一个作为用户程序

(3) 2410 中断向量表位于底部,没有重映射机制。采用将中断向量二次映射的方法,将中断向量映射到指定的RAM区,然后在RAM写入用户的中断向量表。

(4) ADU7020 中断向量表位于底部,有重新映射机制,REMAP寄存器,可以将中断向量映射到FLASH或RAM选择,可以将用户的中断向量拷贝到RAM区,然后选择将中断向量映射到RAM,然后跳转

(5) STM32 支持中断向量映射。cortex-M3核有专门的向量偏移寄存器,该寄存器决定:

1. 向量表是位于FLASH还是RAM,向量表的基址

2. 向量表的偏移量

注:

一个优秀的IAP升级程序,必须做好升级中出现故障等异常的处理。保证系统不会崩溃

(1) 接收到升级命令,准备升级

(2) 接收升级数据完成,每个包最好有包序号和校验

(3) 整个数据接收完,进行总的校验

(4) 试运行刚升级的版本,发送读取版本信息或其他指令测试当前版本是否工作正常,如果不正常,外界通过对外专门的RESET引脚,恢复到原版本

(5) 接收到版本确认命令,将升级版本作为当前运行版本,并将原版本进行保存

另外:

(1)要保证升级过程中任何时候掉电,下次上电后,系统能正常工作。例如新的程序正在搬运到运行区时候掉电,下次上电要实现自动搬运

(2)正常情况下,系统一般由bootloader区跳转到用户区。如果用户区程序有问题的话,就玩OVER了,因此一定要在跳转之前加一定延时,可以响应升级命令

(3)执行bootloader区和用户区跳转指令,由于只是PC指针的跳转,寄存器并未恢复到默认值,因此对bootloader和用户区代码中的寄存器初始化要小心。

说到底最重要的还是bootloader程序一定要写好,这个毕竟是出厂前固化在FLASH中

给手机升级,主板升级,其中强调的就是不能中途掉电,否则就要。。。这个应该就是没做好升级处理吧

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京2025年2月5日 /美通社/ -- 2024年河北省科技奖总评审结果已正式发布,软通动力及旗下河北雄安软通动力数字科技有限公司深度参与研发的可信数字孪生关键技术及应用示范项目获评"2024年度河北省科学技...

关键字: 映射 物联网 数据采集 模型匹配

上海, 2022年10月27日 /美通社/ -- 近日,LucaNet蓝科联合中国德商会开展了一场以【中国境内外资企业面临的财报管理流程的挑战和解决方案】为主题的线上研讨会。 外资企业财报管理流程挑战及解决方案线上研讨...

关键字: 研讨会 数字化 映射 数据库

(全球TMT2022年9月9日讯)2022中国智能科技展览会及论坛9月6日在吉隆坡开幕。声智科技作为新兴的科技智能公司,受邀参与本次展会及论坛。声智在马来西亚成立的子公司SoundAl Technology (M) S...

关键字: API SOUND TECHNOLOGY 映射

云启天府 · 梦享桃源 成都2022年5月29日 /美通社/ -- 凯德投资旗下全资子公司、全球知名的服务公寓及酒店业主和住宿运营商 -- 雅诗阁有限公司(以下简称"雅诗阁")旗下物业...

关键字: MIDDOT 新加坡 映射 灯光

北京2022年2月16日 /美通社/ -- 近日,体育大生意发表了题为《谷爱凌“放心咬金牌”,冬奥奖牌映射中国科技大国侧面》的文章(原文链接:https://mp.weixin.qq.com/s/V_R13BfqdFEV...

关键字: 映射

关注星标公众号,不错过精彩内容来源 |痞子衡嵌入式一、Cortex-M中断向量表对齐原则中断向量表就是一个集中保存系统全部中断处理函数(xxxIRQHandler)地址的常量数组(函数地址要占4个字节,因此数组中每个元素...

关键字: Cortex-M 中断向量

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是Cortex-M中断向量表原理及其重定向方法。接着前文《嵌入式Cortex-M裸机环境下临界区保护的三种实现》继续聊,嵌入式代码设计里有时候一些特殊操作(比...

关键字: Cortex-M 中断向量

大家好,我是bug菌!最近一些朋友在玩在线升级,所以这里bug菌挑选了一篇原理与实践结合的技术文章,在stm32上实现还是比较详细的,以前bug也跟大家介绍过这一块的设计方案:【重磅】剖析MCU的IAP升级软件设计(设计...

关键字: STM32 IAP升级

1 数据传输层 数据传输层的主要功能将AD转换器采样的数据映射成8bit位宽的字节数据,并且根据应用的情况不同,分为4中情况: 一个AD转换器内的单个转换单元对应一条数据传输通道

关键字: 拓扑结构 映射

1、简单聊一聊      今天为大家推荐一首毛不易的《像我这样的人》,上面链接是现场版本音效上略有打折,不过歌曲所要传递的那份感情全在词里了,在成长的过程中人总会遇到几个情绪低落的阶段,面对现实的世界会觉得非常的力不从心...

关键字: MCU 软件设计 IAP升级
关闭