25.1 初学者重要提示 V* v' |9 |7 b2 Z8 H TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。+ z8 F5 P+ T/ o: s: _# u 特别注意本章25.5小节里面各块RAM的DMA操作问题。% N9 d/ E# A& Z5 e# e ' q; g& i% o" W. I 25.2 各块RAM在总线中的位置 这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。5 o. S2 b: ~, ^2 m; E; s" u; C- H5 g3 e 8 y [$ |3 ^1 Q8 X) H+ c d ; Z% Z0 N$ k7 f2 U& t 这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。 9 a ]! v8 M. g* L" a p c6 V 1、 ITCM和DTCM7 c3 M7 G! v P# N# u, u! j 这两个是直连CPU的。 6 _0 o( q* ~/ d2 B2 l& ]4 g 2、 D1 Domain D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。 6个从接口端ASIB1到ASIB6 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。8 |* m1 ~: c% h, x7 r ~; \ " ~: Z9 \$ e1 t 7个主接口端AMIB1到AMIB7 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。 3、 D2 Domain D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。. x' o9 {& _+ r+ a q- T* O5 p 8 z6 ~" v: c/ R# \8 o 10个从接口% u/ o- j5 e ] c" n l; X5 c 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。* K) U7 n/ q- w. \. J% E+ g' z % Z% m4 b2 q: t; @ 9个主接口 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。8 t c5 R+ m+ B& J 4、 D3 Domain$ A! n7 ~( g" S D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。) O% ]' m! ~2 i# ]8 q$ y" l k 3个从接口* X1 l9 t4 m0 H% J* f% J9 H$ S 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。 2个主接口) c9 ^ `1 t: X$ Z 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线 25.3 各块RAM特性 w6 L# k7 c+ U4 F# O 各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。* ]( s* p! t7 C |7 P TCM区 TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。0 a+ W$ T' t! z% p% e 速度:400MHz。 ! o# V5 c' @, L2 n; U) Q1 b" e, l DTCM地址:0x2000 0000,大小128KB。 9 a5 `; @$ k1 i/ q ITCM地址:0x0000 0000,大小64KB。2 ?0 Z$ k/ O' b! G% o! e ; Q8 |4 u0 X6 o) v AXI SRAM区 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。 # u, ~8 J9 b4 J1 {) ~ 速度:200MHz。* z; g0 w2 R" m" z0 \5 w 地址:0x2400 0000,大小512KB。 7 ~, y; r& [, a 用途:用途不限,可以用于用户应用数据存储或者LCD显存。0 h* i$ ~! I" n. [- v6 Z& L5 L 8 L- N8 K0 U/ h) B) m SRAM1,SRAM2和SRAM3区 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。1 K) I8 }) k7 [1 K J) ~4 ` - N, m" m n) O3 ]* t 速度:200MHz。 3 k0 q- {) a" Q4 L! X SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。 SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。% n$ D) A$ k1 s + _) K" X2 |# W0 a/ Y5 I5 P SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。1 [; ]% P# |' s4 i3 ~7 y/ o: s # g: ]0 w1 ]( e( {7 p- x; F' ? SRAM4区 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。 / j. t! D. ~& x! U" q: o 速度:200MHz。- t7 }, b# ^) v 地址:0x3800 0000,大小64KB。 b$ S6 J1 t6 _1 o& p8 E: x. W 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。/ W* u0 {8 G8 `8 S/ Q( G) W6 s Backup SRAM区7 Z: |1 _2 Z0 z- G 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。+ _0 g) I7 m& y' ^) k 速度:200MHz。 地址:0x3880 0000,大小4KB。 7 B9 V. O e3 a1 ?1 F 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。 25.4 各块RAM的时钟问题 正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。 也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。 对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟: 4 g2 h* x7 T# B4 u
25.5 各块RAM的DMA问题8 C. P3 S" t' Q# B: M 了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联: $ ?+ Q, d0 b" O) T. A% o * Z/ D6 w: h6 w: k1 x& k2 B5 p 加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。& L- ], t/ Q* m$ u8 m# ^' V 访问通路(每个小方块里面的字符)7 r$ x* ^! p1 W2 d6 C' F S3 s5 d 任何有数字的表示有访问通路。1 T. o4 t- C9 p) t7 j / f1 |% E" s; v, e; | 短横杠“-”表示不可访问。 有灰色阴影的表示有实用价值的访问通路。 ' K5 b' ?# Z5 `; U( U 表格中具体数值所代表的含义7 v' x6 [+ ~* Y) J( d D=direct,3 Y: c* c" R+ ^3 S2 c1 R8 B 5 O' X5 ]/ z6 {0 t. | 1=via AXI bus matrix, ! F# ]: n# A: `( H 2=via AHB bus matrix in D2, . v9 F2 m3 O3 d; l 3=via AHB bus matrix in D3, 5 ^: q& N( a( {% i* ? 4=via AHB/APB bridge in D1,: c/ j) g5 i7 a1 N9 _ 7 V) i( O C) D: R% d1 A 5=via AHB/APB bridge in D2, * {0 s* u; t4 l1 Z3 t( s+ \8 E 6=via AHB/APB bridge in D3,* M$ y/ f& p5 f3 {) o, ^ 7=via AHBS bus of Cortex-M7, # B- P$ Y( N* p. L% z) F! M 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。 # q4 P4 C+ a0 g# n( q C: ` 总线访问类型8 q3 x' B4 b( a7 L# G9 L 普通字体表示32位总线。+ e/ U& D- t& y/ x 斜体表示32位总线主机端/ 64位总线从机端。 粗体表示64位总线。 3 ~! g7 F5 [" v7 F2 I/ f 通过这个总线互联图,要了解到下面三个重要知识点:: u4 y) C0 R- E) @ , t! o k* W2 n; M DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。, G4 j w# {8 _9 \' ]9 a$ t AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。- k8 \3 f/ U; c. V+ `8 T SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。 & s8 M1 H! L0 P2 ` 25.6 实际工程推荐的RAM分配方案 鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。 本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。 w; w7 x5 c+ y' [. U. o 25.7 总结9 G% u: C$ |/ Y; M+ i" \/ z 本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。6 ?2 ~2 w9 f2 e- V2 V: H 6 F. o; o4 y' n9 Z) K% z& i T" [; _4 D1 a$ w5 [$ i% j |
【经验分享】STM32_H7_ADC
STM32H7R/S高性能MCU:安全性,大存储和优异图显赋能更多应用创新
Stm32H7XX GCC下分散加载实现
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
DIY-STM32H750核心板
[nucleo-H7A3ZI-Q]1-点亮一个皮皮灯
DIY-STM32H743核心板
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
1月10日有奖直播 | 基于STM32 的CODESYS智能自动化解决方案
STM32的CAN FD位定时设置注意事项