eMMC:Cache簡介-0


Cache是eMMC中臨時存儲數據的位置,相比於Nand,Cache可以提供更快的存取速度。一般可以用於臨時存放邏輯數據、算法表格等等。Cache大小由Devcie在EXT CSD中給出,以1KB爲單位。Host可以通過設置EXT CSD[33] CACHE_CTRL來進行使能。Host可以通過Flush指令(CMD6 bit[32] FLUSH_CACHE)和關閉Cache功能來讓Device把緩存中邏輯數據Flush到非易失性存儲中。

但是,有兩種數據是需要強制編程到非易失性存儲中的:
1. 可靠寫請求:CMD23 bit31(Reliable Write Request)
2. 強制編程:CMD23 bit24(forced programming),在Cache功能使能的情況下,此位纔有效。如果同時存在bit31和bit24有效,那麼忽略bit24

在Flush操作中,Device對邏輯數據編程的先後順序默認是不確定的,不同的FTL有不同的實現方式,所以Host如果對某些數據的先後順序有要求,那麼需要及時Flush或者使用強制編程、可靠寫、或者是Cache Enhancement Barrier。另外有的Device是支持順序Flush Cache的,Host就可以省事了。

Cache中數據是不穩定的,在意外掉電後,數據都會丟失,所以Cache操作需要遵循以下流程:
1. 只有單塊讀/寫(CMD17/CMD24),指定長度多塊讀/寫(CMD23+CMD18/CMD25),無指定長度的多塊讀寫(CMD18/CMD25+CMD12)的數據,才允許緩存在Cache中。
2. 在編程命令(CMD24、CMD25+CMD12、CMD23+CMD25)後,Device處於Busy時,Device Response中Status的Bit8,不一定代表正在編程Nand,也有可能是正在緩存到Cache中。
3. 收到Flush指令後,需要把Cache中的數據都編程到非易失性存儲中中。
4. 在進行Flush過程中如果掉電了,可能會導致數據丟失。
5. 存取RPMB和Boot分區,不能進行緩存。
6. Cache使能是作用於整個eMMC的,當收到Flush指令,所有分區的緩存都要編程到非易失性存儲中。
7. 切換分區不需要Flush,但是Device進入SLEEP Mode(睡眠模式)的時候,Cache數據可能會丟失,所以Host先發送Flush指令,然後發指令讓Device進入睡眠模式。
8. RST_n或者CMD0復位後,Device可能認爲Cache中的數據無效。

Flush緩存的時間不固定的,沒有Timeout,Host可以通過HPI來打斷Flush,然後下次需要重新發Flush指令。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章