2015年9月27日 星期日

MX25L4005A SPI NOR Flash的使用方式



Raspberry Pi I/O Shield 上的MX25L4005A  SPI NOR Flash的使用方式


相關規格如下:
Flash size: 4Mbit (512KB), 其內部記憶體的組織結構為
  1. 64K Block size (for Block Erase) 
  2. 4K Sector size (for Sector Erase) 
  3. 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),如下圖所示。

沒有留言 :

張貼留言