📄 用io模拟方式读写三星系列的nand flash.htm
字号:
google_ad_width = 200;
google_ad_height = 90;
google_ad_format = "200x90_0ads_al";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "000000";
google_color_text = "000000";
google_color_url = "008000";
//--></SCRIPT>
<SCRIPT src="用IO模拟方式读写三星系列的NAND FLASH.files/show_ads.js"
type=text/javascript>
</SCRIPT>
<BR>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-7844362911365004";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "000033";
google_color_text = "000000";
google_color_url = "0066CC";
//--></SCRIPT>
<SCRIPT src="用IO模拟方式读写三星系列的NAND FLASH.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</TD></TR></TBODY></TABLE>
<P align=center><FONT size=5>用IO模拟方式读写三星系列的NAND FLASH</FONT></P>
<P> 三星系列的NAND
FLASH芯片容量从8MB到256MB(最近听说有1G容量的了),对于需要大容量数据存储的嵌入式系统是一个很好的选择,尤其是其接近1MB/元的高性价比,更是普通nor
flash无法比拟的。本文以K9F2808U0C为例,采用AVR芯片连接,进行了初步的读写试验,完成了芯片的ID读出功能。</P>
<P>电路连接如下图:<BR><IMG height=179
src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103448186.gif" width=360
border=0><IMG height=208
src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103448109.gif" width=321
border=0></P>
<P>
左边是所使用的AVR芯片ATmega16L的局部电路,右边是K9F2808芯片的连接图,数据/地址总线使用ATmega16的PORTB端口连接,其它全部所需信号线使用IO连接,组成了IO模拟方式。</P>
<P> K9F2808芯片的全部命令字如下:<BR><IMG height=179
src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103448586.gif" width=643
border=0><BR>
其中,Read1读取的是普通数据存储区域的数据,Read2读取的是每页存储器附加的16Bytes区域的数据;Page
Program可以编程一页最大528Bytes的数据,Block Erase擦除指定页面数据,Read Status可以读取芯片状态。</P>
<P>
芯片的整个读写时序可以分解为4个基本步骤,即1、命令写入,2、数据写入,3、数据读出,4、地址写入。</P>
<P> 1、命令写入时序如下:<BR><IMG height=262
src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103449904.gif" width=499
border=0><BR>对应函数为:<BR><FONT size=2><B>void</B> WriteCmd(<B>unsigned</B>
<B>char</B> cmd)<BR>{<BR>nandPortD =
0xFF;<BR>ClsLine(nandSPortO,nandALE);<BR>ClsLine(nandSPortO,nandnCE);<BR>SetLine(nandSPortO,nandCLE);<BR>ClsLine(nandSPortO,nandnWE);<BR>nandPortO
=
cmd;<BR>SetLine(nandSPortO,nandnWE);<BR>ClsLine(nandSPortO,nandCLE);<BR>SetLine(nandSPortO,nandALE);<BR>}<BR></FONT><BR>
2、数据写入时序如下:<BR><IMG height=290
src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103449344.gif" width=507
border=0><BR>对应函数为:<BR><FONT size=2><B>void</B> WriteByte(<B>unsigned</B>
<B>char</B> Wdata)<BR>{<BR>nandPortD =
0xFF;<BR>SetLine(nandSPortO,nandnWE);<BR>ClsLine(nandSPortO,nandCLE);<BR>ClsLine(nandSPortO,nandnCE);<BR>ClsLine(nandSPortO,nandALE);<BR>ClsLine(nandSPortO,nandnWE);<BR><B>while</B>((nandSPortI
& nandRnB) != nandRnB); </FONT><FONT color=#008000 size=2>// wait busy
end</FONT><FONT size=2><BR>nandPortO = Wdata;<BR><B>while</B>((nandSPortI
& nandRnB) != nandRnB); </FONT><FONT color=#008000 size=2>// wait busy
end</FONT><FONT
size=2><BR>SetLine(nandSPortO,nandnWE);<BR>}<BR><BR></FONT>
3、数据读出时序如下:<BR><IMG height=233
src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103449858.gif" width=507
border=0><BR>对应函数为:<BR><FONT size=2><B>unsigned</B> <B>char</B>
ReadByte(<B>void</B>)<BR>{<BR><B>unsigned</B> <B>char</B>
Rdata;<BR>nandPortD =
0x00;<BR>SetLine(nandSPortO,nandnWE);<BR>ClsLine(nandSPortO,nandCLE);<BR>ClsLine(nandSPortO,nandALE);<BR>ClsLine(nandSPortO,nandnCE);<BR>ClsLine(nandSPortO,nandnRE);<BR><B>while</B>((nandSPortI
& nandRnB) != nandRnB); </FONT><FONT color=#008000 size=2>// wait busy
end</FONT><FONT size=2><BR>Rdata = nandPortI;<BR><B>while</B>((nandSPortI
& nandRnB) != nandRnB); </FONT><FONT color=#008000 size=2>// wait busy
end</FONT><FONT size=2><BR>SetLine(nandSPortO,nandnRE);<BR><B>return</B>
Rdata;<BR>}<BR></FONT><BR> 4、地址写入时序如下:<BR><IMG
height=265 src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103449874.gif"
width=495 border=0><BR>对应函数为:<FONT size=2><B><BR>void</B>
WriteByteAdd(<B>unsigned</B> <B>char</B> Add)<BR>{<BR>nandPortD =
0xFF;<BR>SetLine(nandSPortO,nandnWE);<BR>ClsLine(nandSPortO,nandnCE);<BR>ClsLine(nandSPortO,nandCLE);<BR>SetLine(nandSPortO,nandALE);<BR>ClsLine(nandSPortO,nandnWE);<BR>nandPortO
= Add;<BR>SetLine(nandSPortO,nandnWE);<BR><B>while</B>((nandSPortI &
nandRnB) != nandRnB); </FONT><FONT color=#008000 size=2>// wait busy
end</FONT><FONT size=2><BR>ClsLine(nandSPortO,nandALE);<BR>}</FONT></P>
<P>
其余操作方式均从这四种基本操作组合变化而来,适当调用或者重新编写其中的某些语句就能完成全部的K9F2808芯片读写操作。</P>
<P> 下面以读K9F2808芯片ID为例调用以上函数完成。<BR>
读芯片ID的时序如下图:<BR><IMG height=220
src="用IO模拟方式读写三星系列的NAND FLASH.files/20060829103449826.gif" width=499
border=0><BR>实现函数编写为:<BR><FONT size=2><B>void</B> ReadId(<B>unsigned</B>
<B>char</B> *ptr)<BR>{<BR>WriteCmd(0x90);<BR>WriteByteAdd(0x00);<BR>*ptr++
= ReadByte();<BR>*ptr =
ReadByte();<BR>SetLine(nandSPortO,nandnCE);<BR>}<BR></FONT>函数调用后,*ptr的值为0xEC,即厂家代码;*(ptr+1)的值为0x73,即设备代码。</P>
<P>
实际在芯片的读写操作中,还要注意对坏扇区进行检错,并将检错结果存入芯片的第一个块中,以确保数据的读写地址均为有效地址。</P><FONT
color=#ff0000>欢迎进入<A href="http://www.mcu123.net/bbs/"
_target="_blank">超前MCU技术论坛</A>对用IO模拟方式读写三星系列的NAND FLASH进行讨论! <BR></FONT>
<CENTER></CENTER></TD></TR>
<TR>
<TD class=Article_tdbgall align=right
colSpan=2>文章录入:armopen 责任编辑:armopen </TD></TR>
<TR>
<TD width=5></TD>
<TD width=752>
<LI>上一篇文章: <A class=LinkPrevArticle
title="文章标题:avr GCC参数详解 作 者:佚名 更新时间:2006-8-23 12:08:20"
href="http://www.mcu123.com/news/Article/uc/AVR/200608/243.html">avr GCC参数详解</A><BR>
<LI>下一篇文章: <A class=LinkNextArticle
title="文章标题:ATmega16与触摸屏的连接 作 者:佚名 更新时间:2006-8-29 10:36:14"
href="http://www.mcu123.com/news/Article/uc/AVR/200608/287.html">ATmega16与触摸屏的连接</A></LI></TD></TR>
<TR class=Article_tdbgall align=right>
<TD colSpan=2>【<A
href="http://www.mcu123.com/news/Article/Comment.asp?ArticleID=286"
target=_blank>发表评论</A>】【<A
href="http://www.mcu123.com/news/User/User_Favorite.asp?Action=Add&ChannelID=1&InfoID=286"
target=_blank>加入收藏</A>】【<A
href="http://www.mcu123.com/news/Article/SendMail.asp?ArticleID=286"
target=_blank>告诉好友</A>】【<A
href="http://www.mcu123.com/news/Article/Print.asp?ArticleID=286"
target=_blank>打印此文</A>】【<A
href="javascript:window.close();">关闭窗口</A>】</TD></TR></TBODY></TABLE>
<TABLE class=center_tdbgall cellSpacing=0 cellPadding=0 width=760 align=center
border=0>
<TBODY>
<TR>
<TD class=main_shadow></TD></TR><!--插入广告JS代码--><!--第二个广告-->
<TR>
<TD>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-7844362911365004";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "000033";
google_color_text = "000000";
google_color_url = "0066CC";
//--></SCRIPT>
<SCRIPT src="用IO模拟方式读写三星系列的NAND FLASH.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</TD></TR></TBODY></TABLE><!--文章显示代码结束--><!--最新热点、最新推荐、相关文章代码开始-->
<TABLE class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=main_title_282 width="33%"><B>最新热点</B></TD>
<TD width=5 rowSpan=2></TD>
<TD class=main_title_282 width="33%"><B>最新推荐</B></TD>
<TD width=5 rowSpan=2></TD>
<TD class=main_title_282 width="33%"><B>相关文章</B></TD></TR>
<TR>
<TD class=main_tdbg_760 vAlign=top height=100>
<SCRIPT language=javascript
src="用IO模拟方式读写三星系列的NAND FLASH.files/Article_Hot3.js"></SCRIPT>
</TD>
<TD class=main_tdbg_760 vAlign=top width="33%">
<SCRIPT language=javascript
src="用IO模拟方式读写三星系列的NAND FLASH.files/Article_Elite3.js"></SCRIPT>
</TD>
<TD class=main_tdbg_760 vAlign=top width="33%">没有相关文章</TD></TR></TBODY></TABLE>
<TABLE class=center_tdbgall cellSpacing=0 cellPadding=0 width=760 align=center
border=0>
<TBODY>
<TR>
<TD class=main_shadow></TD></TR></TBODY></TABLE><!--最新热点、最新推荐、相关文章代码结束--><!--网友评论代码开始-->
<TABLE class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR class=main_title_760>
<TD height=25> <STRONG>网友评论:</STRONG><SPAN
style="COLOR: #ff0000">(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) </SPAN></TD></TR>
<TR>
<TD class=main_tdbg_760>
<SCRIPT language=javascript
src="用IO模拟方式读写三星系列的NAND FLASH.files/Comment.htm"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE class=center_tdbgall cellSpacing=0 cellPadding=0 width=760 align=center
border=0>
<TBODY>
<TR>
<TD class=main_shadow></TD></TR></TBODY></TABLE><!--网友评论代码结束--><!-- ********网页中部代码结束******** --><!-- ********网页底部代码开始******** -->
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD class=menu_bottombg align=middle>| <A class=Bottom
onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.mcu123.com');"
href="http://www.mcu123.com/news/$">设为首页</A> | <A class=Bottom
href="javascript:window.external.addFavorite('http://www.mcu123.com','超前科技开发网');">加入收藏</A>
| <A class=Bottom href="http://www.mcu123.com/www/fukuan.asp">联系我们</A> |
<A class=Bottom href="http://www.mcu123.com/link" target=_blank>友情链接</A> |
<A class=Bottom href="http://www.mcu123.com/news/Copyright.asp"
target=_blank>版权申明</A> | <A class=Bottom
href="http://www.mcu123.com/news/Announcelist.asp" target=_blank>网站公告</A>
</TD></TR>
<TR>
<TD class=bottom_bg height=80>
<TABLE cellSpacing=0 cellPadding=0 width="90%" align=center border=0>
<TBODY>
<TR>
<TD><IMG height=80
src="用IO模拟方式读写三星系列的NAND FLASH.files/bottom_left.gif" width=9></TD>
<TD align=middle width="80%">Copyright 2003-2006 <A
href="http://www.mcu123.com/"><FONT
color=#ff0000>http://www.mcu123.com/</FONT></A>© All Rights
Reserved<BR>版权所有 © 超前科技开发网<BR><A href="http://www.miibeian.gov.cn/"
target=_blank>粤ICP备05005262号</A> <BR>
<SCRIPT src="用IO模拟方式读写三星系列的NAND FLASH.files/count.htm"></SCRIPT>
<SCRIPT src="用IO模拟方式读写三星系列的NAND FLASH.files/urchin.js"
type=text/javascript>
</SCRIPT>
<SCRIPT type=text/javascript>
_uacct = "UA-465386-3";
urchinTracker();
</SCRIPT>
</TD>
<TD align=right><IMG height=80
src="用IO模拟方式读写三星系列的NAND FLASH.files/bottom_r.gif"
width=9></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><!-- ********网页底部代码结束******** --><NOSCRIPT><IFRAME
src="用IO模拟方式读写三星系列的NAND FLASH.files/CAA12D8T.htm" width=0
height=0></IFRAME></IFRAME></NOSCRIPT></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -