TMS320VC33的FLASH在线编程方法

来源:互联网 发布:qq三国js怎么搭配灵魄 编辑:程序博客网 时间:2024/05/21 18:34

DSP系统应用中FLASH在线编程方法
介绍了在TI公司TMS320VC33 DSP应用系统中,通过JTAG口对DSP外部FLASH存储器实现在线编程的方法,给出了DSP系统加电后的自动装载运行。
关键词:DSP JTAG FLASH存储器在线编程 Bootload
FLASH存储器是一种高密度。非易失性的电可擦写存储器,存储量大,使用方便,适用于低功耗。高性能的系统。在高速DSP应用系统中,为了充分发挥DSP性能,在加电后需要将用户代码装载到高速RAM存储器中运行。下面介绍 SST29LE020型FLASH存储器的烧写方法,以及如何实现TMS320VC33上电后用户程序的自举引导(Bootload)。
1 SST29LE020的特点及操作
SST29LE020是SST公司生产的一种256K×8FLASH,它有10万次以上的擦写寿命,其内部分为2048个页面,每个页面128字节,页面写周期为5ms。如果页面中一个数据需要改变,则这个分区的所有数据必须重新装入。(The SST29LE020 are 256K x8 CMOS Page-Write EEPROM manufactured with SST's proprietary, high performance CMOS SuperFlash technology. The split-gate cell design and thick oxide tunneling injector attain better reliability and manufacturability compared with alternate approaches. The SST29LE020 write with a single power supply. Internal Erase/Program is transparent to the user. The SST29LE020 conform to JEDEC stan­dard pinouts for byte-wide memories.)FLASH支持软件数据保护功能(Software Data Protection),当执行三字节DSP写指令时,保护功能将自动加上,任何后续的写操作必须带上三字节DSP写指令。
SST29LE020的读操作与传统EPROM读操作一致;在进行数据编程操作时,它支持内部定时(Internal Timer).数据查询(Data#Polling).跳变位(Toggle Bit)三种方式,以测试内部编程操作是否完成。FLASH软件擦除指令为6字节加载指令,该指令执行后,最多等待20ms整个芯片便被擦除,即将 FLASH每个数据位都恢复为1状态的全FF状态。
SST29LE020软件指令序列可在SST公司的数据手册上查到,在FLASH编程之前,需对FLASH进行擦除,擦除操作需要六个总线周期。
FLASH页面写操作在使用内部定时方式时的流程。
2 TMS320VC33简介
TMS320VC33是美国TI公司推出的TMS320C3X系列的32位浮点数字信号处理器,它是在TMS320C31浮点DSP的基础上开发的一个价格更低的DSP,该产品具有高速。低功耗。低成本。易于开发等显著优点。 TMS320VC33采用内部1.8V,外部3.3V供电,因而它的功耗比原有型号TMS320C31的功耗降低了大约一个整量级,而且能支持高达 150M/FLOPS的运行速率。其主要特性如下:
CPU是32bit的高性能CPU:可进行16/32b整数和32/40b的浮点操作;内含8个扩展精度寄存器;有2个地址发生器。8个辅助寄存器和2个辅助寄存器算术单元(ARAU)。
片内存储器为32bit指令字。24bit地址线。34K×32b(1.1Mb)的双静态RAM。
外围接口具有启动程序装载功能;内含5倍频的锁相环(PLL)时钟发生器;片内存储器可映射外设,其中包括一个串行口。两个32bit定时器和一个DMA;具有四个内部译码页选,可大大简化TMS320VC33与I/O及存储器的接口。
3 TMS320VC33程序引导功能
TMS320VC33具有两种存储器映射方式,即MP(Microprocessor Mode)方式和MC/BL(Microcomputer/Bootloader Mode)方式,两种方式下中断向量的位置不同。常用的是MC方式。在该方式下,MCBL/MP引脚接高电平,内部ROM被映射到000~FFF之间。这段ROM中今有器件生产厂家固化的引导程序(BootLoader),该引导程序可以将DSP实时运行的程序和数据从外部低速ROM或串行口装入到高速 RAM中。
TMS320VC33复位后即运行内部固化的引导程序,引导程序通过查询四个中断引脚来确定装入方式。这些引脚为低电平有效,查询顺序依次为INT3.INT0.INT1.INT2;当INT3有效时,为串行装入方式;当INT0有效时,从外部地址0x001000处装入(BOOT1);当INT1有效时,从外部地址0x400000处装入(BOOT2);当INT2有效时,从外部地址 0xfff000处装入(BOOT3)。
TMS320VC33具有四个快速页选信号,用于对外部地址空间寻址。
使用外部存储器装入数据时,外部存储器数据头位置需包含以下信息:
(1)外部存储器宽度(8/16/32位);
(2)程序代码块的长度;
(3)装入数据的目的起始地址;
(4)存储器访问的定时控制参数。
头信息之间是用户的程序代码,程序代码按低位在前。高位在后的顺序排列。程序代码之后,必须有一个全零字,即0x00000000,用以指示引导程序用户程序代码已结束。引导完成后,即从装入的目的地址处开始执行用户程序。
4 FLASH在线编程方法
TMS320VC33的调试使用CC for C3x/4X(Code COmposer)集成编程环境,通过JTAG头仿真用户板,用户代码先放在外部RAM中调试,调试成功后,就可以将用户程序代码写入FLASH了。下面介绍在并行装入BOOT2方式下的在线编程方法。
SST29LE020与TMS320VC33的连接方式比较简单,FLASH片选CE引脚直接连接至TMS320VC33的PAGE1引脚;FLASH的输出使能OE引脚的最简单的处理方法是采用跳线方式(当向FLASH写入数据时,接高电平;通常情况下,接地)。
在调试用户程序时,需根据用户板的存储器空间分配制作CMD文件,假设用户扩展的外部RAM为32bit,起始地址为0x00c00000,长度为32K;外部FLASH起始地址为0x00400000(使用BOOT2方式),长度为256K。其CMD文件如下:
MEMORY
{
INTRAM1:origin=0x00800000,length=0x00008000
INTRAM2:origin=0x00809800,length=0x000007c1
VEC:origin=0x00809fc1,length=0x3f
EXTRAM:origin=0x00c00000,length=0x00008000/*32k*/
FLASH:origin=0x00400000,length=0x00040000/*256*/
}
SECTIONS
{/*用户程序代码及初始化数据放在外部RAM*/
.vectors>VEC /*VC33规定的中断向量地址*/
.text :LOAD=EXTRAM
.cinit>EXTRAM
.data:RUN=EXTRAM
.bss:RUN=INTRAM2
.stack>INTRAM1
}
第一步:在CC下编译后,装入用户。OUT文件,用户程序代码即被写入EXRAM空间。
第二步:依据TMS320VC33的BOOT格式,并根据CC产生的用户。MAP文件找出程序入口地址。各加载块的入口地址以及长度,编写FLASH烧写文件。示例源程序清单如下:
#define MEM_WIDE 0x00000008 /*Flash存储器宽度*/
#define CG_REGISTER 0x000010c8 /*全局存储器配置参数*/
#define ENTER_POINT 0x00c00064 /*程序代码入口地址*/
volatile int *flash_add=(volatile int *)0x400000;/*外部Flash的映射地址*/
#define BOOTORG 0xc00064 /*.MAP文件中的程序入口地址
#define BOOTBLK 3/*.MAP文件中的加载块数量*/
#define BOOTSRC1_ADD 0x00809fc1 /*第1个加载块地址*/
volatile int *bootblk1_add=(volatile int *)0x00809fc1;
#define BOOTBLK1_LEN 0x3a /*第1个加载块长度*/
#define BOOTSRC2_ADD 0x00C00000 /*第2个加载块地址*/
volatile int *bootblk2_add=(volatile int *)0x00c00000;
#define BOOTBLAK2_LEN 0xa3 /*第2个加载块长度*/
#define BOOTSRC3_ADD 0x00C000a3 /*第3个加载块地址*/
volatile int *bootblk3_add=(volatile int *)0x00c000a3;
#define BOOTBLK3_LEN 0x17 /*第3个加载块长度*/
////////////////////////////////////////////
unsigned int flashaddnum,bytenum;
/*定义Flash地址及页面字节数变量*/
void waite(int ms)/****软件 1ms子程序****/
{…………;}
void sdp_flash()/******软件数据保护子程序*********/
{flash_add[0x5555]=0xaa;/*3字节芯片SDP指令*/
flash_add[0x2aaa]=0x55;
flash_add[0x5555]=0xa0;
}
void era_flash()/******擦除芯片子程序*********/
{flash_add[0x5555]=0xaa;/*6字节芯片擦除指令*/
flash_add[0x2aaa]=0x55;
flash_add[0x5555]=0x80;
flash_add[0x5555]=0xaa;
flash_add[0x2aaa]=0x55;
flash_add[0x5555]=0x10;
waite(20); /*20ms等待芯片擦除完成*/
}
void write_flash(int bootdata)/***写一个int型数据***/
{unsigned int i;
for(i=0;i<3;i++) /*一个int型数分成四个字节写入*/
{if(bytenum==0) /*如果是页面第1个字节,先写SDP指令*/
{sdp_flash();}
flash_add[flashaddnum]=bootdata; /*向Flash地址写一个字节*/
flashaddnum++; /*Flash地址加1*/
bytenum++; /*页面字节加1*/
if(bytenum>127) /*一个页面写完,页面字节置0,等待11ms*/
{bytenum=0;waite(11);}
bootdata>>=8; /*待写数据右移8位*/
}
}
void main() /***主程序***/
{unsigned int i,j,lenth;
bytenum=0;flashaddnum=0; /*Flash地址及页面字节数置*/
waite(1); /*等待1ms*/
era_flash(); /*擦除Flash芯片*/
write_flash(MEM_WIDE); /*写外部Flash存储器宽度*/
write_flash(CG_REGISTER); /*写寄存器配置参数*/
write_flash(1); /*第1个boot的数据长度为1*/
write_flash()ENTER_POINT; /*写入boot的目的地址*/
write_flash(0); /*第1个boot的数据*/
for(i=0;i<BOOTBLK;i++) /*分别烧写需要boot的数据块*/
{if(i==0) /*每个数据块烧写的起起2字节分别是长度和源地址*/
{lenth=BOOTBLK1_LEN;
write_flash(BOOTHBLK1_LEN);
write_flash(BOOTSRC1_ADD);}
else if(i==1)
{lenth=BOOTBLK2_LEN;write_flash(BOOTBLK2_LEN);
write_flash(BOOTSRC3_ADD);}
else{;}
for(j=0;j<lenth;j++) /*将数据块内容写入Flash*/
{if(i==0){write_flashbootblk1_add[j]};}
else if(i==1){write_flash(bootblk2_add[j]);}
else if(i==2){write_flash(bootblk3_add[j]);}
else{;}
}
}
write_flash(0); /*代码最后位置写全零*/
write(10); /*等待10ms,保证Flash写完成*/
}
第三步:修改。CMD文件SECTION段,将烧写程序链接到内部RAM区。。CMD文件中SECTION段如下:
SECTIONS
{/*Flash烧写代码及初始化数据放在TMS320VC33内部RAM*/
.text:LOAD=INTRAM1
.bss:RUN=INTRAM1
.cinit>INTRAM1
.stack>INTRAM1
}
第四步:运行烧写程序,用户代码即被写入FLASH中,将FLASH的OE引脚跳线连通至的位置,利用CC可以查看FLASH存储器内容是否与要烧写的内部一致,并脱机检验。
FLASH在线编程方法已在用户板上得到了验证,达到了预期的目的。通过JTAG仿真器对 TMS320VC33用户系统外部FLASH的在线编程,可以省去HEX转换工具及EPROM编程器等工具,且具有方便。易行的特点。该现场在线编程的方法可推广至其它系列DSP用户系统,是DSP开发中需要掌握的一项新技术。

本文来自: B2B99.COM 原文网址:http://www.b2b99.com/hyzs/dz/8769.htm

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 农村乱收垃圾费怎么办 信用卡额度低不想要怎么办 qq公告有敏感词怎么办 qq群公告敏感词怎么办 轿车加了假汽油怎么办? 电信4g变成3g怎么办 电信流量超过40g怎么办 联通卡网络信号很差怎么办 电马桶马达坏了怎么办 我这么好看别人看不到怎么办 户口打回原籍不接受怎么办 小电充电宝丢失怎么办 qq连续聊天断了怎么办 胚胎怀疑在切口处怎么办 3D渲染没有材质怎么办 员工拒绝签收员工手册怎么办 二级密码错了三次怎么办 棉签掉到耳朵里怎么办 发财树叶子有黄斑怎么办 翠兰的颈枯萎了怎么办 翠兰主干软了怎么办 花叶子长白色粘粉末怎么办 水培转土培栀子花叶子蔫了怎么办 水冷空调水不循环怎么办 哺乳期乳房一个大一个小怎么办 我喝酒后喂奶了怎么办 磁盘目录不具有读写权限怎么办 玻纤网格布扎手怎么办 模拟城市5细菌太多怎么办 空气风犁叶子卷怎么办 晚上腿比早上粗怎么办 新疆公安边防改革新兵怎么办 专升本没有考上怎么办 摩托车漏检了2年怎么办 19年北京外地车怎么办 汽车遥控钥匙按键坏了怎么办 长安逸动噪音大怎么办 微信设置密码参数错误怎么办 太阳能电加热不加热怎么办 没报到换了工作怎么办 大学最后一年入伍入伍毕业证怎么办