Raspberry Pi I/O Shield 上的MX25L4005A SPI NOR Flash的使用方式
相關規格如下:
Flash size: 4Mbit (512KB), 其內部記憶體的組織結構為
- 64K Block size (for Block Erase)
- 4K Sector size (for Sector Erase)
- 256 Byte Page size (for Page Program)
工作電壓為 .7 to 3.6 volt for read, erase, and program 操作
SPI 工作模式為 : Mode 0 & Mode 1
操作的相關注意事項:
1.Flash 要寫入page之前,要先Erase
2.執行Page Program動作,byte 寫入"0", 無法寫入"1", 要執行Erase指令才能 將byte 設回"1"
3.資料送出的順序為 MSB First
執行動作
SE, BE, CE, and WRSR 會改變Flash內容的Command, 都要先設定WEL bit=1 (in RDSR bit 1), 一旦操作完成後, 它會自動reset (將WEL bit設回0)
操作方法:
操作方法:
CS# goes low
sending WREN (0x6); // set WEL=1
CS# goes high
CS# goes low
sending <CMD>+{Flash Address}+{Data}; //see command table
CS# goes high
CS# goes low
deadline = jiffies + MAX_READY_WAIT_JIFFIES;
do {
status=sending RDSR(0x5) ;
if (!(status & WIP) ) return 0; //判斷是否操作完成
cond_resched(); // 再排程
} while (!time_after_eq(jiffies, deadline));
CS# goes high
Flash Address 的定址方法
NOR Flash 定址方法和一般SRAM,ROM, EEPROM 的定址方址相同,容量有多大,位址線就有多少條。容量有512 Kbyte 表示存取某一位置為需要19條位址線來定址。一般Parallel NOR Flash 介面,就會在IC元件上看到位址線 A0~A18的pin腳。但若為使用較少Pin count 以縮小IC 大小, 使用serial Flash 是另一種解決方案。MX25L4005A 即是採用serial 的 SPI 介面。在送出位址時得用到3個byte ,也才足以表示這19條位址訊號。
位址結構:
位址用以定址到某一個block下的某一個sector, 再到某一個sector下的某一個page, 再到該page 內的offset。
若要進行Flash Block Erase (BE) 時, 描述Flash Addr [18:16] 。
若要進行Flash Sector Erase (SE)時, 描述Flash Addr [18:12]。
若要進行Flash 讀取(READ)時, 描述Flash Addr [18:0]。
若要進行Flash 寫入(WRITE)時, 描述Flash Addr [18:0]。
(每次寫入都是基於某一個page #內寫入)以Page Write操作為例
底下為個Page program 的動作,送出0x2 命令後,接著再送出24 bit Address 決定了寫入位址(page+offset)後, 接著就是在這個page內偱序寫入資料。 因為page size為256 byte, 所以最多只能寫到256 Byte, 超過會覆蓋到同一個page的開頭 ,這就是之前所提到的,每次寫入都是以基於某一個page #內寫入)。若有個程式為 write_flash(addr, buf, len) ;
write_flash(0x2085,buf,786);即於位址 0x2085, 寫入長度是786 byte時, 該進行何種程序? 共要執行4次Page Program cycle (每次不同的Page address),如下圖所示。
沒有留言 :
張貼留言