TMS320C54xDSP在线烧写FLASH存储器并实现自举引导的方法
发布时间:2007/4/23 0:00:00 访问次数:2678
关键词:TMS320C54x FLASH 烧写 自举引导
在DSP系统中通常贴片式FLASH存储器保存程序,并且在上电或复位时再将存储在FLASH中的程序搬移到DSP片内或者片外的RAM中全速运行。这个“程序搬移”的过程叫做自举加载。
本文以TMS320C5416 DSP对MBM29LV400BC存储器的操作为例,详细阐述了在线烧写FLASH并实现自举加载的方法。该方法适合于大多数C54x系列DSP对符合JEDEC标准的FLASH的操作。为便于读者使用,本文的程序全部采用C语言编写。
1 TMS320C5416与MBM29LV400BC的硬件接口
MBM29LV400BC与TMS320C5416的接口很方便,前者只需作为后者的外部数据存储器与其进行连接,而中间的逻辑电路采用CPLD实现即可。这里使用16位数据宽度,所以BYTE引脚通过一个上拉电阻接到3.3V电源。连接电路原理如图1所示。相应的VHDL语言程序为:
FLASH_CE<=DSP_DS;
FLASH_OE<=(NOT DSP_R_W)OR DSP_MSTRB;
FLASH_WE<=DSP_R_W OR DSP_MSTRB;
2 TMS320C5416自举引导过程
当MP/MC=0时,TMS320C5416被置于微计算机模式。上电或复位时,程序指针指向片内ROM区的FF80H单元,该单元放置了一条跳转指令,使程序跳转到F800H单元。而F800H就是自举加载器(Bootloader)引导程序的起始单元。
Bootloader的任务就是将存放在外部FLASH中的程序“搬运”到DSP内部或外部的RAM区,“搬运”完后跳转到程序入口处执行。存放在外部FLASH中的用户程序与一些必要的引导信息组合在一起,称为Boot表示(自举表)。16位模式下通用的Boot表结构如表1所示。
表1 16位模式下通用Boot表结构
序 号 | 内容及意义 |
1 | 10AA(16位存储格式) |
2 | SWWSR值 |
3 | BSCR值 |
4 | Boot之后程序执行入口偏移地址XPC |
5 | Boot之后程序执行入口地址PC |
6 | 第一个程序段的长度 |
7 | 第一个程序段要装入的内部RAM区域移地址 |
8 | 第一个程序段要装入的内部RAM区地址 |
9 | 第一个程序段代码… |
10 | 第二个程序段的长度 |
11 | 第二个程序段要装入的内部RAM区偏移地址 |
12 | 第二个程序段要装入的内部RAM区地址 |
13 | 第二个程序段代码… |
14 | Boot表结构标志:0x0000 |
TMS320C5416提供了多种自举加载的方法。在此使用并行加载模式,因此令INT2=1和INT3=1。在并行模式下,自举表放在外部数据存储器的32K高端地址区间:8000H~0FFFH。自举表首地址放在数据空间的0FFFFH单元。加载时,Bootloader读取数据空间的0FFFFH单元中的内容,将其作为首地址,从该地址开始复制数据到内部的程序空间。复制完毕后,Bootloader便跳转到指定的程序入口地址,开始执行用户程序。
3 MBM29LV400BC的操作命
关键词:TMS320C54x FLASH 烧写 自举引导
在DSP系统中通常贴片式FLASH存储器保存程序,并且在上电或复位时再将存储在FLASH中的程序搬移到DSP片内或者片外的RAM中全速运行。这个“程序搬移”的过程叫做自举加载。
本文以TMS320C5416 DSP对MBM29LV400BC存储器的操作为例,详细阐述了在线烧写FLASH并实现自举加载的方法。该方法适合于大多数C54x系列DSP对符合JEDEC标准的FLASH的操作。为便于读者使用,本文的程序全部采用C语言编写。
1 TMS320C5416与MBM29LV400BC的硬件接口
MBM29LV400BC与TMS320C5416的接口很方便,前者只需作为后者的外部数据存储器与其进行连接,而中间的逻辑电路采用CPLD实现即可。这里使用16位数据宽度,所以BYTE引脚通过一个上拉电阻接到3.3V电源。连接电路原理如图1所示。相应的VHDL语言程序为:
FLASH_CE<=DSP_DS;
FLASH_OE<=(NOT DSP_R_W)OR DSP_MSTRB;
FLASH_WE<=DSP_R_W OR DSP_MSTRB;
2 TMS320C5416自举引导过程
当MP/MC=0时,TMS320C5416被置于微计算机模式。上电或复位时,程序指针指向片内ROM区的FF80H单元,该单元放置了一条跳转指令,使程序跳转到F800H单元。而F800H就是自举加载器(Bootloader)引导程序的起始单元。
Bootloader的任务就是将存放在外部FLASH中的程序“搬运”到DSP内部或外部的RAM区,“搬运”完后跳转到程序入口处执行。存放在外部FLASH中的用户程序与一些必要的引导信息组合在一起,称为Boot表示(自举表)。16位模式下通用的Boot表结构如表1所示。
表1 16位模式下通用Boot表结构
序 号 | 内容及意义 |
1 | 10AA(16位存储格式) |
2 | SWWSR值 |
3 | BSCR值 |
4 | Boot之后程序执行入口偏移地址XPC |
5 | Boot之后程序执行入口地址PC |
6 | 第一个程序段的长度 |
7 | 第一个程序段要装入的内部RAM区域移地址 |
8 | 第一个程序段要装入的内部RAM区地址 |
9 | 第一个程序段代码… |
10 | 第二个程序段的长度 |
11 | 第二个程序段要装入的内部RAM区偏移地址 |
12 | 第二个程序段要装入的内部RAM区地址 |
13 | 第二个程序段代码… |
14 | Boot表结构标志:0x0000 |
TMS320C5416提供了多种自举加载的方法。在此使用并行加载模式,因此令INT2=1和INT3=1。在并行模式下,自举表放在外部数据存储器的32K高端地址区间:8000H~0FFFH。自举表首地址放在数据空间的0FFFFH单元。加载时,Bootloader读取数据空间的0FFFFH单元中的内容,将其作为首地址,从该地址开始复制数据到内部的程序空间。复制完毕后,Bootloader便跳转到指定的程序入口地址,开始执行用户程序。
3 MBM29LV400BC的操作命