|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe |
關于k9f6408的讀寫!! |
| 作者:btiger2000 欄目:嵌入式系統(tǒng) |
關于K9F6408的讀寫!! K9F6408,能讀出id,可以擦出,但是讀寫不對! 對第一塊的0頁寫入全0x55,讀出 0頁為0x55;但是2,4,6,8,。。14 ,讀出都為亂碼!可是并未對其他頁操作!,不知為何?! 還請做過的大蝦執(zhí)教。 |
| 2樓: | >>參與討論 |
| 作者: BTIGER2000 于 2005/8/25 9:27:00 發(fā)布:
沒人做過么? |
|
| 3樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/26 8:35:00 發(fā)布:
沒人指點一下? |
|
| 4樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/26 11:27: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());   |
|
| 5樓: | >>參與討論 |
| 作者: 趙崇偉 于 2005/8/28 11:47:00 發(fā)布:
太復雜了,玩玩就算了,一般都可以放棄 |
|
| 6樓: | >>參與討論 |
| 作者: BTIGER2000 于 2005/8/29 10:42:00 發(fā)布:
問題我不是在玩啊!不是說放棄就放棄的! |
|
| 7樓: | >>參與討論 |
| 作者: embestinfo 于 2005/8/30 19:00:00 發(fā)布:
可以咨詢英蓓特 想解決這個問題,可以咨詢英蓓特FLASH.html">FLASH燒寫產品FLASH.html">FLASH Programmer. http://www.embedinfo.com/chinese/product/flashprog.asp FLASH編程器(Embest Online FLASH.html">FLASH Programmer) 主要特性: 支持所有基于ARM7和ARM9核的處理器 如ATMEL公司AT91系列, CIRRUS公司EP73系列,SAMSUNG公司S3C系列。 支持大多數(shù)廠家生產的FLASH芯片 如AMD公司AM29系列,INTEL公司28系列,SST公司29\39\49系列。 支持對FLASH進行空白檢查、擦除、編程、文件校驗、計算校驗和、保護、上載 支持指定扇區(qū)范圍操作,不影響其他扇區(qū)內容 支持8位、16位和32位讀寫訪問寬度 支持1片、2片及4片FLASH編程,編程文件無需劈分 支持Windows 98\ME\XP及Windows NT\2000操作系統(tǒng) 其他特點: 編程配置數(shù)據(jù)的保存和載入 編程前的用戶電路板測試功能 FLASH各扇區(qū)地址及大小指示功能 簡單直接的處理器寄存器設置 詳盡完善的中、英文手冊 |
|
| 8樓: | >>參與討論 |
| 作者: btiger2000 于 2005/8/31 13:53:00 發(fā)布:
上面的,你說的是編程器? |
|
| 9樓: | >>參與討論 |
| 作者: videohome 于 2005/9/1 20:55:00 發(fā)布:
這是我自己寫的K9F5608的驅動,已應用到產品了,放心使用! #include "K9F5608.hpp" /************************************ ALE:PF2 CLE:PF1 CS :PF0 NAND FLASH操作說明: 32M NAND FLASH分為2024塊,每塊為32頁,每一頁有528字節(jié), 地址A9-A23是選擇哪對應的頁,而A0-A7是頁內偏移 ************************************/ #define NAND_ADDR 0x4C000006 //nGCS1起始地址 //#define _NAND_DEBUG_ #ifdef _NAND_DEBUG_ int uart_printf(const CHAR *fmt,...); void dumpmem(CHAR* buf,int len); #endif static inline void NAND_CS_HI(void) //GPIO->pfdr|=1 { CHAR pfdr; HAL_READ_UINT8(PFDR,pfdr); pfdr |= 1; HAL_WRITE_UINT8(PFDR,pfdr); } static inline void NAND_CS_LOW(void)//GPIO->pfdr&=~1 { CHAR pfdr; HAL_READ_UINT8(PFDR,pfdr); pfdr&=~1; HAL_WRITE_UINT8(PFDR,pfdr); } static inline void NAND_ALE_HI(void)//GPIO->pfdr|=4 { CHAR pfdr; HAL_READ_UINT8(PFDR,pfdr); pfdr|= 4; HAL_WRITE_UINT8(PFDR,pfdr); } static inline void NAND_ALE_LOW(void)// GPIO->pfdr&=~4 { CHAR pfdr; HAL_READ_UINT8(PFDR,pfdr); pfdr&=~4; HAL_WRITE_UINT8(PFDR,pfdr); } static inline void NAND_CLE_HI(void) { CHAR pfdr; HAL_READ_UINT8(PFDR,pfdr); pfdr|=2; HAL_WRITE_UINT8(PFDR,pfdr); } static inline void NAND_CLE_LOW(void) { CHAR pfdr; HAL_READ_UINT8(PFDR,pfdr); pfdr&=~2; HAL_WRITE_UINT8(PFDR,pfdr); } static inline void INIT_NAND_IO() { CHAR pfdr; HAL_READ_UINT8(PFDDR,pfdr); pfdr|=7; HAL_WRITE_UINT8(PFDDR,pfdr); HAL_READ_UINT8(PFDR,pfdr); pfdr|=1; HAL_WRITE_UINT8(PFDR,pfdr); HAL_READ_UINT8(PBDDR,pfdr); pfdr&=~0x20; HAL_WRITE_UINT8(PBDDR,pfdr); } #define NAND_BSY 0 #define NAND_RDY 0x20 #define CMD_RD 0 #define CMD_WRSTART 0x80 #define CMD_WROVER 0x10 #define CMD_ERASESTART 0x60 #define CMD_ERASEOVER 0xD0 #define CMD_RDSTATUS 0x70 #define CMD_RDID 0x90 #define CMD_RESET 0xFF cyg_mutex_t nand_mutex; //RNB PB5 static inline void Delay(int iDly) { while(iDly--); } void nand_init(void) { cyg_mutex_init(&nand_mutex); } CHAR nand_readstatus(void) { CHAR cStatus; NAND_CLE_HI(); HAL_WRITE_UINT8(NAND_ADDR,0x70); NAND_CLE_LOW(); HAL_READ_UINT8(NAND_ADDR,cStatus); return cStatus; } void nand_reset(void) { INIT_NAND_IO(); NAND_CS_LOW(); NAND_CLE_HI(); HAL_WRITE_UINT8(NAND_ADDR,CMD_RESET); NAND_CLE_LOW(); while(0 == (nand_readstatus()&0x40)); } void nand_readid(CHAR* pID) { INIT_NAND_IO(); NAND_CS_LOW(); NAND_CLE_HI(); HAL_WRITE_UINT8(NAND_ADDR,CMD_RDID); NAND_CLE_LOW(); NAND_ALE_HI(); HAL_WRITE_UINT8(NAND_ADDR,0); NAND_ALE_LOW(); HAL_READ_UINT8(NAND_ADDR,*pID++); HAL_READ_UINT8(NAND_ADDR,*pID++); NAND_CS_HI(); } bool nand_page_read_check(int nAddr,int nLen,CHAR* pData) { int i; CHAR cPageOffset; CHAR c; SHORT nPageSelect; SHORT nBankSelect; INIT_NAND_IO(); NAND_CS_LOW(); nBankSelect = nAddr/256; cPageOffset = nAddr%256; nPageSelect = ((nAddr>>9)&0xFFFF); NAND_CLE_HI(); &nbs |
|
| 10樓: | >>參與討論 |
| 作者: btiger2000 于 2005/9/2 16:44:00 發(fā)布:
我研究一下!謝了 |
|
| 11樓: | >>參與討論 |
| 作者: btiger2000 于 2005/9/5 21:05:00 發(fā)布:
問題解決!是硬件問題! 看來還是不能直接接5v得i/o!! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |