基于闪烁存储器的DSP并行引导装载方法
TMS320VC5409 是TI公司推出的第一代的高性能、低价位、低功耗数字信号处理器(DSP)。与现在流行的TMS320C5409相比,性能提高了60%,功耗效率提高了 50%。它的应用对象大多是要求能脱机运行的内嵌式系统,如机顶盒(STB)、个人数字助理(PDA)和数字无线通信等。闪烁存储器(FLASH MEMORY)是可以在线电擦写、掉电后信息不丢失的存储器。FLASH与EPROM相比,具有更高的性能价格比,而且体积小、功耗低、擦写速度快、使用比较方便。因此,采用FLASH存储程序和固定数据是一种比较好的选择。AMD公司的Am29LV400B FLASH可以直接与DSP相接。
1 Am29LV400B的主要特点及编程方法
Am29AL400B是AMD公司新推出的256K×16位产品,具有以下主要特点:
(1)支持单电源操作,可分为满负荷电压供电(2.7V~3.6V)和电压范围可调节(3.0V~3.6V)和电压范围可调节(3.0V~3.6V)供电两种方式。满幅度电压供电压供电方式主要用于电池供电的应用中,而电压范围可调节供电方式直接与3.3V的高性能DSP接口,简化了系统的电源要求。
(2)最快的存取速度高达55ns,CMOS工艺,具有100000次写入/擦写寿命。
(3)低功耗(200nA的自动休眠电流,200nA的待命电流,7mA的读电流,15mA的编程/擦除电流)。
(4)灵活的块结构支持整片擦除、块擦除。整片分为11个块(1块8K字、2块4K字、1块16K字、7块32K字)。
(5)块保护功能,具有防止对任何区段进行编程或擦除的硬件保护机制。
(6)与JEDEC标准兼容,引脚分布和命令集与单电源FLASH相兼容,具有优越的防止意外编程的保护功能。
(7)数据查询位和数据切换位,可以通过软件方法检测编程/擦除操作的状态。
(8)Ready/Busy#管脚,可以通过硬件方法检测编程/擦除操作的状态。
(9)具有擦除暂停/擦除恢复功能。在暂停擦除操作过程中,支持读写不处于擦除状态的块。
(10)内嵌的擦除/编程算法能自动对整个芯片或某几个块进行擦除编程操作。
Am29LV400B编程和擦除算法的命令定义如表1所示。
表1 Am29LV400B命令定义
操作命令序列 | 周期 |
总 线 周 期 | |||||||||||
1 | 2 | 3 | 4 | 5 | 6 | ||||||||
地址 | 数据 | 地址 | 数据 | 地址 | 数据 | 地址 | 数据 | 地址 | 数据 | 地址 | 数据 | ||
读 复位 片擦除 段擦除 字编程 |
1 1 6 6 4 |
RA XXX 555 555 555 |
RD F0 AA AA AA |
2AA 2AA 2AA |
55 55 55 |
555 555 555 |
80 80 A0 |
555 555 PA |
AA AA PD |
2AA 2AA |
55 55 |
555 SA |
10 30 |
表中,RA为要读的存储器地址;RD为从存储器地址RA处读出的数据;SA为要擦除的段地址;PA为要写入数据的存储器地址;PD为要在地址PA处写入的数据。根据表中的命令定久可编制FLASH的“烧写”和“擦除”程序(用C语言和汇编语言混合编程实现)。根据需要,我们编制了“烧写”单字和“烧写”多字的程序。
2 硬件电路组成
DSP 存储区硬件接口电路如图1所示。主要由5部分组成:DSP处理器-TMS320VC5409、系统逻辑控制电路(采用CPLD-EPM7128实现)、闪存FLASH-Am29LV400B(256K字的FLASH用来存储应用程序和初始化数据)、程序存储器SRAM1-IDT71V416S12PH(容量为256K字)、数据存储器SRAM2-IDT71V016S12PH(容量为64K字)。逻辑控制电路主要由3个模块组成:FLASH页选控制模块、读/写控制模块、程序空间/数据空间/FLASH切换控制模块。图中,CPLD的输出FMSEL为FLASH的片选脚;PMSEL为程序空间的片选脚; DMSEL为数据空间的片选脚。
FLASH分为8页,每页32K,通过CPLD中的FLASH页选控制模块(Page0~Paeg2)实现FLASH翻页功能。为实现FLASH引导装载,FLASH物理空间的前32K映射到TMS320VC5409的数据空间0x8000h~0xFFFFh上,即TMS320VC5409的数据空间 0x8000h~0xFFFFh为FLASH的前32K空间。为了重点说明FLASH的引导装载过程,本文只谈及DSP片内程序存储空间以及FLASH前 32K字的使用情况。
3 TMS320VC5409 DSP的引导装载方式
TMS320VC5409芯片具有两种引导方式:片内引导方式和片外执行方式。片内引导方式就是利用片内ROM中的引导程序将程序从外部加载到程序存储器中运行。由于FLASH的速度较低,难以与DSP相匹配,因此,本文采用片内引导方式。
TMS320VC5409 片内掩模ROM中固化的引导装载(Bootloader)程序用于在上电复位时把用户程序从外部引导到高速RAM中,以保证其全速运行。 TMS320VC4509提供的片内引导方法有:有机口HPI方法、8位或16位并行EPROM方法、8位或16位并行I/O方法和8位或16位串行口方法等。TMS320VC5409片内引导装载源程序可以在TI网络下载得到,读者可以自行分析。下面通过图2所示的引导过程框图,阐述一下本文选用的并行引导方式过程。
上电复位后,TMS320VC5409检测其MP/MC引脚,如果MP/MC="0",DSP从0xFF80h处开始执行片内引导装载程序。进入引导程序后,如有INT2请求中断,则进入HPI 引导方式;如有INT3请求中断,则进入EEPROM串行口引导方式;否则就进入并行引导方式。其详细引导过程如图3所示。
片内并行引导方式前半部件是I/O空间并行引导方式,我们不采用此方式,程序继续运行直到从数据空间0xFFFFh地址读入一个地址数据,此数据为用户自举表的入口地址。这时片内引导程序就开始执行FLASH中的用户自举表,若自举表的第一个字是0x10AA,则表示是16位并行引导模式。
4 FLASH中自举表(Boottable)的存储格式
为了实现DSP加电自举,FLASH的数据必须按照自举表的格式“烧写”。自举表的作用是:DSP运行此表时,首先根据自举表中前部分用户起始地址把后面的用户程序代码加载到DSP片内程序空间中相应的用户地址区域(由于FLASH与DSP时间不匹配,要设置好SWWR和BSCR寄存器),然后根据自举表中的程序入口址,在程序空间相应的地址开始运行程序。表2为16位并行自举的代码结构(自举表在空间允许的情况下可以放几个程序代码段,为便于说明,在此只说明一个程序代码段的情况)。
表2 并行自举表的代码结构
10AA(并行寻址格式) |
SWWSR寄存器的初始值 |
BSCR寄存器的初始值 |
用户程序入口的XPC |
用户程序入口的地址PC |
用户程序的长度 |
用户程序起始地址XPC |
用户程序起始地址PC |
用户程序代码… |
0000(表示自举表结束) |
下面结合一个实例,说明利用hex500命令生成二进制数据自举表的方法。
(1)所编写的一个用户程序名为myblink.C,在编译链接成功后生成的输出文件名为myblink.out;程序空间的开始地址为0x1400h,程序执行的入口地址为0x144Fh。利用hex500工具,生成文件名为myblink.hex的二进制数据,hex500命令后添加如下条件:
mybilink.out ;要转换的.out文件
-a ;生成ASCII码的形式
-e 0x144Fh ;程序空间中程序运行的开始
地址
-boot ;转换成自举表的形式
-bootorg PARALLEL ;并行格式
-byte ;按字节分配地址
-memwidth 16 ;系统存储器字宽度为16位
-romwidth 16 ;ROM物理宽度为16位
-swwsr 0x7FFFh ;SWWSR设置软件等待周期
-bscr 0xF800h ;BSCR设置段开关控制寄存器值0xF800
-o myblink.hex ;输出的二进制数据文件名
(2)生成的进制数据文件myblink.hex的数据为:
0x10AA 0x7FFF 0xF800 0x0000 0x144F 0x00D1 0x0000 0x1400 …(用户程序代码)… 0x0000;
前8个数据解释分别为:
0x10AAh:16位并行寻址格式;
0x7FFFh:SWWSR初始值为0x7FFFh,因为FLASH的运行速度比DSP慢,等待7个周期;
0xF8000h:BSCR初始值为0xF800h;
0x0000h:自举表程序入口的XPC=0;
0x144Fh:自举表程序入口的地址=0x144Fh;
0x00D1h:自举表程序的长度=0xD1h;
0x0000h:自举表起始地址XPC=0;
0x1400h:自举表的起始地址=0x1400h。
(3)编写一个数据转换程序,把二进制数据文件myblink.hex转换为数组头文件myblink.h。在CCS环境下,FLASH的“烧写”主程序包含此头文件,编译链接后通过仿真器下载到DSP中,运行DSP,用户程序就被“烧入”FLASH中了。
实际应用是:在数据空间地址0xFFFFh(也就是FLASH的空间0xFFFFh)中“烧写”数据0x9000h(FLASH中存放的自举表起始地址),在FLASH的地址0x9000h开始“烧入”用户自举表数据即myblink.h中的数组数据。
DSP 运行情况是:依据第3节所述的引导装载过程,经过一系列的设置,使DSP寻址到数据空间地址0xFFFFh,得到自举表的起始地址0x9000h,PC指针指向0x9000h,执行自举表的数据,根据自举表写入信息,把后面的程序装载入程序空间起始地址0x1400h(XPC=0)(这时通过仿真器查看程序空间0x1400h开始的数据,与仿真器下载的myblink.out文件数据是一致的)。然后,DSP的PC指针指向程序入口地址0x144Fh (XPC=0)开始执行用户程序,从而完成了DSP利用FLASH实现16位并行引导装载的过程。