天天看點

STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

1、總線

系統結構

系統包括一個由多個互相連接配接的32位AHB總線組成的矩陣

  • 8個主總線
– Cortex-M4 with FPU core I-bus, D-bus and S-bus
    – DMA1 memory bus
    – DMA2 memory bus
    – DMA2 peripheral bus
    – Ethernet DMA bus
    – USB OTG HS DMA bus
           
  • 7個從總線:
– Internal Flash memory ICode bus
    – Internal Flash memory DCode bus
    – Main internal SRAM1 (112 KB)
    – Auxiliary internal SRAM2 (16 KB)
    – AHB1 peripherals including AHB to APB bridges and APB peripherals
    – AHB2 peripherals
    – FSMC
           

總線矩陣也能夠提供主到從的通路,進而使能并發通路,甚至在多個高速外設同時工作的時候也能夠高效工作. 64Kbyte的CCM(core coupled memory)資料RAM不是總線矩陣的一部分,隻能通過CPU來通路.

總線類型

  • I-bus
    該總線連接配接帶有FPU的Cortex-M4核心的指令總線到BusMatrix. 該總線被核心用于取指令操作. 該總線的控制目标是一塊包括代碼的記憶體 (internal Flash memory/SRAM or external memories through the FSMC/FMC).
  • D-bus
    該總線連接配接帶有FPU的Cortex-M4核心的資料總線到64Kbyte的CCM資料RAM再到BusMatrix. 該總線被核心用于下載下傳代碼與調試. 該總線的控制目标是一塊包括代碼或者資料的記憶體 (internal Flash memory or external memories through the FSMC/FMC).
  • S-bus
    該總線連接配接帶有FPU的Cortex-M4核心的系統總線到BusMatrix. 該總線被用來通路加載到SRAM或者外設的資料. 指令也可能通過該總線取得 (沒有ICode來的高效). 該總線的控制目标有:内部的SRAM1, SRAM2 and SRAM3, AHB1的外設(包括APB外設), AHB2的外設和通過FSMC/FMC的外部記憶體
  • BusMatrix
    BusMatrix 管理主總線之間的通路仲裁. 仲裁使用循環算法

總線結構圖:

STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

2、記憶體分布

  • 程式設計空間(代碼空間), 資料空間, 寄存器和I/O端口被組織在同一個線性的4Gb空間中。所有的資料都按照小端存儲
  • 可尋址記憶體空間被分為8個塊, 每塊包括512MB
  • 所有沒有被配置設定到片上記憶體或者片上外設的空間都被成為”reserved”

嵌入式SRAM

  • STM32F407ZG配置了4 Kbytes的備份 SRAM,192 Kbytes的系統SRAM。
  • 嵌入式SRAM可以以位元組,半字,字的方式通路,可以以CPU的速度進行無需等待的通路,嵌入式SRAM被分為以下3個塊:
    • SRAM1 和 SRAM2 映射到 0x2000 0000 位址并且可以被所有的 AHB 總線通路.
    • SRAM3 (隻有 STM32F42xxx 與 STM32F43xxx 系列可用) 映射到 0x2002 0000 位址處并且可以被所有的 AHB 總線通路
    • CCM (core coupled memory) 映射到 0x1000 0000 位址處隻能夠通過D-bus被CPU通路

位帶操作

在STM32中提供了兩個位帶操作域以及對應的位帶别名域

位帶操作域 位帶别名域
SRAM的低1M位元組 : 0x2000 0000~0x200F FFFF 0x2200 0000~0x23FF FFFC
外設的低1M位元組 : 0x4000 0000~0x400F FFFF 0x4200 0000~0x43FF FFFC

位帶操作公式:

例子:

=  + (*) + (*)
/* 對0x22006008的讀寫就實作了對0x2000 0300處第2個bit的讀寫 */
/* 同理,若要對0x40000000位址塊進行位操作,需要把上面式子右邊的0x22000000換成0x42000000 */
           

以後我們想直接操作某個寄存器的某一位的時候,隻需要找到這一位對應的别名位址,然後對别名位址進行讀寫即可實作對這一位的讀寫。如果想實作這中操作的話,隻需要定義宏即可,例如下面的:

#define REGISTER_BIT_BAND(ofs, bit_num) (x22000000 + (ofs << ) + (bit_num << ))
#define WRITE_R_BIT_BAND(ofs, bit_num, stat) (*((volatile unsigned int *)REGISTER_BIT_BAND(ofs, bit_num)) = stat)
//上面兩個宏可以實作對寄存器位帶域的操作
           

核心程式設計手冊給出的M系列4GB記憶體分布

STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

3、啟動配置

啟動方式

Boot mode selection pins Boot mode Aliasing
BOOT1 BOOT0
x Main Flash memory Main Flash memory is selected as the boot space
1 System memory System memory is selected as the boot space
1 1 Embedded SRAM Embedded SRAM is selected as the boot space

我的闆子啟動是在main flash memory,由前面的ARM編譯工具一節可以知道代碼從0x08000000開始運作,這個也是由分散加載檔案指定的,也是闆子上面main flash實際位址

實體位址重映射

  • 下面的記憶體空間可以被重映射:
- Main Flash memory
- System memory
- Embedded SRAM1 ( KB)
- FSMC bank  (NOR/PSRAM  and )
           

映射表為

STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

映射到0x00000000位址處的記憶體塊可以由SYSCFG控制器的(SYSCFG_MEMRMP)寄存器低二位決定,如下表所示

bit1 bit0 memory selected
Main Flash memory mapped at 0x0000 0000
1 System Flash memory mapped at 0x0000 0000
1 FSMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x0000 0000
1 1 Embedded SRAM (SRAM1) mapped at 0x0000 0000從表中

可以看出來從main flash啟動的時候flash memory會被重新映射到0位址開始處,大小為1MB,但是我的闆子依然是從0x08000000位址處運作代碼的,現在由表中資料可以看出來從0位址開始運作也是可以的,可能是為了适應不同的啟動方式,是以才從0x08000000位址處開始運作系統代碼的。如果要從其他的地方運作flash memory中的代碼,隻需要在那種方式對應的被重映射到0位址空間代碼段開頭加上一個跳轉語句,直接跳轉到0x08000000位址處就可以運作代碼了

4、嵌入式flash memory

接口特性:

  • Flash memory 讀操作
  • Flash memory 程式設計/擦除操作
  • 讀/寫保護
  • 指令預取
  • I-Code上面有 64 個 128 位寬的快速存取線
  • I-Code上面有 8 個 128 位寬的快速存取線
STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

flash memory特性:

  • 1M byte容量
  • 128位的讀資料位寬
  • 支援 Byte, half-word, word and double word 寫入
  • 支援扇區與塊擦除
  • 支援記憶體組織
    • flash memory可以被組織成下面的樣子:
      • – main memory 分為 4 個 16 Kbytes 大小扇區, 1 個 64 Kbytes 大小扇區,和 7 個 128 Kbytes 大小扇區
      • – 不同啟動裝置對應相應的system memory
      • – 512 OTP (一次性程式設計) bytes
      • – 可選配置讀寫保護
  • 低電量模式

記憶體分布圖

STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

額外補充時鐘一節内容:

VOS 在 PWR_CR 寄存器的 bit15 位被設定

當 VOS = ‘0’, fHCLK 最大為 144 MHz.

當 VOS = ‘1’, fHCLK 最大為 168 MHz.

等待周期

等待周期指的是CPU通路Flash的等待時間,CPU通路Flash的周期就是等待周期加上1,這個與Flash的硬體性能有關

STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

如果覺得本文章不錯,請關注微信公衆号-YellowMax多多支援,檢視更多文章

歡迎轉發、關注、點贊一波

STM32之記憶體分布與總線1、總線總線類型2、記憶體分布3、啟動配置4、嵌入式flash memory額外補充時鐘一節内容:

繼續閱讀