采用C5402外挂FLASH存储器SST39VF400A实现在系统编程

tms320vc5402(以下简称c5402)是ti公司的一款性价比极好的16位定点dsp芯片。由于c5402内部只有16k×16位ram和4k×16位掩膜rom,用户程序必须存放在外挂的程序存储器中。对程序存储器的编程(即离线编程)通常是通过通用编程器完成的,即用户将要写入的程序转换成编程器能够接收的格式,再通过编程器写入存储器中。随着芯片制造工艺的不断提高,芯片集成度越来越高,存储器正在向小型化、贴片式发展,从而使表面封装或plcc封装的存储器难以利用编程器编程。目前普遍采用的在系统编程isp(in system programming)技术不需要编程器,通过系统的dsp可直接对用户板上的存储器编程,这样不仅节省了通用编程器及适配器的费用,还减少了频繁插拔存储器的麻烦,从而大量节省了系统开发时间,满足了用户程序在线更新的要求。外挂的程序存储器通常选用容量大、存储速度快、功耗低、性价比高的flash存储器。
由于dsp仿真软件编译链接后生成的是二进制的coff格式文件,不能直接写入flash中,还需通过hex转换工具将coff目标文件转换为标准的ascii码十六进制格式(即hex格式)。对于离线编程,只需将这种hex文件直接作为编程器的输入,即可写入flash;而在系统编程,则是利用系统本身的dsp,通过软件编程来实现整个烧写过程。因此,如何对flash进行烧写是整个在系统编程的一个关键。本文以一片c5402外挂一片flash存储器构成的最小系统为实例,介绍采用c语言编写flash烧写程序,并通过dsp将用户程序代码写入flash,从而实现在系统编程。
1 dsp与flash构成的最小系统
本系统的flash存储器选用sst公司的sst39vf400a,用作dsp的数据空间。flash的片选信号/ce由dsp的数据空间选择信号/ds和存储器选通信号/mstrb产生,读使能信号/oe和写使能信号/we由dsp的读写脉冲信号r/w和/ds、/mstrb组合产生。flash的地址线a0~a15和dsp的a0~a15直接相连,a16和a17接地。由于dsp数据空间0000h~3fffh为存储器映象寄存器、暂存器和片内ram,对外部flash来讲是不可见的,所以flash可操作的地址范围为4000h~0ffffh。设用户程序从flash中8000h单元开始存放,则系统上电时引导程序就从数据空间的8000h单元开始搬运数据到dsp内部ram指定区域,引导完毕后即跳转到ram中程序入口地址运行用户程序。
2 sst39vf400a的在系统编程
2.1 芯片简介及常用命令
sst39vf400a是sst公司的256k×16位flash存储器,工作电压3.3v、擦写寿命100 000次,访问时间70~90ns。用户只需向其特定地址写入特定的指令序列,那么通过这些命令用户即可启动内部写状态机,从而使其自动完成指令序列要求的内部操作,其中包括:复位、整片擦除、块擦除、扇区擦除、操作字写入等。
2.2 sst39vf400a编程操作
对采用在系统编程的flash存储器,整个编程过程由用户控制,因此用户必须了解flash存储器的各状态位,以便知道编程或擦除是否结束。sst39vf400a内部提供两种软件检查方法:检查状态位data# polling(dq7)和toggle bit(dq6)。现以检查toggle bit(dq6)位为例来具体说明sst39vf400a的编程及检查机制。sst39vf400a在进行内部编程或擦除时,对任何地址进行连续读取都会引起dq6的跳变,当操作停止就会结束跳变。因此可以通过连续两次读取检查dq6的变化情况来判断编程擦除操作是否完成。单字编程及检查流程如图1所示(其中wa为要写入数据的存储地址)。
3 c5402的并行引导装载
通过在系统编程操作可以实现将用户程序代码写入flash。如何确定flash中用户程序代码的存放格式并正确地引导装载以实现脱机运行,则是整个在系统编程的重点之处。在c5402的五种引导方式中,并行引导是dsp系统最常用最简单的引导方式。下面介绍c5402的并行16位引导装载方法。
3.1 引导过程简介
为了正确引导用户程序,必须编制引导表,引导表要告诉引导程序采用何种引导方式、程序入口地址、各段的目标首地址和长度等。引导表的数据格式是由链接配置文件和hex转换配置文件决定的,链接配置文件定义各段存放的首地址和长度,而hex转换配置文件则定义引导方式、程序入口地址和引导表在外部存储器中存放的首地址。引导程序可以从地址为0ffffh单元的i/o端口或数据存储器取得引导表的起始地址。本文介绍的是并行引导方式,引导过程如下:引导程序先从外部数据空间的0ffffh单元(即flash的0ffffh单元)读取引导表起始地址,然后从该起始地址读取引导标识。若为08aah则为并行8位引导方式;若不是再从起始地址的下一单元读取内容,看由此两单元内容组成的16位字是否为10aah,若是则为并行16位引导方式。最后从引导表指定的地址搬运各段代码到片内ram对应的地址,搬运完毕后即从程序入口地址执行用户程序。由此可见,引导表的编制是引导过程的关键。下面结合实例具体介绍引导表的形成和装载过程(设用户程序为测试指示灯的程序,源文件为main.asm和vectors.asm源代码省略)。
3.2 链接配置文件编写
(文件名为testledlink.cmd)
memory {
page 0:
vec: org=0100h, len=0080h ;中断向量的首地址和块长度
code: org=0180h, len=0f80h ;程序块的首地址和块长度
page 1:
stacks: org=1100h, len=0100h ;堆栈区的首地址和块长度
data: org=1200h, len=1000h ;数据块的首地址和块长度
}
sections{
.vectors:> vec page 0 ;将中断向量放入程序页的vec区
.text> code page 0 ;将程序代码放入程序页的code区
.stack> stacks page 1 ;将堆栈放入数据页的stacks区
.bss> data page 1 ;将未初始化变量放入数据页的data区
.data> data page 1 ;将初始化数据放入数据页的data区
}
链接配置文件写好后,通过dsp仿真软件ccs编译链接即可生成testled.out文件。在汇编时要注意,不论是dos下的asm500还是windows下的ccs都必须加上-v548开关量,否则不能生成正确的引导表。
3.3 hex转换配置文件编写
(文件名为testledhex.cmd)
testled.out ;转换的文件名,即编译链接后的.out文件
-a ;ascii-hex格式
-map testled.mxp ;生成的映射文件名,可不生成该文件
-o testled.hex ;转换后的hex文件名
-memwidth 16 ;系统存储器宽度为16位
-romwidth 16 ;rom器件宽度为16位
-boot ;将coff文件中各段转换为引导表的格式(替代sections伪指令)
-bootorg 0x8000 ;引导表放在flash的8000h开始的单元
-e 0x0100 ;装入引导表后程序运行的起始地址
hex转换配置文件写好后,使用ccs提供的转换工具hex500将生成的coff目标文件testled.out转化为标准的ascii—hex格式的文件testled.hex。注意在转换时一定要把testledhex.cmd文件的扩展名cmd加上。
3.4 构造引导表并写入flash
经过hex转换生成的testled.hex文件内容。
文件开始为ascii stx字符,结束为ascii etx字符,$a8000表示引导表存放的首地址,接下来的数据就是从8000h单元存放的引导表的内容,转换后的testled.hex文件可直接由编程器烧写进flash,也可通过在系统编程的方法由上述的dsp烧写程序写进flash。执行烧写程序前需要编写一个简单的程序将.hex文件中起始符、首地址、结束符等与引导表无关的信息去掉,并转换为dsp能识别的文件格式(如.dat),采用.copy或.include命令将该文件作为数据段嵌入烧写进程序中同时注意在flash的0ffffh单元写入引导表起始地址8000h。烧写flash后数据存放格式。
引导表烧写进flash后,将mp/mc引脚置低,上电复位后引导程序就会自动将flash中的用户程序搬进片内ram,搬运完毕后即跳转到程序入口地址,高速运行用户程序。
此方法适用于程序代码小于16k的情况,将用户程序全部导入c5402片内ram中即可;当用户程序较大而超过16k时,需要外扩程序存储器,此时在引导表中需用到扩展的程序计数器(xpc),来寻址扩展的程序存储空间。


新一代音频DAC的架构原理
都是1299美元起 MacBook Pro对比MacBook怎么选?
边缘采集网关通过Wi-Fi连接自建服务器远程控制IO
初学者学习单片机的几个最关心的问题
汽车电子电磁兼容EMC测试系统解决方案
采用C5402外挂FLASH存储器SST39VF400A实现在系统编程
Linux 命令大全建议收藏
宽禁带半导体技术的前沿发展有哪些
运用AD9371实现多通道宽带同步采集系统
功放管保护器电路,Amplifier protection circuit
DW-S402涉密载体管控系统介绍
调查:智能电视究竟有哪些不得不一吐为快的缺点
振动加速度传感器的工作原理解析
一文了解Moku:Lab多功能电子测量仪
爱立信分布式云的联网无人机解决方案助力运营商充分挖掘5G的商业潜能
编写Small RTOS51 的驱动程序
GIS回路电阻测试仪的作用
缝合针弹性韧性测试仪对圆针和三角针如何检验?
Python中互换X和Y的值代码
关于步进电机的选用与设计介绍