圖一 : Portenta H7系統板可透過USB Hub連接USB隨身碟、透過Vision Shield子板連接SD記憶卡(圖片來源:Arduino官網) |
|
目前四片板卡可用儲存函式庫
Arduino官方在今(2023)年11月釋出兩套儲存相關的函式庫,主要供Arduino Pro系列(產業實務應用取向)的板卡使用,目前有4片板卡可用,分別為Arduino Portenta H7、Arduino Portenta C33、Arduino Opta(嚴格來說是台PLC)以及Arduino Portenta Machine Control。Arduino官方表示後續會讓函式庫適用到更多板卡上。
註:一般數學方程式的f(x)=y+x稱為函數,類似用法在程式設計領域我國一般譯為函式,將許多函式集中在同一群以利管理或運用者稱為函式庫(library)。
官方舉出三種應用情境
有了儲存函式庫,在開發撰寫Arduino板卡存取USB隨身碟、SD記憶卡的相關應用就方便許多,對此Arduino官方也設想了些可能會用及隨身碟、記憶卡的情境,例如一個放置於戶外遠處、沒有連線的監測裝置,用它來監測溫度、空氣品質等,監測到的數值需要地方存放,這時就需要連接隨身碟、記憶卡,而後派人定期去抽換儲存媒體,並將儲存的資料拿回來研究分析。
或者,同樣是不連線的裝置,需要更新裝置系統的韌體(firmware)時,無法使用無線傳輸更新韌體(FOTA)的作法,這時也是將要更新的韌體存到記憶卡內,派人到現場連接插卡、操作更新程序。
類似的,裝置長期運作也可能出現一些錯誤,這些錯誤需要加以記錄,以利後續問題分析診斷,甚至預測日後何時可能再發生錯誤?會在哪些環節發生錯誤等,這些記錄稱為日誌(log),日誌通常以檔案方式存放,而給裝置插入記憶卡便能用來儲存日誌檔,便於日後帶回日誌資料進行分析。
為何要有兩套儲存函式庫?
既然函式庫用來讀寫隨身碟、記憶卡,官方為何要推出兩套?這兩套的名字分別是Arduino_POSIXStorage、Arduino_UnifiedStorage,這其實是有原因的。
首先是開發者過去可能已經開發過UNIX、類UNIX(例如FreeBSD、Linux、Mac等)等作業系統上的應用程式,在這類作業系統上為了方便程式移植,也為了維持相容性等,通常依循POSIX介面標準來撰寫,如此就可以盡可能減少改動而推出不同作業系統版本的應用程式,包含Windows也是支援POSIX介面。
為了讓開發者儘快上手,所以Arduino官方提出相容POSIX的Arduino_POSIXStorage函式庫,讓開發者用過去習慣來撰寫儲存相關的程式。不過筆者看了一下技術細節,還是與POSIX有些差異,不全然相同。
圖二 : Arduino_POSIXStorage函式庫基本範例程式與簡單說明(圖片來源:GitHub) |
|
另一款儲存函式庫Arduino_UnifiedStorage是比Arduino_POSIXStorage更方便簡易使用的,把一些複雜細節都去除了,如果程式設計師過去沒有開發依循POSIX介面標準的應用程式的經驗,是可以直接使用Arduino_UnifiedStorage,Arduino_UnifiedStorage也比較合乎過往Arduino官方函式庫的命名、參數風格。
此外,兩套函式庫還是有一些異同,例如都支援熱插拔、USB隨身碟、SD記憶卡,檔案格式可以是FAT32、LittleFS等,但Arduino_UnifiedStorage還支援QSPI(Queued SPI)介面的讀寫,在資料管理與操作上也比較方便,例如存取USB、SD、內部儲存等的方式一致、更方便確認資料是否可移動、在不同儲存媒體上搬移資料也比較方便,或者資料的覆寫管理也比較好、提供資料夾結構導覽可讓檔案操作管理更直覺等。
既然如此為何還要有POSIX版?主要是因為Arduino Pro是產業實務應用取向的,支援與相容過往就有開發經驗的職業、專業程式設計師是必要的,如此才能更快讓Arduino Pro有更多的產業實務應用。
最後,官方文件也提到一些細節,畢竟隨身碟、記憶卡廠牌型款多又多,函式庫的開發者也無法全部都測試驗證,目前官方主要測試Kingston、Samsung、SanDisk等廠牌;USB Hub集線器也是有限度測試,一些進階型的USB Hub(整合RJ-45、HDMI等)通常還沒測試。
(本文由VMAKER授權轉載;連結原文網址)
延伸閱讀:
[1] Arduino_POSIXStorage函式庫網址:https://github.com/arduino-libraries/Arduino_POSIXStorage
[2] Arduino_UnifiedStorage函式庫網址:https://github.com/arduino-libraries/Arduino_UnifiedStorage