微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机程序远程升级的设计

单片机程序远程升级的设计

时间:01-19 来源:互联网 点击:

1.引言

单片机的应用非常广泛,在某些情况下,单片机内部程序的升级在所难免,但是往往需要对单片机产品进行收回才能实现,这样在一些远程设备的程序升级问题上就显得非常不方便。但是有些远程设备本身留有远程通讯的方式:例如某些远程数据传输模块,为了把数据上报总会留有通讯的接口,比如422、485甚至 GPRS或者局域网接口;又或者某些车载定位设备,为了和监控中心通讯会留有GSM、CDMA或者GPRS等通讯方式。在这种情况下就可以利用其现有的通讯方式对其内部单片机程序进行升级而不需要收回产品。

本文的主要内容就是来研究这种远程升级单片机程序的方法。

由于近年来凌阳科技的单片机,尤其是16位单片机,得到了越来越多的推广,其应用领域越来越广泛。本文选取一种常见的凌阳科技的16位单片机SPCE061A为例,来介绍单片机程序远程升级的方法。

SPCE061A里内嵌了32K字的闪存(FLASH),即可以作为程序存储空间又可以存储数据,并且有自读写任意闪存地址的能力,本文利用这一功能,提出了通过在单片机中驻留BootLoader程序的方法,来实现单片机程序的远程升级。

远程升级的实现,需要单片机自身的响应同时还需要远程服务器提供升级所需的代码。下文将通过这两个方面来分别介绍。

2.单片机程序

2.1 工作原理

为了使单片机可以响应远程升级,这里采用了在单片机里预设Bootloader程序的方法。

BootLoader是一段引导程序,它驻留在单片机中,当单片机上电/复位后在用户程序之前先运行。它运行后先判断当前是否需要进入升级状态。如果不需要升级,就直接运行Flash中原有的程序;如果需要升级,首先擦除旧的程序,然后从串口接收用户程序,同时写入Flash中。

在单片机正常运行过程中,当收到预先设置的升级指令时,即结束当前任务,修改升级标志位,然后自动复位转入BootLoader程序;当BootLoader程序检验到升级标志位时即可进行升级。在单片机正常启动、复位时,由于有标志位的作用,不会受到影响。

BootLoader程序可以从多种方式获取数据,包括485、422、GPRS、CDMA、网口、串口等等;虽然各种获取方式不同,但是在 BootLoader的设计上都大致相同,而且GPRS、GSM和CMDA等通讯方式都是使用串口;485、422等通讯方式与串口类似。为了节省篇幅,本文就以串口为例进行介绍。

在BootLoader设计过程中,需要注意下面方面问题:一是精简问题,为了使得用户程序可以获得最大的程序空间,就需要BootLoader程序尽可能的简短;再一个是中断问题:BootLoader应尽量不使用中断,以避免对用户程序的影响;还有就是标志位的问题,标志位的应该不受复位的影响,在本设计中,选取了单片机FLASH中的一个字节。

2.2设计思路

单片机系统上留有一个半串口通过232芯片与PC机的串口相连接。当单片机上电或者复位后BootLoader开始运行,并通过访问升级标志位来确定定当前是否需要进入升级状态。如果没有升级标志,就直接运行Flash中原有的程序;反之,则转入升级子程序,把从串口接收到的程序代码写入Flash 中。图1表示了BootLoader主程序的流程。

升级子程序中,为保证接收到的数据是正确的,避免将错误的程序写入到芯片中,本文提出的方法采取了固定的数据格式,并且采取了反复确认的方法。图2 表示了升级子程序的流程。在指令格式的选取上,本文采用了Motor S37格式,并在其基础上加上了确认机制,其具体格式将在PC机程序一段做详细介绍。

2.3 FLASH的擦写方法

SPCE061A是一个用闪存替代掩膜ROM的MTP(多次编程)芯片,具有32K字(32K*16bit)闪存容量。用户可用闪存来存储用户程序。为了安全起见,不对用户开放整体擦除功能。

此外,为保证程序的正确编写,用户必须在编程之前擦除页的内容。页大小为0x100。第一页地址范围:0x8000~0x80FF,最后一页的地址范围:0xFF00~0xFFFF。0xFC00~0xFFFF范围内的地址由系统保留,用户最好不要用本范围内的地址。 32K字的内嵌式闪存被划分为128个页(每个页存储容量为256个字),它们在CPU正常运行状态下均可通过程序擦除或写入。

闪速存储器芯片的编程操作是自动字节编程,既可以顺序写入,也可指定地址写入。编程操作时注意芯片的编程时间参数。Flash程序空间为 0x8000—0xFFFF,Flash命令用户接口地址为0x7555。第一页范围是[0x8000—0x80FF],最后一页[0xFF00— 0xFFFF]。1. 擦除一页流程是:先给命令用户接口地址0x7555里送0xAAAA,然后再给命令用户接口地址0x7555里送0x5511,再后给要擦除页地址送任意数,约20ms即可完成擦除操作,然后可以执行其它操作。例如擦除第

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top