首页 > 技术支持 > ST 意法uPSD技术支持

μPSD单片机中存储器系统的配置

介绍μPdD的存储器系统内部结构和配置方法,讨论了相关psdsoft软件的使用方法。

背景

如果对st公司的μPSD器件有一定了解,熟悉mcs-51系列单片机的内部结构及原理,使用过psdsoft express和keil开发设计,将对理解本文有很大的帮助。

mcs-51单片机采用哈佛结构的系统结构,即数据存储器空间与程序存储器空间互相独立。它有16根地址总线,最大寻址能力为64k,这决定程序或数据空间不能超过64k。以上两点是本文所有讨论的前提基础。

μPSD的存储器系统结构
μPSD由标准8032核和st公司的psd(可编程系统器件)构成,存储器系统包含两个主要部分,一是8032的内部存储器资源:256b内部ram和128b内部特殊功能寄存器sfr;二是psd中的存储器模块:主/次flash存储器,扩展的sram及控制psd的csiop(chip-select i/o port,类似于8051的sfr)。μPSD的主/次flash是完全相同的存储介质(早期的psd813f1中的次存储器是eeprom结构的),是两个独立的存储器。主flash通常分4~8块,每块16~32kb;次flash通常分2~4块,一般每块为8kb。μPSD中使用译码可编程译码逻辑阵列(dpld),页寄存器page,存储器控制寄存器vm,联合实现对存储器系统的配置。

关于iap和分页技术
为什么μPSD中要有两个flash?简单地说,这是为了实现iap而设计的。iap就是 “在应用中编程或升级代码”,其原理是:单片机中装有一套用户程序和一套代码更新程序。正常情况下,单片机运行的是用户程序;在需要程序升级时,系统会切换到代码更新程序,通过串口或其他通信口下载新的用户程序代码,并写入到原来的用户程序存储器中,更新完成后,再切换回至用户程序。基于mcs-51系统结构特点,在同一个存储器中运行主程序和改写程序是不可能实现的。所有用mcs-51来实现iap功能的系统都必须有两个独立的存储器。实现iap的难点在于存储器的切换控制,体现在μPSD中主要就是如何使用vm寄存器以及如何对存储器的片选控制。

此外,随着应用要求越来越高,代码长度不断增加,64k的限制已经成为设计中的瓶颈。许多软/硬件供应商都竭力推出自己的方案以实现mcs-51对大于64k的支持,分页技术应运而生。

分页设计中最重要的就是公共区和分页区的设置,所谓公共区就是在所有的页面中均为有效的一块存储器区。在程序空间中,64k范围(1页)内的程序是连续的,一旦超过此范围,只保留低16位,最高位将被丢弃,程序会跳回开始处运行。保证程序在页面切换时不会“跑飞”就是通过公共区实现的。分页技术的实现方法是:当程序在调用位于分页区的程序时,首先保存返回地址,然后转跳到公共区执行,再修改页寄存器到新的页号实现页面的切换,调用程序,返回到公共区,恢复原来页号,最后从保存的返回地址返回。

公共区的大小由用户自行设定,在μPSD中通常使用主/次flash中的一块或多块作为公共区,如使用1块次flash即8kb,2块次flsah即16kb,1块主flash则是32kb,若只想使用主flash中的20kb作公共区也是可行的,只要将主flash的地址范围只定义为20k的范围就可以了。当然,公共区的大小不能超过64k。公共区必须设在64k范围的低端,这是因为mcs-51中断入口地址的原因。公共区中保存所有的公用子程序,中断服务程序,全局常数表以及系统的初始化部分及页面切换程序。

μPSD存储器的空间配置
μPSD中存储器系统配置主要是对程序空间的设置,相对而言数据空间的配置稍微简单一点。μPSD中主/次flash可设置为程序或数据空间,这是由vm寄存器决定的,vm寄存器的作用如表1所示。vm的内容可在运行时由mcu进行修改,这是实现iap的关键。在psdsoft软件流程中可设置主/次flash为程序、数据存储器或程序/数据混合存储器,实际上就是对vm寄存器上电时的默认值进行设置,换句话说,就是确定上电时主/次flash分别位于什么空间。

表1 vm寄存器各位作用

vm寄存器各位作用

表中,“#rd可以/不能访问”是指此存储器是否位于数据空间,“#psen可以/不能访问”是指此存储器是否位于数据空间,因为在mcs-51系统中对外部数据/程序空间的访问就是通过#rd和#psen进行区分的。举例说明:

vm=0ch,表示主flash位于程序空间,次flash位于数据空间;

vm=16h,表示主flash位于数据和程序空间,次flash位于程序间。

位0用来指定sram是否位于程序空间,因为sram只在数据空间有效。位7用来指示外设io模式的允许与禁止,具体将在后面介绍。图1可帮助对vm寄存器作用的理解。

μpsd中存储器系统结构

图1 μPSD中存储器系统结构

如图1所示,vm位0~4与#rd、#psen联合实现对主/次flash及sram的选择。这里是通过输出允许#oe信号进行控制的,也就是说即使存储器的地址有效(cs有效),如果#oe无效,也不能访问到此存储器的内容。主/次flash的#oe有两个有效输入项,由vm位3/4控制#rd是否起作用,vm的1/2位来控制#psen是否起作用。在vm的各位确定后,可依图1画出简化的配置结构。这里的#oe信号是对主/次flash的每一块同时有效的。

在实现iap时,通过vm来实现对主/次flash的空间进行换,例如,主flash作用户程序,次flash用作升级程序;正常工作时,主flash作程序空间,运行用户代码,在进行程序升级时,将次flash切换作程序空间,并运行次flash中的升级程序,再把主flash换到数据空间,对主flash中的用户代码进行更新。

μPSD存储器的地址配置
μPSD中对存储器地址分配需遵守以下规则:
规则1.主/次flash块fs0~fs7,csboot0~csboot3的地址范围不能大于其物理尺寸;

规则2.主flash块fs0~fs7之间地址不能重叠;

规则3.次flash块csboot0~csboot3之间地址不能重叠;

规则4.sram、i/o、外设i/o地址不能重叠;

规则5.主flash,次flash和sram,i/o,外设i/o,若地址重叠,存储器有效优先级为sram、i/o、外设i/o最高,次flash次之,主flash最低。

在psdsoft设计中,若违反规则2、3、4会出现错误,必须修改才能进行下一步;而违反规则1只会发出警告,如果忽略一定要小心。规则5属于解释型规则,不会提出任何提示,注意地址重叠情况下优先级低的存储器不能被访问。

μPSD中通过dpld对每个存储器的地址进行分配,dpld的结构如图2所示。

dpld的结构

图2 dpld的结构

dpld包括“与”阵列和“或”阵列,“与”阵中有输入项共57项,“或”阵中有输出项共16项。输入项表示可参于地址译码的信号,输出项即每个存储器的cs信号。

dpld的输入项中最常用的是a0~a15,页寄存器pgr0~pgr7,#rd、#psen、#wr、ale。pdn是在功率管理时使用,如果在地址中加入pdn,表示只有在电源有效时地址译码才有效,通常这项是自动加入的,使用者可不用管。

dpld的输入项和输出项不是必须全部配置的。在对μPSD的存储器进行地址配置时,一个最重要的原则是“不超过64kb就不要分页,没有使用到的块就不必配置”。对于小的项目中没有使用到所有存储器,不用去配置,这样既简单,减少出错,又方便调试和检查。除csiop是必须配置的外,其他项均可根据需要进行配置。

psel由外设i/o模式控制,在pio模式下,pa口的所有i/o被设置为三态、双向mcu数据缓冲器方式,与mcu的p0口有些类似。dpld中必须声明psel0和/或psel1的有效地址范围,在访问此地址时,pa口进入pio方式。前面所述的vm寄存器中第7位是pio模式允许/禁止控制,pio模式的内部控制结构如图3所示。为避免psel0和psel1所指定的范围在程序/数据空间都有效,应在psel0和psel1中加入“!#psen”信号,以保证pio模式仅在访问数据空间时有效。

pio模式内部控制结构

图3 pio模式内部控制结构

使用psdsoft对μPSD进行配置和编程
μPSD中page是一个8位寄存器,最多可实现256个页面,page寄存器与地址范围的配置是同时起作用的。如果你的系统中不论是程序还是数据存储器的设计超出了64k,必须要分页。 μPSD的page寄存器的8位可以独立使用,在psdsoft中可定义为两种方式,即paging和logic。paging就是作为分页使用,logic是作为一般逻辑输入功能,类似于pld中的节点node,或者cpld中的宏macro。作为paging时,必须从最低位开始,使用n位作为paging,可实现2n个页面的分配,即存储器的地址配置中有2n个页面可选择。使用作为logig时必须从高位开始使用,可以为之定义一个名字,可用作dpld的输入项。mcu在运行时可以对page的进行读/写操作,但是不能按位操作,也就是说必须先屏蔽再修改。

在程序和数据均不超过64k时,不必分页,pgr0~pgr7不参加译码。现在的psdsoft软件中不要求用户再写地址方程式,只需要填写地址范围可以了。不使用分页时,片选的pgae number就不能填任何值,如果填“0”则表示位于页0。在psdsoft中对公共区的设置方法很简单,只要不填作为公共区的存储器的片选中的“page numbe”就可以了。

μPSD存储器配置实例
作为本文的结束,举一个典型的 μPSD应用实例,读者可参考其存储器的配置方案。

使用μPSD3234a-40u6器件,将fs0~fs7用作程序/数据存储器,地址在8000h~0ffffh,分别位于页0至页7;csboot0~csboot3作为程序存储器,作为公共区,地址是0000h~7ffffh。扩展sram位于0000h~1fffh,csiop位于7f00h~7fffh,用户i/o空间定义为7e00h~7effh。

这样的存储器配置能够满足大多数分页项目的设计要求,使用了μPSD的所有存储器,不仅最大化了程序空间和数据空间,也能实现iap功能。此方案中程序空间可达256k+32k,数据空间是256k(flash)+8k(sram)。用户可根据实际应用项目对配置进行简单修改,去掉没有使用的存储器配置。

如果用户项目中要求实现iap或者对主flash数据存储器进行擦除/修改,请一定要注意,升级代码或对flash进行擦除/修改操作的程序必须放于公共区,即次flash中。

来源: 作者:空军雷达学院科研部(430019) 孙树印