首页 > 嵌入式硬件 > 嵌入式处理器

0 引言

本文引用地址: http://www.21ic.com/embed/hardware/processor/201806/64026.html

dsPIC33F系列单片机是美国微芯公司(Microchip)推出的一款高性能单片机,它将数字信号处理器(Digital Signal Processor,DSP)的高速运算能力与单片机的控制特性无缝地集成在一起,为嵌入式系统设计提供了高性价比的单芯片、单指令流的解决方案,在音频处理、视频处理及工业控制等方面得到了广泛应用。但是在实际应用中,由于客户需求变化或程序BUG修改等原因,经常出现需要使单片机应用程序升级的情况,本文利用dsPIC33F单片机运行时的自编程(Run-Time Serf-Programming,RTSP)特性,实现了基于该单片机应用程序的升级功能。

1 基本原理

dsPIC33F系列单片机提供了两种方式用于对其内部程序存储器进行编程:在线串行编程(In-Circuit Serial Programming,ICSP)和运行时自编程(Run-TimeSelf-Programming,RTSP)。ICSP使用5根线对单片机编程,主要用于产品调试或生产过程中,显然不适合用于产品运行时的程序升级。RTSP是通过使用TBLRD(表读)和TBLWT(表写)指令来完成的,使用RTSP可以一次将64条指令(192 B)的块(或“行”)或单个程序存储字写入程序存储器,也可以一次擦除512条指令(1 536 B)的块(或“页”),由于该方法采用程序指令实现了自编程,可应用于产品运行时的程序升级,因此本文采用RTSP方法实现基于dsPIC33F系列单片机的应用程序升级功能。程序升级的实质是对程序存储器内容的更新,所以有必要先了解一下dsPIC33F单片机的程序存储器内部结构。

1.1 dsPIC33F单片机的程序存储器内部结构

dsPIC33F单片机的程序存储器结构如图1所示。一般情况下,“复位地址”的内容为全0,单片机复位后均从程序存储器地址0的位置上开始执行,即从图1中的“GOTO指令”位置开始执行。在这里存放了一个跳转指令,直接指向用户程序的首址,默认情况下该位置的指令为“GOTO 0x200”,即默认跳转到首址为0x200的用户程序(图1中的“用户程序存储空间”)开始执行。dsPIC33F单片机具有2个中断向量表,即“中断向量表”和“备用中断向量表”,地址分别从0x000004~0x0000FF和0x000100~0x0001FF这两个中断向量表允许使用不同的中断服务程序来处理每个中断源。程序升级功能正是基于程序存储器内部结构的以上特性而实现。

1.2 程序升级功能的实现流程

将图1中的“用户程序存储空间”分为引导程序和应用程序2部分,如图2(a)所示。引导程序用于引导用户程序是进入升级状态,还是进入正常运行状态,若进入升级状态则接收新的程序数据,并更新程序存储器的内容;若进入正常运行状态则程序跳转到应用程序区。应用程序是为了实现产品功能而编写的程序,也就是本文所谓“程序升级”的对象。

实际应用中,将外部非易失性存储器(如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所示。

2.2 关键细节的实现

(1)启用“备用中断向量表”。设置INTCON2寄存器中ALTIVT控制位的值,其值设置为“1”则启用“备用中断向量表”;设置为“0”则启用“中断向量表”。

(2)程序首址的设置。在以上流程的说明中谈到引导程序的首址为0x400,而应用程序的首址为0xc800,则设置程序的首址可通过修改链接描述文件(.gld文件)实现。以dsPIC33FJ256GP710单片机为例,将引导程序首址改为0x400,其实现步骤为:打开p33FJ256GP710.gld文件,将其中的“program(xr):ORIGIN=0x200,LENGTH=0x2AA00”改为“pro-gram(xr) :ORIGIN=0x400,LENGTH=0x2A900”;将“_ _CODE_ BASE=0x200”改为“_ _CODE_BASE=0x400”。应用程序首址的修改也采用相同方法。

(3)读/写程序存储器。在参考文献中有很完整的原理说明,也有完整的源代码,可直接使用。

(4)软件复位CPU。在应用程序运行过程中发现需升级程序或在引导程序中升级程序完毕时,均需对CPU进行软件复位,这可通过dsPIC33F单片机提供的“reset”指令实现,可在程序相应位置执行“reset”指令即可。

3 实际应用中若干问题的探讨

3.1 程序升级正确性问题

上文仅重点说明了程序升级的方法,未对程序升级的正确性展开讨论,但在实际应用中,由于传输干扰的存在,接收的新程序数据可能出错,这时如果没有相应的应对措施,显然会影响到产品的正常运行。为了保证程序升级的正确性,常用的应对措施有以下几种:

(1)对每帧数据进行严格的校验(如CRC校验),校验通过后再更新相应的程序存储区;更新程序存储区后,重新读出程序存储区数据,并与接收到的数据进行比较。只有当数据比较无误后才开始接收下一帧数据。

(2)若不考虑硬件成本,也可外置一个数据存储器,将所有新程序数据完全接收并校验通过后才统一更新程序存储器,最后把整个程序存储器的数据与接收到的数据逐一比对,若比对无误则升级结束。

(3)若应用程序占用空间不大,也可将程序存储器中应用程序区再分为两部分。程序升级时轮流覆盖这两部分,这种操作方式使程序存储器同时保存旧版本和新版本两个应用程序,当新版本程序因某种原因运行不正常时,可由引导程序将应用程序切换到旧版本。

第(1)种方法最容易实现,但是应用程序只有在整个升级过程完全结束后才可以正常运行,若升级过程因某种原因通信中断,则应用程序一直无法运行,这是该方法最大的缺陷。

第(2)种方法也很容易实现,而且由于它是在新程序数据全部接收后才开始升级,因此克服了第(1)种方法的缺陷,但是该方法需增加硬件成本,且要占用单片机更多的硬件资源(用于与外部存储器之间的交互)。

第(3)种方法也可以克服第(1)种方法的缺陷,而且不需增加硬件成本,但是该方法的实现显然比前两种方法复杂得多。以上3种方法各有优缺点,在实际应用中可根据实际情况选择。

3.2 断点续传问题

在实际应用中,可能因某种原因(如断电复位)而需重新开始程序升级,这时如果还是从第1帧数据开始传输,则会造成时间上的浪费,而且对于一些以流量计费的通信网络(如GPRS)还会造成通信费用的浪费,因此在实际应用中有必要实现“断点续传”功能。这可通过模仿FTP断点续传原理来实现,即单片机每正确接收并存储一帧数据则刷新存储于外部非易失性存储器(如EEPROM)中的升级信息(含当前帧号),若重新开始程序升级,则将当前升级信息发给服务器,服务器可从“断点”开始发送数据,从而实现了“断点续传”功能。

4 结语

基于dsPIC33F系列单片机的应用程序升级方法已在开发设计的IPPhone和安防系统等产品中成功应用,且运行稳定可靠。虽然本文讨论的程序升级方法是基于dsPIC33F系列单片机,但其基本原理同样适用于其他具备运行时自编程或有应用编程(In Appplication Program,IAP)功能的单片机中。

换一批

延伸阅读

[行业资讯] 齐聚深圳、嵌入式专家研讨人工智能时代发展机遇

齐聚深圳、嵌入式专家研讨人工智能时代发展机遇

近日,嵌入式系统联谊会第23次主题讨论会就这些问题,邀请业内知名专家和学者做了深入的探讨!本次会议由嵌入式系统联谊会、深圳北航新兴产业技术研究院主办,深圳北航物联网研究院、物联网咖啡承办,北京航空航天大学出版社、泰智会共同协办。主题为”人工......

关键字:嵌入式 单片机 人工智能 嵌入式系统

[行业资讯] MCU市场:中国制胜的方法

MCU市场:中国制胜的方法

MCU作为一个成熟的芯片类型,其市场竞争一直非常激烈,特别是在ARM推出的Cortex M系列内核之后,厂家对于实现产品的差异化以取得竞争优势就更加重视了。然而该如何更好地实现产品的差异化呢?记者采访业界主流企业。 ......

关键字:MCU 中国芯 单片机

[行业资讯] 如何选购单片机成品开发板

如何选购单片机成品开发板

为了尽早熟练掌握单片机程序开发,我们在学习单片机的时候,是比较有必要选择一款适合的成品单片机开发板的,毕竟通过自己搭建所有电路的难度比较大的。下面我们来简单介绍......

关键字:开发板 单片机

[行业资讯] 嵌入式技术不断革新的今天,为何8位MCU市场依然潜力巨大?

嵌入式技术不断革新的今天,为何8位MCU市场依然潜力巨大?

今日话题事实上,在工业控制、安防、物联网、消费类电子等诸多领域,8位MCU的身影依然处处可见,而且不断推陈出新。从市场的占有率和销售额来看,8位 MCU的市场份额甚至还......

关键字:嵌入式 MCU 单片机

[行业资讯] 电子半导体行业微处理器分类及主要原厂

电子半导体行业微处理器分类及主要原厂

中央处理器是一块超大规模的集成电路,是一台计算机的运算核心和控制核心,它的功能主要是解释计算机指令以及处理计算机软件中的数据。主要包括运算器和高速缓冲存储器及实......

关键字:半导体行业 DSP 处理器

[真心话] 在美国的电子工程师看中国电子行业,为什么不受发达国家待见?

在美国的电子工程师看中国电子行业,为什么不受发达国家待见?

首先声明我承认中国有很多问题。但我个人是不太相信那种把中国的各种问题一罗列,就得出结论迟早要完之类结论的。这种论证太廉价。要说问题,三四十年前问题更多,八十年代的公知讲喊的是“河殇”,但中国没有完蛋,还是走过来了。风物长宜放眼量。......

关键字:美国 电子工程师 中国 电子行业

[新鲜事] Linux之父怒喷谷歌安全工程师为哪般?

Linux之父怒喷谷歌安全工程师为哪般?

上周五,Linux 之父 Linus Torvalds 在内核邮件列表上用很犀利的言辞抨击了 Google Pixel 安全团队的开发者 Kees Cook,引起了大家广泛地讨论。......

关键字:Linux 谷歌 安全工程师

[新鲜事] 波士顿动力正在制造令人害怕的“机器狗军队”,明年出货1千台SpotMini机器人

波士顿动力正在制造令人害怕的“机器狗军队”,明年出货1千台SpotMini机器人

波士顿动力公司正在制造令人害怕的“机器狗军队”!目前,该公司表示,到2019年7月,将实现每年量产1000个紧凑型SpotMini机器人。SpotMini是公司研制多款机器狗中体型最小的,身高两英尺9英寸,重量66磅......

关键字:波士顿动力 机器人
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14