[Full]
完整版
[Rss]
订阅
[Xml]
无图版
[Xhtml]
无图版
Rss
& SiteMap
曙海教育集团论坛
http://www.bjzhda.cn
曙海教育集团论坛
◎
曙海教育集团论坛
→
DSP6000系统开发
→
TMS320VC55X系列DSP的FLASH引导方法
共2 条记录, 每页显示 10 条, 页签:
[1]
[浏览完整版]
标题:TMS320VC55X系列DSP的FLASH引导方法
1楼
wangxinxin
发表于:2010-11-22 14:36:22
以下内容含脚本,或可能导致页面不正常的代码
<font face="Arial"><strong>引言 </strong> 随着数字信号处理技术的快速发展,DSP被广泛的应用到各种数字信号处理系统中。最终开发的系统要想脱离<a class="aBlue" href="http://shop.icbuy.com/product/list/36.html" target="_blank"><font class="f14">仿真器</font></a>运行,必须将程序代码存储在非易失性<a class="aBlue" href="http://shop.icbuy.com/product/list/49.html" target="_blank"><font class="f14">存储器</font></a>中。FLASH<a class="aBlue" href="http://shop.icbuy.com/product/list/49.html" target="_blank"><font class="f14">存储器</font></a>以其大容量和可在线编程等特点已成为DSP系统的一个基本配置。如何将程序烧写进FLASH,并在上电时加载进DSP内部的RAM是FLASH在DSP系统中应用的两个基本技术问题。本文以基于TI公司的TMS320VC5509A和ATMEL公司的AT49LV1024 FLASH开发的系统为背景,介绍该系统引导相关的硬件设计,烧写软件设计以及自举引导、二次引导等实现方法。</font> <table align="left" border="0"> <tbody> <tr> <td valign="top" align="left" width="310" height="260"><!--文章页大屏幕广告--> <iframe style="BORDER-RIGHT: #e6e6e6 0px="0px" solid; BORDER-TOP: #e6e6e6 0px="0px" solid; BORDER-LEFT: #e6e6e6 0px="0px" solid; WIDTH: 300px; BORDER-BOTTOM: #e6e6e6 0px="0px" solid; HEIGHT: 250px; BACKGROUND-COLOR: #ffffff" name="icbuy_ad" marginwidth="0" marginheight="0" src="http://java09.icbuy.com/icbuyas/adPV.html?adlId=146&t=0.36223334325308565" frameborder="0" scrolling="no"></iframe></td></tr></tbody></table> <font face="Arial"><strong>TMS320VC5509A的自举引导 </strong> TMS320VC5509A每次上电复位后,在执行完一系列初始化(配置堆栈寄存器、关闭中断、程序临时入口、符号扩展、兼容性配置)工作后,根据事先配置的自举模式,通过固化在ROM内的BOOTLOADER程序进行程序引导。VC5509A的引导模式选择是通过四个模式选择引脚BOOTM[0:3]的配置来完成的。在本系统中,采用EMIF(外部存储接口)并行引导模式(16位数据宽度),则需将BOOTM[3:0]设置成1011即可。 通过EMIF接口可以灵活地和各种同步或异步<a class="aBlue" href="http://shop.icbuy.com/product/list/49.html" target="_blank"><font class="f14">存储器</font></a>件无缝连接。通过EMIF可以扩展VC5509A的存储空间到128Mbit(SDRAM),存储空间共被分为CE0~CE3。在EMIF的并行引导模式中,ROM中固化的Bootloader程序是以字地址0x200000为首地址开始加载程序。地址0x200000即位CE1空间的首地址,所以FLASH必须接在DSP的CE1空间上。在加载时,EMIF的CE1空间已经默认配置成异步静态随机<a class="aBlue" href="http://shop.icbuy.com/product/list/49.html" target="_blank"><font class="f14">存储器</font></a>(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文件 </font><font face="Arial"><strong>FLASH的烧写和自举的实现 TMS320VC5509A和AT49LV1024的硬件设计 </strong> AT49LV1024是ATMEL公司3V供电系统的FLASH芯片,16位位宽,容量为64K字。VC5509A(PGE封装)只有14条地址线,只能寻址16K字的SRAM空间。要想寻址64K字地址空间的话,FLASH地址线的高两位则需要通过其他IO线控制。在本系统中通过GPIO4和GPIO6与FLASH的高两位地址相连达到此目的,其连接示意图如图1所示。但是在Bootloader自举引导程序的时候,并不能控制GPIO引脚,也就是只能引导最大16K字的程序。对于大于16K字的程序,则需要进行二次引导。</font> <font face="Arial"><img src="http://www.icbuy.com/upload/info/news/content/20070803/0202493001186105643.jpg" border="0" twffan="done"/></font> <font face="Arial">图1 VC5509A和AT49LV1024的硬件连接示意图 </font><font face="Arial"><strong>二次引导技术 </strong> 所谓二次引导,通过DSP内部ROM固化的Bootloader引导用户自己编写一个引导程序,其功能和ROM内固化的Bootloader相同,再通过此引导程序加载系统最终运行的程序代码,并在加载结束后,把PC值置为新的程序入口地址。由于在用户编写的引导程序中,可以控制GIPO4和GPIO6,所以可达到64K字地址空间的寻址目的。其具体实现框图如图2所示。</font> <font face="Arial"><img src="http://www.icbuy.com/upload/info/news/content/20070803/0639783001186105643.jpg" border="0" twffan="done"/></font> <font face="Arial">图2 TMS320VC 5509A二次引导框图 </font><font face="Arial"><strong>数据烧写程序设计 </strong> 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即高两位地址的值。 ·片擦除程序 #define FLASH_BASE_ADDR=0x200000; //设定FLASH的基地址,CE1的首地址 void ChipErase(void) { SetGPIO46Addr(0x5555); //设定FLASH的 地址值0x5555的GPIO4和GPIO6电平 *(volatile Uint16 *)(FLASH_BASE_ADDR+0x5555) = 0xaa; //向 FLASH的地址0x5555写入0xaa SetGPIO46HiAddr(0x2aaa); *(volatile Uint16 *)(FLASH_BASE_ADDR+0x2aaa) = 0x55; SetGPIO46HiAddr(0x5555); *(volatile Uint16 *)(FLASH_BASE_ADDR+0x5555) = 0x80; SetGPIO46HiAddr(0x5555); *(volatile Uint16 *)(FLASH_BASE_ADDR+0x5555) = 0xaa; SetGPIO46HiAddr(0x2aaa); *(volatile Uint16 *)(FLASH_BASE_ADDR+0x2aaa) = 0x55; SetGPIO46HiAddr(0x5555); *(volatile Uint16 *)(FLASH_BASE_ADDR+0x5555) = 0x10; WriteOrEraseIsOver(); //等待擦除完毕 } ·单字编程程序 void WriteWord (Uint16 Addr, Uint16 Val) { SetGPIO46HiAddr(0x5555); *(volatile Uint16 *) (FLASH_BASE_ADDR+0x5555) = 0xaa; SetGPIO46HiAddr(0x2aaa); *(volatile Uint16 *) (FLASH_BASE_ADDR+0x2aaa) = 0x55; SetGPIO46HiAddr(0x5555); *(volatile Uint16 *) (FLASH_BASE_ADDR+0x5555) = 0xa0; SetGPIO46HiAddr(Addr); *(volatile Uint16 *) (FLASH_BASE_ADDR+ Addr ) = Val; // 写进编程数据 WriteOrEraseIsOver(); //等待编程结束 } ·编程和擦除结束确认程序 void WriteOrEraseIsOver(void) { volatile Uint16 LastDQ6,CurrentDQ6; SetGPIO46HiAddr(0x0); LastDQ6= (*(volatile Uint16 *)FLASH_BASE_ADDR)&0x40; //取DQ6的值 CurrentDQ6=(*(volatile Uint16 *)FLASH_BASE_ADDR)&0x40; While(1) //等待两次连续读DQ6的相等 { LastDQ6=CurrentDQ6; CurrentDQ6=(*(volatile Uint16*)FLASH_BASE_ADDR)&0x40; if(LastDQ6==CurrentDQ6) break; //当两次连续读DQ6的相等时,跳 出循环 } } 本系统采用CCS仿真环境下对FLASH在线编程。先建立一个FLASH的烧写工程,并在工程中将要烧写进FLASH引导表文件,通过CCS的LOAD DATA功能直接加载DSP的内存中,根据加载的首地址和数据长度,在仿真环境下烧进FLASH中。值得注意的是,程序加载的内存空间不能和FLASH的烧写程序重叠,否则将烧写失败。 需要补充的是,经HEX55.exe转化后的hex格式的引导表文件是不能直接导入CCS中的。CCS只支持其特别规定的DAT格式文件通过LOAD DATA导入内存中,所以引导表在导入之前必须先进行转化。转化成DAT格式文件这个工作可以通过VC编写一个简单的C语言转化程序来实现。</font> <font face="Arial"><strong>结语 </strong> 本文阐述了一种针对TMS320VC55x系列DSP简单有效的FLASH烧写方法,并提出了程序自举引导的实现方法,包括大程序二次引导的实现方法。本文讨论的引导方法包括硬件设计及相关程序已在实际开发CMOS图像采集项目中使用,并成功运行</font>
说明:
上面显示的是代码内容。您可以先检查过代码没问题,或修改之后再运行.
共2 条记录, 每页显示 10 条, 页签:
[1]
Copyright © 2000 - 2009
曙海
教育集团
Powered By
曙海教育集团
Version 2.2
Processed in .01563 s, 2 queries.
[Full]
完整版
[Rss]
订阅
[Xml]
无图版
[Xhtml]
无图版