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