話(huà)說(shuō)STM32F4系列的總線(xiàn)矩陣與訪(fǎng)問(wèn)調度
本文引用地址:http://dyxdggzs.com/article/201609/296596.htm

可能不少人見(jiàn)過(guò)STM32F4系列的內部系統架構框圖。大致如下圖,該圖很重要,不可視而不見(jiàn)。

圖中縱橫交錯的就是多層AHB總線(xiàn)矩陣,負責把上方黃色主設備跟右邊綠色從設備互聯(lián)起來(lái)。所謂AHB主設備是指CPU或DMA[通用DMA或專(zhuān)用DMA],由它們啟動(dòng)總線(xiàn)訪(fǎng)問(wèn),即讀寫(xiě)操作。那些響應主設備讀寫(xiě)訪(fǎng)問(wèn)的設備就是AHB從設備,比如存儲器、各類(lèi)外設等。
因為總線(xiàn)矩陣的存在,使得多個(gè)主設備可以并行訪(fǎng)問(wèn)不同的從設備,增強了數據傳輸能力,提升了訪(fǎng)問(wèn)效率,同時(shí)也改善了功耗性能。
不過(guò),雖然總線(xiàn)矩陣使得多個(gè)主設備可以并行訪(fǎng)問(wèn)不同的從設備,但在每個(gè)預定的時(shí)間內,只有一個(gè)主設備擁有總線(xiàn)控制權。如果有多個(gè)主設備同時(shí)出現總線(xiàn)請求時(shí)就得進(jìn)行仲裁。所以總線(xiàn)矩陣里還有個(gè)AHB總線(xiàn)仲裁器,它保證每個(gè)時(shí)刻只有一個(gè)主設備通過(guò)總線(xiàn)矩陣對從設備進(jìn)行訪(fǎng)問(wèn)。(注1)
為了確保每個(gè)主設備訪(fǎng)問(wèn)從設備的延遲盡量短,在總線(xiàn)矩陣里實(shí)行循環(huán)調度優(yōu)先級方案:
• 循環(huán)調度仲裁策略使總線(xiàn)帶寬合理分配。
• 限定最大延時(shí)。
• 循環(huán)調度以1 次傳輸為單位。
當多個(gè)AHB 主設備試圖同時(shí)訪(fǎng)問(wèn)同一個(gè)AHB從設備時(shí),總線(xiàn)矩陣仲裁器介入以解決訪(fǎng)問(wèn)沖突。在下面的例子中CPU 和DMA1 均試圖訪(fǎng)問(wèn)SRAM1 以讀取數據。

如上述示例總線(xiàn)訪(fǎng)問(wèn)請求同時(shí)發(fā)生的情況下,就需要總線(xiàn)矩陣仲裁。為了解決這種問(wèn)題,需要應用循環(huán)調度策略:如果本次最后贏(yíng)得總線(xiàn)控制權的主設備是CPU,則在下一次訪(fǎng)問(wèn)中DMA1將贏(yíng)得總線(xiàn)控制權并首先訪(fǎng)問(wèn)SRAM1。CPU 隨后方可有權訪(fǎng)問(wèn)SRAM1。
這就表明,一個(gè)主設備的傳輸延時(shí)取決于其它等待請求訪(fǎng)問(wèn)AHB 從設備的主設備數量。下面的例子是五個(gè)主設備試圖同時(shí)訪(fǎng)問(wèn)SRAM1的情形:

DMA1再次獲得總線(xiàn)矩陣訪(fǎng)問(wèn)權并訪(fǎng)問(wèn)SRAM1 的延時(shí)等于其它等待請求的所有主設備的執行時(shí)間之和。
我們再來(lái)看看進(jìn)行總線(xiàn)矩陣仲裁可能導致的DMA傳輸延時(shí)最差情況。
主設備DMA端口進(jìn)行一次數據傳輸會(huì )遭遇的延時(shí)取決于其它主設備的傳輸類(lèi)型和長(cháng)度。比如,我們結合上面的DMA1 & CPU 的例子,它們并行訪(fǎng)問(wèn)SRAM。 DMA傳輸延時(shí)將隨著(zhù)CPU 數據傳輸事務(wù)長(cháng)度而變化。如果總線(xiàn)訪(fǎng)問(wèn)首先給予CPU 且不是執行單次數據加載/存儲,DMA 訪(fǎng)問(wèn)SRAM 的等待時(shí)間可能從一個(gè)AHB 周期(單次數據加載/ 存儲時(shí)間)延長(cháng)為N 個(gè)AHB 周期,這里N 為CPU 數據傳輸事務(wù)中數據的數量。
CPU 鎖定AHB 總線(xiàn)以保持其訪(fǎng)問(wèn)總線(xiàn)的所有權,減少了多次加載/ 存儲操作過(guò)程中的延時(shí)以及進(jìn)入中斷的延時(shí)。這提高了固件的響應能力,但是可能導致DMA 數據傳輸事務(wù)的延遲。
DMA1 與CPU 并行訪(fǎng)問(wèn)SRAM 的延時(shí)取決于傳輸類(lèi)型:
• 中斷(上下文保護)發(fā)起的CPU 傳輸:8 個(gè)AHB 周期;
• LDM/STM 指令發(fā)起的CPU 傳輸:14 個(gè)AHB 周期(注2)
---在多達14 個(gè)寄存器與存儲器之間進(jìn)行傳輸;

上圖詳細描述了一個(gè)因中斷進(jìn)入而導致DMA多周期傳輸延遲的情形。DMA 存儲器端口被觸發(fā),發(fā)出存儲器訪(fǎng)問(wèn)請求。經(jīng)過(guò)仲裁, AHB 總線(xiàn)未授權DMA1 存儲器端口訪(fǎng)問(wèn),而由CPU 來(lái)訪(fǎng)問(wèn)總線(xiàn)??梢钥吹皆诜?wù)DMA 請求之前有一段額外的延時(shí)。這段中斷發(fā)起的CPU 傳輸,耗時(shí)為8 個(gè)AHB 周期。
不難理解,當同時(shí)對一個(gè)從設備進(jìn)行尋址且數據傳輸事務(wù)長(cháng)度不是一個(gè)數據單元時(shí),其他主設備(如DMA2,USB_HS, Ethernet…)也會(huì )碰到類(lèi)似情形。所以,為了提高DMA 對總線(xiàn)矩陣的訪(fǎng)問(wèn)性能,要盡量回避總線(xiàn)競爭。
以上內容主要取材于ST官方應用筆記文檔AN4031的一部分。該筆記里除了上述內容外,還對STM32F2/F4的DMA傳輸路徑、DMA傳輸時(shí)間的估算、DMA編程都有較為細致的介紹。我這里算是拋磚引玉,有興趣的話(huà)可以去www.stmcu.com.cn 的設計資源區搜索下載AN4031。
(注1)并非所有主設備訪(fǎng)問(wèn)從設備都得經(jīng)過(guò)總線(xiàn)矩陣,細心的人可能看到了有些主設備與從設備間有直通通道。細節詳見(jiàn)STM32芯片相關(guān)參考手冊。
(注2) 通過(guò)配置編譯器,將加載/ 存儲多重指令分解為單個(gè)加載/ 存儲指令,可以降低由LDM/STM 發(fā)起的傳輸的延時(shí)。

評論