1.引言
以DSP为中心的应用系统,要实现系统的用户软件程序脱离仿真环境独立运行工作,就需要在片外扩展非易失性存储器FLASH、EPROM或者用上位机向DSP下载程序。在系统上电复位后,用DSP的引导加载器把应用程序从外部存储器FLASH、EPROM或上位机中引导到DSP芯片内部双访问存储(DARAM)单元或单访问存储(SARAM)单元或外部扩展RAM中。目前应用最为广泛的闪存,具有存取速度快、电可擦除、容量大、在线可编程、价格便宜等优点,已成为新一代DSP系统中不可缺的重要组成部分。
在本测量系统中,利用Atmel公司闪存AT25F1024作为TMS320VC5509A的外部闪存。上电复位时,通过TMS320VC5509A的McBSP0口把AT25F1024闪存中的程序代码或数据加载到外扩展的RAM中。当程序用开发机调试好后,首先遇到的问题是如何将调试好的程序代码写入SPI 闪速存储器并且满足TMS320VC5509A引导加载表的格式;然后才可以利用TMS320VC5509A引导加载器将程序代码引导到外部扩展存储器中。
闪存按其接口可分为并行与串行。并行通过TMS320VC5509A芯片的地址与数据线与闪存接口。数据可以8位或16位。串行闪存通过I2C或SPI接口与闪存接口。本文以Atmel公司AT25F1024串行SPI闪存芯片,通过McBSP0(配置为SPI)与TMS320VC5509A接口,作为电测量系统的上位机引导存储器,详细给出DSP系统串行SPI引导的软硬件解决方案与实现方法。
2. TMS320VC5509A与AT25F1024的接口电路
TMS320VC5509A是TI公司推出的定点数字信号处理器C5000系列中的一种,TMS320VC5509A通过增加乘累加MAC单元,增强了DSP的运算能力,而且性能更好,功耗更低,是目前TMS320家族中最省电的芯片。这些特性使之更适合在数据速率高、运算量大,又要求功耗低的便携式电测量中应用。AT25F1024是Atmel公司生产的一款应用广泛的高性能256K×16位串行SPI闪存。TMS320VC5509A与AT25F1024的硬件电路连接如图1所示,在SPI模式中闪存始终作为从器件与DSP的McBSP0串口相连,其串行移位时钟是输入,由DSP串口提供。
图1. TMS320VC5509A与AT25F1024硬件电路连接图
3.串行Flash芯片在线系统编程方法
将用户程序代码装入Flash的方法有三种,一种方法是要求制造商出厂前掩膜,但无法满足开发阶段对程序进行修改或小批量产品生产的要求;另一种方法是用编程器直接烧写,但Flash芯片正向着小型化、贴片式方向发展,从而使表贴SOIC封装的Flash芯片难以用编程器烧写;第三种方法是在线系统编程ISP(In System Program),这种方法灵活方便,无需其它编程设备和外加电源,因而得到广泛应用。
对串行Flash芯片的在线系统编程需要考虑两方面的问题,一是Flash芯片的编程烧写方法和规则,二是DSP芯片Bootloader引导程序所要求的引导表格式。
4.串行Flash芯片的编程烧写
以AT25F1024为例,对其进行操作的部分指令如表1所示。
对其进行烧写操作,要执行两条独立的命令。首先,通过WREN指令使Flash写使能,然后执行PROGRAM(编程)指令。编程烧写的时序如图2所示,由图2可以看出,在对Flash编程的过程中,首先是CS片选信号有效(低电平),然后编程指令(0x0000 x010)、地址和待烧写的数据通过SI引脚传送,最后,当CS片选信号抬高(高电平)后,芯片内部开始编程。
表1
指令名称 |
指令格式 |
说明 |
WREN |
0000 X110 |
设置写使能 |
WRDI |
0000 X100 |
清除写使能 |
RDSR |
0000 X101 |
读状态寄存器 |
WRSR |
0000 X001 |
写状态寄存器 |
READ |
0000 X011 |
读数据 |
PROGRAM |
0000 X010 |
写数据 |
SECTOR ERASE |
0101 X010 |
整段擦除 |
CHIP ERASE |
0001 X101 |
全片擦除 |
RDID |
0001 X101 |
读厂商和器件编号 |
图2
在实际的编程过程中需要注意以下几个问题。
(1)由于写命令只能将内部数据位由1写成0,反之则不行。因此,在写入数据前一定要先对内部空间进行擦除,将内部所有数据位置1,否则将会导致Flash烧写失败。
(2)编程指令只能对没有被块写保护指令保护的空间进行写操作。
(3)CS片选信号由低到高的跳变要求必须在最后一个数据比特D0传送完成后,紧跟着的SCK移位时钟为低的情况下产生。TMS320VC5509芯片多通道缓冲串口(McBSP)提供的时钟停止模式(兼容SPI)即可满足这种要求。
(4)AT25F1024支持单字节编程模式和256字节的页编程模式。芯片内部每页256字节,一条编程指令可以在一页内烧写1到256个连续的字节。烧写的起始地址可以在一页内的任意位置,连续烧写时地址自动增加,但是当地址到达本页的最后时会自动跳到本页首地址。这一点在在线编程烧写时要十分注意。
(5)在内部写操作周期内,其它操作命令都将被忽略,但是RDSR(读状态寄存器)指令除外。状态寄存器的/RDY位表示芯片内部写周期是否就绪。因此,Flash器件内部编程就绪与否就可以通过判断状态寄存器的这一标志位来确定。AT25F1024的状态寄存器格式见表2。
表2 AT25F1024的状态寄存器格式
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
WPEN |
X |
X |
X |
BP1 |
BP0 |
WEN |
/RDY |
Bit0=0表示器件处于就绪状态;Bit0=1表示写周期正在进行中。同时,在内部写操作的周期内,Bit0~Bit7全部为1。
5.TMS320VC5509引导表
所谓引导表,就是在DSP芯片上电复位后由Bootloader从外部存储器装入片内RAM的一个数据块,这个数据块包括用户程序的数据段和代码段,还包括程序入口地址、寄存器设置、可编程延时等信息。
在用编程器直接烧写的方法中,引导表可由“HEX转换应用程序”(C55x汇编语言工具CCS中自带的hex55.exe)根据.out文件生成,并直接生成写片文件,再由编程器自动写入Flash中。但是在在线系统编程烧写的过程中,并不考虑.out文件和写片文件中的附加信息,而是直接将符合引导表格式要求的数据内容通过一段独立的用户程序连续完整的写入Flash中。TMS320C55X系列DSP芯片的引导表结构如表3所示。
表3.引导表结构
字节地址+0 |
字节地址+1 |
字节地址+2 |
字节地址+3 | |
32位入口点字节地址 | ||||
字节地址+4 |
32位寄存器配置数量 | |||
字节地址+8 |
16位寄存器地址 |
16位寄存器内容 | ||
16位延迟标志 |
16位延迟计数值 | |||
32位段字节计数值 | ||||
32位段字节开始地址 | ||||
数据字节 |
数据字节 |
数据字节 |
数据字节 | |
数据字节 |
数据字节 |
数据字节 |
数据字节 | |
32位0字节计数值(引导表结束) |
其中,入口点字节地址是引导结束后,用户程序开始执行的首地址;32位寄存器配置数量决定后面有多少个32位是作为寄存器设置值或者作为延时等待;16位延时标志恒为0XFFFF,以区别于16位寄存器的地址;段长、段起始地址和数据是用户程序中定义的各个段的内容;最后以32位个0作为引导表的结束标志。
无论是用编程器直接烧写,还是在线系统编程烧写,实质上都是要在片外存储器(如Flash)存放整个引导表的内容。DSP芯片在上电复位后会自动运行ROM中固化的Bootloader引导程序,引导程序会根据片外存储器中存放的引导表的信息,将用户程序的各个段引导到片内RAM的相应位置,然后从入口地址开始执行。这样就完成了整个加载引导的过程。
6.串行引导的原理及实现
TMS320VC5509A芯片自带的Bootloader程序支持11种引导模式,本文所做的工作中根据片外Flash的特性要求选择从多通道缓冲串口0(McBSP0)引导、支持24位地址的SPI串行引导模式。
● 模式选择
VC5509A引导模式的选择是通过四个模式选择引脚BOOTM[3:0]完成的。BOOTM0~3引脚与芯片的通用输入输出引脚GPIO1、2、3、0相对应。这里选择SPI的引导模式,BOOTM[3:0]=0001,在实际的电路连接上是将芯片引脚通过上拉或下拉电阻接地或接电源来实现。
● SPI引导模式
这里首先介绍McBSP的SPI协议。SPI协议是一种主从配置的,支持一个主方,一个或多个从方的串行通信协议。它一般由四个信号组成,即串行主方数据输入从方数据输出MISO、串行主方数据输出从方数据输入MOSI、移位时钟SCK和从方使能SS。TMS320VC5509A多通道缓冲串口(McBSP)的时钟停止模式可以兼容SPI主从协议。所谓McBSP的时钟停止模式是指其时钟会在每次数据传输结束时停止,并在下次数据传输开始时立即启动或延迟半个周期后再启动。而且,其接收器和发送器是同步的,CLKX和FSX分别与CLKR和FSR相连。在传输过程中,CLKX和FSX又分别作为SPI中的移位时钟SCK和从方使能SS。
这里要说明的是,为了满足SPI模式Bootloader引导时的要求,从方Flash的使能信号应该由TMS320VC5509A的通用输入输出引脚GPIO4提供。在引导开始时IO4变低,当引导过程结束后IO4抬高。因此,在编程烧写的时侯,就需要人为地对IO4引脚编程控制,以下三条语句可以控制IO4为输出,并实现高低电平变换。
OR #0X0010,PORT(#IODIR) ;GPIO4 用作CS,方向为输出
OR #0X0010,PORT(#IODATA) ;设置CS为高电平
AND #0XFFEF,PORT(#IODATA) ;设置CS为低电平
由于Bootloader最终需要完成的是系统的脱机运行,因此,在调试Flash烧写和DSP上电引导时可编写一个简单直观的测试程序。例如,可以通过VC5509A的XF引脚发送一个方波,这样就可以准确的判断程序的运行情况,程序代码如下。
SEND:BSET XF ;使XF引脚输出高电平
RPT #99 ;延迟100个时钟周期
NOP
BCLR XF ;使XF引脚输出低电平
RPT #99
NOP
B SEND
7.结论
本文创新点是在实际应用的基础上,提出了一种基于Flash的TMS320VC5509A串行8位引导的设计与实现。采用串行Flash代替常规的并行EPROM,大大节省手持数据终端器件的电路空间和功耗,方便用户进行电路设计,提高了工作效率,具有很好的实用性。
参考文献
[1] TMS320C55X DSP Peripherals Reference Guide, Texas Instruments Application Report, SPRU317B, 2001.5
[2] Using the TMS320VC5509 Bootloader, Texas Instruments Application Report, SPRA375, 2002.10
[3] SPI Serial Memory AT25F1024,Atmel,Rev.1440K-SEEPR-3/03
[4] 申敏. DSP原理及其在移动通信中的应用. 人民邮电出版社. 2001.9
[5] 程志平,支长义,焦留成,基于DSP的工频电量测试仪硬件电路设计,《微计算机信息》,2006,(6)
[6]支长义,程志平,焦留成,基于DSP的单相精密电源硬件设计,《微计算机信息》,2006,(5)