完整教程下載地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980
第3章 STM32H7整體把控
初學STM32H7一定要優先整體把控晶片的框架,不要急於瞭解單個外設的功能。
3.1 初學者重要提示
3.1 STM32H7框圖
3.2 STM32H7各個型號的區別
3.2 STM32H7匯流排框圖和時鐘
3.3 STM32H7的AXI 匯流排
3.4 STM32H7的FLASH
3.5 STM32H7的RAM
3.6 總結
3.1 初學者重要提示
- 學習一款新的晶片,優先掌握系統框架是比較重要的,建議逐漸養成這種學習習慣,然後各個擊破即可。
- 本章節提供了多張STM32H7的框圖,這些框圖都非常具有代表性。很多時候記憶知識點比較費腦子,記錄這些框圖是一種非常好的方式。
- 對於本章節提供的部分知識點,無法理解透徹,暫時沒有關係。隨著後面的深入學習,基本都可以掌握。
- 重要的MPU和Cache知識分別放在了第23章和第24章。
3.2 STM32H7硬體框圖
學習一款新的晶片,需要優先了解一下它的整體功能設計。需要的資料主要是來自官網和資料手冊,比如我們V7開發板使用的STM32H743XIH6,直接在官方地址:連結(這是超連結)就可以看到對此晶片所做的介紹,頁面中有一個如下的框圖,對於瞭解STM32H7整體設計非常方便。
再稍微詳細點,就需要大家讀頁面上的”Key Features”,就是下圖所示的內容:
或者直接看資料手冊開頭的章節即可,也進行了介紹,內容基本都是差不多的,如下圖所示(部分截圖):
通過框圖和Key Features,大家可以方便地瞭解STM32H7的FLASH、RAM大小以及各種自帶外設的資訊。
3.3 STM32H7各個型號的區別
涉及到晶片選型的時候,需要大家瞭解各個型號的區別。對此ST有一個專門的檔案STM32H7x3 MCUs High-performance line,在連結(這是一個超連結)裡面可以找到。此檔案裡面有簡單的對比,只是內容比較簡單,僅兩頁,不過也言簡意賅。最主要的是下面的這個截圖:
通過這個截圖可以方便地瞭解不同型號的引腳數、封裝、FLASH大小、RAM大小以及是否帶HW CRYPTO硬體加密的區別。
需要了解更詳細的對比資訊,可以看資料手冊。任意下載一個型號的資料手冊,在資料手冊的的Table 2裡面有詳細的對比,如下圖所示(部分截圖):
使用ST提供的軟體STMCUFinder或者STM32CubeMX也可以做對比,只是沒有上面的表格這麼方便,可以一目瞭然。
3.4 STM32H7匯流排框圖和時鐘
STM32H7的資料手冊裡面提供了一張非常棒的框圖,大家可以方便地檢視每個匯流排的時鐘速度和這個匯流排所掛的外設。這個在大家配置外設時鐘分頻的時候還是非常有用的,因為外設的時鐘分頻就是建立在所掛的匯流排速度(大家直接在資料手冊裡面檢索Figure 1就可以找到)。
比如我們想得到不同定時器的主頻,通過上面的框圖,可以方便地獲得如下資訊:
SYSCLK(Hz) = 400000000 (CPU Clock)
HCLK(Hz) = 200000000 (AXI and AHBs Clock)
AHB Prescaler = 2
D1 APB3 Prescaler = 2 (APB3 Clock 100MHz)
D2 APB1 Prescaler = 2 (APB1 Clock 100MHz)
D2 APB2 Prescaler = 2 (APB2 Clock 100MHz)
D3 APB4 Prescaler = 2 (APB4 Clock 100MHz)
因為APB1 prescaler != 1, 所以 APB1上的TIMxCLK = APB1 x 2 = 200MHz;
因為APB2 prescaler != 1, 所以 APB2上的TIMxCLK = APB2 x 2 = 200MHz;
APB4上面的TIMxCLK沒有分頻,所以就是100MHz;
APB1 定時器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13, TIM14,LPTIM1
APB2 定時器有 TIM1, TIM8 , TIM15, TIM16,TIM17
APB4 定時器有 LPTIM2,LPTIM3,LPTIM4,LPTIM5
3.5 STM32H7的AXI匯流排
AXI匯流排在STM32H7中有著舉足輕重的作用。高併發性全靠這個匯流排了,先來看下AXI匯流排的框架:
3.5.1 匯流排系統框架
下面這個截圖比較有代表性,可以幫助大家理解STM32H7匯流排系統。
這個圖可以方便識別匯流排所外掛的外設,共分為三個域:D1 Domain,D2 Domain和D3 Domain。
D1 Domain
D1域中的各個外設是掛在64位AXI匯流排組成6*7的矩陣上。
- 6個從介面端ASIB1到ASIB6
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 匯流排。
- 7個主介面端AMIB1到AMIB7
外接的從裝置是AHB3匯流排,Flash A,Flash B,FMC匯流排,QSPI和AXI SRAM。另外AHB3也是由AXI匯流排分支出來的,然後再由AHB3分支出APB3匯流排。
D2 Domain
D2域的各個外設是掛在32位AHB匯流排組成10*9的矩陣上。
- 10個從介面
外接的主控是D1-to-D2 AHB 匯流排,AHBP匯流排,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
- 9個主介面
外接的從裝置是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB2,APB3,D2-to-D1 AHB匯流排和D2-to-D3 AHB匯流排。
D3 Domain
D3域的各個外設是掛在32位AHB匯流排組成3*2的矩陣上。
- 3個從介面
外接的主控D1-to-D3 AHB匯流排,D2-to-D3 AHB匯流排和BDMA。
- 2個主介面
外接的從裝置是AHB4,SRAM4和Bckp SRAM。另外AHB4也是這個匯流排矩陣分支出來的,然後再由AHB4分支出APB4匯流排。
這三個域之間也是有互聯的,可以是:
- D1域到D2域的D1-to-D2 AHB bus
允許D1域中的主介面外設訪問D2域裡面的從介面外設。比如D1域裡面的DMA2D訪問D2域裡面的SRAM1。
- D2域到D1域的D2-to-D1 AHB bus
允許D2域中的主介面外設訪問D1域裡面的從介面外設。比如D2域裡面的DMA2訪問D1域裡面的AXI SRAM。
- D1域到D3域的D1-to-D3 AHB bus
允許D1域中的主介面外設訪問D3域裡面的從介面外設。比如D1域裡面的DMA2D訪問D3域裡面的SRAM4。
- D2域到D3域的D2-to-D3 AHB bus。
允許D1域中的主介面外設訪問D2域裡面的從介面外設。比如D2域裡面的DMA2訪問D3域裡面的SRAM4。
有了這些知識後,下面我們重點了解AXI匯流排矩陣。
3.5.2 AXI匯流排特色
AXI支援高頻率、高效能的系統設計:
- 支援高頻寬,低延遲設計。
- 提供高頻操作,無需複雜的匯流排橋。
- 滿足各種元件的介面需求。
- 適用於具有高初始訪問延遲的記憶體控制器。
- 為互連架構的實現提供了靈活性。
- 與現有的AHB和APB介面向後相容。
AXI匯流排的關鍵特性:
- 獨立的地址、控制和資料線。
- 支援非位元組對齊方式傳輸。
- 基於起始地址的突發傳輸。
- 分開的讀和寫資料通道,且提供DMA傳輸。
- 支援發起多個地址。
- 支援無序傳輸。
- 允許新增暫存器,以提供時序收斂。
- AXI匯流排
關於AXI匯流排,ARM有一篇古文觀止級文件《AXI4_specification》,已經將其放在了論壇:http://forum.armfly.com/forum.php?mod=viewthread&tid=87340 。
3.5.3 AXI匯流排簡介
通過下面的框圖,我們再進一步的認識一下AXI匯流排。
通過上面的截圖,我們可以看到,AXI匯流排有6個從介面ASIBs(AMBA slave interface blocks)和7個主控介面AMIBs(AMBA master interface blocks)。
針對從介面ASIBs,描述如下:
重點注意最後一列,STM32H7參考手冊裡面原始的描述是R/W issuing,這裡將其翻譯為讀/寫發起能力。比如輸入通道IN5連線的主控DMA2D,支援的讀發起能力是2,寫發起能力是1。讀發起能力是2該如何理解呢?這裡的含義是存在兩路讀訊號同時進行(因為AXI介面有一個FIFO的功能,可供同時進行,更深入的認識有待研究),反映到DMA2D的實際應用中,就是DMA2D同時讀取前景色和背景色的快取區做Alpha融合之類的操作。寫操作同理,DMA2D的寫發起能力僅支援一路。
針對主控介面AMIBs,描述如下:
跟上面表格的含義是一樣的,同樣重點注意最後一列,這裡多了一個總接收能力(Total acceptance),也就是讀發起能力和寫發起能力同時執行的情況。
3.5.4 AXI匯流排優先順序程式設計
由於存在多個ASIB從介面訪問AMIB主控的問題,這就涉及到誰先誰後等問題。所以AXI匯流排矩陣就做了一個基於優先順序的仲裁方案。每個ASIB介面支援讀通道和寫通道分別設定,優先順序從0到15。數值越大,優先順序越高,預設情況都是優先順序0。如果有兩個傳輸同時到達AMIB主控介面,那麼優先順序高的ASIB介面傳輸優先處理;如果優先順序相同的話,根據LUR方案選擇(least recently-used最近最少使用情況)。
大家在實際應用中,可以根據實際情況進行設定,一般情況下使用預設值即可。
3.6 STM32H7的匯流排互聯
STM32H7的匯流排矩陣四通八達,但不是任意Bus Master匯流排主控端和Bus Slave裝置端都可以相互通訊的:
黑色加粗字型是64位匯流排(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字型是32位匯流排。
訪問通路(每個小方塊裡面的字元)
任何有數字的表示有訪問通路。
短橫槓“-”表示不可訪問。
有灰色陰影的表示有實用價值的訪問通路。
表格中具體數值所代表的含義
D=direct
1=via AXI bus matrix
2=via AHB bus matrix in D2
3=via AHB bus matrix in D3
4=via AHB/APB bridge in D1
5=via AHB/APB bridge in D2
6=via AHB/APB bridge in D3
7=via AHBS bus of Cortex-M7
多個數值組合 = 互連路徑以數字的順序經過多個矩陣或/和橋。
匯流排訪問型別
普通字型表示32位匯流排。
斜體表示32位匯流排主機端/ 64位匯流排從機端。
粗體表示64位匯流排。
當前要對這個圖有個瞭解,後面章節講解各個外設的時候要用到,比如DTCM和ITCM不支援DMA1,DMA2和BDMA,僅支援MDMA。
3.7 STM32H7的FLASH
首次學習STM32H7,要掌握以下幾點認識即可:
1、雙BANK,每個BANK的頻寬都是64bits,如下圖所示:
2、H7中Flash的延遲和主頻關係。
H7中已經沒有F1和F4系列中的ART Chrome加速,通過H7中的Cache加速即可。具體延遲數值和主頻關係如下:
對於上面的表格,大家可以看到,當延遲等待設定為0的時候,即無等待,單週期訪問,速度可以做到70MHz。增加1個Flash週期後,訪問速度可以做到140MHz。當增加到3個或4個Flash週期後,最高速度可以做到225MHz。
3、Flash程式設計操作(寫)最好以256bits為單位進行,應用中也可以小於256bits,但是容易造成ECC校驗出問題,所以不推薦。Flash讀操作支援64bits,32bits,16bits和8bits。
4、Flash支援ECC校驗,每256bits配10bit的ECC位,可以檢測到1個bit並糾正或者檢測2個bit。隨著晶片的製造工藝水平越高,帶電粒子能產生的位翻轉就越多,此時的ECC是必須要有的,一般可以糾正1-2個bit。安全等級高的Flash類儲存器和RAM類都是必須要帶ECC的。
- ECC相關知識
關於ECC方面的知識,專門整理了一個帖子:
http://forum.armfly.com/forum.php?mod=viewthread&tid=86777 。
3.8 STM32H7的RAM
(注,學習本小節,優先回顧本章節3.5.1小節的框圖,另外H7的RAM區也是支援硬體ECC的)
STM32H7的RAM區分為好幾個部分,下面分別進行說明:
TCM區
TCM : Tightly-Coupled Memory 緊密耦合記憶體 。ITCM用於執行指令,也就是程式程式碼,DTCM用於資料存取,特點是跟核心速度一樣,而片上RAM的速度基本都達不到這個速度,所以有降頻處理。
速度:400MHz。
DTCM地址:0x2000 0000,大小128KB。
ITCM地址:0x0000 0000,大小64KB。
AXI SRAM區
位於D1域,資料頻寬是64bit,掛在AXI匯流排上。除了D3域中的BDMB主控不能訪問,其它都可以訪問此RAM區。
速度:200MHz。
地址:0x2400 0000,大小512KB。
用途:用途不限,可以用於使用者應用資料儲存或者LCD視訊記憶體。
SRAM1,SRAM2和SRAM3區
位於D2域,資料頻寬是32bit,掛在AHB匯流排上。除了D3域中的BDMB主控不能訪問這三塊SRAM,其它都可以訪問這幾個RAM區。
速度:200MHz。
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用於D2域中的DMA緩衝,也可以當D1域斷電後用於執行程式程式碼。
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用於D2域中的DMA緩衝,也可以用於使用者資料存取。
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用於乙太網和USB的緩衝。
SRAM4區
位於D3域,資料頻寬是32bit,掛在AHB匯流排上,大部分主控都能訪這塊SRAM區。
速度:200MHz。
地址:0x3800 0000,大小64KB。
用途:用途不限,可以用於D3域中的DMA緩衝,也可以當D1和D2域進入DStandby待機方式後,繼續儲存使用者資料。
Backup SRAM區
備份RAM區,位於D3域,資料頻寬是32bit,掛在AHB匯流排上,大部分主控都能訪問這塊SRAM區。
速度:200MHz。
地址:0x3880 0000,大小4KB。
用途:用途不限,主要用於系統進入低功耗模式後,繼續儲存資料(Vbat引腳外接電池)。
3.9 總結
本章節就為大家講解這麼多,讓大家對STM32H7有個整體的認識,後面章節將逐個進行學習。