發布日期:2022-04-26 點擊率:40
關鍵詞: Flash存儲
摘要:Flash 存儲問題總是在我們技術支持渠道位列榜首。Toradex 投入了大量資源保證存儲盡可能的穩定。然而,了解一些關于存儲的基本知識還是十分重要的。首先你需要知道存儲是否磨損,當往內置的存儲設備上寫入大量數據后,你就很容易損壞它。通過這篇博文,我們想要告訴你 Flash 存儲可能會遇到的一些問題。我們先簡單介紹技術內容。
Flash 存儲問題總是在我們技術支持渠道位列榜首。Toradex 投入了大量資源保證存儲盡可能的穩定。然而,了解一些關于存儲的基本知識還是十分重要的。首先你需要知道存儲是否磨損,當往內置的存儲設備上寫入大量數據后,你就很容易損壞它。通過這篇博文,我們想要告訴你 Flash 存儲可能會遇到的一些問題。我們先簡單介紹技術內容。
Flash 類型:Raw Flash vs Managed Flash
目前,Toradex 計算機模塊采用 NOR、NAND 和 eMMC Flash。
NOR 和 NAND 是 raw 存儲設備。NAND 和 NOR 之間的主要差別是 NOR 允許隨機尋址,不需要糾錯以及較高的每比特成本。NAND 則只能頁讀取,每頁中的一些位可能出錯,因此需要糾錯機制。
eMMC Flash 則結合使用 NAND 和一個內置控制器,后者處理大部分使用 NAND flash 時候,本來需要你自己完成的一些列任務。eMMC 也稱為 managed NAND。在另一方面,NAND 和 NOR 需要有 OS 和驅動來完成對應的處理。我們稍后會在本博文中討論這兩種不同的挑戰。
下面是我們的計算機模塊所使用的 Flash 類型概覽;
Storage Type | Toradex Computer Module |
NOR | Colibri PXA270 |
NAND | Colibri PXA310, PXA320, VF50, VF61, iMX7, T20 |
EMMC | Colibri iMX6 and T30, Apalis iMX6 and T30 |
NAND Flash 演變:從 SLC 到 MLC
NAND 上面的 bit 密度隨著時間在不停增長。最早的 NAND 設備是 Single Level Cell (SLC) flash。這意味著每個閃存單元存儲一個bit位信息。借助 Multi Level Cell (MLC),每個閃存單元可以存儲兩個或者多個bit位,bit 密度也隨之提升。MLC 聽起來很不錯,但是也有缺點:MLC NAND 也帶來更高的bit 錯誤率以及更低的壽命。所有的 eMMC 都使用 MLC NAND。有些 eMMC 設備可以在部分或者全部存儲區域上使用 pseudo-SLC (PSLC)。這將會減少存儲容量,但是提高設備上使用壽命。
這是 SLC 和 MLC 的簡單對比。
SLC | MLC | |
Bits per Cell | 1 | 2 and more (TLC) |
Erase/Program cycles | 100K | 3K to 15K |
Minimal ECC, bits correctable per 512 Bytes, chip dependent | 8 bit | 12 bit |
Cost per Byte | Higher | Lower |
使用壽命:有限的擦寫次數
正如上面提到的,關于我們設備上使用的 flash 技術,您需要知道很重要的一點是,您只能有限次地擦寫存儲設備。往 flash 存儲上寫入大量的數據,并不是一個好的主意。上面的表格所示,根據所使用的 flash 類型不同,直到數據可能出現損壞或者丟失前,您可以進行 10K 到 100K 次寫操作。“擦寫周期” 這一個令人煩惱的事情。Flash 存儲的一個限制是,在被擦除之前是無法進行寫操作的。而且,不能通過位擦差來完成,而是需要更大的單位,稱為塊。最糟糕的情況是,如果你只想改變一個字節,但是可能需要擦除整個塊。一個塊最大可以使 512KB。這種比你想象的要大的多的擦/寫比現象稱為寫放大。并且可能還有 flash 文件系統所需的額外寫操作。如果你想要評估你嵌入式設備上的存儲的壽命,你應該把這個也考慮進來。
提高 flash 壽命
下面的內容向你介紹如何提高 NAND 或者 eMMC 的壽命。不要擔心,這些工作都已經由 Toradex 完成,你不需采取任何工作。
防止磨損:磨損平衡
我們假設你已經了解 flash 只能被有限次地擦寫,并且你只是偶爾小批量地更新數據。如果這些數據總是寫在同一個 flash 單元,那么你只能在 MLC flash 上寫 15K 次。如果永遠不使用其他 flash 單元,你的數據將會丟失,一直在寫的存儲單元磨損后,flash 也就隨著報廢。智能的 flash 驅動會采用磨損平衡。這個技術確保所有的 flash 單元被平均磨損,而不是總是使用同一個單元。
檢測和糾正錯誤:糾錯碼
在 NAND flash 設備有可能發生一個位的數據發生翻轉,你的數據因此損壞。磨損或者其他干擾都有可能引起這個現象。因此,數據需要被糾錯碼(ECC)保護。根據 Flash 控制器和 NAND / eMMC 的不同,部分錯誤數據可以被檢測和糾正。
壞塊處理
ECC 使我們能夠發現錯誤的塊,我們就可以停止使用這些壞塊。根據 ECC 以及糾正的位數,可以設定容錯上限,這個范圍之內不需要采取進一步行動。一旦達到這個上限,數據被糾正,并轉移到正常的塊上面。 之前的位置表記為壞塊。這些壞塊不再被使用,因為它們可能已經損壞。
掉電保護
當你的設備在往 flash 寫數據的時候突然掉電,這將會發生什么?在嵌入式設備上,你希望設備仍舊可以正常啟動,并且數據不受到損壞。為了達到這個目的,所有相關的軟件和硬件都需要有能力應對這種情況。你將會在下面的內容中了解我們是如何做到的。
Toradex 系統模塊實施方法
正如上面提到的,關鍵是根據存儲的類型采用正確配置。我們會分析目前 Toradex BSP 上所使用的技術。
NAND 設備
下圖展示了在 NAND 設備上行 WinCE 和 Linux 的配置
存儲設備:我們的設備只要使用 NAND,那么都用的是 SLC NAND。
硬件驅動:硬件驅動為 NAND 設備和上層系統提供接口。上層系統也負責錯誤檢測和糾正。在 Linux 上我們目前的鏡像使用 MTD。WinCE 上我們使用 Microsoft Flash PDD 層。也有例外,如 Colibri T20,我們使用了專門的 PDD 層。
Flash 傳輸層:該層負責寫平衡和壞塊管理。在 Linux 中由 UBI 子系統完成;而 WinCE 則由 MDD 層完成。同樣在 Colibri T20 上我們使用了專門的層,而不是 Microsoft Flash MDD。
文件系統:文件系統是實際管理分區以及所存文件的部分。用戶通過文件 API 來是用文件系統(Linux 中通過 VFS 層)。在Linux 上,目前我們使用 UBI FS。WinCE 使用 Transaction Save exFAT (TexFAT) 。兩者都可以應對掉電。基本的文件層通過支持原子操作來應對掉電發生。
eMMC 設備
下圖展示了在 eMMC 設備上行 WinCE 和 Linux 的配置
存儲設備:相對于 raw NAND,絕大多數的工作由 eMMC 本身完成。上層軟件不需要處理寫平衡、糾錯和壞塊管理。
硬件驅動:這是 MMC 控制器和文件系統之間的接口.
文件系統:和 NAND 設備一樣,WinCE 上仍舊使用 TexFAT;我們的 Linux 鏡像使用 ext3 文件系統。同樣也是能夠應對掉電情況。
結論和建議
Toradex 盡自己最大的努力提供可靠和持久的 flash 存儲。然而,在開發的過程中,你還是需要始終關注 flash 的使用。
減少 flash 訪問次數
了解你最終產品的寫操作行為
檢查在寫操作的情況下,你產品使用壽命是否能夠達到要求
進行壓力測試和持久測試
避免使用 Flash 全部容量,這可以極大地提高寫平衡算法的效率
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV