随着数字信号处理技术的快速发展,DSP(数字信号处理器)越来越广泛地应用于各种数字信号处理系统中。最终开发的系统要想脱离仿真器运行,必须将程序代码存储在非易失性存储器中。Flash存储器以其大容量和可在线编程等特点已成为DSP系统的一个基本配置。如何将程序烧写进Flash,并在上电时加载到DSP内部的RAM是Flash在DSP系统中应用的两个基本技术问题。本文以基于TI公司的TMS320VC5509A和Atmel公司的AT49LV1024 Flash开发的系统为背景,详细介绍了系统引导相关的硬件设计、烧写软件设计以及自举引导和二次引导等实现方法。
2 TMS320VC5509A的自举引导
2.1 TMS320VC5509A的自举模式配置
TMS320VC5509A每次上电复位后,在执行完一系列初始化(配置堆栈寄存器、关闭中断、程序临时入口、符号扩展、兼容性配置)工作后,根据预先配置的自举模式,通过固化在ROM内的Bootloader程序进行程序引导。VC5509A的引导模式选择是通过4个模式选择引脚BOOTM[0:3]配置完成的。 BOOTM0~3引脚分别与GPIO1、2、3、0相连。在本系统设计中,采用EMIF(外部存储接口)并行引导模式(16位数据宽度),只需将BOOTM[3:0]设置成1011即可。
EMIF为外部存储接口,通过EMIF接口可以灵活地和各种同步或异步存储器件无缝连接。通过EMIF可以将VC5509A的存储空间扩展到128 Mbit(SDRAM),存储空间共被分为CE0~CE3四个段,每段占用不同的地址。在EMIF的并行引导模式中,ROM固化的Bootloader程序是以0x200000为首地址开始加载程序。0x200000即为CE1空间的首地址,所以Flash必须接在DSP的CE1空间上。在加载时。EMIF的CE1空间已经默认配置成异步静态随机存储器(SRAM)接口,并且在时序上采用了最差情况设置(即最慢访问速度),充分保证了时间裕量,使得程序代码顺利地加载到DSP的内存中。
2.2 TMS320VC5509A的引导表
Bootloader在引导程序时,程序代码是以引导表格形式加载的。TMS320VC55x的引导表结构中包括了用户程序的代码段和数据段以及相应段在内存中的指定存储位置,此外还包括了程序人口地址、部分寄存器的配置值、可编程延时时间等信息。TMS320VC55x系列DSP的引导表结构如表1所示。
其中,程序入口地址是引导表加载结束后,用户程序开始执行的地址;寄存器配置数目决定了后面有多少个寄存器需要配置;只有当延时标志为0xFFFF时,延时才被执行;延时长度决定了在寄存器配置后延时多少个CPU周期才进行下一个动作;段长度、段起始地址和数据则为用户程序中定义的各个段的内容,并且可以重复添加;最后以0x00000000(32个0)作为引导表的结束标志。
若要生成引导表,可用CCS最终编译生成的,out文件通过CCS自带的hex55.exe转换程序得到。将hex55.exe、.out文件、.0cmd文件放在同一个文件夹中,通过DOS命令调用hex55.exe。即可完成.out文件到hex格式的引导表文件的转化。.CMD文件用于提供引导表的相关配置信息,以下为一个.CMD文件的实例:
3 Flash的烧写和自举的实现
3.1 TMS320VC5509A和AT49LV1024的硬件没计
AT49LV1024是Atmel公司一款3 V供电系统的Flash存储器,16位位宽,容量为64 KB(16条地址线)。VC5509A(PGE封装)只有14条地址线,只能寻址16 KB的SRAM空间。要想寻址64 KB地址空间的话,Flash地址线的高两位则需要通过其他I/O线控制。在本系统中通过GPIO4和GPIO6与Flash的高两位地址相连实现,其连接示意图如图1所示。但是在Bootloader自举引导程序时,并不能控制GPIO引脚,也就是只能引导最大16 KB的程序。对于大于16 KB的程序,则需要进行二次引导。
3.2 二次引导技术
所谓二次引导,就是通过DSP内部ROM固化的Bootloader引导用户自行编写一个引导程序,其功能和ROM固化的Bootloader相同,再通过此引导程序加载系统最终运行的程序代码,并在加载结束后,把PC值置为新的程序入口地址。在用户编写的引导程序中控制GIPO4和GPIO6,即可实现64 KB地址空间寻址。具体实现框图如图2所示。
3.3 数据烧写程序设计
Flash的数据可直接读取,但对Flash的编程和擦除操作则需要通过一系列命令才能进行。AT49LV1024的写操作只能将1变成0,而0变成1必须通过擦除操作进行。所以每次写Flash之前必须进行片擦除,使存储单元值变成0xFFFF,才能进行编程。
擦除命令需要6个周期,操作命令如表2所示。
编程命令需要4个周期,操作命令如表3所示。
编程和擦除操作都需要一定周期的时间(AT49LV1024的单字编程时间是20μ8,整片擦除时间是10 s),用户可以通过查询标志数据线DQ6和DQ7确定编程或擦除是否完毕。当器件正处于编程或擦除状态时,连续读任意单元的值,DQ6的值将一直在0、1之间交替变化,当编程或擦除结束时,读DQ6则得到一个恒定值。本文即通过此方法判断操作是否结束。
根据Flash的编程和擦除命令,编写了相应的C语言程序,其中SetGPIO46Addr(Addr)子程序的作用是根据所传递的Addr值配置相应的GPIO4和GPIO6即高两位地址的值。
3.3.1 片擦除程序
3.3.2 单字编程程序
3.3.3 编程和擦除结束确认程序
3.4 程序的烧写实现
本系统在CCS仿真环境下对Flash进行在线编程。先建立一个Flash的烧写工程,并在工程中将要烧写进Flash的引导表文件通过CCS的LOADDATA功能直接加载进DSP的内存,根据加载的首地址和数据长度,在仿真环境下烧进Flash中。值得注意的是,程序加载的内存空间不能与Flash的烧写程序重叠,否则烧写失败。
需要补充的是,经hex55.exe文件转化后的hex格式的引导表文件是不能直接导入CCS中的。CCS只支持将特别规定的DAT格式文件通过LOADDATA导入内存,所以在导入之前必须先将引导表转化成DAT格式文件,这个工作可以由VC编写一个简单的C语言转化程序实现。
4 结束语
本文阐述了一种针对TMS320VC55x系列DSP简单有效的Flash烧写方法,并提出了程序自举引导的实现方法,包括大程序二次引导的实现方法。本文讨论的引导方法包括硬件设计及相关程序,已在笔者的实际开发CMOS图像采集项目中使用并成功运行。
上一篇:基于FPGA的RISC微处理器的设计与实现
下一篇:TMS320VC55x系列DSP的Flash引导方法研究
推荐阅读最新更新时间:2024-05-02 20:36
- 热门资源推荐
- 热门放大器推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
- 翻开《射频技术For Dummies系列》书籍,跟帖漫谈射频世界
- 你们想要的XMC4800 Relax EtherCAT Kit来了,速度来申请!
- 看MPLAB® Harmony集成软件框架之学习篇 你来评论我送礼!
- 6月4日上午10:00直播:英飞凌栅极驱动芯片的应用以及安富利对应的解决方案
- 【DIY数控电源】入围方案及后续活动安排!
- 4小时实战+剖析:TI工程师教你快速上手 各种无线产品开发 (限量$14售CC1352R1无线开发板,助你参与动手实验)
- 有奖问答 | TE 互连解决方案助力智慧城市智能监控
- 下载有好礼!未来已来,你准备好了吗?益莱储5G白皮书!
- 罗德与施瓦茨-车载以太网及其一致性测试方案 回馈您的需求 看视频赢好礼