- MEM可以是:
-
MCU/CPU自帶的記憶體:
容量由“晶片設計師”根據常用場景統計確定大小。
常能滿足大多數用途。 -
MCU/CPU的外部記憶體:
容量由“硬體設計師”根據需要確定。
在設計電路階段,為MCU/CPU增加的外圍物理“大記憶體”,
安放佈設在MCU/CPU的周圍, 直連其高速匯流排, 可滿足硬體特定需求。 -
MCU/CPU的可擴充套件外存:
容量由“終端使用者”自由擴充套件。
在設計電路階段,要為MCU/CPU增加通用的“硬體介面 或,擴充套件槽”, 常用的有SD卡槽、隨身碟介面。
直連MCU/CPU高速匯流排, 可滿足“購買裝置”的終端使用者自由擴充套件外部儲存容量的需求。
- DMA常用於大量資料的讀寫;
- 少量資料,一般是經過MCU/CPU的處理,實現上是“'register'轉發”方式存取MEM(記憶體)。
常常資料只是8bit、16bit, 32bit, 64bit, 128bit, 256bit, 根據MCU/CPU的Datasheet確定。
CPU(彙編)指令上,每一筆“小資料”要兩步完成:- 首先, 將MEM地址的資料讀入register, 這是一條MCU/CPU指令。
- 其次, 其他“電路單元”讀寫register內容, 另一條MCU/CPU指令。
大量資料時,如果分為一筆筆的“小資料收發”方式: - MCU/CPU將一直被佔用執行兩條彙編指令。
- 每一筆“小資料”都經過MCU/CPU(的register)轉發, 傳輸路徑上繞不必要的彎路。
而先進MCU/CPU的DMA時: - 開始時, 由CPU匯流排協調好“配對”, 並儲存一條“DMA記錄”;
- 傳數時, DMA(分block塊方式):
- 分“大塊”傳,一次傳"一大塊"(常有KB或MB為單位的大小), 直到傳完;
- 不佔用CPU執行指令。
- 結束時, 觸發硬體中斷, 通知MCU/CPU已傳完,並由MCU/CPU解除“配對”並清除“DMA記錄”。
- 首先資料的“收方”、“發方”與MCU/CPU, 都要有DMA功能.
例如收方是ADC( MCU/CPU自帶的或其高速匯流排外接的), 總之此ADC的Datasheet上要有DMA功能。
- 例如: MCU/CPU內部的ADC