|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于k9f6408的讀寫!! |
| 作者:btiger2000 欄目:ARM技術(shù) |
K9F6408,能讀出id,可以擦出,但是讀寫不對(duì)! 對(duì)第一塊的0頁(yè)寫入全0x55,讀出 0頁(yè)為0x55;但是2,4,6,8,。。14 ,讀出都為亂碼!可是并未對(duì)其他頁(yè)操作!,不知為何?! 還請(qǐng)做過(guò)的大蝦執(zhí)教。 |
| 2樓: | >>參與討論 |
| 作者: zhiwei 于 2005/8/25 8:59:00 發(fā)布:
擦除是按照Block的,Block所在的Page都會(huì)被擦除。 |
|
| 3樓: | >>參與討論 |
| 作者: BTIGER2000 于 2005/8/25 9:21:00 發(fā)布:
擦除沒(méi)問(wèn)題 |
|
| 4樓: | >>參與討論 |
| 作者: BTIGER2000 于 2005/8/25 9:23:00 發(fā)布:
只是我只寫第0頁(yè),但是,2,4,6,等都有變化,而且不對(duì) |
|
| 5樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/25 15:04:00 發(fā)布:
寫奇數(shù)頁(yè),所有奇數(shù)頁(yè),也變化!真是奇怪。 |
|
| 6樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/26 8:33:00 發(fā)布:
自己頂一下 |
|
| 7樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/26 11:26:00 發(fā)布:
貼上源程序 #include "\ucos251\include\includes.h" #include "\bsp188es\include\bsp.h" #include "\proj\include\nand.h" #include "\bsp188es\include\pio.h" #define nand_select() ce(0) #define nand_deselect() ce(1) #define CS INT5 #define CLE CTS0 #define ALE RTS0 #define F_RB TMRIN1 #define WP TMROUT1 /* ********************************************************************************************************* * ********************************************************************************************************* */ void nand_init(void) { pio_mode(INT5, OUT_DIR); pio_mode(CTS0, OUT_DIR); pio_mode(RTS0, OUT_DIR); pio_mode(TMROUT1, OUT_DIR); pio_mode(TMRIN1, IN_W_PULL); pio_out(WP,1); // flash_reset(); cle(0); ale(0); nand_deselect(); } /* ********************************************************************************************************* * ********************************************************************************************************* */ void ce(INT8U ce) { pio_out(CS, ce); } void ale(INT8U h) { pio_out(ALE, h); } void cle(INT8U cle) { pio_out(CLE, cle); } uchar Flash_RB(void) { return pio_in(F_RB); } void flash_reset(void) { uchar d,i; nand_select(); command(0xff); /* do{ command(0x70); d = Bsp_Inportb(NAND_ADDR); d=d&0x40; }while(d!=0x00); */ nand_deselect(); for(i=0;i<255;i++) delay(); } void delay(void) { INT16U i; for(i=0;i<25;i++) ; } /* ********************************************************************************************************* * ********************************************************************************************************* */ /*INT8U nand_get_ready(void) { return Bsp_Inportw(0xff74) & 0xfff1; } */ void command(INT8U cmd) { cle(1); Bsp_Outportb(NAND_ADDR, cmd); cle(0); } /*************************************************************************************************/ void address(INT16U row, INT8U column) { ale(1); Bsp_Outportb(NAND_ADDR, column); // ale(0); // delay(); // ale(1); Bsp_Outportb(NAND_ADDR, row&0xff); // ale(0); // delay(); //[ ale(1); Bsp_Outportb(NAND_ADDR, (row>>8)&0xff); ale(0); } /***********************************************************************/ INT8U erase_block(INT16U row ) { INT8U d; nand_select(); row<<=4; command(0x60); // address(row,column); ale(1); Bsp_Outportb(NAND_ADDR, row&0xff); ale(0); delay(); ale(1); Bsp_Outportb(NAND_ADDR, (row>>8)&0xff); ale(0); command(0xd0); delay(); delay(); command(0x70); do{ d = Bsp_Inportb(NAND_ADDR); d=d&0x01; }while(d!=0x00); nand_deselect(); /* if(d&0x01) return 1; else */ return 0; } INT8U read_id(void) { INT8U id; nand_select(); command(0x90); ale(1); Bsp_Outportb(NAND_ADDR, 0x0); ale(0); id = Bsp_Inportb(NAND_ADDR); id = Bsp_Inportb(NAND_ADDR); nand_deselect(); return id; } INT8U read_byte(INT16U row, INT8U column) { INT8U d; nand_select(); command(0x50); address(row, column); OSTimeDly(1); d = Bsp_Inportb(NAND_ADDR); nand_deselect(); return d; } INT8U write_page(INT16U row,INT8U column,INT8U *addr) { INT16U i; INT8U d; nand_select(); // command(0x00); command(0x80); // OSTimeDly(1); delay(); // delay(); address(row,column); delay(); // delay(); for(i=0;i<480;i++) { Bsp_Outportb(NAND_ADDR, addr][i]); delay(); } delay(); command(0x10); // for(i=0;i<100;i++) delay(); while(!Flash_RB()); command(0x70); do{ d = Bsp_Inportb(NAND_ADDR); d=d&0x01; }while(d!=0x00); nand_deselect(); /* if(d&0x01) return 1; else */ return 0; } INT8U read_page(INT16U row,INT8U column,INT8U * addr1) { INT16U i; INT8U d; nand_select(); command(0x00); address(row,column); // OSTimeDly(1); delay(); while(!Flash_RB());   |
|
| 8樓: | >>參與討論 |
| 作者: winsnow 于 2005/8/26 13:14:00 發(fā)布:
幫你頂一下 我也沒(méi)有找到答案 |
|
| 9樓: | >>參與討論 |
| 作者: BTIGER2000 于 2005/8/29 10:41:00 發(fā)布:
沒(méi)人作過(guò)么? |
|
| 10樓: | >>參與討論 |
| 作者: winsnow 于 2005/8/29 10:55:00 發(fā)布:
lvzhao正在用K9F1208 |
|
| 11樓: | >>參與討論 |
| 作者: BTIGER2000 于 2005/8/29 11:12:00 發(fā)布:
他做出來(lái)了么? |
|
| 12樓: | >>參與討論 |
| 作者: 大預(yù)言 于 2005/8/29 23:17:00 發(fā)布:
老早以前我做過(guò)! 以前我做過(guò),也吃了點(diǎn)虧,后來(lái)整好了。當(dāng)時(shí)好記得是在寫之前必須進(jìn)行擦除操作。才能正確的寫入呢。因?yàn)楫?dāng)時(shí)沒(méi)有注意寫之前必須擦除,也老是寫不對(duì)。 我記得是這樣,但是現(xiàn)在有點(diǎn)模糊了。 |
|
| 13樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/30 11:34:00 發(fā)布:
寫之前,不擦除應(yīng)該是寫不進(jìn)去的! 但是,我在寫第一頁(yè)的時(shí)候,居然能改變第0頁(yè)的內(nèi)容!不明白!還沒(méi)解決問(wèn)題,請(qǐng)做過(guò)的高手指點(diǎn)! |
|
| 14樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/30 15:29:00 發(fā)布:
沒(méi)有進(jìn)展! |
|
| 15樓: | >>參與討論 |
| 作者: 大預(yù)言 于 2005/8/30 18:04:00 發(fā)布:
還有,使能信號(hào)線要一直保持為低! 我當(dāng)時(shí)是用的單片機(jī)的P2口的某個(gè)腳做片選,結(jié)果片選只在地址變化期間為低,所以也在此處吃了點(diǎn)虧。建議你也讓片選一直為低試一下。 |
|
| 16樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/31 13:50:00 發(fā)布:
要一直為低么?我只是每次在操作存儲(chǔ)器時(shí),置低,操作完,再置高 |
|
| 17樓: | >>參與討論 |
| 作者: btiger2000 于 2005/9/1 8:57:00 發(fā)布:
K9F6408 能直接接5v的i/o么? |
|
| 18樓: | >>參與討論 |
| 作者: 孫將軍 于 2005/9/4 18:21:00 發(fā)布:
nandflash不擦也可以寫進(jìn)去,而且不會(huì)報(bào)錯(cuò)! nandflash的原理是:在寫的時(shí)候只能把為1的位變成0,而在擦的過(guò)程只能把為0的位變?yōu)?,當(dāng)然不排除壞了的位。如果不擦一直寫,最后的結(jié)果是都為0。 |
|
| 19樓: | >>參與討論 |
| 作者: btiger2000 于 2005/9/5 20:46:00 發(fā)布:
問(wèn)題解決!是硬件問(wèn)題!看來(lái)還是不能直接接5v得i/o!! |
|
| 20樓: | >>參與討論 |
| 作者: btiger2000 于 2005/9/15 9:38:00 發(fā)布:
又出現(xiàn)新問(wèn)題! 當(dāng)數(shù)據(jù)量較大是,會(huì)出現(xiàn)個(gè)別字節(jié)重復(fù)出現(xiàn)或丟失的現(xiàn)象! 經(jīng)反復(fù)讀驗(yàn)證,讀子程序沒(méi)有問(wèn)題。(yīng)該是寫子程序時(shí)序有問(wèn)題,但不知,是延時(shí)長(zhǎng)了,還是短了? |
|
| 21樓: | >>參與討論 |
| 作者: btiger2000 于 2005/9/15 16:16:00 發(fā)布:
終于解決了!! 它的數(shù)據(jù)手冊(cè)上的讀時(shí)序圖,在命令與地址之間沒(méi)有延時(shí),讀出的總是出錯(cuò)!每次讀的都不一樣! 加上一定的延時(shí),讀出正確!! 寫子程序沒(méi)錯(cuò)!! |
|
| 22樓: | >>參與討論 |
| 作者: gaocheng 于 2005/9/15 16:39:00 發(fā)布:
FLASH是低速器件建議看看時(shí)序圖,一定不能快過(guò)最短時(shí)間! 程序本身應(yīng)該不難得 |
|
| 23樓: | >>參與討論 |
| 作者: btiger2000 于 2005/9/16 11:48:00 發(fā)布:
問(wèn)題解決了! 讀時(shí)序的問(wèn)題!寫入沒(méi)問(wèn)題! 在數(shù)據(jù)手冊(cè)上,寫命令與地址之間沒(méi)有延時(shí),加上一個(gè)一定的延時(shí)就ok!! |
|
| 24樓: | >>參與討論 |
| 作者: cxc51 于 2005/9/16 16:18:00 發(fā)布:
我用51操作過(guò)K9F6408存儲(chǔ)器 能正常讀寫擦,用ARM應(yīng)不難吧.......... |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |