存儲(chǔ)系統(tǒng)介紹 MaixPy 存儲(chǔ)系統(tǒng)大致如下圖所示:
CTR``13WBA50Z~UEN2EMC5A.png (16.94 KB, 下載次數(shù): 71)
下載附件
2021-6-25 11:00 上傳
由上圖可知,MaixPy 中的存儲(chǔ)介質(zhì)主要由 Flash,SD 卡組成,分為三塊區(qū)域,分別是 MaixPy.bin 固件區(qū),xxx.kmodel 模型區(qū),文件系統(tǒng)區(qū):Flash 上為 spiffs(SPI Flash File System),SD 卡為 Fatfs(FAT file system)。 1. MaixPy.bin 固件區(qū)
用來存儲(chǔ) MaixPy.bin 固件,起始于 0x000000,因?yàn)?/font> K210 會(huì)從 0x000000 地址開始運(yùn)行程序。
2. xxx.kmodel 模型區(qū)
通常起始于 0x300000,模型文件之所以不燒錄在 Flash 的文件系統(tǒng)(文件系統(tǒng)會(huì)后續(xù)解釋)中,原因有下: 1 1. Flash 中文件系統(tǒng)擁有的內(nèi)存并不夠大,不足以放入大模型,更大的模型可以放入 SD 卡中。
2. 2. 直接讀取模型文件比經(jīng)過文件系統(tǒng)讀取速率更快。
該區(qū)域沒有文件系統(tǒng)管理,需要根據(jù)燒錄時(shí)的起始地址操作文件,例如當(dāng)模型燒錄在 0x500000 時(shí)的讀取方法: KpuTask = kpu.load(0x500000) 3. 文件系統(tǒng)區(qū)
通常從 0xD00000 開始,該區(qū)域交由文件系統(tǒng)管理,我們預(yù)留了 Flash 末尾的 3MiB 空間,交由 spiffs 管理, 另外也支持 FAT32(Fatfs) 的 SD 卡。這些文件系統(tǒng)提供接口使我們通過 文件名 便可對(duì)文件進(jìn)行讀寫操作,而不必像模型區(qū)那樣使用 文件起始地址 操作。同時(shí)還能幫助我們有效管理存儲(chǔ)介質(zhì),例如磨損均衡(Flash 是有磨損壽命的,相關(guān)知識(shí)請(qǐng)自行搜索)可以充分發(fā)揮 Flash 的壽命。
3.1. MaixPy 文件系統(tǒng)的使用
由于 Flash 和 SD 卡的文件系統(tǒng)各不相同,接口不一致,使得操作不同文件系統(tǒng)需要調(diào)用不同接口,此時(shí) MaixPy 中的虛擬文件系統(tǒng)(VFS)正是用于解決該問題,VFS 可以掛載多個(gè)不同類型文件系統(tǒng),并為用戶操作這些文件系統(tǒng)提供統(tǒng)一接口,用戶使用這些接口時(shí)可以忽略不同文件系統(tǒng)之間的差異。這些接口在 os 模塊中實(shí)現(xiàn),使用示例如下:
- import uos
- print("files:", uos.listdir("/flash"))
- with open("/flash/test.txt", "w") as f:
- f.write("hello text")
- print("files:", uos.listdir("/flash"))
- with open("/flash/test.txt", "r") as f:
- content = f.read()
- print("read:", content)
復(fù)制代碼
以上示例中,spiffs 文件系統(tǒng)開機(jī)被自動(dòng)掛載到 /flash 目錄,用戶只需要在使用 os 的接口時(shí)傳入 "/flash"目錄名作為參數(shù)便可訪問該文件系統(tǒng)。
解讀:
- 導(dǎo)入 uos 模塊
- 列出 /flash 目錄下所有文件
- 向 /flash 目錄寫入一個(gè)名為 test.txt 的文件,內(nèi)容為 hello text,
- 列出 /flash 目錄下所有文件,會(huì)發(fā)現(xiàn) test.txt 的存在
- 讀取文件內(nèi)容到 content 變量
- 打印 content 變量, 輸出 hello text,也就是剛剛寫入文件的內(nèi)容
- 這個(gè)內(nèi)容在開發(fā)板斷電之后再上電,仍然能讀到正確的內(nèi)容(Flash 斷電后不會(huì)丟失內(nèi)容)
當(dāng)然也支持 SD 卡, 如果你需要使用, SD 卡需要滿足以下幾點(diǎn):
- 支持 SPI 模式, 市面上大多數(shù)正版卡都支持
- 分區(qū)為 MBR (msdos)
- 格式化為 FAT32
- 大小測試過最大 128GiB 可用 斷電插入 SD 后, 上電,SD 卡會(huì)被掛載在 /sd,如果有多個(gè)分區(qū),第二個(gè)分區(qū)名是/sd2
注意/(根目錄)不能寫入數(shù)據(jù),只能往/flash或者/sd寫入數(shù)據(jù) 開機(jī)如果有SD卡, 會(huì)自動(dòng)將當(dāng)前目錄切換到/sd, 如果沒有,則會(huì)自動(dòng)切換到/flash
|