
25.1 初学者重要提示 TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。 特别注意本章25.5小节里面各块RAM的DMA操作问题。 25.2 各块RAM在总线中的位置* B" A" \5 Z1 F, Z" C 这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。6 |) @2 A/ N9 m: G5 @; g ![]() b" o& i0 t/ T; Z9 P, v0 d 这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。/ L9 L7 i8 U) ^8 f ~ 1、 ITCM和DTCM X. G4 b/ T5 c$ G$ |% b 这两个是直连CPU的。7 r- E( s$ V5 Z 2、 D1 Domain6 m6 }9 t/ F/ g: H& } D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。9 T4 ?$ Q5 J$ z. Z3 z( H) R# `' [: L { 6个从接口端ASIB1到ASIB6 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。. T. [; A U" K6 r& b: v " k, |1 T7 x6 J 7个主接口端AMIB1到AMIB73 }8 @# J# x/ x' q8 ~- H 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。0 L: x, W* B; k) U0 [& F 3、 D2 Domain 0 `( i$ {6 J: j8 e! x2 ] D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。6 L1 g0 k* j/ ?5 G 10个从接口 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。 9个主接口 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。 * J" N# A! c6 L% b" _ 4、 D3 Domain% X" u% Q" P. a. h& ` 6 A( j4 n7 ?, I& e" L/ l7 Q D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。 7 O) y+ R1 c, y 3个从接口 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。 2个主接口 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线0 H5 e3 A; a- f& ?4 S! Z0 N5 I# ? ! G) M7 Q! a3 { 25.3 各块RAM特性 各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。 " l7 E6 P8 v$ f TCM区' }( V7 n- R+ ?& L, x TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。$ s' l; p- O' o0 y7 B 速度:400MHz。# x& W. }' u0 w9 D DTCM地址:0x2000 0000,大小128KB。0 m% ^; h3 s2 _/ L$ w' L0 p w& f ITCM地址:0x0000 0000,大小64KB。 AXI SRAM区 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。" _2 `& _1 l, [. o/ \ 速度:200MHz。9 `5 O7 o7 s+ ^& v& C' l! i : i; e& Q) Q. k, N0 }6 ?$ r 地址:0x2400 0000,大小512KB。# a* n) N W. M3 D p- y 用途:用途不限,可以用于用户应用数据存储或者LCD显存。 SRAM1,SRAM2和SRAM3区 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。' x4 b! Z) K! V' J 8 H" E% Q7 S6 q& }3 F9 c- _- k- q 速度:200MHz。 , [# r. \# i: m) e6 t/ _/ l2 l* V; J) }. X SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。" w+ p7 i0 l. Q& c SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。 4 z) C) b+ A; ~ T SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。 * ~1 }, k7 h4 A SRAM4区 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。! L+ W2 l9 C, O3 \& \/ \9 R b) m 5 ~* B X& |# C% G( n4 L; G* t 速度:200MHz。 & G4 W" M0 E+ v* p4 `) g1 C1 m 地址:0x3800 0000,大小64KB。$ R4 n" ?9 y" s- T/ M0 B. M6 `. G 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。 1 D/ p6 ~' e0 s$ z5 ]9 [ Backup SRAM区 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。$ a/ ~) N w7 l' P" C, `6 Q$ n A 速度:200MHz。 0 J, s) B( Q; T0 q( k/ B8 p1 U% a4 f3 l 地址:0x3880 0000,大小4KB。( e& j! X0 i$ z% m 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。+ ?. c; _- k0 j0 l% s! b g # ?. u9 O( B& Z/ x5 H; P 25.4 各块RAM的时钟问题 正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。2 F8 k- s c+ `6 E2 K 4 P9 y6 N) S7 ]2 x ![]() - f' [; @4 R: N 也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。5 f1 T! w1 v- ] 对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:
25.5 各块RAM的DMA问题1 F& a8 d p. B% J& Z q- X" V 了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:' {' F% H6 h& I - M2 f% k8 [- z" a' e' ~* j6 c7 g ![]() 加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。 访问通路(每个小方块里面的字符) 任何有数字的表示有访问通路。 2 a# z2 J L1 d% @: r# w0 ?0 C5 V 短横杠“-”表示不可访问。# `; S+ ?! W8 S' R0 q, g; J/ \* F ; E6 @/ c' w2 I2 d 有灰色阴影的表示有实用价值的访问通路。5 ^( }! X( p0 O+ i% W% Q& r( y # a* ^0 x9 `4 [ 表格中具体数值所代表的含义 D=direct,3 Y3 ]5 u! G7 Z8 W( N, V 1=via AXI bus matrix, 2=via AHB bus matrix in D2, 3=via AHB bus matrix in D3,8 t1 U2 O5 t$ I" y 5 b& `* d# a; g' L 4=via AHB/APB bridge in D1,0 u' I4 ?/ C8 Q- c* F6 Y 0 W& t, X, f5 x# @ C( p9 M 5=via AHB/APB bridge in D2, 6=via AHB/APB bridge in D3, 7 n: P. e2 C, \& i1 r% ] 7=via AHBS bus of Cortex-M7, 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。' p# S5 \- R, t# c3 f+ n 总线访问类型 普通字体表示32位总线。& G2 m0 H4 }9 C% `$ R( ?$ y 斜体表示32位总线主机端/ 64位总线从机端。' F/ D+ D5 _5 D3 J: E e. Y/ i/ [4 ? 粗体表示64位总线。 通过这个总线互联图,要了解到下面三个重要知识点:8 B3 H7 z: w) G5 q; _ DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。. `7 p2 m5 W8 l" x! ~: j AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。* S' O3 h+ ?% b SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。$ H" M* D* |% K/ ~+ m 25.6 实际工程推荐的RAM分配方案0 P1 Z% r5 J3 t% C) [1 G& I5 `' m9 t+ B 鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。1 {7 a3 U6 Y2 q; H$ \7 `0 ~ K - n* _8 J5 ?+ P 本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。% G+ o5 `0 e# E 3 Z& r/ e l9 I: c9 | 25.7 总结" k% W) s; S" c2 b% [* k4 e 本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。8 M+ w/ O3 z: w! G8 q2 R 8 D4 [, s: z! @ |
【H745I GUI】1.GreenHouse 灯光控制
【Wio Lite AI视觉开发套件】+移植TensorFlow Lite
STM32H745I-DISCO脉冲宽度调制(PWM)
STM32H745I-DISCO串口通信,输入输出
拷打cubemx【002】——自定义还需基于芯片的工程
STM32硬件结构学习
STM32中BOOT的作用
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA