您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术一种新的TMS320VC5402 DSP上电引导程序的设计方法 正文
一种新的TMS320VC5402 DSP上电引导程序的设计方法

一种新的TMS320VC5402 DSP上电引导程序的设计方法

点击数:7504 次   录入时间:03-04 11:50:53   整理:http://www.55dianzi.com   DSP/FPGA技术

摘 要: 本文介绍了TMS320VC5402 DSP的存储器资源配置,针对用户经常面临的扩展存储器及上电引导加载方案设计中存在的问题,提供了一种实用的扩展存储器设计方案,重点讲述了在这种存储器资源配置的基础上,利用FLASH存储器的在系统编程技术,设计和编写符合系统要求的上电引导程序的方法。 关键词: DSP;Bootloader;FLASH;ISP 引言   TMS320C54X是美国TI公司主推的一个DSP芯片系列。这个系列的DSP具用相同的内核结构,所不同的是片内存储器和片内外设的硬件资源配置。TMS320VC5402(以下简称C5402)是这个系列的代表产品,并因其极高的性价比而成为目前应用最为广泛的DSP芯片之一。   C5402可寻址三个独立的存储空间[1],包括1M×16b的程序空间,64K×16b的数据空间以及64K×16b位的I/O口空间。在片内,它提供了16K×16b的双存取RAM和4K×16b的ROM。   C5402的片内ROM是掩膜ROM,只能由厂家出厂时把代码和数据固化在里面,用户无法写入新的数据。它的片内RAM,既可以映射在数据区存放数据,也可以映射在程序区运行程序,但是掉电后里面的内容会丢失,不能用于固化用户代码。而实际应用中,大多数系统要求能够脱机运行,用户代码一般都被固化在外部的FLASH存储器中,因此C5402提供了上电引导加载(Bootloader)功能,用来在上电时将存放在片外的用户代码加载到程序空间的快速异步SRAM中运行。这个引导(Boot)程序由TI公司掩膜在片内ROM中。   为了满足不同的系统要求,C5402提供了五种上电引导方式[2],其中最常用的是并行引导方式。采用这种方式,在上电时,引导程序从数据空间读取用户代码,将其写入到程序空间的片内或片外快速SRAM中,然后程序跳转到用户代码的入口处开始运行。这种方式要求用户代码事先按特定的格式烧写到外部FLASH中,而且在上电复位时要把FLASH配置在数据空间。由于C5402的数据空间的大小只有64K,片内RAM又占去了低16K,所以引导程序所能加载的用户代码不仅要占用数据空间,而且最大只能是48K 。这就无法满足在实际应用中可能遇到的大程序、大数据量的要求。   而C5402的程序空间的大小为1M字,完全可以存放和运行更大的用户程序。下面介绍的这种方法,作者充分利用了C5402的这一特点,自己设计和编写上电引导程序,并且利用FLASH存储器的在系统编程(In System Programming, ISP)技术和DSP指令可以读写程序空间的优点,对FLASH进行编程,将自己编写的用户代码和引导程序一并烧写到位于程序空间的FLASH中。上电后引导程序能够把用户代码从FLASH中加载到程序空间的SRAM中运行。这种方法不占用数据空间的资源,而且可以引导加载最大约至500K字的用户代码。 系统程序空间扩展 存储器的设计   如图1所示,在这个系统中,程序空间扩展了256K字的FLASH存储器和128K字的SRAM。通过译码,FLASH的地址范围为00000H-3FFFFH,SRAM的地址范围为40000H-5FFFFH。具体的译码逻辑为: 存储器写信号: /WE=http://www.55dianzi.com/MSTRB+R/W 存储器读信号: /OE=http://www.55dianzi.com/MSTRB+!R/W FLASH片选信号: /CE=http://www.55dianzi.com/PS+A19+A18 SRAM片选信号: /CS=http://www.55dianzi.com/PS+A19+!A18+A17   这里,FLASH存储器使用的是高性能的SST39VF400A芯片。它的主要特点是:3.3V单电源供电,引脚可以和DSP直接相连;功耗低;读取速度快(70ns或90ns);支持单字编程(Word Program);支持以2K字为单位的扇区擦除(Sector Erase),以32K字为单位的块擦除(BLOCk Erase)和片擦除(Chip Erase)三种擦除方式;自动编程时序,支持在系统编程等。 SST39VF400A FLASH的在系统编程(ISP)技术   只要按照特定的命令时序向FLASH写入编程命令和数据就可以实现对FLASH的编程。 在对FLASH编程之前应先进行擦除工作,擦除之后所有存储单元中的数据均为FFFFH。编程或擦除过程中如果出错,应写复位命令退出。   以单字编程命令时序为例:每写一个字都需要连续执行四个周期的写存储器命令,在第一个周期向5555H地址单元写数据AAH,第二个周期向2AAAH地址单元写数据55H,第三个周期向5555H地址单元写数据A0H,第四个周期向你的目的地址单元写你的具体数据,此后FLASH进行内部编程操作,向目的地址单元写入该数据。   SST39VF400A提供了两种方法判断内部编程或擦除操作是否结束:一种是通过数据线的第7位DQ7判断,在内部编程过程中,DQ7位输出的值是该位写入值的反码,编程结束后变为该位写入的真实值;而在内部擦除过程中DQ7位输出为逻辑“0”,擦除结束后输出逻辑“1”。另一种是通过数据线DQ6位判断,若连续读取DQ6位,在内部编程或擦除过程中,其值是在“0”和“1”之间不断跳变的,当内部编程和擦除结束后,它就停止跳变。 C5402 DSP上电引导程序的设计 上电引导加载过程分为以下四个步骤: (1)上电时,使C5402的MP/MC引脚接高电平,这样程序将从片外FLASH的0FF80H处开始执行。在FLASH中,从0FF80H到0FFFFH共80H个存储单元里存放有中断向量表,其中0FF80H为复位中断向量的入口地址。 (2)在0FF80H处执行一条跳转指令,跳转到上电引导程序的入口地址处。假设这个引导程序位于FLASH中从0F800H开始的存储单元里,那么这个入口地址就是0F800H。 (3)执行引导程序,从引导表中读出用户代码段的长度、源地址和目的地址,然后根据这些参数从源地址中读取用户代码,再写入到目的地址中。其中,源地址指向程序空间的FLASH,目的地址指向程序空间的SRAM。 (4)在引导程序的最后再执行一条跳转指令,跳转到用户程序入口处继续运行。 由此可以看出,上电引导加载过程中需要四部分内容,即用户程序、中断向量表、上电引导程序和引导表。这四部分内容都可以自己编写程序烧写到FLASH的相应地址中。 下面介绍具体的设计方法。   在TI公司的软件开发工具CCS(Code Composer Studio)中,汇编器和连接器创建的目标文件采用COFF(Common Object File Format)格式,代码和数据是按段(Section)来组织和存储的[3]。采用本文的设计方法时,按程序中需要定义了五个基本的段,段名分别取为“.text”、“.vectors”、“.boot”、“.table”和“.flash”,它们的内容分别对应于用户程序、中断向量表、上电引导程序、引导表和FLASH烧写程序。在程序编写好后,将编译连接生成的COFF目标文件(后缀为.out)通过仿真器下载到目标板上的片外程序空间的SRAM中,假设各段所占用的存储单元如程序清单。   在上面的程序中,“.flash”段的烧写程序把其余四个段的内容烧写到FLASH存储器中。“.table”段为上电引导程序提供了需要加载的各代码段的长度、源地址和目的地址三个参数。其中,代码段的长度既可以根据混合模式下CCS代码编辑窗左边所显示的存储地址算出,也可以从编译连接生成的映像文件(后缀为.map)中得到;源地址是该代码段被烧写到FLASH中的起始地址,由设计者在FLASH烧写程序中指定;目的地址是该代码段被加载到SRAM中的起始地址。由于C5402可寻址1M字程序空间,地址线为20位,所以源地址和目的地址各占两个字的存储单元。例如在上面的程序中,“.text”段的长度位D000H,它被烧写到FLASH中从02000H开始的存储单元,上电后将被加载到SRAM中从42000H开始的存储单元中。   在编译连接之前,在CCS的Project->Build Option...->Linker->Code Entry Point选项中指定程序入口为“_FLASH”。这样,编译连接生成的COFF目标文件下载到目标板后将从“_FLASH”标号处开始执行,其结果是将其余四个段的内容烧写到FLASH存储器中。然后给系统重新上电,C5402将按照前面描述的四个步骤完成引导加载过程。 结语   实际上,C5402的1M字程序空间分成了16页,每页64K字。而在上面的设计中,只用到了其中的第0页和第4页。如果在程序空间扩展了更大的FLASH和SRAM,就可以利用其它存储页来存放和加载更大的用户代码,这正是此设计方法的主要优点之一。这种设计方法的另一个优点是容易实现,不需要任何其它的辅助工具和手段,只要熟悉TMS320C54X DSP汇编语言编程就足够了。



本文关键字:程序  上电  DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术