為嵌入式應用選擇合適的閃存容量極具挑戰性。你需要確保有足夠的內存來保護未來的功能、固件更新等。然而,與此同時,即使內存是“廉價的”,你也不想過度使用它。
你的產品可能會被大量生產,這意味著你節省的每一分錢都會對你公司的財務成功產生重大影響。在某些情況下,這可能是在公司穩定而成功的職業生涯,或者是充滿壓力、動蕩不安的職業生涯之間的差異。
讓我們來看看為嵌入式應用選擇合適閃存容量的幾種最佳實踐。
區分內存類型
在選擇內存大小之前,區分你可能選擇的不同類型的內存非常重要。雖然有不同類型的閃存和RAM,但我們將著眼于一個非常簡單的類型:內部與外部存儲器。
內部閃存是微控制器的板載存儲器。當你去你最喜歡的供應商那里查找微控制器時,你會發現它們有不同的尺寸和不同的內存。內部存儲器用于存儲數據,例如:
l 應用代碼
l 引導裝載者
l 配置數據
l 客戶數據
l 信任根
外部存儲器是與微控制器無關的存儲器。你可以從微控制器中單獨選擇該存儲器。它通常通過QSPI、SDHC等連接到微控制器。外部存儲器通常用于:
l 應用程序映像存儲(在固件更新過程中)
l 客戶數據
l 文件系統
我們將專門探討選擇微控制器片上閃存的最佳實踐。
從內存映射草案開始
當你第一次開始一個新項目時,你基本上不知道你將需要多少內存。你的申請將包括:
l 業務邏輯(應用程序)
l 配置
l 庫(中間件)
l 低級驅動程序
很難知道你需要多少閃存空間,尤其是因為你可能需要額外的空間來存儲備用固件映像和產品發布后添加的未來功能。但是,你可以獲得一個初步的估計,這將有助于你確定你需要的基準或最小閃存量。
幾乎每個微控制器供應商都提供某種類型的配置工具。這些工具旨在幫助你快速啟動并運行微控制器!你可以快速配置RTOS,設置USB或文件系統,等等。我說的快,是指一個小時左右。
你可以使用微控制器配置工具來構建一個快速應用程序,大致獲得你的最低閃存使用量。如果你看一下你的,你也會有一個總的記憶圖。告訴你每個庫有多大的映射文件。
“最低限度有什么好處?”你可能會想,但是最小值將幫助你限制你應該查看的內存大小。它讓你知道什么是可接受的下限。
有了最小內存映射和默認內存映射,你就可以在內存映射的基礎上估計所需的額外內存。我將包括應用程序、應用程序圖像空間等等。
從引腳兼容的“大”存儲器開始
一旦有了內存使用的下限,就需要確定它的上限。這是真正的工作需要做的地方。一般的經驗法則是開始開發你的應用程序,使用你選擇的微控制器系列中最大的內存。
不過,你必須小心一點,不要把自己封閉起來。雖然開發人員可能會使用最大的內存部件來開始,但硬件團隊在某些時候需要限制硬件設計。最好的方法是識別具有引腳兼容器件的微控制器。
例如,你可能會選擇供應商A的B系列微控制器,它提供50種不同的引腳兼容器件,閃存從32 kB到1 MB不等。如果引腳兼容,硬件團隊可以設計硬件,而軟件團隊則處理應用程序并量化他們真正需要多少內存。
量化你的“額外”空間
在某種程度上,選擇閃存大小的最大挑戰不是你的應用。它決定了你要為將來的特性、錯誤修復和固件更新留出多少額外的空間。
我的一般經驗是確保應用程序至少有20%的空閑閃存空間。不幸的是,這20%只是一個任意的數字。我不知道有任何研究著眼于嵌入式應用,并確定在產品的生命周期中使用了多少額外的內存。
這再次意味著你必須檢查你的產品路線圖,以確定你可能需要多少額外的內存。通常,初始發布包含最多的功能。這是最小可行產品(MVP ),但這個最小值將使用最大量的閃存。
最好是根據當前應用程序的大小以及將添加到產品中的附加功能的預期數量和類型來估計你需要多少額外空間。如果你為客戶添加了很少有價值的特性,那么20%可能就足夠了。然而,如果你計劃推出并添加機器學習,那就是完全不同的場景了。你可能需要確保有一到十倍的可用內存。
固件更新也會顯著影響你選擇的閃存大小。一種潛在的設計模式是在微控制器內部存儲兩個圖像。這意味著,如果你的整個應用程序適合128 kB的閃存,你將需要額外的128 kB的閃存來存儲任何新的圖像!
對于微控制器來說,內部閃存通常比外部閃存貴得多。因此,我們通常使用外部閃存來存儲圖像,這些圖像可以在更新期間傳輸到內部存儲器。
正如你所看到的,決定你需要多少額外空間很大程度上取決于你在部署系統后將如何處理它。你可能會發現10%就足夠了,或者你需要100%或更多的額外空間。
采取下一步行動
在本帖中,我們探討了為嵌入式系統選擇合適閃存容量的幾種最佳實踐。這些最佳實踐包括在開發周期的早期生成內存映射,以及在應用程序完成后留出20%的空閑空間。
根據你的最終目的和目標,什么適合你的應用程序的具體細節會有所不同。真的沒有放之四海而皆準的方法或指導可以應用。然而,本帖中討論的最佳實踐可以幫助你獲得一些想法,并幫助你為嵌入式系統選擇合適大小的閃存。