首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

分享:TMS320VC55X系列DSP的FLASH引导方法

分享:TMS320VC55X系列DSP的FLASH引导方法

本帖最后由 zhangmangui 于 2013-11-7 00:40 编辑

引言

随着数字信号处理技术的快速发展,DSP被广泛的应用到各种数字信号处理系统中。最终开发的系统要想脱离仿真器运行,必须将程序代码存储在非易失性存储器中。FLASH存储器以其大容量和可在线编程等特点已成为DSP系统的一个基本配置。如何将程序烧写进FLASH,并在上电时加载进DSP内部的RAM是FLASH在DSP系统中应用的两个基本技术问题。本文以基于TI公司的TMS320VC5509A和ATMEL公司的AT49LV1024 FLASH开发的系统为背景,介绍该系统引导相关的硬件设计,烧写软件设计以及自举引导、二次引导等实现方法。TMS320VC5509A的自举引导

TMS320VC5509A每次上电复位后,在执行完一系列初始化(配置堆栈寄存器、关闭中断、程序临时入口、符号扩展、兼容性配置)工作后,根据事先配置的自举模式,通过固化在ROM内的BOOTLOADER程序进行程序引导。VC5509A的引导模式选择是通过四个模式选择引脚BOOTM[0:3]的配置来完成的。在本系统中,采用EMIF(外部存储接口)并行引导模式(16位数据宽度),则需将BOOTM[3:0]设置成1011即可。

通过EMIF接口可以灵活地和各种同步或异步存储器件无缝连接。通过EMIF可以扩展VC5509A的存储空间到128Mbit(SDRAM),存储空间共被分为CE0~CE3。在EMIF的并行引导模式中,ROM中固化的Bootloader程序是以字地址0x200000为首地址开始加载程序。地址0x200000即位CE1空间的首地址,所以FLASH必须接在DSP的CE1空间上。在加载时,EMIF的CE1空间已经默认配置成异步静态随机存储器(SRAM)接口,并且在时序上采用了最差情况设置(即最慢访问速度),充分保证了时间裕量,使得程序代码被顺利的加载到DSP的内存中。
Bootloader在引导程序时,程序代码是以引导表格式加载的。TMS320VC55x的引导表结构中包括了用户程序的代码段和数据段以及相应段在内存中的指定存储位置,此外还包括了程序入口地址、部分寄存器的配置值、可编程延时时间等信息(见表1)。
其中,程序入口地址是引导表加载结束后,用户程序开始执行的地址;寄存器配置数目决定了后面有多少个寄存器需要配置;只有当延时标志为0xFFFF时,延时才被执行;延时长度决定了在寄存器配置后延时多少个CPU周期后才进行下一个动作;段长度、段起始地址和数据则为用户程序中定义的各个段的内容,并且可以重复添加;最后以0x00000000(32个0)作为引导表的结束标志。
要生成引导表,可以将CCS最终编译生   成的.out文件通过CCS自带的hex55.exe转换程序得到。将hex55.exe、.out文件、cmd文件放在同一个文件夹中,通过dos命令格式调用hex55.exe,即可完成.out文件到hex格式的引导表文件的转化。CMD文件用来提供引导表的相关配置信息,以下为一个CMD文件的实例:
FlashBootTest.out; 输入的.out文件
-boot; 说明创建boot文件
-v5510:2; 生成55X boot文件格式
-parallel16; 使用串行加载方式
-a; ASCII格式
-reg_config 0x1c00,0x6cd2; 在地址0x1c00
     的寄存器写入0x6cd2,配置CPU时钟
-delay 0x100; 延时0x100 个CPU 时钟周期
-o FlashBootTest.hex; 输出.hex文件

FLASH的烧写和自举的实现
TMS320VC5509A和AT49LV1024的硬件设计
AT49LV1024是ATMEL公司3V供电系统的FLASH芯片,16位位宽,容量为64K字。VC5509A(PGE封装)只有14条地址线,只能寻址16K字的SRAM空间。要想寻址64K字地址空间的话,FLASH地址线的高两位则需要通过其他IO线控制。在本系统中通过GPIO4和GPIO6与FLASH的高两位地址相连达到此目的,其连接示意图如图1所示。但是在Bootloader自举引导程序的时候,并不能控制GPIO引脚,也就是只能引导最大16K字的程序。对于大于16K字的程序,则需要进行二次引导。

图1  VC5509A和AT49LV1024的硬件连接示意图二次引导技术所谓二次引导,通过DSP内部ROM固化的Bootloader引导用户自己编写一个引导程序,其功能和ROM内固化的Bootloader相同,再通过此引导程序加载系统最终运行的程序代码,并在加载结束后,把PC值置为新的程序入口地址。由于在用户编写的引导程序中,可以控制GIPO4和GPIO6,所以可达到64K字地址空间的寻址目的。其具体实现框图如图2所示。

图2  TMS320VC 5509A二次引导框图

数据烧写程序设计
FLASH的数据可直接读取,但对FLASH的编程和擦除操作则需要通过一系列命令才能进行。
AT49LV1024的写操作只能将1变成0,而0变成1操作必须通过擦除操作进行。所以每次写FLASH之前,必须进行片擦除,使存储单元值变成0xFFFF,才能进行编程。
擦除命令:需要六个周期,其操作命令如表2所示。
编程命令需要四个周期,其操作命令如表3所示。
编程和擦除操作都需要一定的周期的时间(AT49LV1024的单字编程时间是20ms,整片擦除时间是10s),用户可以通过查询标志数据线DQ6和DQ7来确定编程或擦除是否完毕。当片子正处于编程或擦除状态时,连续读任意单元的值,DQ6的值将一直处于0、1交替变化,当编程或擦除结束时,读DQ6则得到一个恒定值。本文即通过此方法来判断操作是否结束。
根据FLASH的编程和擦除命令,编写了相应的C语言程序如下,其中SetGPIO46Addr(Addr)子程的作用是根据所传递的Addr值配置相应的GPIO4和GPIO6即高两位地址的值。


附件: 你需要登录才可以下载或查看附件。没有帐号?注册
返回列表