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