新闻中心

EEPW首页>嵌入式系统>设计应用> 基于PIC单片机的应用程序升级方法

基于PIC单片机的应用程序升级方法

作者: 时间:2011-11-05 来源:网络 收藏

实际应用中,将外部非易失性存储器(如E2PROM)的某些存储单元值当作是否进行程序升级的标志(以下简称程序升级标志)。单片机上电或复位后首先执行“GOTO0x400”指令,即跳转到引导程序。默认情况下程序升级标志是处于“正常运行”状态下的,引导程序调用跳转指令将用户程序引导到应用程序区,若运行过程中发现服务器有新的应用程序版本或接收到服务器发来的升级程序命令时,单片机将程序升级标志设置为“程序升级”状态,然后软件复位单片机。这时程序再次跳转到引导程序,根据程序升级标志,单片机进入程序升级状态,接收新的程序,并更新程序存储器的内容,升级完成后,单片机将程序升级标志设置为“正常运行”状态,然后再次软件复位,此时单片机运行于新的应用程序中。
由于引导程序和应用程序都可能用到中断,因此应用程序采用中断向量表,引导程序采用备用中断向量表,以执行各自相应的中断服务子程序。值得注意的是,在图2(a)中引导程序的首址为0x000400,这是因为dsPIC33F单片机执行一次擦除指令会擦除512条指令空间(即1“ 块”,占用1 024个地址单元),这意味着程序升级必须以1 024(即0x400)为单位。同理,应用程序的首址必须为0x400的整数倍,本文采用0x00C800。
从以上基本原理的分析可看出,程序升级功能的实现主要就是引导程序的实现。

2 引导程序的实现
2.1 程序流程
进入引导程序后,程序的执行流程如下:
(1)初始化电路板,包括单片机的工作频率、外围接口等,尤其要注意启用单片机的“备用中断向量表”。因为dsPIC33F单片机复位后默认启用“中断向量表”,而由基本原理的说明可看出,引导程序必须采用“备用中断向量表”。
(2)判断程序走向,通过程序升级标志判断是跳转到应用程序,还是执行程序升级流程。
(3)若程序升级标志为“正常运行”,则调用GOTO指令跳转到应用程序。
(4)若程序升级标志为“程序升级”,则执行程序升级流程,这是引导程序的重点。
程序升级按“块”更新,每“块”包含1 024个存储单元(以字为单位),即每帧数据需包含2 048个字节的程序代码。在更新程序时并不是简单地用接收到的新程序代码覆盖旧程序,对于一些特殊帧需特殊处理,通过对比应用程序编译后的程序存储器结构与实际应用中的程序存储器结构可以很好地理解这点。图2(a)所示为实际应用中的程序存储器内部结构;(b)为应用程序编译后的程序存储器结构。通过对比这两张图可以看出,“GOTO指令”、“备用中断向量表”、“引导程序”这些区间的程序不能直接覆盖,若“GOTO指令”被覆盖,则程序升级后程序直接跳转到应用程序,不会执行引导程序;若“备用中断向量表”被覆盖,则引导程序中的中断服务程序无法执行;若“引导程序”区间的内容被覆盖,则引导程序被清空,显然会带来灾难性的后果。因此对于第1帧数据需特别处理,该帧数据对应程序存储器第1块(地址为0~0x3FF)的内容,包含“GOTO指令”、“复位地址”、“中断向量表”和“备用中断向量表”的内容,为了保证"GOTO指令”和“备用中断向量表”的内容不被修改,需要先读出原“GOTO指令”和“备用中断向量表”的内容,替代接收数据缓冲区中对应位置的内容,然后写入程序存储区的第1块;对于第2帧到第50帧(0xe800/0x400),这些是引导程序的内容,显然不能做任何修改,因此这几帧数据接收后直接丢弃;从第51帧到最后一帧,这是应用程序的内容,也是真正要升级的内容,所以可直接覆盖旧内容。程序升级后,将程序更新标志恢复为“正常运行”状态,然后复位CPU,则经引导程序又进入了新的应用程序,从而实现了应用程序的升级。
基于以上说明可得引导程序的详细流程如图3所示。

基于PIC单片机的应用程序升级方法



评论


相关推荐

技术专区

关闭