微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > TMS320VC5509在线烧写Flash并自举启动方法研究

TMS320VC5509在线烧写Flash并自举启动方法研究

时间:05-11 来源:互联网 点击:

摘 要:为了解决TMS320VC55X系列DSP系统程序代码的保存问题,设计了一种利用JTAG接口,在线烧写Flash并实现自举启动的方法。这种在线编程的方法利用并行外部存储器加载(EMIF)接口将TMS320VC5509和Flash芯片相连接,通过搬移程序将应用程序的已初始化段按照C55X系列DSP引导表格式烧写进外部扩展的Flash存储器中,从而实现自举启动。该方法为DSP系统的软件维护和升级带来了方便,具有实际的应用价值。
关键词: TMS320VC5509;自举启动;在线编程;Flash

随着数字信号处理技术的快速发展,DSP被广泛应用于各种数字信号处理系统中。最终开发的系统若要脱离仿真器运行,必须将程序代码存储在非易失性存储器中。Flash是一种可在线进行电擦写而掉电后信息又不丢失的存储器,它具有功耗低、容量大、擦写速度快等特点。如何将程序烧写进Flash,并在上电时加载到DSP内部的RAM中,是Flash在DSP系统应用中的两个基本问题[1]。本文基于TI公司的TMS320VC5509A和AMD公司的AM29LV800开发系统,详细阐述了在线烧写Flash并实现自举启动的方法。


1 硬件电路设计
图1为TMS320VC5509A与AM29LV800的连接示意图[2],Flash扩展在CE1空间,起始地址为200000。由于TMS320VC5509A只有14根地址线A0~A13,又因为Flash作为数据存储空间使用时的地址编码采用字寻址方式,则DSP的A0信号无效,所以AM29LV800芯片的低13位地址线A0~A12连接TMS320VC5509A的地址线A1~A13,高6位地址线A13~A18由缓冲串口来扩展。AM29LV800是低功耗Flash,工作在2.7 V~3.6 V电压下,一般存储数据可以保存100年以上,可以重复编程次数高达10万次。A18~A0为外部地址管脚,DQ0~DQ15为16条数据线,CE为片选控制管脚,OE为输出控制管脚,WE为写入控制管脚。

2 自启动过程分析及启动表结构


DSP系统的bootloader是指在系统上电时将一段存储在外部非易失性存储器中的程序搬移到DSP片内或片外扩展的高速RAM中并执行的代码。Bootloader程序永久性地存储在DSP以FF8000H开始的ROM中,DSP系统在复位后PC=FF8000H,即从Bootloader程序首地址开始执行。


TMS320VC5509 DSP的Bootloader有多种加载方式[3],如表1所示,设置DSP的GPIO0-GPIO3,DSP在复位时读取这4个引脚上的状态以确定所使用的启动模式。本文使用16-bit EMIF加载方式,虽然连线复杂,需要考虑并行非易失存储器Flash与EMIF接口的匹配关系,但是它的优点很多:不需要外部时钟驱动,非易失存储器种类多样,容量较大,除了存储下载表之外,还可存储系统需要保存的关键数据,以便在掉电时保存信息。


在这些加载模式下,下载程序之前先要生成一张载入表,即引导表。引导表的结构如图2所示,引导表携带的信息有代码段和数据段信息,向DSP下载程序的入口点地址、寄存器配置信息和可编程延时信息。

读引导表可知以下信息:程序入口地址是引导表加载结束后用户程序开始执行的地址,也就是用户程序生成的map文件中显示的入口地址;需配置寄存器数表明后面有多少个需要配置的寄存器;当延时标志为0xFFFF时,执行延时,延时长度决定了在寄存器配置后延时多少个CPU周期才进行下一个动作;段字节数、段起始地址和数据表示用户程序中定义的各个段的内容;引导表以32个0为结束标志。


生成引导表的方法:通过在DOS环境下使用hex55.exe转换工具。在转换操作之前, 先把用户程序生成的


.out文件、包含转换选项的CMD文件hex5509.cmd和转换工具hex55.exe放在同一个文件夹里,在DOS方式下先将路径修改为文件所在的位置,然后在此路径下运行命令hex55 hex5509.cmd,即可生成想要的.hex文件。


在转换时,提供引导表的相关配置信息的CMD文件这里被命名为hex5509.cmd,文中用到的hex5509.cmd的内容为:
-boot /*创建一个引导表*/
-v5510:2 /*选择合适的DSP引导表格式*/
LED.out /*输入文件*/
-o FLASH.hex /*输出文件*/
-a /*输出格式为straight ASCII*/
-parallel16 /*16位并行异步加载模式*/
-memwidth 16
-romwidth 16
-e 0x000004d4 /*程序的入口地址*/
-map LED.map /*输出map文件*/
-delay 0xffff /*延时*/
3 Flash烧写
Flash的读操作与传统EPROM读操作相同。由于芯片使用软件保护模式进行操作,用户编程时,只要向指定的地址写入指定的序列,就可以启动Flash芯片内部的写状态机,完成指定的操作。表2为Flash的操作命令说明(对芯片的擦除和编程都是按照字进行的),表中所有的数据都是十六进制数。
Flash的正确操作顺序:先复位,再擦除,最后编程。按照表2提供的操作命令时序来实现对AM29LV800的擦除和编程,PA为编程地址,PD为编程数据。Flash扩展在CE1空间,起始地址是200000,所以操作时所有地址必须加上200000。例如烧写工程中擦除部分命令为:
deminaddr = (int *)CESECT1;
addbias = 0x0555;
*(deminaddr+addbias) = 0x00aa;
addbias = 0x02aa;
*(deminaddr+addbias) = 0x0055;
addbias = 0x0555;
*(deminaddr+addbias) = 0x0080;
addbias = 0x0555;
*(deminaddr+addbias) = 0x00aa;
addbias = 0x02aa;
*(deminaddr+addbias) = 0x0055;
addbias = 0x0555;
*(deminaddr+addbias) = 0x0010;
delay(100)
芯片擦除需要占用6个总线周期,而芯片编程需要4个总线周期,依照表3的数据,在每个总线周期对相应地址写入命令字就可以了。用户一般都是对芯片进行写操作,写操作只能使‘1’变‘0’,而擦除只能使‘0’变为‘1’。图3为擦除和编程命令波形图,清楚地显示了擦除和编程操作过程。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top