spi nor flash使用匯總

來源:互聯網
上載者:User
Overview

SPI flash, 分為spi flash, DUAL spi flash, QUAD spi flash,

3-wire spi, 4-wire spi, 6-wire spi. 在clock一定的情況下, 理論上線數越多速度越快



NOR flash和Nand flash相比
NOR缺點: 價格貴, 容量小, 擦除塊大, 擦除速度慢, NOR flash擦出壽命為100,000次, 遠小於NAND flash的一百萬次. NOR可以單位元組編程, 也就是說一次只更新一個byte
NOR優點: 讀速度快, 穩定不會出現位反轉, 不需要EDC和ECC,  不需要壞塊管理 NOR flash通常一次可以寫一個位元組, NAND flash記憶體必須一次寫多個位元組(通常為512位元組)

NOR flash的優缺點決定了它的應用場: 適合儲存關鍵很少修改的資料, 比如bootloader kernel等代碼;不適合尺寸較大經常修改的資料,比如使用者地圖, 庫檔案等


3 wire SPI

正常的SPI使用四根線: clock, cs, MOSI, MISO. 可以把MOSI MISO合并為一根線(slave out/slave in SISO)上實現半雙工. 主要用來實現低速傳輸

DUAL SPI

對於SPI flash來說, 全雙工系統並不常用, 因此擴充這兩根資料線, 使得他們支援半雙工傳輸, 加倍資料轉送速度. 可以發送一個命令位元組請求進入dual mode, 然後MOSI就變成了SIO0(Serial I/O 0), MISO變成了SIO1.

這種模式主要是針對SPI ROM, SPI flash裝置, 需要進行大資料量傳輸

QUAD SPI

quad SPI又增加了兩根I/O線(SIO2 SIO3), 可以在一個刻度傳送四個data bits. 通過使用特殊的命令, 使能quad mode.

Double data rate

除了使用多根I/O線, 某些裝置還通過DDR技術增加傳輸速率


SPI NOR flash檔案系統支援

NOR flash和普通機械硬碟, SSD, EMMC的最大區別就是NOR flash在寫之前,需要確保寫的位置是已經擦除過的, 因此並不適合使用傳統的Ext2/3/4, FAT/NTFS等檔案系統

甚至YAFFS類的檔案系統也不適合NOR flash


JFFS和JFFS2

這兩個檔案系統都可以支援NOR flash, 並且提供了記憶體回收, 壞塊管理, 磨損平衡. 二者都存在檔案系統mount速度較慢的問題, 不適合大容量flash

YAFFS/YAFFS2

已經被踢出主線核心了, 基本廢棄了.


Cramfs/Squashfs

常規的唯讀檔案系統, 都支援資料壓縮, 實現簡單, 速度快, 如果NOR flash存放的檔案系統是唯讀, 盡量使用他們. 這些常規檔案系統工作在傳統塊裝置上, 需要核心支援

CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y


Ext2/3/4 FAT/NTFS

支援讀寫的塊裝置檔案系統不適合工作用在NOR flash上, 因為NOR flash寫操作會導致擦除操作, 速度慢, 影響壽命.


MTD類比block device

開啟CONFIG_MTD_BLOCK和CONFIG_MTD_BLKDEVS

啟動後/dev/下會增加幾個block裝置

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 groupAllocating group tables: done                            Writing inode tables: done                            Creating journal (1024 blocks): doneWriting superblocks and filesystem accounting information: done

使用dd命令, 寫入cramfs鏡像

首先, 在Host建立cramefs鏡像

mkfs.cramfs rootfs/ cramfs.img

dd命令匯入鏡像

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上運行JFFS2, JFFS2通過MTD介面操作NOR flash 建立JFFS2鏡像

mkfs.jffs2工具在mtd-utils工具包中

sudo apt-get install mtd-utilsmkfs.jffs2 -r rootfs/ -o jffs2.img --pad=0x800000
--pad=0x800000 如果不加這個參數, 產生的鏡像尺寸(檔案系統大小)是按照rootfs/小內容大小決定的;通過這個參數我們可以強制指定檔案系統大小

燒寫JFFS2鏡像

有兩種燒寫方法:

1. 在uboot中把jffs2.img下載到DRAM中, 然後使用sf write命令把DRAM內容燒寫到nor flash上

2. 進入系統後使用 dd if=jffs2.img of=/dev/mtdblock4

二者性質上實際相同, 都是直接把鏡像燒到NOR flash某段記憶體中


掛載JFFS2檔案系統

首先kernel要支援jffs2檔案系統, 執行如下命令

mount -t jffs2 /dev/mtdblock4 /mnt

檔案系統掛載速度

由於JFFS2在掛載過程中需要執行掃描, 構造檔案系統, 因此在同樣大小的mtdblock上, JFFS2掛載時間遠大於EXT4檔案系統


檔案系統尺寸為0x740000(7.25MB)

Ext4掛載時間root@evm:~# time mount -t ext4 /dev/mtdblock3 /mnt                                                                                                              real    0m 0.06suser    0m 0.00ssys     0m 0.00s

JFFS2掛載時間root@evm:~# time mount -t jffs2 /dev/mtdblock3 /mntreal    0m 0.34suser    0m 0.00ssys     0m 0.33s









聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.