本文主要是關(guān)于spi nor flash的相關(guān)介紹,并著重對(duì)spi nor flash應(yīng)用進(jìn)行了詳盡的闡述。
spI flash
SPI一種通信接口。那么嚴(yán)格的來(lái)說(shuō)SPI Flash是一種使用SPI通信的Flash,即,可能指NOR也可能是NAND。但現(xiàn)在大部分情況默認(rèn)下人們說(shuō)的SPI Flash指的是SPI NorFlash。早期Norflash的接口是parallel的形式,即把數(shù)據(jù)線和地址線并排與IC的管腳連接。但是后來(lái)發(fā)現(xiàn)不同容量的Norflash不能硬件上兼容(數(shù)據(jù)線和地址線的數(shù)量不一樣),并且封裝比較大,占用了較大的PCB板位置,所以后來(lái)逐漸被SPI(串行接口)Norflash所取代。同時(shí)不同容量的SPI Norflash管腳也兼容封裝也更小。,至于現(xiàn)在很多人說(shuō)起NOR flash直接都以SPI flash來(lái)代稱(chēng)。
NorFlash根據(jù)數(shù)據(jù)傳輸?shù)奈粩?shù)可以分為并行(Parallel,即地址線和數(shù)據(jù)線直接和處理器相連)NorFlash和串行(SPI,即通過(guò)SPI接口和處理器相連)NorFlash;區(qū)別主要就是:1、SPI NorFlash每次傳輸一bit位的數(shù)據(jù),parallel連接的NorFlash每次傳輸多個(gè)bit位的數(shù)據(jù)(有x8和x16bit兩種); 2、SPI NorFlash比parallel便宜,接口簡(jiǎn)單點(diǎn),但速度慢。
NandFlash是地址數(shù)據(jù)線復(fù)用的方式,接口標(biāo)準(zhǔn)統(tǒng)一(x8bit和x16bit),所以不同容量再兼容性上基本沒(méi)什么問(wèn)題。但是目前對(duì)產(chǎn)品的需求越來(lái)越小型化以及成本要求也越來(lái)越高,所以SPI NandFlash漸漸成為主流,并且采用SPI NANDFlash方案,主控也可以不需要傳統(tǒng)NAND控制器,只需要有SPI接口接口操作訪問(wèn),從而降低成本。另外SPI NandFlash封裝比傳統(tǒng)的封裝也小很多,故節(jié)省了PCB板的空間。
今天主要說(shuō)下SPI NorFlash。
二、有毛用啊
節(jié)省成本,減小封裝,存儲(chǔ)數(shù)據(jù)。
三、怎么用啊
怎么用說(shuō)白了對(duì)于Flash就是讀寫(xiě)擦,也就是實(shí)現(xiàn)flash的驅(qū)動(dòng)。先簡(jiǎn)單了解下spi flash的物理連接。
之前介紹SPI的時(shí)候說(shuō)過(guò),SPI接口目前的使用是多種方式(具體指的是物理連線有幾種方式),Dual SPI、Qual SPI和標(biāo)準(zhǔn)的SPI接口(這種方式肯定不會(huì)出現(xiàn)在連接外設(shè)是SPI Flash上,這玩意沒(méi)必要全雙工),對(duì)于SPI Flash來(lái)說(shuō),主要就是Dual和Qual這兩種方式。具體項(xiàng)目具體看了,理論上在CLK一定的情況下, 線數(shù)越多訪問(wèn)速度也越快。我們項(xiàng)目采用的Dual SPI方式,即兩線。
當(dāng)前涉及到具體的SPI flash芯片類(lèi)型了,所以必須也得參考flash的datasheet手冊(cè)了。我們以W25Q64JVSSIQ為例。
這是基本信息的介紹,然后看下具體IO的定義
這個(gè)是WSON封裝的管腳定義,其他詳細(xì)信息參考datasheet。
硬件驅(qū)動(dòng)的話也是和芯片強(qiáng)相關(guān)的,因?yàn)樽x寫(xiě)擦都是和硬件時(shí)序相關(guān)的,所以必須得參考硬件datasheet手冊(cè)。
上面的datasheet都詳細(xì)說(shuō)明了每個(gè)操作的時(shí)序周期發(fā)送的命令。上圖中,第一列是指令名稱(chēng),第二列是指令編碼,第三列及以后的指令功能與對(duì)應(yīng)的指令有關(guān)。帶括號(hào)的字節(jié)內(nèi)容為flash向主機(jī)返回的字節(jié)數(shù)據(jù),不帶括號(hào)則是主機(jī)向flash發(fā)送字節(jié)數(shù)據(jù)。
A0~A23:flash內(nèi)部存儲(chǔ)器地址;MID0~MID7:制造商ID;ID0~ID15:flash芯片ID;D0~D7:flash內(nèi)部存儲(chǔ)的數(shù)據(jù);dummy:指任意數(shù)據(jù)。
比如獲取deviceID:
表示該命令由這四個(gè)字節(jié)組成,其中dummy意為任意編碼,即這三個(gè)字節(jié)必須得發(fā)數(shù)據(jù),但這些數(shù)據(jù)是任意的,上圖命令列表中帶括號(hào)的字節(jié)數(shù)據(jù)表示由FLASH返回給主機(jī)的響應(yīng),可以看到deviceID命令的第5個(gè)字節(jié)為從機(jī)返回的響應(yīng),(ID7~ID0),即返回設(shè)備的ID號(hào)。
代碼如下:
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;
}
SPI FLASH與NOR FLASH的區(qū)別
Nor Flash包含SPI Flash。SPI Flash是Nor Flash的一部分。
1、NorFLASH使用方便,易于連接,可以在芯片上直接運(yùn)行代碼,穩(wěn)定性出色,傳輸速率高,在小容量時(shí)有很高的性?xún)r(jià)比,這使其很適合應(yīng)于嵌入式系統(tǒng)中作為 FLASH ROM。
2、在通信方式上Nor Flash 分為兩種類(lèi)型:CFI Flash和 SPI Flash。SPI Flash, serial peripheral interface串行外圍設(shè)備接口,是一種常見(jiàn)的時(shí)鐘同步串行通信接口。
spi nor flash應(yīng)用匯總
NOR flash和Nand flash相比
NOR缺點(diǎn): 價(jià)格貴, 容量小, 擦除塊大, 擦除速度慢, NOR flash擦出壽命為100,000次, 遠(yuǎn)小于NAND flash的一百萬(wàn)次。 NOR可以單字節(jié)編程, 也就是說(shuō)一次只更新一個(gè)byte
NOR優(yōu)點(diǎn): 讀速度快, 穩(wěn)定不會(huì)出現(xiàn)位反轉(zhuǎn), 不需要EDC和ECC, 不需要壞塊管理
NOR flash通常一次可以寫(xiě)一個(gè)字節(jié), NAND flash內(nèi)存必須一次寫(xiě)多個(gè)字節(jié)(通常為512字節(jié))
NOR flash的優(yōu)缺點(diǎn)決定了它的應(yīng)用場(chǎng): 適合存儲(chǔ)關(guān)鍵很少修改的數(shù)據(jù), 比如bootloader kernel等代碼;不適合尺寸較大經(jīng)常修改的數(shù)據(jù),比如用戶地圖, 庫(kù)文件等
3 wire SPI
正常的SPI使用四根線: clock, cs, MOSI, MISO. 可以把MOSI MISO合并為一根線(slave out/slave in SISO)上實(shí)現(xiàn)半雙工。 主要用來(lái)實(shí)現(xiàn)低速傳輸
DUAL SPI
對(duì)于SPI flash來(lái)說(shuō), 全雙工并不常用, 因此擴(kuò)展這兩根數(shù)據(jù)線, 使得他們支持半雙工傳輸, 加倍數(shù)據(jù)傳輸速度。 可以發(fā)送一個(gè)命令字節(jié)請(qǐng)求進(jìn)入dual mode, 然后MOSI就變成了SIO0(Serial I/O 0), MISO變成了SIO1.
這種模式主要是針對(duì)SPI ROM, SPI flash設(shè)備, 需要進(jìn)行大數(shù)據(jù)量傳輸
QUAD SPI
quad SPI又增加了兩根I/O線(SIO2 SIO3), 可以在一個(gè)時(shí)鐘周期傳送四個(gè)data bits. 通過(guò)使用特殊的命令, 使能quad mode.
Double data rate
除了使用多根I/O線, 某些設(shè)備還通過(guò)DDR技術(shù)增加傳輸速率
SPI NOR flash文件系統(tǒng)支持
NOR flash和普通機(jī)械硬盤(pán), SSD, EMMC的最大區(qū)別就是NOR flash在寫(xiě)之前,需要確保寫(xiě)的位置是已經(jīng)擦除過(guò)的, 因此并不適合使用傳統(tǒng)的Ext2/3/4, FAT/NTFS等文件系統(tǒng)
甚至YAFFS類(lèi)的文件系統(tǒng)也不適合NOR flash
JFFS和JFFS2
這兩個(gè)文件系統(tǒng)都可以支持NOR flash, 并且提供了垃圾回收, 壞塊管理, 磨損平衡。 二者都存在文件系統(tǒng)mount速度較慢的問(wèn)題, 不適合大容量flash
YAFFS/YAFFS2
已經(jīng)被踢出主線內(nèi)核了, 基本廢棄了。
Cramfs/Squashfs
常規(guī)的只讀文件系統(tǒng), 都支持?jǐn)?shù)據(jù)壓縮, 實(shí)現(xiàn)簡(jiǎn)單, 速度快, 如果NOR flash存放的文件系統(tǒng)是只讀的, 盡量使用他們。 這些常規(guī)文件系統(tǒng)工作在傳統(tǒng)塊設(shè)備上, 需要內(nèi)核支持
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
Ext2/3/4 FAT/NTFS
支持讀寫(xiě)的塊設(shè)備文件系統(tǒng)不適合工作用在NOR flash上, 因?yàn)镹OR flash寫(xiě)操作會(huì)導(dǎo)致擦除操作, 速度慢, 影響壽命。
MTD模擬block device
打開(kāi)CONFIG_MTD_BLOCK和CONFIG_MTD_BLKDEVS
啟動(dòng)后/dev/下會(huì)增加幾個(gè)block設(shè)備
root@devm:~# ls /dev/mtdmtd0 mtd1 mtd2 mtd3 mtdblock0 mtdblock2 mtd0ro mtd1ro mtd2ro mtd3ro mtdblock1 mtdblock3
使用mkfs.ext4, 格式化mtdblock,
root@evm:~# mkfs.ext4 /dev/mtdblock3mke2fs 1.42.9 (28-Dec-2013)Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)Stride=0 blocks, Stripe width=0 blocks1856 inodes, 7424 blocks371 blocks (5.00%) reserved for the super userFirst data block=1Maximum filesystem blocks=76021761 block group8192 blocks per group, 8192 fragments per group1856 inodes per group Allocating group tables: done Writing inode tables: done Creating journal (1024 blocks): doneWriting superblocks and filesystem accounting information: done
使用dd命令, 寫(xiě)入cramfs鏡像
首先, 在Host創(chuàng)建cramefs鏡像
mkfs.cramfs rootfs/ cramfs.img
dd命令導(dǎo)入鏡像
root@evm:~# dd if=/dev/mtdblock3 of=cramfs.img 14848+0 records in14848+0 records outroot@evm:~# ls -l-rw-r--r-- 1 root root 7602176 Jan 1 00:24 kaka.imgroot@evm:~#
NOR flash使用JFFS2
NOR flash上運(yùn)行JFFS2, JFFS2通過(guò)MTD接口操作NOR flash
創(chuàng)建JFFS2鏡像
mkfs.jffs2工具在mtd-utils工具包中
sudo apt-get install mtd-utils mkfs.jffs2 -r rootfs/ -o jffs2.img --pad=0x800000
--pad=0x800000 如果不加這個(gè)參數(shù), 生成的鏡像尺寸(文件系統(tǒng)大小)是按照rootfs/小內(nèi)容大小決定的;通過(guò)這個(gè)參數(shù)我們可以強(qiáng)制指定文件系統(tǒng)大小
燒寫(xiě)JFFS2鏡像
有兩種燒寫(xiě)方法:
1. 在uboot中把jffs2.img下載到DRAM中, 然后使用sf write命令把DRAM內(nèi)容燒寫(xiě)到nor flash上
2. 進(jìn)入系統(tǒng)后使用 dd if=jffs2.img of=/dev/mtdblock4
二者性質(zhì)上實(shí)際相同, 都是直接把鏡像燒到NOR flash某段內(nèi)存中
掛載JFFS2文件系統(tǒng)
首先kernel要支持jffs2文件系統(tǒng), 執(zhí)行如下命令
mount -t jffs2 /dev/mtdblock4 /mnt
文件系統(tǒng)掛載速度
由于JFFS2在掛載過(guò)程中需要執(zhí)行掃描, 構(gòu)造文件系統(tǒng), 因此在同樣大小的mtdblock上, JFFS2掛載時(shí)間遠(yuǎn)大于EXT4文件系統(tǒng)
文件系統(tǒng)尺寸為0x740000(7.25MB)
Ext4掛載時(shí)間 root@evm:~# time mount -t ext4 /dev/mtdblock3 /mnt real 0m 0.06suser 0m 0.00ssys 0m 0.00s
JFFS2掛載時(shí)間 root@evm:~# time mount -t jffs2 /dev/mtdblock3 /mntreal 0m 0.34suser 0m 0.00ssys 0m 0.33s
結(jié)語(yǔ)
關(guān)于spi nor flash的相關(guān)介紹就到這了,如有不足之處歡迎指正。
-
FlaSh
+關(guān)注
關(guān)注
10文章
1649瀏覽量
149493 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7553瀏覽量
164909
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
SPI NAND Flash和SPI NOR Flash的區(qū)別在哪里?
SPI FLASH與NOR FLASH的區(qū)別 詳解SPI FLASH與NOR FLASH的不一樣
SPI flash是什么,關(guān)于SPI FLASH的讀寫(xiě)問(wèn)題

SPI flash如何運(yùn)行程序,SPI flash有哪些應(yīng)用

淺談STM32之SPI_FLASH之應(yīng)用實(shí)例
淺析FLASH讀寫(xiě)----SPI原理及應(yīng)用

SPI Nand Flash簡(jiǎn)介

NOR falsh、NAND flash、SDEMMC、QSPI flash、SPI flash

Gowin SPI Nor Flash Interface IP用戶指南

一文了解SPI NAND Flash和SPI NOR Flash的區(qū)別
SPI NOR Flash在車(chē)載市場(chǎng)的應(yīng)用
TWS藍(lán)牙耳機(jī)SPI NOR Flash
物聯(lián)網(wǎng)行業(yè)存儲(chǔ)方案詳解_SPI NOR Flash

評(píng)論