1. 程式人生 > >【原創】【SPI】SPI Flash介紹

【原創】【SPI】SPI Flash介紹

一、這是個什麼玩意

首先它是個Flash,Flash是什麼東西就不多說了(非易失性儲存介質),分為NOR和NAND兩種(NOR和NAND的區別本篇不做介紹)。SPI一種通訊介面。那麼嚴格的來說SPI Flash是一種使用SPI通訊的Flash,即,可能指NOR也可能是NAND。但現在大部分情況預設下人們說的SPI Flash指的是SPI NorFlash。早期Norflash的介面是parallel的形式,即把資料線和地址線並排與IC的管腳連線。但是後來發現不同容量的Norflash不能硬體上相容(資料線和地址線的數量不一樣),並且封裝比較大,佔用了較大的PCB板位置,所以後來逐漸被SPI(序列介面)Norflash所取代。同時不同容量的SPI Norflash管腳也相容封裝也更小。,至於現在很多人說起NOR flash直接都以SPI flash來代稱。

NorFlash根據資料傳輸的位數可以分為並行(Parallel,即地址線和資料線直接和處理器相連)NorFlash和序列(SPI,即通過SPI介面和處理器相連)NorFlash;區別主要就是:1、SPI NorFlash每次傳輸一bit位的資料,parallel連線的NorFlash每次傳輸多個bit位的資料(有x8和x16bit兩種); 2、SPI NorFlash比parallel便宜,介面簡單點,但速度慢。

NandFlash是地址資料線複用的方式,介面標準統一(x8bit和x16bit),所以不同容量再相容性上基本沒什麼問題。但是目前對產品的需求越來越小型化以及成本要求也越來越高,所以SPI NandFlash漸漸成為主流,並且採用SPI NANDFlash方案,主控也可以不需要傳統NAND控制器,只需要有SPI介面介面操作訪問,從而降低成本。另外SPI NandFlash封裝比傳統的封裝也小很多,故節省了PCB板的空間。

今天主要說下SPI NorFlash。

二、有毛用啊

節省成本,減小封裝,儲存資料。

三、怎麼用啊

怎麼用說白了對於Flash就是讀寫擦,也就是實現flash的驅動。先簡單瞭解下spi flash的物理連線。

之前介紹SPI的時候說過,SPI介面目前的使用是多種方式(具體指的是物理連線有幾種方式),Dual SPI、Qual SPI和標準的SPI介面(這種方式肯定不會出現在連線外設是SPI Flash上,這玩意沒必要全雙工),對於SPI Flash來說,主要就是Dual和Qual這兩種方式。具體專案具體看了,理論上在CLK一定的情況下, 線數越多訪問速度也越快。我們專案採用的Dual SPI方式,即兩線。

當前涉及到具體的SPI flash晶片型別了,所以必須也得參考flash的datasheet手冊了。我們以W25Q64JVSSIQ為例。

這是基本資訊的介紹,然後看下具體IO的定義

這個是WSON封裝的管腳定義,其他詳細資訊參考datasheet。

硬體驅動的話也是和晶片強相關的,因為讀寫擦都是和硬體時序相關的,所以必須得參考硬體datasheet手冊。

上面的datasheet都詳細說明了每個操作的時序週期傳送的命令。上圖中,第一列是指令名稱,第二列是指令編碼,第三列及以後的指令功能與對應的指令有關。帶括號的位元組內容為flash向主機返回的位元組資料,不帶括號則是主機向flash傳送位元組資料。

A0~A23:flash內部儲存器地址;MID0~MID7:製造商ID;ID0~ID15:flash晶片ID;D0~D7:flash內部儲存的資料;dummy:指任意資料。

比如獲取deviceID:

表示該命令由這四個位元組組成,其中dummy意為任意編碼,即這三個位元組必須得發資料,但這些資料是任意的,上圖命令列表中帶括號的位元組資料表示由FLASH返回給主機的響應,可以看到deviceID命令的第5個位元組為從機返回的響應,(ID7~ID0),即返回裝置的ID號。

程式碼如下:

uint32_t Get_Flash_DeviceID(void)
{
 uint8_t deviceID= 0x00;
 spiflashReset();                                   
 spi_write( 0xAB);
 spi_write( Dummy);
 spi_write( Dummy);
 spi_write( Dummy);
 deviceID = spi_write( Dummy); 
 spi_write( Dummy);
 spiflashSet() ; 

return deviceID;
}

其實主要實現的讀,寫,擦。其他的介面也可以根據業務來倒逼來豐富驅動介面。:(具體其他驅動詳細程式碼郵件諮詢[email protected]

四、成為大神的用法

1、吃透spi flash驅動程式碼

2、明白各個驅動時序操作

3、待補充