1 引言
存储器接口分为ROM接口和RAM接口两种。ROM包括EPROM和FLASH,而RAM主要是指SRAM。
TMS320C5409具有32K字的片内RAM和16K字的掩膜ROM。但是在DSP应用的很多场合,尤其是带信号存储的DSP应用来说,TMS320C5409的片内存储资源是远远不够用的。因此,设计一个TMS320C5409硬件系统一般应该包括其与EPROM/FLASH和SRAM的接口设计,以存放程序和数据。本文介绍TMS320C5409与存储器的接口设计方案。
2 DSP与SRAM的接口设计
除了内部32k字RAM和16K字ROM之外,TMS320C5409还可以扩展外部存储器。其中,数据总空间总共为64k字(0000H~FFFFH),I/O空间为64K字(0000H~FFFFH),程序空间为8M。8M的程序空间的寻址是通过额外的7根地址线(A16~A22)实现的,由XPC寄存器控制。根据程序和数据的空间配置,扩展的方法主要有3种。
2.1 分开的程序和数据空间配置
这种方案是采用外接一个128k×16位的RAM,将程序区和数据区分开,如图1所示。采用程序选通线接外部RAM的A16地址线实现,因此,程序区为RAM的前64k字(0000H~FFFFH),数据区为RAM的后64k字(10000H~1FFFFH)。对DSP而言,程序区和数据区的地址范围均为0000H~FFFFH。
采用这种配置方法需要注意:如果内部RAM设置为有效,则相同地址的外部RAM自动无效;当外部RAM不能全速运行时,需要根据速度设置插入等待状态(设置SWWSR)。
2.2 混合的程序和数据空间配置
这种方案是令OVLY=1,此时内部RAM既是数据区也是程序区。这样设置的优点是程序可以在内部全速运行,缺点是由于程序和数据是共用的,因此存储区就变小了。此外,在链接时必须将程序和数据分开,以避免重叠。
这种配置方法如图2所示。将和信号接至一与非门,形成PDS信号,这个信号不论是有效还是有效都呈现有效(高电平),将这个信号经反向用作片选信号,就可以保证外部RAM既作为程序区也作为数据区。
图1 分开的数据和程序空间配置
图2 混合的数据和程序空间配置
2.3 优化的混合程序和数据空间配置
图3所示为一种优化的混合程序和数据区外接RAM的方法。这种配置方法省去了DSP的A15地址线,将RAM分成32k字长的块。采用这种方法后,可充分利用外接的RAM,不会因内部RAM和外部RAM的地址重叠而造成外部RAM的浪费。
图3 优化的混合数据和程序空间配置
由于外部扩展的空间很大,因此DSP程序区另外的地址空间也能访问到外部RAM。这种优化的外部RAM配置方法,使得在使用DSP的内部RAM的情况下,能够充分利用外部扩展RAM。
图4 DSP与FLASH的接口
3 DSP与FLASH的接口设计
图4为DSP与FLASH的一种接口配置。图中FLASH采用Silicon Storage 公司的新一代256K×16位CMOS FLASH Memory产品SST39VF400A作为DSP的外部数据存储器,地址总线和数据总线接至DSP的外部总线,接至DSP的。DSP上的XF引脚用于启动编程。当XF为低时,FLASH处于读状态;当XF为高时,FLASH可擦或编程。为了满足SST39VF400A的时序要求,XF与相“或”后接至,引脚与相“或”后接至。
4 FLASH的擦写
4.1 片外FLASH擦写原理
在实际应用中,选择的片外存储器通常是片外的RAM或FLASH Memory。但是,由于RAM中数据掉电即丢失,不适合长期保存数据,因此当需要保存到片外存储器的是一些无需频繁读/写但需要长期保存的数据时,如字模数据、端口地址等,通常选择使用片外的FLASH扩展DSP芯片的存储器空间。但是,使用片外的FLASH必须要解决对其的擦写问题。
在实际应用中,对FLASH的擦写主要有两种方式:一是使用通用编程器对FLASH芯片进行擦写;二是直接由DSP对FLASH进行擦写。这里介绍一种利用存储器映射技术,通过对DSP芯片编程实现片外FLASH擦写的方法。
CCS5000 IDE是TI公司专为TMS320C5409设计的开发平台,该平台具有简单明了的图形用户界面和丰富的软件开发工具。利用GPIO0口可以生成合适的片外FLASH和片内RAM片选信号,从而实现片外FLASH和片内RAM访问的切换,在电路上可以将GPIO0信号与数据选择信号或程序选择信号相“或”实现。
4.2 片外FLASH擦写流程
编写FLASH擦写程序的流程图如图5所示。
图5 FLASH擦写程序流程图
(1)将character[180][32]设置为全局变量。
(2)将程序编译下载到DSP芯片中,打开工程目录中output文件夹中的.map文件,找到character数组在RAM中存放的起始地址和长度。
(3)使用Save Memory命令将RAM中对应于character数组的地址段的数据以二进制形式保存在计算机上。
(4)打开FLASH擦写程序,修改数据在片内RAM中存储的起始地址和FLASH擦写的起始地址和数据长度,编译下载后,单步执行,直到擦写完FLASH,并将地址映射方式设置为映射到片内RAM处,数据便写到片外FLASH的相应地址中。
这一种通过地址映射方式的方法可适用于多种场合,针对多个FLASH芯片使用多个GPIO端口进行地址的扩展,即可实现对其进行擦写操作;若将部分擦写程序放置到片外FLASH中并作相应设置,即可实现系统得自举运行。
5 Bootload的设计
BootLoader是嵌入式系统加电后在操作系统内核运行之前运行的第一段代码。BootLoader用于初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立一个通用的Boot Loader几乎是不可能的。BootLoader一般它只在系统启动时非常短的时间内运行。对于嵌入式系统来说,这是至关重要的一步。
TMS320C54x内部具有16K×16位的掩模ROM,其内部具有Bootloader程序,工作在微计算机方式下可以启动ROM中的引导程序,将用户程序从EPROM(FLASH)、串行口、I/O口或HPI口引导到内部RAM或外部的高速SRAM中全速运行。 TMS320C5409硬件复位后采样引脚如果为低,则DSP从FF80H开始执行片内的引导程序,FF80H包含一条跳转到Bootloader程序的语句,Bootloader程序将用户程序下载到RAM中运行。在硬件复位期间,如果TMS320C5409的为高电平,则从片外的0FF80H开始执行程序。选择过程如图6所示。
图6 自举加载方式的选择过程
6 结束语
实践证明,在DSP的使用中,以上介绍的DSP与其外围存储器的接口设计是切实可行的。