用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

DSP+FLASH引导装载系统的设计与实现

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:51:08
【本文由PB创新网为您整理】
摘要:介绍了利用DSP编程实现对FLASH的读写操作,设计并实现子一个引志装载系统的模型,给出了一个简单的测试用的实例。整个方案有较大的灵活性和实用性。

    关键词:数字信号处理器 FLASH存储器 引导装载

在一些脱机运行的DSP系统中,用户代码需要在加电后自动装载运行。DSP系统的引导装载(Bootload)是指在系统加电时,DSP将一段存储在外部的非易失性存储器的代码移植到内部的高速存储器单元中去执行。这样既利用了外部的存储单元扩展DSP本身有限的ROM资源,又充分发挥了DSP内部资源的效能。尽管用户代码在一段时间相对是固定的,但是如果直接将其掩膜到内部ROM中去的话,一方面受容量以及价格的限制,另一方面则在系统代码级上显得不是很灵活方便。FLASH是一种高密度、非易失性的电可擦写存储器,而且单位存储比特的价格比传统的EPROM要低,十分适合于低功耗、小尺寸和高性能的便携式系统。除了可以采用专用的硬件编程器把代码灌入FLASH中之外,也可以利用现成的DSP通过软件编程来实现同样的功能。本文论述的正是如何通过DSP软件编程来实现对FLASH的读写操作,并介绍一个简单的系统引导装载方案的实现。

1 系统描述

本系统由DSP(TMS320VC5410)及外部的FLASH(M29W400T)以及相关的电源管理单元等构成。DSP与FLASH的连接如图1所示。DSP与FLASH是主从关系,由DSP的相关输出管脚控制FLASH的擦除和读写。其中,A0~D15为数据线,/MSTRB为存储选通信号,R/W是读写脉冲信号,/OE和/WE分别为读使能和写使能,/CE为片使能,/BYTE为8位或16位数据模式选择(图中接高电压为16位模式)。FLASH用于存放引导程序段和用户代码,由DSP软件编程来写入。当系统脱机加电时,DSP首先从外部FLASH指定的引导程序段的起始位置处开始执行引导装载。所谓引导装载,就是将原先存储在FLASH中的用户代码移植到DSP内部的高速执行执行,然后将程序指针设置为用户代码的起始地址。这样,接下来就可以利用DSP资源高速执行用户代码了。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2 DSP对FLASH的操作

2.1 DSP及FLASH简介

TMS320VC5410是TI公司的C54x系列的定点DSP,具有低功耗和高速度,常用于便携式系统开发。其内部在座资源包括256Kb的可掩膜RO凤及可高速运行的128Kb的DARAM和896Kb的SARAM。ROM中固化了TI提供引导装载代码,方案采用自编的引导程序。

ST公司的M29W400系列的FLASH容量为4Mb,分为11个不同大小的块结构,支持8位或16位操作模式。通过特殊的命令字序列可以对每一块独立进行擦除和读写。与以往的FLASH相比,它由外部单电压供电,无需额外提供高电压即可实现擦除及写入,因而在系统设计上无需考虑特殊的电平匹配。本方案采用16位模式。

2.2 地址映射方式

由于用DSP操作FLASH,必然涉及到FLASH的实际地址在DSP中的映射方式。TMS320VC5410的地址空间如图2所示,包括数据空间和程序空间,具体的映射方式由DSP内部的一些寄存器决定。它使用页面扩展机制,最多可以寻址8192Kb的程序空间。假设FLASH的起始地址0x0000和DSP的起始地址0x0000重合,那么FLASH中只有对应于DSP外部空间的那部分地址,才是DSP可见的。比如,本方案中采用微处理器模式(MP=1)且OVLY=1时,则DSP第0页程序空间中可见的FLASH的地址范围为0x8000~0xFFFF。

在擦除或读写FLASH之前,必须先执行相应的命令字序列,即在指定的FLASH地址处写入指定的指令代码。而整个FLASH地址空间并非和FSP的地址空间一一对应,所以需要考虑地址的重映射。

现以对FLASH写入为例。未考虑地址重映射时,命令字序列如下所示:

Flash Write(0x5555L,0x00AA);//1st cycle

Flash Write(0x2AAAL,0x0055);//2nd cycle

Flash Write(0x5555L,0x00A0);//Program command

Flash Write(myaddress,mydata);//put mydata into myaddress

由图2可知,当MP=1和OVLY=1时,FLASH地址0x5555L和0x2AAAL在DSP中位于外部空间之外,是不可见的。这样DSP执行上述语句时,根本没有对FLASH进行相应的操作,从而导致即使FLASH地址myaddress是DSP可见的,也无法实现数据写入的功能。

仔细分析FLASH的命令字序可知,前三句命令字序列中真正起作用的地址位是A0~A14,而高地址位A15~A17可以是任意值。于是考虑加一个偏移量0x8000,使得重映射后的FLASH地址在DSP中是可见的。修改后的代码如下所示:

#define OFFSET 0x8000

Flash Write ((0x5555L+OFFSET),0x00AA);//1st cycle

Flash Write((0x2AAAL+OFFSET),0x0055);//2 nd cycle

Flash Write((0x5555L+OFFSET),0x00A0);//Program command

Flash Write((myaddress,mydata);//put mydata into myaddress

这样,在DSP中就可以对外部FLASH进行写入操作了,前提是FLASH地址myaddress在DSP中可见。擦除和读操作也要对照图2作类似的地址重映射,不一一累述。

2.3 擦除和读写过程描述

在DSP将数据写入FLASH之前,先要删除数据所在块,然后才能重新写入。擦除和写操作之前都要执行相应的命令字序列,而读操作则可以直接进行。而且要写入的数据部分应为引导程序段以及用户代码是经过编译、连接后的目标代码,且为FLASH可

[1] [2]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:27,187.50000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号