lpc2214对K9F2808U0C驱动问题!

[复制链接]
 楼主| bethnora9 发表于 2007-2-28 14:01 | 显示全部楼层 |阅读模式
我用的MCU是LPC2214,外部FLASH为K9F2808U0C,采用IO模拟控制信号对FLASH驱动.没有JTAG调试端口(真失败),数据是串口写入,请问FLASH的读写时序怎么控制.我从给的例子(8051对K9F2808U0C驱动)看到,使用了NOP作为一个机器周期进行时序控制,不知道对ARM7的LPC2214来说.这点该怎么处理.还有的就是地址怎么写入.我的程序是这样写的(以写PAGE为例子):&nbsp;pagenum=blocknum&lt&lt5+blockpagenum;(其中pagenum是页在整个NAND&nbsp;FLASH中的位置;blocknum是第几个BLOCK;blockpagenum是所要写入的页在本block中的地址)<br />接下来;连续写入地址<br />flash_w_address(0x00);-------行地址写入<br />flash_w_address(pagenum&0xff);<br />flash_w_address((pagenum&gt&gt8)&0xff);-------列地址写入<br />但这样写好象没有写进去.我编写了个检测程序,向FLASH的某PAGE中写入0~511,并把它读出来.,结果读出来的数是512个FF;不知道是怎么回事?<br />请高手指点迷津!谢谢!
 楼主| bethnora9 发表于 2007-2-28 14:05 | 显示全部楼层

需要把我写的相关原程序发上去吗?

  
 楼主| bethnora9 发表于 2007-2-28 15:41 | 显示全部楼层

11

把相关的原程序写一下:<br />最后串口发出的数据为512个FF.<br />&nbsp;int&nbsp;main&nbsp;(void)<br />{&nbsp;<br />&nbsp;PINSEL0|=UART0_TxD|UART0_RxD;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置I/O连接到UART0&nbsp;&nbsp;;串口相关<br />&nbsp;TIME_DELAY(100);<br />&nbsp;UART0_Ini();<br />&nbsp;IO_INT();<br />&nbsp;FLASH_TEST();<br />&nbsp;return&nbsp;0;<br />}<br /><br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO_INT<br />********************************************************************************************************/<br />void&nbsp;IO_INT(void)<br />{<br />&nbsp;IO1DIR&=~FLASH_RB;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RB--OUT;<br />&nbsp;IO1DIR|=FLASH_RE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RE--IN;<br />&nbsp;IO2DIR&=~AD0|AD1|AD2|AD3|AD4|AD5|AD6|AD7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//地址和数据线---OUT;<br />&nbsp;IO3DIR|=(FLASH_ALE|FLASH_CE|FLASH_CLE|FLASH_WE);&nbsp;//ALE,CE,CLE,WE--OUT;<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_W_COMMAND<br />********************************************************************************************************/<br />void&nbsp;FLASH_W_COMMAND(unsigned&nbsp;char&nbsp;command)<br />{<br />&nbsp;IO2PIN|=command&0X0FF;<br />&nbsp;SET_CLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cle=1;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;CLR_WE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//we=0;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;SET_WE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//we=1;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;CLR_CLE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cle=0;<br />&nbsp;<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_W_ADDRESS<br />********************************************************************************************************/<br />void&nbsp;FLASH_W_ADDRESS(unsigned&nbsp;char&nbsp;address)<br />{<br />&nbsp;IO2PIN|=address&0X0FF;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;CLR_WE;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;SET_WE;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;CLR_ALE;<br />&nbsp;<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_W_DATA<br />********************************************************************************************************/<br />void&nbsp;FLASH_W_DATA(unsigned&nbsp;char&nbsp;data)<br />{<br />&nbsp;IO2PIN|=data&0X0FF;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;CLR_WE;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;SET_WE;<br />&nbsp;<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_R_DATA<br />********************************************************************************************************/<br />unsigned&nbsp;char&nbsp;FLASH_R_DATA(void)<br />{<br />&nbsp;unsigned&nbsp;int&nbsp;num;<br />&nbsp;CLR_RE;<br />&nbsp;TIME_DELAY(1);<br />&nbsp;num=IO2PIN&0X0FF;<br />&nbsp;SET_RE;<br />&nbsp;return(num);<br />&nbsp;<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_ERASE_BLOCK<br />********************************************************************************************************/<br />unsigned&nbsp;char&nbsp;FLASH_ERASE_BLOCK(unsigned&nbsp;int&nbsp;blocknum)<br />{<br />&nbsp;unsigned&nbsp;char&nbsp;status;<br />&nbsp;FLASH_W_COMMAND(0X60);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送擦除命令;<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)((blocknum&lt&lt5)&0XFF));<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)((blocknum&gt&gt3)&0XFF));<br />&nbsp;FLASH_W_COMMAND(0XD0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动擦除;<br />&nbsp;TIME_DELAY(100);<br />&nbsp;FLASH_W_COMMAND(0X70);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动擦除;<br />&nbsp;status=FLASH_R_DATA();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读状态;<br />&nbsp;if&nbsp;(status&0X01)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断编程是否结束;<br />&nbsp;{<br />&nbsp;&nbsp;return(0);<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;return(1);<br />&nbsp;}<br />}<br /><br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_R_PAGE<br />********************************************************************************************************/<br />void&nbsp;FLASH_R_PAGE(unsigned&nbsp;int&nbsp;blocknum,unsigned&nbsp;int&nbsp;blockpagenum,unsigned&nbsp;char&nbsp;*P,unsigned&nbsp;int&nbsp;data_length)<br />{<br />&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;unsigned&nbsp;int&nbsp;pagenum;<br />&nbsp;pagenum=blocknum&lt&lt5+blockpagenum;<br />&nbsp;FLASH_W_COMMAND(0X00);<br />&nbsp;FLASH_W_ADDRESS(0X00);<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)(pagenum&0XFF));<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)((pagenum&gt&gt8)&0XFF));<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)((pagenum&gt&gt16)&0XFF));<br />&nbsp;for(i=0;i&ltdata_length;i++)<br />&nbsp;{<br />&nbsp;&nbsp;*(P+i)=FLASH_R_DATA();<br />&nbsp;}<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_W_PAGE<br />********************************************************************************************************/<br />unsigned&nbsp;char&nbsp;FLASH_W_PAGE(unsigned&nbsp;int&nbsp;blocknum,unsigned&nbsp;int&nbsp;blockpagenum,unsigned&nbsp;char&nbsp;*P,unsigned&nbsp;int&nbsp;data_length)<br />{<br />&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;unsigned&nbsp;char&nbsp;status;<br />&nbsp;unsigned&nbsp;int&nbsp;pagenum;<br />&nbsp;pagenum=blocknum&lt&lt5+blockpagenum;<br />&nbsp;FLASH_W_COMMAND(0X00);<br />&nbsp;FLASH_W_COMMAND(0X80);<br />&nbsp;FLASH_W_ADDRESS(0X00);<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)(pagenum&0XFF));<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)((pagenum&gt&gt8)&0XFF));<br />&nbsp;FLASH_W_ADDRESS((unsigned&nbsp;char)((pagenum&gt&gt16)&0XFF));<br />&nbsp;for(i=0;i&ltdata_length;i++)<br />&nbsp;{<br />&nbsp;&nbsp;FLASH_W_COMMAND(*(P+i));<br />&nbsp;}<br />&nbsp;FLASH_W_COMMAND(0X10);<br />&nbsp;TIME_DELAY(100);<br />&nbsp;FLASH_W_COMMAND(0X70);<br />&nbsp;status=FLASH_R_DATA();<br />&nbsp;if&nbsp;(status&0X01)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断编程是否结束;<br />&nbsp;{<br />&nbsp;&nbsp;return(0);<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;return(1);<br />&nbsp;}<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TIME_DELAY<br />********************************************************************************************************/<br />void&nbsp;TIME_DELAY(unsigned&nbsp;int&nbsp;time)<br />{<br />&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;for&nbsp;(i=0;i&lttime;i++)<br />&nbsp;{<br />&nbsp;&nbsp;for&nbsp;(i=0;i&lt100;i++);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;}<br />}<br />/********************************************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_TEST<br />********************************************************************************************************/<br />void&nbsp;FLASH_TEST(void)<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;FLASH_ERASE_BLOCK(7);<br />&nbsp;&nbsp;for(i=0;i&lt512;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;TEST1=i;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;FLASH_W_PAGE(7,1,TEST1,512);<br />&nbsp;&nbsp;for(i=0;i&lt512;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;TEST2=0;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;FLASH_R_PAGE(7,1,TEST2,512);<br />&nbsp;&nbsp;for(i=0;i&lt512;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;UART0_SendByte(TEST2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//串口发数据;<br />&nbsp;&nbsp;}<br />}<br />/*********************************************************************************************************<br />**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Of&nbsp;File<br />**********************************************************************************************************/<br />
 楼主| bethnora9 发表于 2007-3-5 16:40 | 显示全部楼层

没人给我回?我自己搞定了!一切还的靠自己呀.

原来是某个地方没加括号,加上后就行了!HOHO!
ldk060 发表于 2012-1-17 11:40 | 显示全部楼层
留个脚印
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

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