一、前言
本篇介紹STM32芯片內部的總線系統(tǒng)結構,嵌入式芯片內部的總線和計算機總線類似,先來看一下通常定義下計算機總線定義,即計算機的總線是一種內部結構,它是cpu、內存、輸入、輸出設備傳遞信息的公用通道,主機的各個部件通過總線相連接,外部設備通過相應的接口電路再與總線相連接,從而形成了計算機硬件系統(tǒng)。在計算機系統(tǒng)中,各個部件之間傳送信息的公共通路叫總線,微型計算機是以總線結構來連接各個功能部件的。
圖1 計算機總線結構
計算機設備和設備之間傳輸信息的公共數(shù)據通道??偩€是連接計算機硬件系統(tǒng)內多種設備的通信線路,它的一個重要特征是由總線上的所有設備共享,可以將計算機系統(tǒng)內的多種設備連接到總線上。如果是某兩個設備或設備之間專用的信號連線,就不能稱之為總線。
因此STM32這類嵌入式芯片的總線可概括理解為:是各種信號線的集合,總線可以劃分為數(shù)據總線、地址總線和控制總線,分別用來傳輸數(shù)據、數(shù)據地址和控制信號。
二、總線基礎知識概述
圖2 總線基礎知識
(1)、總線在芯片中的角色
ARM公司負責提供設計內核,而其他外設則為芯片商設計并使用,ARM收取其專利費用而不參與其他經濟活動,半導體芯片廠商拿到內核授權后,根據產品需求,添加各類組件,生產芯片售賣。圖3為STM32的組成示意圖,其中Cortex-M3內核、調試系統(tǒng)都是ARM公司設計,內部總線、外設、存儲、時鐘復位等都由ST公司開發(fā)。由圖3中可以明顯看出總線是cpu、內存、外設傳遞信息的公用通道,芯片上的各個部件通過總線相連接。
圖3 STM32芯片簡要結構圖
(2)、總線的類型
A、數(shù)據總線DB用來傳送數(shù)據信息,是雙向的。CPU既可通過DB從內存或輸入設備讀入數(shù)據,又可通過DB將內部數(shù)據送至內存或輸出設備。DB的寬度決定了CPU和計算機其他設備之間每次交換數(shù)據的位數(shù)。數(shù)據總線的位數(shù)是微型計算機的一個重要指標,通常與微處理的字長相一致。需要指出的是,數(shù)據的含義是廣義的,它可以是真正的數(shù)據,也可以是指令代碼或狀態(tài)信息,有時甚至是一個控制信息,因此,在實際工作中,數(shù)據總線上傳送的并不一定僅僅是真正意義上的數(shù)據。
B、地址總線AB用于傳送CPU發(fā)出的地址信息,是單向的。傳送地址信息的目的是指明與CPU交換信息的內存單元或I/O設備。存儲器是按地址訪問的,所以每個存儲單元都有一個固定地址,要訪問1MB存儲器中的任一單元,需要給出1M個地址,即需要20位地址(2^20=1M)。一般來說,若地址總線為n位,則可尋址空間為2^n字節(jié)。因此,地址總線的寬度決定了CPU 的最大尋址能力。
C、控制總線CB用來傳送控制信號、時序信號和狀態(tài)信息等,是雙向的。其中有的是CPU向內存或外部設備發(fā)出的信息,如讀/寫信號,片選信號、中斷響應信號等;有的是內存或外部設備向CPU發(fā)出的信息,中斷申請信號、復位信號、總線請求信號、設備就緒信號等。顯然,CB中的每一條線的信息傳送方向是一定的、單向的,但作為一個整體則是雙向的。所以,凡涉及到控制總線CB,均是以雙向線表示。
(3)、總線的指標
A、總線的位寬
總線的位寬指的是總線能同時傳送的二進制數(shù)據的位數(shù),或數(shù)據總線的位數(shù),即32位、64位等總線寬度的概念??偩€的位寬越寬,每秒鐘數(shù)據傳輸率越大,總線的帶寬越寬。
B、總線的工作頻率
總線的工作時鐘頻率以MHZ為單位,工作頻率越高,總線工作速度越快,總線帶寬越寬。
C、總線的帶寬(總線數(shù)據傳輸速率)
總線的帶寬指的是單位時間內總線上傳送的數(shù)據量,即每秒鐘傳送MB的最大穩(wěn)態(tài)數(shù)據傳輸率 。與總線密切相關的兩個因素是總線的位寬和總線的工作頻率,它們之間的關系:
總線的帶寬=總線的工作頻率*總線的位寬/8
或者 總線的帶寬=(總線的位寬/8)/總線周期
(4)、AHB和APB
AMBA(Advanced Microprocessor Bus Architecture)是ARM公司提出的一種開放性的SoC總線標準,現(xiàn)在已經廣泛的應用于RISC的內核上了。AMBA定義了一種多總線系統(tǒng)(multilevel busing system),包括系統(tǒng)總線和等級稍低的外設總線。 AMBA支持32位、64位、128位的數(shù)據總線,和32位的地址總線,同時支持byte和half-word設計。 它定義了兩種總線:
AHB(Advanced High-performance Bus)先進的高性能總線,也叫做ASB(Advanced System Bus)。APB(Advanced peripheral Bus)先進的外設總線 AHB和ASB其實是一個東西,是高速總線, AHB總線的強大之處在于它可以將微控制器(CPU)、高帶寬的片上RAM、高帶寬的外部存儲器接口、DMA總線、各種擁有AHB接口的控制器等等連接起來構成一個獨立的完整的SOC系統(tǒng),不僅如此,還可以通過AHB-APB橋來連接APB總線系統(tǒng)。AHB可以成為一個完整獨立的SOC芯片的骨架。
APB是低速總線,主要負責外設接口 ,低速且低功率的外圍設備,用于低帶寬的周邊外設之間的連接,例如UART、SPI等,可針對外圍設備作功率消耗及復雜接口的最佳化。AHB和APB之間是通過Bridge(橋接器)連接的 。
圖4 AHB和APB連接關系
三、總線框架結構
圖5 總線框架結構內容
如圖6,以STM32F42XXX和STM32F43XXX器件總線系統(tǒng)架構為例。
圖6 STM32F42xxx和STM32F43xxx的總線系統(tǒng)架構
(1)、結構類型
STM32芯片是屬于哈佛架構,即數(shù)據和程序指令分別存儲,總線設計有一條指令總線(I-Bus)、一條數(shù)據總線(D-Bus),地址總線則與所有IO和外設相連,按照內核架構統(tǒng)一的存儲器映射表分配對應地址。
哈佛架構與馮諾依曼的最大區(qū)別在于:哈佛架構的數(shù)據總線,指令總線是分開獨立的,CPU通過Icode從Flash中取指令,再譯碼,得到數(shù)據的地址,再通過Dcode總線和SRAM進行數(shù)據交互。
哈佛架構的優(yōu)勢:并行體系結構,將程序指令和數(shù)據存儲在不同的存儲空間中,每個存儲器獨立編址、獨立訪問。哈佛架構的微處理器通常具有較高的執(zhí)行效率,其程序指令和數(shù)據指令分開組織和儲存的,執(zhí)行時可以預先讀取下一條指令。
(2)、總線模塊
A、總線矩陣
圖6中S是主控總線,M是被控總線,總線矩陣用于主控總線之間的訪問仲裁管理,仲裁采用循環(huán)調度算法。有了總線矩陣,就可以讓主設備和從設備進行并行訪問,提升了訪問效率,同時也降低了功耗。
需要注意的是,雖然總線矩陣使得多個主設備可以并行訪問不同的從設備,但在一個定義的時間段內,只有一個主設備擁有總線矩陣的控制權,如果有多個主設備同時出現(xiàn)總線請求時就得進行仲裁。所以有了總線仲裁器,就能保證每個時刻只有一個主設備通過總線矩陣對從設備進行訪問。
因為總線矩陣的存在,使得多個主設備可以并行訪問不同的從設備,增強了數(shù)據傳輸能力,提升了訪問效率,同時也改善了功耗性能。為了確保每個主設備訪問從設備的延遲盡量短,在總線矩陣里實行循環(huán)調度優(yōu)先級方案:
? 循環(huán)調度仲裁策略使總線帶寬合理分配。
? 限定最大延時。
? 循環(huán)調度以1次傳輸為單位。
圖中縱橫交錯的就是多層AHB總線矩陣,負責把上方主設備跟右邊從設備互聯(lián)起來。所謂AHB主設備是指CPU或DMA,由它們啟動總線訪問,即讀寫操作。那些響應主設備讀寫訪問的設備就是AHB從設備,比如存儲器、各類外設等。注意并非所有主設備訪問從設備都得經過總線矩陣,如圖中,有些主設備和從設備間有直通通道。
B、八條主控總線
CCM(Core Coupled Memory)是給F4內核專用的全速64KB RAM, 它們沒有經過總線矩陣, F4內核與之直接相連, 地址空間在0x1000_0000 ~ 0x1000_FFFF??梢杂米鞫褩R约?a target="_blank">高速運算的數(shù)據緩存;
I總線:此總線用于將 Cortex-M4F 內核的指令總線連接到總線矩陣。內核通過此總線獲取指令。此總線訪問的對象是包含代碼的存儲器(內部 Flash/SRAM 或通過 FSMC 的外部存儲器);
D總線:此總線用于將 Cortex-M4F 數(shù)據總線和 64 KB CCM 數(shù)據 RAM 連接到總線矩陣。內核通過此總線進行立即數(shù)加載和調試訪問。此總線訪問的對象是包含代碼或數(shù)據的存儲器(內部Flash 或通過 FSMC 的外部存儲器);
S總線:此總線用于將 Cortex-M4F 內核的系統(tǒng)總線連接到總線矩陣。此總線用于訪問位于外設或 SRAM中的數(shù)據。也可通過此總線獲取指令(效率低于 ICode)。此總線訪問的對象是112 KB、 64 KB 和 16 KB 的內部 SRAM、包括 APB 外設在內的 AHB1 外設、 AHB2 外設以及通過 FSMC 的外部存儲器;
S3,S4:DMA存儲器總線:此總線用于將 DMA 存儲器總線主接口連接到總線矩陣。DMA 通過此總線來執(zhí)行存儲器數(shù)據的傳入和傳出。此總線訪問的對象是數(shù)據存儲器:內部 SRAM( 112 KB、 64 KB、 16 KB)以及通過 FSMC 的外部存儲器;
S5:DMA外設總線,此總線用于將 DMA 外設主總線接口連接到總線矩陣。DMA 通過此總線訪問 AHB 外設或執(zhí)行存儲器間的數(shù)據傳輸。此總線訪問的對象是 AHB 和 APB 外設以及數(shù)據存儲器:內部SRAM以及通過 FSMC 的外部存儲器;
S6:以太網 DMA 總線,此總線用于將以太網 DMA 主接口連接到總線矩陣。以太網 DMA通過此總線向存儲器存取數(shù)據。此總線訪問的對象是數(shù)據存儲器:內部 SRAM( 112 KB、 64 KB和 16 KB)以及通過FSMC的外部存儲器;
S7: USB OTG HS DMA 總線,此總線用于將 USB OTG HS DMA 主接口連接到總線矩陣。USB OTG DMA 通過此總線向存儲器加載/存儲數(shù)據。此總線訪問的對象是數(shù)據存儲器:內部 SRAM(112 KB、 64 KB 和 16 KB)以及通過 FSMC 的外部存儲器。
C、七條被控總線
內部 FLASH ICode 總線:是內核與內部閃存存儲器(FLASH)指令接口之間的連接的總線,實現(xiàn)指令的預取功能;
內部 FLASH DCode 總線:將內核與內部閃存存儲器(FLASH)的數(shù)據接口連接起來的總線,實現(xiàn)數(shù)據讀取;
主要內部 SRAM1(112KB);
輔助內部 SRAM2(16KB);
輔助內部 SRAM3(64KB) (僅適用 STM32F42xx 和 STM32F43xx 系列器件);
AHB1外設和AHB2外設:不同時鐘頻率的用于高性能模塊(如CPU、DMA和DSP等)之間的連接總線;
FSMC可變靜態(tài)存儲控制器:是STM32系列采用的一種新型的存儲器擴展技術,F(xiàn)SMC能夠根據不同的外部存儲器類型,發(fā)出相應的數(shù)據/地址/控制信號類型以匹配信號的速度,從而使得STM32系列微控制器不僅能夠應用各種不同類型、不同速度的外部靜態(tài)存儲器,而且能夠在不增加外部器件的情況下同時擴展多種不同類型的靜態(tài)存儲器,滿足系統(tǒng)設計對存儲容量、產品體積以及成本的綜合要求。能夠與同步或異步存儲器和 16 位 PC 存儲器卡連接,STM32的 FSMC接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存儲器。
(3)、總線交互
指令總線和數(shù)據總線如6圖所示只會負責對應存儲地址范圍內的傳輸,剩下片內外設和外界設備則是需要通過系統(tǒng)總線(AHB)進行數(shù)據的傳輸,對于低速外設則是掛載在相對較慢的外設總線(APB)總線,APB總線通過一個橋接器最終還是會掛載到AHB總線上。
主設備和從設備通過各自的總線兩兩相交連接,圖6中兩條總線相交且為圓圈的地方,表示這兩條總線對應的主設備可以訪問從設備,如I總線(指令總線),只有跟 M0、M2和M6這三根被控總線交叉的時候才有圓圈,就表示I總線只能跟這三根被控總線通信,這樣就可以知道stm32f4的啟動有三種分別是FLASH、內部SRAM、外部存儲FSMC。
當多個AHB主設備試圖同時訪問同一個AHB從設備時,總線矩陣仲裁器介入以解決訪問沖突。在下面的例子中CPU和DMA1均試圖訪問SRAM1以讀取數(shù)據。
圖7 CPU和DMA1請求訪問SRAM1
如上述示例總線訪問請求同時發(fā)生的情況下,就需要總線矩陣仲裁。為了解決這種問題,需要應用循環(huán)調度策略:如果本次最后贏得總線控制權的主設備是CPU,則在下一次訪問中DMA1將贏得總線控制權并首先訪問SRAM1。CPU隨后方可有權訪問SRAM1。
這就表明,一個主設備的傳輸延時取決于其它等待請求訪問AHB從設備的主設備數(shù)量。下面的例子是五個主設備試圖同時訪問SRAM1的情形:
圖8 五個主設備請求SRAM
DMA1再次獲得總線矩陣訪問權并訪問SRAM1的延時等于其它等待請求的所有主設備的執(zhí)行時間之和。
我們再來看看進行總線矩陣仲裁可能導致的DMA傳輸延時最差情況。主設備DMA端口進行一次數(shù)據傳輸會遭遇的延時取決于其它主設備的傳輸類型和長度。比如,我們結合上面的DMA1 & CPU的例子,它們并行訪問SRAM。DMA傳輸延時將隨著CPU數(shù)據傳輸事務長度而變化。如果總線訪問首先給予CPU且不是執(zhí)行單次數(shù)據加載/存儲,DMA訪問SRAM的等待時間可能從一個AHB周期(單次數(shù)據加載/存儲時間)延長為N個AHB周期,這里N為CPU數(shù)據傳輸事務中數(shù)據的數(shù)量。
CPU鎖定AHB 總線以保持其訪問總線的所有權,減少了多次加載/ 存儲操作過程中的延時以及進入中斷的延時。這提高了固件的響應能力,但是可能導致DMA數(shù)據傳輸事務的延遲。
DMA1與CPU并行訪問SRAM的延時取決于傳輸類型:
? 中斷(上下文保護)發(fā)起的CPU傳輸:8個AHB周期;
? LDM/STM 指令發(fā)起的CPU傳輸:14個AHB周期;
---在多達14 個寄存器與存儲器之間進行傳輸;
圖9 中斷發(fā)起的傳輸帶來的DMA傳輸延時
上圖詳細描述了一個因中斷進入而導致DMA多周期傳輸延遲的情形。DMA存儲器端口被觸發(fā),發(fā)出存儲器訪問請求。經過仲裁, AHB總線未授權DMA1存儲器端口訪問,而由CPU來訪問總線??梢钥吹皆诜誅MA請求之前有一段額外的延時。這段中斷發(fā)起的CPU傳輸,耗時為8個AHB周期。
不難理解,當同時對一個從設備進行尋址且數(shù)據傳輸事務長度不是一個數(shù)據單元時,其他主設備(如DMA2,USB_HS, Ethernet…)也會碰到類似情形。所以,為了提高DMA對總線矩陣的訪問性能,要盡量回避總線競爭。
四、總結
本篇對STM32芯片內部的總線機制進行了一系列的介紹,部分信息來源自STM32的官方資料中對芯片系統(tǒng)架構的介紹。通過對總線概念的闡述可以去更好的為進一步認識STM32內部總線框架提供基礎,從STM32的總線框架中,可以了解到STM32芯片內部總線的設計模型和基本的工作原理,從而對STM32的芯片總線內部結構有一個初步的認知。
-
STM32芯片
+關注
關注
0文章
38瀏覽量
4356
發(fā)布評論請先 登錄
相關推薦
評論