[ZLG-ARM] LPC2478 Nand Flash 问题

[复制链接]
 楼主| mwm8412 发表于 2008-11-14 10:49 | 显示全部楼层 |阅读模式
我在LPC2478芯片上实现NAND&nbsp;FLASH的读写。我现在已经可以将ID读出来,可是读写FLASH内的数据都是错的,不知道是哪里错了,还请高手帮忙解决<br />static&nbsp;U32&nbsp;NFWaitBusy(&nbsp;void&nbsp;)<br />{<br />&nbsp;U8&nbsp;stat;<br /><br />&nbsp;NFWrCmd(QUERYCMD)&nbsp;;<br />&nbsp;do<br />&nbsp;{<br />&nbsp;&nbsp;stat&nbsp;=&nbsp;NFRdDat();<br />&nbsp;}<br />&nbsp;while&nbsp;(&nbsp;!(&nbsp;stat&nbsp;&&nbsp;0x40&nbsp;)&nbsp;)&nbsp;;<br /><br />&nbsp;NFWrCmd(READCMD0)&nbsp;;<br />&nbsp;return&nbsp;stat&nbsp;&&nbsp;1&nbsp;;<br />}<br /><br />static&nbsp;U32&nbsp;NFReadID(&nbsp;void&nbsp;)<br />{<br />&nbsp;U32&nbsp;id,&nbsp;loop&nbsp;=&nbsp;0;<br />&nbsp;NFChipEn();<br />&nbsp;NFWrCmd(&nbsp;RESETCMD&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;0&nbsp;);<br />&nbsp;Delay(&nbsp;2&nbsp;);<br />&nbsp;NFWrCmd(&nbsp;READIDCMD&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;0&nbsp;);<br />&nbsp;while&nbsp;(&nbsp;(&nbsp;NFIsBusy()&nbsp;)&nbsp;&&&nbsp;(&nbsp;loop&nbsp;&lt&nbsp;10000&nbsp;)&nbsp;)<br />&nbsp;&nbsp;loop++;<br />&nbsp;if&nbsp;(&nbsp;loop&nbsp;&gt=&nbsp;10000&nbsp;)<br />&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;id&nbsp;=&nbsp;NFRdDat()&nbsp;&lt&lt&nbsp;8;<br />&nbsp;id&nbsp;|=&nbsp;NFRdDat();<br />&nbsp;NFChipDs();<br /><br />&nbsp;return&nbsp;id;<br />}<br /><br />U32&nbsp;NFEraseBlock(&nbsp;U32&nbsp;addr&nbsp;)<br />{<br />&nbsp;U8&nbsp;stat;<br /><br />&nbsp;addr&nbsp;&=&nbsp;NAND_BLOCK_MASK;<br /><br />&nbsp;NFChipEn();&nbsp;<br />&nbsp;NFWrCmd(&nbsp;ERASECMD0&nbsp;);&nbsp;&nbsp;<br />&nbsp;NFWrAddr(&nbsp;addr&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;addr&nbsp;&gt&gt&nbsp;8&nbsp;);<br />&nbsp;if&nbsp;(&nbsp;NandAddr&nbsp;)<br />&nbsp;&nbsp;NFWrAddr(&nbsp;addr&nbsp;&gt&gt&nbsp;16&nbsp;);<br />&nbsp;NFWrCmd(&nbsp;ERASECMD1&nbsp;);&nbsp;&nbsp;<br />&nbsp;stat&nbsp;=&nbsp;NFWaitBusy();<br />&nbsp;NFChipDs();<br /><br />&nbsp;//printf(&nbsp;&quot;Erase&nbsp;block&nbsp;0x%08x&nbsp;%s
&quot;&nbsp;,&nbsp;addr&nbsp;,&nbsp;stat&nbsp;?&nbsp;&quot;fail&quot;&nbsp;:&nbsp;&quot;ok&quot;&nbsp;);<br /><br />&nbsp;return&nbsp;stat;<br />}<br /><br />//addr&nbsp;=&nbsp;page&nbsp;address<br />void&nbsp;NFReadPage(&nbsp;U32&nbsp;addr&nbsp;,&nbsp;U8*&nbsp;buf&nbsp;)<br />{<br />&nbsp;U16&nbsp;i;<br />&nbsp;NFChipEn();<br />&nbsp;NFWrCmd(&nbsp;READCMD0&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;0&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;addr&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;addr&nbsp;&gt&gt&nbsp;8&nbsp;);<br />&nbsp;if&nbsp;(&nbsp;NandAddr&nbsp;)<br />&nbsp;&nbsp;NFWrAddr(&nbsp;addr&nbsp;&gt&gt&nbsp;16&nbsp;);<br />&nbsp;//&nbsp;InitEcc();<br />&nbsp;NFWaitBusy();&nbsp;&nbsp;<br />&nbsp;for&nbsp;(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;NAND_SECTOR_LEN;&nbsp;i++&nbsp;)<br />&nbsp;&nbsp;buf&nbsp;=&nbsp;NFRdDat();&nbsp;&nbsp;<br />&nbsp;NFChipDs();<br />}<br />//addr&nbsp;=&nbsp;page&nbsp;address<br />U32&nbsp;NFWritePage(&nbsp;U32&nbsp;addr&nbsp;,&nbsp;U8*&nbsp;buf&nbsp;)<br />{<br />&nbsp;U32&nbsp;i&nbsp;=&nbsp;NAND_SECTOR_LEN,&nbsp;stat;<br />&nbsp;while&nbsp;(NFIsBusy());<br />&nbsp;NFChipEn();<br />&nbsp;NFWrCmd(&nbsp;READCMD0&nbsp;);<br />&nbsp;NFWrCmd(&nbsp;PROGCMD0&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;0&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;addr&nbsp;);<br />&nbsp;NFWrAddr(&nbsp;addr&nbsp;&gt&gt&nbsp;8&nbsp;);<br />&nbsp;if&nbsp;(&nbsp;NandAddr&nbsp;)<br />&nbsp;&nbsp;NFWrAddr(&nbsp;addr&nbsp;&gt&gt&nbsp;16&nbsp;);<br />&nbsp;//&nbsp;InitEcc();&nbsp;<br />&nbsp;while(i--)<br />&nbsp;&nbsp;NFWrDat(&nbsp;*buf++&nbsp;);<br /><br />&nbsp;NFWrCmd(&nbsp;PROGCMD1&nbsp;);<br />&nbsp;stat&nbsp;=&nbsp;NFWaitBusy();<br />&nbsp;NFChipDs();<br />&nbsp;return&nbsp;stat;<br />}<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部