新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 8031+PSD813实现在线编程

8031+PSD813实现在线编程

作者:时间:2012-01-30来源:网络收藏

引言

  “在应用可再编程”(In-Application reProgrammable,简称IAP)通常称为“在线编程”,已经不是陌生的概念了。要实现嵌入式微控制器/处理器系统的IAP功能,就意味着可以用主机(PC机或服务器)通过通信通道把固件(程序代码)下载到应用系统的存储器中去。具有了IAP功能的电子产品有诸多益处:缩短开发进程,抢先占领市场;在装配线上即可编程和测试;现场甚至是远程升级程序代码,降低维护/升级成本。IAP技术对于通信、电力领域非常重要,如IC卡电话、分时计费电表等产品,通过远程更新代码能大大降低后期服务费用。

  目前最常用的微控制器仍是MCS-51系列,其有限的存储空间、运行时不能更改程序代码、程序/数据空间必须分开等条件限制了IAP功能的实现,其中要解决的关键问题有以下几个方面:

  (1) 存储器可在线再编程。
  (2) 增加第二个存储器阵列,用于IAP期间MCU的运行。
  (3) 实现对程序存储器的写入。
  (4) 地址译码自动生成。

  Waferscale(WSI)公司推出的Easy FlashTM系列可编程外围芯片产品PSD8XX是针对实现IAP问题而设计的,片内提供了IAP所必需的两块独立的存储器阵列和自动地址译码电路,与 80C51构成两芯片的IAP完整解决方案。我们用到的F1芯片内部有:1MB Flash主存储器、第二块256KB EEPROM存储器、16KB SRAM、复杂的可编程逻辑阵列CPLD,扩展I/O口及JTAG接口等功能模块。

一、 方案说明

  在介绍方案之前,首先介绍将用到的PSD的两个内部寄存器:页寄存器(page)和VM寄存器。在PSD内部有一组控制寄存器用来对PSD进行设置,如I/O口方式、JTAG配置等。它们的地址是基址CSIOP加偏移地址。CSIOP地址可以在Able语言(见附录)中设定。页寄存器的偏移地址是E0H,VM寄存器的是E2H。当CSIOP被定义为0900H时,它们的访问地址就是(0900+E0)H和(0900+E2)H。8位的页寄存器可使MCU的寻址空间扩大256倍,它的内容可以由MCU来读出和写入。页寄存器直接参与PSD内部存储器的地址选择。在作为页寻址时写入要访问的页地址, PSD内部地址译码逻辑就立刻选中目标存储器空间。页寄存器是可以按位使用的,在不用来作页面选择时,还可以作一般逻辑使用,如本方案中用到的swap、 enabledatahalf就是用页寻址未用到的位来实现的。VM寄存器用来分开程序空间(PSEN信号使能)和数据空间(RD信号使能), F1中Flash和EEPROM、SRAM可设置在不同空间。VM寄存器内容定义如表1所列。

  如果VM=12H,则设置Flash和SRAM位于数据空间,EEPROM位于程序空间。

  使用页寄存器实现分页存储时,应该设置一个公共存储器区,即程序在任何位置执行时都能够访问到的空间(或者说是页不相关的地址空间)。本方案中公共存储器区占去了每一页的低一半的存储空间(如图1~图4所示),用于放置初始化程序、中断服务程序、页切换程序以及物理设备驱动程序等重要子程序。同样,重要数据也应当在任何页都可以访问,如PSD控制寄存器、I/O、用于保存堆栈和全局变量的系统RAM等。

表1 VM寄存器
按此在新窗口浏览图片

按此在新窗口浏览图片
图1 上电时(启动/引导状态)系统存储器(VM=12H)

按此在新窗口浏览图片
图2 写06H到VM,将Flash“移”到程序空间后系统存储器

按此在新窗口浏览图片
图3 “swap”位写1,“切换”Flash和EEPROM后系统存储器

  本方案充分利用了F1中存储器的独特功能,突破了80C51MCU的最大64KB访问空间的限制,PSD内部所有Flash存储器可以由80C51使用。 IAP实现的基本原理是:系统从PSD的EEPROM启动,执行引导/下载程序,如果需要的话从PC机或其他主机中通过UART下载固件(程序)到PSD 的Flash存储器。然后,程序从EEPROM转跳到Flash,再通过PSD中的一个特殊寄存器VM将原引导区(地址0000H)的EEPROM用 Flash替代,实现了通过UART对PSD中Flash存储器的在线编程。

二、 系统存储器映射

  系统启动过程中存储器的映射变换如图1~图4所示,其中FSx、EESx是PSD813F1内部存储器块。FSx对应8个Flash块,每块16KB;EESx对应4个EEPROM块,每块8KB。

按此在新窗口浏览图片
图4 写0CH到VM,将EEPROM“移”到数据空间后系统存储器映射

  MCU的运行有两个基本模式:一个是引导/下载模式;另一个是正常运行模式。图1~图4显示了上电启动后从引导/下载模式到正常运行模式转换过程中系统存储器的变化。

  图1显示了上电时系统存储器的映射情况。系统从EEPROM开始,检查是否要通过80C51的UART对Flash中的程序进行升级。此时, PSD中全部Flash存储器都处于80C51的数据空间,而EEPROM则处于80C51的程序空间。这是在WSI的PSDSOFT开发系统第二个步骤的“PSD Configuration”中设置的。在“Set VM Register Configuration at Power Up”框内,设置Flash为“Data Space”,EEPROM为“Program Space”。此时,VM寄存器在上电时自动被设置为12H。PSD813F1允许在程序执行中改变VM寄存器的内容,这对于实现IAP也是非常重要的。

  在完成对Flash中程序升级或不需要升级时,写VM寄存器为06H,将Flash从80C51的数据空间“移”到程序空间(此时系统仍在EEPROM中运行)。图2显示了Flash被移到程序空间后的情况,这是在VM寄存器被写后立刻产生的。

  下一步,80C51运行程序从PSD EEPROM中“跳”到Flash。在程序写1到“swap”位(上电时“swap”的值是0)进行地址“切换”,程序就进入Flash中运行了。注意:如果在EEPROM中运行时对“swap”写1,结果会立刻发生(就好像抽掉了你正坐的椅子一样)。所以,在此之前最好将程序转跳到“切换”影响不到的段(即公共访问区,如FS1)。现在,供MCU上电时引导(地址0000H)的EEPROM被Flash替代,如图3所示。

  最后一步,程序已经在PSD的Flash中运行,写0CH到VM寄存器,把EEPROM从80C51的程序空间“移”到数据空间。并且,MCU 跳转到在PSD的FLSAH FS0块中的复位入口0000H,用户的程序开始真正执行。此时,系统存储器映射如图4所示(正常工作模式)。所有PSD的128KB Flash都在程序空间,其中32KB是公共访问区,96KB采用分页访问。同时,EEPROM全部位于数据空间,且可在任何页进行访问。请注意: EES2和EES3(地址是C000H至FFFFH)可以被用户当作一般数据存储器使用,而EES0和EES1则保留为系统引导代码区(地址是8000H 至BFFFH)。

  这一方案还可以实现对PSD中EEPROM的引导程序进行升级,此时程序在PSD的Flash中运行。这对于使用EPROM作为引导的IAP系统是不可能实现的。

  为了避免处于程序空间EES0、EES1中的引导代码被意外更改,还可以通过未用到的页寄存器位实现另外一个功能,对引导代码进行保护。定义 “enabledatahalf”位,将它写为1,一方面保护ESS0、ESS1,另一方面把EES2、EES3作为一般数据存储器使用。如果要升级引导代码,则须先将“enabledatahalf”置为0,下载新的引导代码到EES0、EES1,然后再将“enabledatahalf”置为1。必须保护好引导代码,因为引导程序一旦被破坏,系统就彻底崩溃;如果仅仅是用户程序被破坏,还可以通过UART重新下载。

三、 软件设计

  通过上面的介绍可知,实现IAP的软件要包括系统启动和用户系统的载入两个部分。其中的关键是程序在Flash与EEPROM之间的切换。

  系统启动的引导程序是放在EEPROM中的;用户程序则放到Flash中。如果用户仅希望实现对Flash中的用户程序的IAP功能,而不要对 EEPROM中引导程序的升级,那么用户程序可以像一般80C51程序一样,不用作任何修改,直接放入Flash。如果用户还要对引导程序进行升级,还要在用户程序模块中嵌入一个启动模块(详见第四节)。

  引导程序(boot)和用户程序启动模块(startup)的流程图如图5和图6所示。

按此在新窗口浏览图片
图5 EEPROM引导程序(boot)

按此在新窗口浏览图片
图6 Flash引导程序(startup)

  与之配合使用的PC机程序是RS-232接口通信程序,可参考相关例程,或直接使用Windows中的“超级终端”工具。

四、 系统实现

  第一步,设计用户程序。

  如果不需要对引导程序升级则不作修改,直接将程序代码下载到Flash中;反之,则要在用户程序模块中加入一个启动(startup)模块。方法是用L51(Franklin公司产品)将用户模块和startup模块链接在一起。方法如下:

  L51 用户OBJ文件>, startup.obj

  第二步,使用PSDsoft开发系统进行设计。

  在PSDsoft开发系统中建立一个新项目,将PSD器件选定为PSD813F1。在流程图设计“degin entry”中增加新Abel模块,进行硬件描述设计,除用户的自定义功能外还应包括IAP部分(参见附录)。并且,在“device config”中设置MCU总线方式、JTAG、用户码等选项。特别注意的是在MCU总线中,设控制信号为“WR,RD,PSEN”,Flash为数据存储器,EEPROM为程序存储器。然后,对以上部分进行编译和装配。

  第三步,把编译好的模块和MCU程序模块合并成一个文件。这里重要的是EEPROM中的引导程序。Flash中的程序可以同时装入,也可以在应用中通过UART装入。

  最后一步,用DK800开发工具的Flash Link电缆或芯片编程工具(PSDpro)对PSD813进行编程。

  将按上述方法编程好的PSD813芯片装到用户电路板(包含RS-232接口通信电路)上,用串行电缆与PC机串口相连,在PC机上运行 PSDload程序或Windows通信附件“超级终端”。加电复位用户板,IAP系统启动,与PC机连接成功后,就能通过PC机下载或升级PSD中的用户程序。如果没有PC连接或没有下载要求时,系统会自动进入用户程序运行。

  PSD813中主Flash存储器和第二个存储器阵列EEPROM在物理上是独立的,不存在任何逻辑上的区别。也就是说,可以用Flash存放用户系统,也可以用EEPROM。如果用户程序很小(EEPROM的空间就够用),而用到的数据空间又很大,可以把上述方案中的Flash和EEPROM 交换使用。并且,我们举出的Flash、EEPROM、SRAM的地址映射也仅是PSD813F1的多种地址映射方案中的一个,使用页寄存器可以灵活设计用户自己的地址映射方案。

  这里用的是UART通信,用户同样可以选择其他通信方式,如IR、RF、CAN、LAN、WAN,甚至是Internet。从一般性考虑,本方案同样可适用于其他单片机系统中,只要通过简单修改提供的程序即可使用。另外,本方案中的PSD813F1可以用WSI公司其他PSD8XX产品或最新的 PSD9XX系列产品替换,仅需要在附录文件中稍加修改。

附录 Abel硬件描述语言文件

//定义‘swap’位至页寄存器位pgr7,
//定义‘enabledatahalf’位至页寄存器位pgr7:
swap node 117; (pgr7)
enable_data_half node 116; (pgr6)
//Flash片选方程如下:
fs0=((address>=^h8000) (address=^hBFFF) (page==3) !swap ) #((address>=^h0000) (address=^h3FFF) (page==X) swap );
fs1=(address>=^h4000) (address=^h7FFF) (page==X);
fs2=(address>=^h8000) (address=^hBFFF) (page==0);
fs3=(address>=^hC000) (address=^hFFFF) (page==0);
fs4=(address>=^h8000) (address=^hBFFF) (page==1);
fs5=(address>=^hC000) (address=^hFFFF) (page==1);
fs6=(address>=^h8000) (address=^hBFFF) (page==2);
fs7=(address>=^hC000) (address=^hFFFF) (page==2);
//EEPROM片选方程如下:
ees0=((address>=^h0000) (address=^h1FFF) (page==X) !swap) #((address>=^h8000) (address=^h9FFF) (page==X) swap !enabledatahalf);
ees1=((address>=^h2000) (address=^h3FFF) (page==X) !swap) #((address>=^hA000) (address=^hBFFF) (page==X) swap !enabledatahalf);
ees2=(address>=^hC000) (address=^hDFFF) (page==X) enabledatahalf;
ees3=(address>=^hE000) (address=^hFFFF) (page==X) enabledatahalf;
//定义SRAM片选 rs0=(address>=^h0100) (address=^08FF) (page==X); //定义PSD控制寄存器CSIOP地址
csiop=(address>=^h0900) (address=^09FF) (page==X);

参考资料

1 PSD8XXF系列数据手册及应用笔记.武汉力源,1998(8)
2 PSDsoft User Manual. 美国WSI公司,1998

存储器相关文章:存储器原理


电能表相关文章:电能表原理


评论


相关推荐

技术专区

关闭