中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

【STM32H743IIT6 系列】理清 xxRAM、xxROM、xxFlash 的核心(xin)作(zuo)用(yong),附 H7 系列五種內存詳解,以及超便捷的內存區(qu)域(yu)管理方(fang)法

引言

在這(zhe)里會較(jiao)為詳細(xi)的(de)闡述(shu)各種(zhong)類型的(de)存儲器的(de)特(te)點及(ji)其之間的(de)差(cha)別,以及(ji)我們(men)會在STM32單片機上(shang)面使用一(yi)種(zhong)超(chao)級便捷的(de)方式來管理(li)我們(men)所使用到的(de)內(nei)存。

理清 xxRAM、xxROM、xxFlash 的核心作用

三種不同存儲器:RAM、ROM、Flash

這(zhe)三個總的(de)概括,就使(shi)用一個表格來說明(ming)吧,表格如下(xia):

內存 存儲類型 核心功能 數據保持 單片機對應硬件 典型存儲內容
RAM 易失性 存放動態數據、臨時變量 掉電丟失 DTCM/AXI SRAM / 普通 SRAM 全局變量、局部變量、棧 / 堆
ROM(概念) 非易失性 只讀存儲(功能) 掉電不丟 由 Flash 實現 無獨立硬件,功能同 Flash
Flash 非易失性 存放程序代碼、常量 掉電不丟 片上 Flash(一般0x08000000 起) 代碼段、const 常量、復位向量表

四種 RAM:DRAM、SRAM、SDRAM、MRAM

DRAM

(Dynamic RAM,動態隨機存取存儲器)

  • 原理: 利用電容存儲電荷來表示數據(0/1),但電容會漏電,需要定期 “刷新”(每隔幾毫秒充電一次)才能保持數據。
  • 特點: 結構簡單(一個晶體管 + 一個電容),密度高(相同體積下容量更大);速度中等(比 SRAM 慢),功耗較高(刷新需要耗電);價格便宜(單位容量成本低)。
  • 應用 : PC 的內存(DDR4/DDR5 都是 DRAM 的改進型)、智能手機的運行內存(RAM)等需要大容量臨時存儲的場景。

SRAM

(Static RAM,靜態隨機存取存儲器)

  • 原理: 利用觸發器(由多個晶體管組成)存儲數據,無需刷新,只要供電就能保持數據。
  • 特點: 速度極快(訪問時間納秒級,比 DRAM 快 10~100 倍);結構復雜(一個 bit 需要 6~8 個晶體管),密度低(容量小);價格高(單位容量成本是 DRAM 的幾倍),功耗中等(無需刷新但晶體管本身耗電)。
  • 應用 : CPU 內部的高速緩存(L1/L2/L3 Cache)、STM32 片上 RAM(如 DTCM、SRAM1~4 都是 SRAM)等需要高速訪問的場景。

SDRAM

(Synchronous DRAM,同步動態隨機存取存儲器)

  • 原理: 屬于 DRAM 的一種,工作時與 CPU 時鐘同步(數據讀寫按時鐘節拍進行),需要定期刷新。
  • 特點: 速度比傳統異步 DRAM 快,容量大(常見 128MB~2GB);需外部控制器(如 STM32 的 FMC 接口),時序配置復雜。
  • 應用 : 嵌入式系統擴展大容量臨時存儲,如 STM32 H7 系列外接 SDRAM 用于存放視頻幀、大型緩存數據等。

MRAM

(Magnetoresistive RAM,磁阻式隨機存取存儲器)

  • 原理: 利用磁阻效應存儲數據(通過磁場變化改變電阻狀態表示 0/1),非易失性,無需刷新。
  • 特點: 速度接近 SRAM,容量接近 DRAM,非易失性(掉電不丟數據);功耗低(無需刷新和電荷維持),壽命長(理論無限次擦寫);成本高(目前還未大規模普及)。
  • 應用 : 高端嵌入式系統(如工業控制、汽車電子)需要 “高速 + 非易失” 的場景,替代部分 SRAM 和 Flash 的組合使用

對比

特性 DRAM SRAM SDRAM MRAM
易失性 掉電丟失 掉電丟失 掉電丟失 掉電不丟失
速度 中等(幾十納秒) 極快(幾納秒,接近 CPU 速度) 比 DRAM 快(同步時鐘優化) 接近 SRAM(幾納秒)
大小 GB 級 MB 級 數百 MB~ 數 GB 目前可達 GB 級,逐步提升
功耗 較高 中等 略低于 DRAM
成本 與 DRAM 接近 高(未大規模普及)
應用 早期 PC 內存、低端嵌入式設備 CPU 緩存、STM32 片內 RAM 嵌入式擴展內存 工業控制、汽車電子

兩種 Flash:NAND Flash、NOR Flash

NOR Flash

(或非閃存)

原理: 同樣基于浮柵晶體管,非易失性,但內部結構與 NAND 不同。
特點: 隨機訪問速度快(可直接 “按地址讀取”,類似 RAM),支持 “代碼在 Flash 中直接運行”(XIP,eXecute In Place);密度低(容量小),價格高(單位容量成本高),擦寫速度慢(尤其大容量擦除)。
應用: 嵌(qian)入式系(xi)統的 “程序存(cun)(cun)儲器”,如 STM32 片上 Flash 幾(ji)乎都是 NOR Flash(用(yong)于存(cun)(cun)儲程序代碼、啟(qi)動程序),路由器、交換(huan)機(ji)的固(gu)件(jian)存(cun)(cun)儲等(deng);STM32 中片內 Flash(如 0x08000000 起始地址的存(cun)(cun)儲區域)均(jun)為 NOR Flash,支持程序直接在 Flash 中運行(xing)(無需加載到 RAM)。

NAND Flash

(與非閃存)

原理: 基于浮柵晶體管存儲電荷,通過電荷是否存在表示數據,屬于非易失性存儲(掉電不丟數據)。
特點: 結構簡單,密度極高(相同體積下容量遠大于 NOR Flash);讀寫速度 “頁級快、隨機慢”(適合連續讀寫,隨機訪問速度差);價格低(單位容量成本是 NOR Flash 的 1/5~1/10),但有 “壞塊” 和 “擦寫次數限制”(通常 10 萬次以上)。
應用: 大容(rong)量存(cun)儲場景,如 U 盤(pan)、SD 卡、固態(tai)硬盤(pan)(SSD)、嵌入式系統的(de) “硬盤(pan)”(如存(cun)儲固件、日志、用(yong)戶數據);STM32 中部分型號(hao)支持外接 NAND Flash(如 F4/F7/H7 系列),用(yong)于擴展大容(rong)量非易(yi)失性存(cun)儲。

對比

特性 NOR Flash NAND Flash
存儲結構 并行結構,地址線可直接尋址單個字節 串行 / 頁式結構,需按 “塊 - 頁” 層級尋址
速度 隨機訪問快(10~100ns),支持按地址讀單個字節;連續讀寫速度慢 隨機訪問慢(需先找塊、再找頁);連續讀寫快(頁級操作,幾十 MB/s)
執行能力 支持 XIP(就地執行):程序可直接在 Flash 中運行,無需加載到 RAM 不支持 XIP:代碼需先加載到 RAM 才能運行
擦寫特性 支持小粒度擦除(扇區級,如 4KB/8KB),部分支持字節級修改 必須 “先擦除再寫入”,擦除粒度大(塊級,如 128KB/256KB),僅支持頁級寫入
容量與密度 密度低,單芯片容量小(通常 1MB~1GB) 密度高,單芯片容量大(通常 8GB~1TB,甚至更高)
成本 單位容量成本高(約為 NAND 的 5~10 倍) 單位容量成本低,性價比高
引腳與接口 引腳多(需地址線、數據線分離),接口復雜 引腳少(地址 / 數據復用),接口簡單(如 SPI/NAND、ONFI 接口)
應用 小型嵌入式設備的程序存儲、交換機 硬盤、手機、平板的內置存儲

EEPROM

原理: 通過電信號擦除和寫入數據,非易失性,可字節級擦寫(無需按塊擦除)。
特點: 擦寫方便(支持單個字節修改,無需整塊擦除);容量小(通常 KB 級,最大幾 MB),速度慢(擦寫時間毫秒級),壽命有限(通常 10 萬次擦寫)。
應用: 存儲少量需要頻繁修改的(de)非易失性數據,如設備參(can)數(波特率、地址)、校準數據(傳感器零點)、用戶(hu)配置(zhi)等;STM32 中部分型(xing)號內置(zhi) EEPROM(如 F1/F4 系列(lie)),或(huo)通過 “Flash 模(mo)擬 EEPROM” 功(gong)能實現(xian)類(lei)似效(xiao)果(如 H7 系列(lie)無獨立 EEPROM,需用 Flash 特定區域模(mo)擬)。

H7 系列內存詳解

參考文章:
H7的內部內存分為了ITCM,DTCM,AXI SRAM,SRAM1,SRAM2,SRAM3,SRAM4和備份SRAM。下圖中分為了三個域:D1 Domain,D2 Domain和D3 Domain。

131817i7q7a0uk88eo8oa0

TCM 區

(Tightly-Coupled Memory 緊密耦合內存)

  1. ITCM:用于運行指令,也就是程序代碼。
  2. DTCM:用于數據存取,特點是跟內核速度一樣,而片上RAM的速度基本都達不到這個速度,所以有降頻處理。

AXI SRAM 區

位于D1域,數據帶寬是64bit,掛在A線上。除了D3域中的BDMB主控不能訪問,其它都可以訪問此RAM區。

AXI SRAM
地址:0x2400 0000。
速度:200MHz。
大小:512KB。
用(yong)途:用(yong)途不限,可以(yi)用(yong)于(yu)用(yong)戶應用(yong)數(shu)據存儲(chu)或者LCD顯存。

SRAM1,SRAM2和SRAM3 區

位于D2域,數據帶寬是32bit,掛在AHB總線上。除了D3域中的BDMB主控不能訪問這三塊SRAM,其它都可以訪問這幾個RAM區。

SRAM1
地址:0x3000 0000。
速度:200MHz。
大小:128KB。
用(yong)途:用(yong)途不(bu)限(xian),可用(yong)于(yu)D2域中的DMA緩沖(chong),也可以當D1域斷電后用(yong)于(yu)運行程序代(dai)碼。

SRAM2
地址:0x3002 0000。
速度:200MHz。
大小:128KB。
用途:用途不限(xian),可(ke)用于D2域中的DMA緩沖,也可(ke)以用于用戶數據存取。

SRAM3
地址:0x3004 0000。
速度:200MHz。
大小:32KB。
用(yong)途:用(yong)途不限,主要用(yong)于以太網和USB的緩沖。

SRAM4 區

位于D3域,數據帶寬是32bit,掛在AHB總線上,大部分主控都能訪這塊SRAM區。

地址:0x3800 0000。
速度:200MHz。
大小:64KB。
用(yong)途:用(yong)途不限,可以用(yong)于D3域(yu)中的(de)DMA緩沖,也可以當D1和D2域(yu)進入(ru)DStandby待機方(fang)式(shi)后,繼續(xu)保存用(yong)戶數(shu)據。

Backup SRAM 區

備份RAM區,位于D3域,數據帶寬是32bit,掛在AHB總線上,大部分主控都能訪問這塊SRAM區。

SRAM4
地址:0x3880 0000。
速度:200MHz。
大小:4KB。
用(yong)途(tu):用(yong)途(tu)不限(xian),主要(yao)用(yong)于系(xi)統進入低功耗模式后(hou),繼續保存(cun)數據(ju)(Vbat引(yin)腳外接電池(chi))。

內存時鐘問題

AXI SRAM,SRAM4,ITCM和DTCM可以在上電后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是實際測試發現,不使能也可以正常使用。不過,建議用到時候開啟下時鐘,防止意想不到的問題發生。

131817h8dsod33s80szg4a

RAM 的 DMA 問題

Bus Master總線主控端和Bus Slave設備端的控制互聯:

131817i7x0txxbpu2xsp77

加粗字體是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位總線(xian)。

超便捷的內存區域管理方法

參考文章:

一般的內存管理方式

不太注意的話,一般都是在"target dialog"這里簡單管理內存。這種情況下,所有管理工作都是編譯來處理的。

image

分散加載式管理內存區域

使用分散加載的方式來管理內存,會超級靈活,想用哪一塊就用哪一塊。下面就是超級教程:

在魔術棒的"OutPut"配置中,會生成一個相同名字的 .sct 文件,這個就是這個方法的關鍵,找到它。

image

第一步

  1. 取消勾選"Use Memiry Layout from Target Dialog"。
  2. 點擊"..."找到與輸出文件同名的 .sct 文件(假如你這里沒有顯示的話)。
  3. 點擊"Edit"打開這個 .sct 文件。

image

第二步

使用 STM32H7 系列的(de)(de)可以(yi)直(zhi)接(jie)將以(yi)下程序(xu)復制進去。其他系列的(de)(de)單片機則(ze)需要稍加修改。

假如不同,你需要修改的有:

  1. 內存(ROM 或者 RAM)首地址
  2. 內存大小
點擊查看代碼
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

; 定義加載區域LR_IROM1:起始地址0x08000000,大小0x00200000(2MB)
; 這是整個程序的加載區域,通常對應Flash存儲器
LR_IROM1 0x08000000 0x00200000  {    ; load region size_region

  ; 定義執行區域ER_IROM1:起始地址與加載地址相同(0x08000000),大小2MB
  ; 存放程序的只讀代碼和常量
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
   *.o (RESET, +First)               ; 所有目標文件的RESET段,放在最前面(復位向量)
   *(InRoot$$Sections)               ; 根區域必要的特殊段(如異常向量表)
   .ANY (+RO)                        ; 任何文件的只讀代碼和常量(RO段)
   .ANY (+XO)                        ; 任何文件的可執行代碼(XO段)
  }
  
  ; 定義DTCM內存區域:起始地址0x20000000,大小0x00020000(128KB)
  ; DTCM是內核緊密耦合的數據存儲器,訪問速度快
  RW_DTCM 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)                     ; 任何文件的讀寫數據(RW)和未初始化數據(ZI)
   ;*(.RAM_D0)	;段選擇器,若不手動選擇,則完全不會被分配到此
  }
  
  ; 定義AXI SRAM區域:起始地址0x24000000,大小0x00080000(512KB)
  ; AXI接口的SRAM,通常用于高性能數據訪問
  RW_AXI_SRAM 0x24000000 0x00080000  {
   .ANY (+RW +ZI)                     ; 任何文件的讀寫數據和未初始化數據
   ;*(.RAM_D1)	;段選擇器,若不手動選擇,則完全不會被分配到此
  }
  
  ; 定義SRAM1~SRAM3區域:起始地址0x30000000,大小0x00048000(288KB)
  ; 片上靜態存儲器區域1-3
  RW_SRAM1_SRAM3 0x30000000 0x00048000  {
   .ANY (+RW +ZI)                     ; 任何文件的讀寫數據和未初始化數據
   ;*(.RAM_D2)	;段選擇器,若不手動選擇,則完全不會被分配到此
  }
  
  ; 定義SRAM4區域:起始地址0x38000000,大小0x00010000(64KB)
  ; 片上靜態存儲器區域4
  RW_SRAM4 0x38000000 0x00010000  {
   .ANY (+RW +ZI)                     ; 任何文件的讀寫數據和未初始化數據
   ;*(.RAM_D3)	;段選擇器,若不手動選擇,則完全不會被分配到此
  }
}

; 段選擇器使用案例:
; __attribute__((section (".RAM_D1"))) uint32_t AXISRAMBuf[10];
; __attribute__((section (".RAM_D2"))) uint16_t AXISRAMCount;
;
; 若沒使用段選擇器,其實也可以使用__attribute__來選擇某一內存起始地址進行存儲,不過的話就是不方便管理。

; 若沒有使用段選擇器,那么就會按照分散加載文件中內存區域的定義順序依次分配,
; 直到前面的區域被占滿后才會 “溢出” 到后面的區域。
;


注意:STM32H743系列的單片機的RAM都是992KB的,故AXI SRAM區域最終計算出來只有288KB,并非512KB。

image

可以看出,RW區也是要存儲到ROM/Flash里面的,在執行映像之前,必須將已初始化的 RW 數據從 ROM 中復制到 RAM 中的執行地址并創建ZI Section(初始化為0的變量區)。

上面的程序注釋中已經詳細說明了這一段程序的作用,其中的加載區域就是程序在Flash中的實際存儲,而運行區域是芯片上電后的運行狀態,通過下面的框圖可以有一個感性的認識:

ec6d2099fd36072b49f377face4e1b27

博客導航

博客導航

posted @ 2025-10-14 20:49  膝蓋中箭衛兵  閱讀(193)  評論(0)    收藏  舉報