?我們都知道芯片的儲存都是寸土寸金的,當你的產品需要存儲照片、音頻、文檔等資源的時候,有沒有眉頭一緊?
內部不夠只能外擴,但是外擴要編寫各種驅動,還有Flash替換,這都要消耗頭發啊!
但,當你使用合宙的LuatOS開發就全然不同了~
今天我們來介紹一下, LuatOS集成內部的一個開源SPI Flash通用驅動庫 ——little_flash
它可以讓你無需考慮不同Flash驅動差異,即可直接使用或者簡單配置參數即可使用。無需再編寫Flash驅動,真正的做到硬件隨意更改Flash軟件通用了。
特別說明:
本文檔以Air780EP+LuatOS作為示例,但此驅動庫為通用庫不限制型號,所有型號都可使用,甚至你可以在你其他C開發產品上自行移植使用。
一、SPI Flash分類
SPI Flash主流一般分為:
NOR Flash和NAND Flash。
TF我們這里不算在內,嚴格的說它屬于emmc,價格也高。
我們看下對比表:
?
這里就需要各位根據產品定義按需選擇了。
二、實現原理
這里我們簡單講解一下實現原理,不感興趣想直接使用的朋友,可以跳過直接看下一部分。
早期的Flash各個廠家指令不同,每家都要單獨寫驅動。
直到一個標準協議的出現:
SERIAL FLASH DISCOVERABLE PARAMETERS (SFDP) | JEDEC
詳細介紹參見:
https://www.jedec.org/standards-documents/docs/jesd216b#
該協議規定了一個指令來讀取Flash的所有參數,得益于它,目前市面上在產的NOR Flash基本都能直接驅動。
little_flash庫就是支持了此協議,實現了NOR Flash的通用驅動。
接下來,我們說一下NAND Flash:
很可惜,雖然新版SFDP協議有描述NAND Flash,但是實際上大部分NAND Flash廠商都沒有遵守。
市面上的NAND Flash一般是兩種設計,一種是純兼容NOR Flash指令,另一種是兼容部分NOR Flash指令,加一部分NAND Flash指令。
little_flash做了一套通用框架,只需要配置下產品幾個指令和儲存大小即可驅動NAND Flash,并且不支持SFDP協議的NOR Flash也可以通過配置參數方式進行支持。
**三、相關準備工作 **
?
3.1 硬件準備
3.2 軟件準備
我們使用云編譯方式編譯一份固件,記得勾選little_flash庫,其他功能按需選擇。
云編譯教程參考:
https://wiki.luatos.com/develop/compile/Cloud_compilation.html
?
四、API介紹
little_flash庫API非常簡單,只有兩個:一個初始化,一個掛載。掛載到文件系統之后,就可以用語言的原生IO操作直接使用了。
4.1 lf.init(spi_device)
初始化little_flash,會自動探測flash并初始化。
參數:
?
返回值:
?
4.2 lf.mount(flash, mount_point, offset, maxsize)
掛載little_flash lfs文件系統。
參數:
?
返回值:
?
五、腳本代碼
我們以Air780EP為例,下圖是代碼演示,并且做了相關注釋。
?
六、效果演示
我們把固件和腳本燒錄到開發板中,新朋友可參考相關教程。
LuatOS教程鏈接:
https://doc.openluat.com/wiki/26?wiki_page_id=3020
?
可以看到little_flash自動識別了NOR Flash,掛載成功后文件操作也都正常。
從此之后,告別SPI Flash驅動。
就算產品更換Flash,也無需修改代碼,爽!
?
-
FlaSh
+關注
關注
10文章
1668瀏覽量
151014 -
音頻
+關注
關注
29文章
3025瀏覽量
83062 -
指令
+關注
關注
1文章
615瀏覽量
36244
發布評論請先 登錄
【開源分享】:開源小巧的FPGA開發板——Icepi Zero
擁抱開源!一起來做FPGA開發板啦!
上海 6月20日-21日《產品EMC正向設計與檢視》公開課火熱報名中!

直播|Tuya AI硬件開發平臺開源啦!搭載超強AI能力,助力個人開發者打破技術壁壘

開源的AI MPU
開源大模型DeepSeek的開放內容詳析

霍爾開關的應用有哪些?矽睿半導體霍爾開關在產品計數的智能應用
ADS1292R有 \"1 ch ECG + 1 ch呼吸偵測\" 或 \"2 ch ECG\" 兩種模式,是否可以在產品上實現自行切換兩種使用模式?
使用xtr111應用在產品設計中,運行一段時間過后設備不工作怎么解決?
MCXN947系列高性能微控制器產品介紹

評論