TMS320C54x DSP在线烧写FLASH存储器并实现自举引导的方法
发布时间:2008/5/27 0:00:00 访问次数:624
关键词: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便跳转到指定的程序入口地址,开始执行用户程序。
关键词: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便跳转到指定的程序入口地址,开始执行用户程序。