Samsung NAND Flash Memory存取? |
答題得分者是:阿信
|
a3155621
一般會員 ![]() ![]() 發表:3 回覆:7 積分:7 註冊:2007-01-17 發送簡訊給我 |
各位大你們好,我想用8051(使用IC為Cypress的CY7C68013A-56)來讀取Samsung的NAND Flash Memory(IC編號:K9F5608U0D),目前能夠正確的讀出這顆IC的Maker Code及Device Code。但不知道出了什麼問題,一直無法正確讀出寫入的資料,所以想請各位大大幫我看看我的程式哪裡寫錯了。以下是我寫的程式:
[code cpp] #define Data IOB //FlashRom接腳 IO0-IO7 sbit Check = 0x90 0; //FlashRom接腳 IO0 //接腳定義 sbit WE = 0xB0 0; //FlashRom接腳 WE sbit ALE = 0xB0 1; //FlashRom接腳 ALE sbit CLE = 0xB0 2; //FlashRom接腳 CLE sbit CE = 0xB0 3; //FlashRom接腳 CE sbit RE = 0xB0 4; //FlashRom接腳 RE sbit RB = 0xB0 5; //FlashRom接腳 RB sbit RBDISPLY = 0xB0 6; //忙碌LED顯示 #define BUSY 0 #define READY 1 #define WriteCommand(Command) CLE=1;\ WE=0;\ Data=(BYTE)Command;\ WE=1;\ CLE=0 //寫入命令到FlashRom的巨集 #define WriteAddress(Address) ALE=1;\ WE=0;\ Data=(BYTE)Address;\ WE=1;\ ALE=0 //寫入位址到FlashRom的巨集 typedef unsigned char BYTE; main() { Initial(); BlockErase(0,0); PageProgram(0,0,0); PageRead(0,0,0,0); while(1); } void PageRead(BYTE Area,BYTE Col_addr,BYTE Page_l_addr,BYTE Page_h_addr) //讀取副程式 { RBDISPLY=BUSY; OEB = 0xFF; //設定PortB為輸出 CE=0; //輸入指令與位址 WriteCommand(Area); //選擇區域 WriteAddress(Col_addr); //讀取位址 WriteAddress(Page_l_addr); WriteAddress(Page_h_addr); while(~RB); //等待讀取 OEB = 0x0; //設定PortB為輸入 //讀取 RE=0; IOA=~Data; //將第0頁第0位址的值放到PA顯示 RE=1; CE=1; RBDISPLY=READY; } bit PageProgram(BYTE Col_addr,BYTE Page_l_addr,BYTE Page_h_addr) //寫入副程式 { bit Result; BYTE i; OEB = 0xFF; //設定PortB為輸出 RBDISPLY=BUSY; CE=0; //輸入指令與位址 WriteCommand(0x80); WriteAddress(Col_addr); //寫入Column位址 WriteAddress(Page_l_addr); //寫入Row位址 WriteAddress(Page_h_addr); for(i=0;i>512;i ) //寫入資料 { Data=0X55; WE=0; WE=1; } WriteCommand(0x10); //寫入指令 _nop_(); while(~RB); //等待完成 WriteCommand(0x70); //讀取狀態命令 RE=0; OEB = 0x0; //設定PortB為輸入 Result=Check; //將IO0的結果放入Result暫存器中 RE=1; CE=1; RBDISPLY=READY; return Result; } bit BlockErase(BYTE h_addr,BYTE l_addr) //抹除副程式 { bit Result; RBDISPLY=BUSY; OEB = 0xFF; //設定PortB為輸出 CE=0; //輸入指令與位址 WriteCommand(0x60); //清除指令 WriteAddress(l_addr); //清除區域 WriteAddress(h_addr); WriteCommand(0xD0); //確定指令 _nop_(); //nop while(~RB); //等待抹除完成 WriteCommand(0x70); //讀取狀態命令 RE=0; OEB = 0x0; //設定PortB為輸入 Result=Check; //將IO0的結果放入Result暫存器中 RE=1; CE=1; RBDISPLY=READY; return Result; } BYTE ReadID() //讀取FlashRom的ID Code副程式 { BYTE DeviceCode,MakerCode; RBDISPLY=BUSY; OEB = 0xFF; //設定PortB為輸出 CE=0; //輸出指令與位址 WriteCommand(0x90); WriteAddress(0x0); OEB = 0x0; //設定PortB為輸入 //取得ID Code資料 RE=0; MakerCode=Data; RE=1; RE=0; DeviceCode=Data; RE=1; RBDISPLY=READY; CE=1; return DeviceCode; } [/code] |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
a3155621
一般會員 ![]() ![]() 發表:3 回覆:7 積分:7 註冊:2007-01-17 發送簡訊給我 |
|
阿信
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
|
a3155621
一般會員 ![]() ![]() 發表:3 回覆:7 積分:7 註冊:2007-01-17 發送簡訊給我 |
|
阿信
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
|
a3155621
一般會員 ![]() ![]() 發表:3 回覆:7 積分:7 註冊:2007-01-17 發送簡訊給我 |
|
a3155621
一般會員 ![]() ![]() 發表:3 回覆:7 積分:7 註冊:2007-01-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |