📄 用存储器映射的方法实现片外flash的擦写.htm
字号:
<P
style="TEXT-INDENT: 2em"> CodeWarrior
IDE是由Metrowerks公司专为Motorola的DSP56800系列设计的开发平台。该平台具有简单明了的图形用户界面和丰富的软件开发工具,适合于开发基于DSP56800系列的应用程序、插件程序等各种程序代码。在CodeWarrior环境中,用户可以通过修改.cmd文件来配置存储器分配方式,还可以通过修改startup文件夹中的初始化程序来控制系统的初始化操作。用户编译并链接后,将生成.elf文件,在文件中可以看到存储器的详细分配情况。当用户将程序下载到DSP芯片后,可以使用CodeWarrior的调试器对程序进行全面的调试,如设置断点、单步执行等;也可以使用
Watch Memory指令来检查存储器中的各地址段的值,还可以使用Save/Load
Memory指令来保存或是载入某段存储器的值。 </P>
<P style="TEXT-INDENT: 2em"> 2 方法介绍
</P>
<P
style="TEXT-INDENT: 2em"> 首先利用GPIOD0口生成合适的片外FLASH和片内XRAM片选信号,实现片内XRAM和片外FLASH的访问切换。例如当GPIOD0
=0时,0x8000~0xFFFF映射到片内XRAM,此时对于整个0x0000~0xFFFF地址范围的读写操作就是对于片内
XRAM的操作;当GPIOD0=1时,0x8000~0xFFFF地址范围映射到数据FLASH,则对0x8000~0xFFFF
地址范围的读写操作就是对于片外FLASH的操作;对0x0000~0x7FFF地址范围的读写仍是针对片内
XRAM的操作,从而将数据存储空间扩展了32k。 </P>
<P
style="TEXT-INDENT: 2em"> 再将映射方式设置为片内,将需要写到FLASH中的数据文件载入片内XRAM。最后根据需要设置GPIO端口值,切换地址映射的存储器。这样通过地址映射的方法,便可实现将XRAM中数据写入片外FLASH的操作,而对于DSP芯片来说只是进行了其XRAM寻址空间内部的数据搬移操作。
</P>
<P
style="TEXT-INDENT: 2em"> 假设要将一组二维数组character[180][32]形式的字模数据保存入片外数据FLASH的0x8000~0xA000地址段中,先做以下准备工作:
</P>
<P
style="TEXT-INDENT: 2em"> ①用一个GPIO端口,扩展系统的可寻址数据存储器空间;</P>
<P
style="TEXT-INDENT: 2em"> ②编写FLASH擦写程序。
</P>
<P style="TEXT-INDENT: 2em"> #define N
100 /*
由于FLASH与RAM的读写速度不同,所以需要在每项操作后加入若干个延迟以保证正确性,延迟的具体长短可以根据具体情况作调整
*/ </P>
<P style="TEXT-INDENT: 2em"> void
main() pre_write_FLASH(); /* 写FLASH前的预处理,向FLASH内写入相应命令字,根据所选用
FLASH的不同预处理操作也有所不同*/ </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> delay(N);
</P>
<P style="TEXT-INDENT: 2em"> </P>
<P
style="TEXT-INDENT: 2em"> *(flash_addr++)=code;
/*写数据到FLASH中*/ </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> delay(N);
</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> } </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> } </P>
<P style="TEXT-INDENT: 2em"> 擦写步骤如下:
</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> ①
将character[180][32]设置为全局变量。 </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> ②
将程序编译下载到DSP芯片中,打开工程目录中output文件夹中的.elf文件,找到character
数组在XRAM中存放的起始地址和长度。用户可以使用Watch Memory命令察看该段地址的数据值。 </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> ③ 使用Save
Memory命令将XRAM中对应于character数组的地址段的数据以二进制形式保存在计算机上。通过UltraEdit将其打开,检看数据保存是否正确。
</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> ④
打开FLASH擦写程序,修改数据在片内XRAM中存储的起始地址和FLASH的擦写起始地址与数据长度。编译下载后,单步执行,执行到擦除完FLASH,并将地址映射方式置为映射到片内XRAM处,使用Load
Memory指令将char数据文件载入到片内XRAM的相应存储地址段中,再接着全速运行程序,几十秒之后程序执行完毕,数据便写到片外FLASH的相应地址中。
</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> ⑤
再次打开FLASH擦写程序,单步执行到映射方式置为片外FLASH处停止,使用Save
Memory命令保存FLASH中刚写入的地址段的数据值。接着使用UltraEdit的比较文件命令比较前两次保存的数据,如完全相同就表明character字模数组已经正确的写到片外FLASH中。
</P>
<P style="TEXT-INDENT: 2em"> </P>
<P
style="TEXT-INDENT: 2em"> 将数据擦写入片外数据FLASH后,就可以在用户程序中对该数据加以调用。在调用的时候要先将映射方式设置为映射到片外FLASH,然后再取数据。如下所示,取出FLASH中0x6000地址上存储的数据:
</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> #define
FLASH_ADD (unsigned int *)0x6000 </P>
<P style="TEXT-INDENT: 2em"> </P>
<P
style="TEXT-INDENT: 2em"> *GPIO_D_DR=0x0002;
/*映射方式设置为映射到片外FLASH*/ </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> data =
*(FLASH_ADD); </P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em"> 3 结 论 </P>
<P style="TEXT-INDENT: 2em"> </P>
<P
style="TEXT-INDENT: 2em"> 本文介绍了一种通过地址映射方式,在基于
DSP的嵌入式系统中,通过DSP擦写片外FLASH的方法。该方法可适用于多种场合,针对多个
FLASH芯片可使用多个GPIO端口进行地址的扩展,并可通过DSP实现对其擦写操作;若将部分程序放置到片外FLASH中并作相应设置,即可实现系统的自举运行等。</P>
<P style="TEXT-INDENT: 2em"> </P>
<P style="TEXT-INDENT: 2em">
</P></TD></TR>
<TR>
<TD> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
<TD align=right width=265 bgColor=#f7fbfd>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR height=5>
<TD height=5></TD></TR>
<TR>
<TD vAlign=top>
<TABLE cellSpacing=1 cellPadding=1 width="100%" bgColor=#92b8cd
border=0>
<TBODY>
<TR>
<TD align=middle bgColor=#f7fbfd height=74>
<TABLE cellSpacing=0 cellPadding=0 width=248 align=center
border=0>
<TBODY>
<TR>
<TD vAlign=top
background="[技术资料 存储器] 用存储器映射的方法实现片外FLASH的擦写==www_ic37_com.files/tougao.gif"
height=40>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD align=middle width="21%" height=35><IMG
height=29
src="[技术资料 存储器] 用存储器映射的方法实现片外FLASH的擦写==www_ic37_com.files/write.gif"
width=34></TD>
<TD width="29%"><A
href="http://www.ic37.com/icasp/write.asp">我要投稿</A></TD>
<TD align=middle width="21%"><IMG height=29
src="[技术资料 存储器] 用存储器映射的方法实现片外FLASH的擦写==www_ic37_com.files/man.gif"
width=31></TD>
<TD width="29%"><A
href="http://www.ic37.com/Member/RegistContract.asp">注册会员</A></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD height=25><FONT color=#16387c>客服咨询热线:0755-26000950
0755-26007355
</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR height=4>
<TD height=4></TD></TR>
<TR>
<TD vAlign=top>
<TABLE cellSpacing=1 cellPadding=0 width="100%" bgColor=#92b8cd
border=0>
<TBODY>
<TR>
<TD
background="[技术资料 存储器] 用存储器映射的方法实现片外FLASH的擦写==www_ic37_com.files/bg01.gif"
bgColor=#eef6fe height=24><SPAN class=font13><FONT
color=#ffffff><STRONG> </STRONG></FONT></SPAN><FONT
color=#ffffff><STRONG><FONT
color=#316293>相关技术资料</FONT></STRONG></FONT></TD></TR>
<TR>
<TD bgColor=#f7fbfd>
<TABLE cellSpacing=0 cellPadding=2 width="100%" border=0>
<TBODY>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 嵌入式应用中存储器类型的选择技巧"
href="http://www.ic37.com/htm_tech/2007-11/23386_684940.htm"
target=_blank>嵌入式应用中存储器类型的选..</A> </TD>
<TD width="27%">2007-11-19</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 实时单片机通讯网络中的内存管理"
href="http://www.ic37.com/htm_tech/2007-7/41712_601652.htm"
target=_blank>实时单片机通讯网络中的内存..</A> </TD>
<TD width="27%">2007-7-29</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 同步图形存储器IS42G32256的原理与应用"
href="http://www.ic37.com/htm_tech/2007-8/41713_345895.htm"
target=_blank>同步图形存储器IS42G3..</A> </TD>
<TD width="27%">2007-8-9</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 基于IDE硬盘的高速数据存储器研究"
href="http://www.ic37.com/htm_tech/2007-7/41714_90138.htm"
target=_blank>基于IDE硬盘的高速数据存..</A> </TD>
<TD width="27%">2007-7-29</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] ADSP2106x中DMA的应用"
href="http://www.ic37.com/htm_tech/2007-8/41715_834381.htm"
target=_blank>ADSP2106x中DMA..</A> </TD>
<TD width="27%">2007-8-9</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 一种并行存储器系统的FPGA实现"
href="http://www.ic37.com/htm_tech/2007-8/41716_578624.htm"
target=_blank>一种并行存储器系统的FPG..</A> </TD>
<TD width="27%">2007-8-7</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 公共闪存接口CFI在Flash Memory程序设计中的应用"
href="http://www.ic37.com/htm_tech/2007-8/41717_322867.htm"
target=_blank>公共闪存接口CFI在Fla..</A> </TD>
<TD width="27%">2007-8-7</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 增强型51系列单片机W77E58的存储器访问"
href="http://www.ic37.com/htm_tech/2007-8/41718_67110.htm"
target=_blank>增强型51系列单片机W77..</A> </TD>
<TD width="27%">2007-8-9</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] RAID存储设备的发展及其应用"
href="http://www.ic37.com/htm_tech/2007-7/41719_811353.htm"
target=_blank>RAID存储设备的发展及其..</A> </TD>
<TD width="27%">2007-7-29</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 设计移动电子产品时如何选择快闪存储器"
href="http://www.ic37.com/htm_tech/2007-8/41720_555596.htm"
target=_blank>设计移动电子产品时如何选择..</A> </TD>
<TD width="27%">2007-8-7</TD></TR>
<TR>
<TD width="73%" height=22>·<A title="[存储器] 电子俘获光存储技术"
href="http://www.ic37.com/htm_tech/2007-7/41721_299839.htm"
target=_blank>电子俘获光存储技术</A> </TD>
<TD width="27%">2007-7-29</TD></TR>
<TR>
<TD width="73%" height=22>·<A
title="[存储器] 1兆位5伏闪速电擦除存储器AT29C010A及其应用"
href="http://www.ic37.com/htm_tech/2007-8/41722_44082.htm"
target=_blank>1兆位5伏闪速电擦除存储器..</A> </TD>
<TD width="27%">2007-8-7</TD></TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -