随着MCU的广泛应用,其性能不断提高,集成度也日益提高。传统的MCU系统设计,在选好MC U后还要采购大量的分离器件(如地址锁存器、译码器、扩展芯片、RAM,EPROM,PLD等),使系统复杂度高、可靠性低,且调试繁琐、效率低下,造成设计复杂,印制板面积增大。还要考虑到各种干扰,总线竞争等很多因素,系统常常不稳定。
本文介绍一种基于闪烁存储器的在线可编程微处理器外围器PSD4235G2组成的MCU系统。即通过计算机串口将程序代码在线远程下载到MCU系统的存储器中,实现IAP的功能。
1PSD4235G2的性能特点
PSD4235G2( Programmable System Devices) 是ST公司设计生产的一种基于闪烁存储器的在线可编程外围器件。他将MCU系统外围器件高度集成在一起,并与MCU进行无缝连接,只需用2颗芯片MCU+PSD 即可代替众多的外围器件组成一套完整的MCU系统;他还集成了优化的“微控制器宏单元”逻辑结构,使系统地址/数据总线可以与内部寄存器直接互连,简化了控制总线的设计。PSD产品以其设计灵活、资源丰富和极高的性价比在嵌入式系统应用领域得到广泛应用。此外,PSD4235G2还具有以下特性:
(1) 采用多路复用或非多路复用的16位总线为控制器的简单接口。总线接口逻辑使用地址译码和读写时由微控制器自动产生的控制信号,可方便地与16位单片机80C196KC直接相连。
(2) 4 Mb主Flash,被分为8个大小相同的块,由用户规定的地址访问;256 kb次Flash,具有在更新闪烁存储器的同时执行代码的能力;64 kb SRAM通过连接外部电池可保护SRAM的内容使之免受电源故障的影响。
(3) 主Flash和次Flash可同时编程,即在执行来自一个存储器的代码时可同时对另一个存储器编程。
(4) 器件PSD4235G2包括2个PLD块,译码PLD(DPLD)和复合PLD(CPLD)。DPLD用于地址译码并产生内部存储器和寄存器的芯片选择信号;CPLD实现用户定义的逻辑功能。这些逻辑由16个输出宏单元和24个输入宏单元和“与”阵列构成。
(5) 52个单独可配置的I/O端口引脚,配置成MCU I/O,PLD I/O,锁存MCU地址输出、特殊功能I/O,漏极开路输出的I/O端口。
(6) 具有可编程电源管理功能(PMU),支持掉电模式的低功耗模式,使5 V待机状态的电流低至50μA;另外还具有自动检测控制器工作的功能。
(7) 内置JTAG的串行接口,使系统具有整个芯片系统内编程的能力。利用这个功能,用户可以对空的器件编程或现场对器件重新编程。
2系统设计
整个系统是由80C196KC单片机,PSD4235G2,D/A转换器和LCD显示器等构成,并通过上位机对其进行远程编程。其系统结构如图1所示。
80C196KC内部集成10位的A/D转换器,因而模拟量可以直接输入MCU。PSD4235G2具有2块大容量Flash、16个输出宏单元和24个输入宏单元,因而在与单片机组成系统时,很少需要外围分立器件,多数通过PSD4235G2中的宏单元逻辑组合产生与单片机连接的地址总线、数据总线、控制总线;同时,通过内部的逻辑译码产生3块独立存储区片选信号,即主Flash片选FS i、次Flash片选CSBOOTi和SRAM片选RS0。并且PSD4235G2与LCD、D/A电路的接口直接用其PA、PB口连接,只需在软件设计和单片机程序中相应设计为I/O模式或地址锁存模式。
系统由复位电路对80C196KC和PSD4235G2进行复位,主程序放入PSD4235G2中。程序升级时,上位机与80C196KC进行联络,联络成功后由上位机将升级程序发送下去,调制后送到该远程系统,而将数据解调后,通过80C196KC接口写到PSD4235G2的数据存储区。当接到上位PC机的切换命令后,80C196KC向PSD4235G2的寄存器中送一个状态值,由PSD4235G2的PLD对程序存储区和数据存储区进行切换,再加上其他的功能电路,就构成了一个完整的可远程程序升级的系统。80C196KC,PSD4235G2和串口的接口电路如图2所示。
3IAP(在线编程)设计
PSD4235G2有2个内部寄存器:页寄存器(page)和VM寄存器。8位的页寄存器可使MCU的寻址空间扩大256倍,他的内容可以由MCU来读写。页寄存器可直接参与PSD内部存储器的地址选择,在作为页寻址时写入要访问的页地址,PSD内部地址译码逻辑就立刻选中目标存储器空间。另外,在页寄存器实现分页存储时,应该设置一个公共存储器区,即程序在任何页面位置执行时都能访问到的空间(或者说是与页不相关的地址空间),用于放置初始化程序、中断服务程序、页切换程序以及物理设备驱动程序等重要子程序。同样,重要数据也应当在任何页都可以访问,例如PSD控制寄存器、I/O、用于保存堆栈和全局变量的系统RAM等。VM寄存器用来分开程序空间和数据空间,并把PSD4235G2中主Flash、次Flash和SR AM设置在不同空间。
在进行在线编程时,首先将PSD的次Flash存储器映射到80C196KC的程序存储区,将PSD的主F lash存储器映射到80C196KC的数据存储区,系统从PSD的次Flash启动,执行引导/下载程序,如果需要的话从上位机下载程序到PSD的主Flash存储器;然后,再通过PSD中的VM寄存器,将主Flash存储器存储空间从数据存储区跳变到程序存储区,转而执行Flash存储器中的程序,从而实现对原程序的升级。
系统的运行有2个基本模式:一个是引导/下载模式;另一个是正常运行模式。系统启动时从引导/下载模式到正常运行模式转换过程中系统存储器的变化步骤为:
(1) 上电时系统存储器映射
上电时系统开始执行次Flash中的程序,检查是否要通过MCU对主Flash中的程序进行升级。此时,PSD中主Flash存储器存储空间都处于MCU的数据空间,而次Flash存储空间则处于MCU的程序空间。
(2) 主Flash存储空间从数据空间移至程序空间
在完成对Flash中程序升级或不需要升级时,写VM寄存器为06H,将主Flash的存储空间从MCU的数据空间移到程序空间。
(3) 切换主Flash和次Flash存储空间
MCU从PSD次Flash中运行程序跳到主Flash中的运行程序。在程序写1到‘swap’位(上电时‘swap’的值是0)进行地址“切换”,程序就进入主Flash中运行了。
(4) 次Flash存储空间移至数据空间
程序已经在PSD的主Flash中运行,写0CH到VM寄存器,把次Flash的存储空间从MCU的程序空间移到数据空间。并且,MCU转跳到在PSD的主Flash的复位入口地址,用户的程序开始真正执行。
用户程序启动模块的流程如图3所示。