合理使用 DMA 传输模式 - 兵乓模式 (Ping-Pong) 與多資料封包緩衝 (Multi Package Buffer) 傳輸模式,可以幫助提高 MCU 效率。
USB 周邊是一個很好的周邊範例,早期的 USB 實現的最大輸送量只有 1.5Mb/s。隨著更高性能的標準版本的出現。比如要接近 12Mbit/s 全速 USB 標準的理論最大值。我們來看看,資料傳輸方面 DMA 如何幫助提高 MCU 效率!
我們以 Microchip 的 ATXMEGA16D4-MH 舉例。
兵乓模式 (Ping-Pong) :
之前通常使用單個記憶體緩衝區進行周邊資料傳輸,如果資料緩衝區已滿,MCU 將回應 NAK(否定確認)消息。接收到 NAK 後,主機將等待並稍後重試傳輸。它將繼續重試,直到 MCU 能夠成功接收資料。
ATXMEGA16D4-MH 使用乒乓模式來消除這個問題。乒乓模式使用兩個記憶體單元(memory banks)進行資料傳輸。當一個記憶體單元滿時,主機可以將資料傳輸到另一個記憶體單元。在兩個記憶體單元之間交替傳輸可以避免複審,並提高整體資料頻寬。
此外,如上圖所示,以乒乓模式還使 MCU 有更多時間來處理資料。如圖所示,沒有乒乓模式,CPU 只能處理傳輸之間的資料。使用乒乓模式,CPU 可以在傳輸週期的一部分時間內處理資料,並降低 NAK 被要求“趕上”資料處理要求的可能性。
多資料封包緩衝傳輸模式 (Multi-Package Buffered):
另一個很有用的模式,可以讓 MCU 的資料傳輸更高效率。這個特性叫做“多資料封包緩衝傳輸模式”。如果你要透過 USB 埠傳送的資料封包,超過了全速 USB 的 BULK 傳輸模式所允許的最大值(64位元組),那麼就可以用上這個模式。以前,你需要在主機上把資料封包分成小塊,然後在接收端把它們合併,這會增加中央處理器(CPU)的負擔。不過現在,多資料封包緩衝功能加入了 USB 裝置,它會在資料封包超過 USB 標準大小時自動幫你分割和合併資料。重要的是,這個模式還能減少中斷的次數,因為只有在整個傳輸結束後才需要中斷 CPU。這意味著 CPU 可以處理其他任務,或者進入休眠模式,直到整個傳輸完成並且準備好處理。