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