你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32H7的TCM,SRAM等五块内存基础知识

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示
" w. ?# H; J0 x6 [; X$ g  t; g  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。
0 \2 N) _2 N- a, r$ F  特别注意本章25.5小节里面各块RAM的DMA操作问题。
+ c0 ]( g& D- l  y4 f
" P. p/ ], d' s% j25.2 各块RAM在总线中的位置* B" A" \5 Z1 F, Z" C
这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。6 |) @2 A/ N9 m: G5 @; g

; _6 [+ D6 h0 g- ]! S! N& H, H4 ~# ?
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
1 P: z1 q6 i% ?6 L$ B
  b" o& i0 t/ T; Z9 P, v0 d
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。/ L9 L7 i8 U) ^8 f  ~

0 g  a6 O$ b5 ]/ D( a6 G1、  ITCM和DTCM  X. G4 b/ T5 c$ G$ |% b

+ l4 D- I+ @8 W* A' w# v这两个是直连CPU的。7 r- E( s$ V5 Z

7 E; G1 L, y6 ]. U1 s2 n% B9 U2、  D1 Domain6 m6 }9 t/ F/ g: H& }

$ {9 `& F/ F. ~" K, oD1域中的各个外设是挂在64位A**线组成6*7的矩阵上。9 T4 ?$ Q5 J$ z. Z3 z( H) R# `' [: L  {

5 _2 w, N2 n% n! h  6个从接口端ASIB1到ASIB6
$ l7 I  Z. c/ R外接的主控是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

& T) U+ X* L6 p1 K( Y3、  D2 Domain
6 V; k1 b: H: ]6 y0 `( i$ {6 J: j8 e! x2 ]
D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。6 L1 g0 k* j/ ?5 G

& }; b/ b- ~8 u: f: P- z+ c  10个从接口
, B/ j0 F9 t& \外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
$ {( x9 H& ^% ]! z) t, O
; l: i0 q: `+ M$ C4 M  9个主接口
) I8 X# G+ q9 P1 R, C6 |6 J外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。
1 @, k# J: }1 q: t6 y% V* 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的矩阵上。
1 y& J* L; f6 E/ S/ o  V+ V7 O) y+ R1 c, y
3个从接口
, O) N9 i* F& A' _; W外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。
9 W/ ^: f8 c! B
% _' }. n9 n; J# q0 g 2个主接口
1 i0 s6 Y$ z$ q8 F6 v1 r外接的从设备是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特性

. {8 [; U' _( W# h8 D: i& O, ~各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。
+ p5 G7 s% R5 t. d" 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

: U8 q6 Y* K, n速度:400MHz。# x& W. }' u0 w9 D

; c" c* ~2 u9 ADTCM地址:0x2000 0000,大小128KB。0 m% ^; h3 s2 _/ L$ w' L0 p  w& f

! a9 g: V7 B( w, AITCM地址:0x0000 0000,大小64KB。
& Q& x, S3 G# v6 l& Q
4 g3 y! Z% ~) ?' N2 T9 O$ M, S2 y  AXI SRAM区
4 H; p* `+ M/ p, _* |7 S位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。" _2 `& _1 l, [. o/ \

2 ?" w) ~2 o! r5 p+ v速度: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

3 X9 R, S8 \1 i0 V8 E$ j用途:用途不限,可以用于用户应用数据存储或者LCD显存。
: A. t0 m# }$ n( ~- j
- A) H# w% @: a8 ]; J  SRAM1,SRAM2和SRAM3区
" H& F' m+ g7 {/ ~6 X' J1 B$ a位于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。
, x8 [9 ?1 p3 d* @# ~; }, [# r. \# i: m) e6 t/ _/ l2 l* V; J) }. X
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。" w+ p7 i0 l. Q& c

+ }* A/ z; y" l1 d" G+ L- mSRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
8 ?9 r7 c) q, z' M5 G5 ]- m4 z) C) b+ A; ~  T
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
) e8 t& f3 \8 G" S* H* ~1 }, k7 h4 A
  SRAM4区
9 J: }+ s/ Y# _5 {7 Q, b5 f位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。! L+ W2 l9 C, O3 \& \/ \9 R  b) m
5 ~* B  X& |# C% G( n4 L; G* t
速度:200MHz。
+ z: c$ b0 j: I1 e0 r& G4 W" M0 E+ v* p4 `) g1 C1 m
地址:0x3800 0000,大小64KB。$ R4 n" ?9 y" s- T/ M0 B. M6 `. G

) M6 H$ Z2 x3 e+ \! @用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。
, Y9 w* s4 M) `5 i/ z1 D/ p6 ~' e0 s$ z5 ]9 [
  Backup SRAM区
- I" D/ r. _8 J5 e: F备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。$ a/ ~) N  w7 l' P" C, `6 Q$ n  A

$ D* G' A" L5 r速度:200MHz。
- ]3 X* U* Z8 i( `& ]0 J, s) B( Q; T0 q( k/ B8 p1 U% a4 f3 l
地址:0x3880 0000,大小4KB。( e& j! X0 i$ z% m

0 v- ~/ s9 ~: R2 V7 ]8 S% }% i1 M用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。+ ?. c; _- k0 j0 l% s! b  g
# ?. u9 O( B& Z/ x5 H; P
25.4 各块RAM的时钟问题

) x) y( O6 x5 @3 s' K0 _" b( P0 g正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。2 F8 k- s  c+ `6 E2 K
4 P9 y6 N) S7 ]2 x
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

& z: J0 [0 P: p) i- }! @- f' [; @4 R: N
也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。5 f1 T! w1 v- ]

. H: u, b% U& k: F4 X$ D对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:
; g" \$ Y) y, H( y& \
7 f+ k$ F9 p5 Q0 {/ n7 B
  1. #if 0! }4 T' B, w0 b2 f
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();
    4 l4 a, Q& |/ V8 f
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();. c0 v( r. L& z( l$ J0 O
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();
    - d" S& O' }/ Y  H4 f* p
  5. #endif
复制代码

" V. G! n( A4 A25.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
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

- V: F; L; @" R
% n4 Q: `2 @+ `6 F& Y  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。
: V2 `: R5 D. t$ T  访问通路(每个小方块里面的字符)
$ J  e; L, t: }! ~9 Y1 Q    任何有数字的表示有访问通路。
* H; Y& N" K+ Z2 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 [
  表格中具体数值所代表的含义
3 t# n' [- \! f% N, g8 Q) ^    D=direct,3 Y3 ]5 u! G7 Z8 W( N, V

  q+ p2 w" \* Q; a4 N; }    1=via AXI bus matrix,
! O4 J3 C# T0 H$ V6 C/ x# E2 Z
# Q; y0 S. `5 s6 Y  T9 J    2=via AHB bus matrix in D2,
5 u/ R- p+ l! s4 x. [# }+ D2 k+ P
, y; v. o- G  Y5 p    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,
7 X+ `1 g( M3 \" N$ b0 m* |
8 A- C) L- f9 H3 p7 L3 k    6=via AHB/APB bridge in D3,
" R5 o2 `, V, o( k# h7 n: P. e2 C, \& i1 r% ]
    7=via AHBS bus of Cortex-M7,
( }; D& H$ R. G0 d% C: m6 ^5 u
/ r: S: v7 a3 G! f7 ^6 d; F- P    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。' p# S5 \- R, t# c3 f+ n

6 R$ L5 p( Q: w; u3 P  总线访问类型
, {' l; j  m) u5 w* V, V普通字体表示32位总线。& G2 m0 H4 }9 C% `$ R( ?$ y

+ O9 w& u% a6 j3 H& d斜体表示32位总线主机端/ 64位总线从机端。' F/ D+ D5 _5 D3 J: E  e. Y/ i/ [4 ?

! T, y: _' j- C0 o' [$ R: w2 s* r粗体表示64位总线。
3 ]1 z. O# ?& M
/ u: G& R) L6 J8 Z0 a通过这个总线互联图,要了解到下面三个重要知识点:8 B3 H7 z: w) G5 q; _

. R7 [. A: n. u- I8 u7 a: J6 p  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

, N( K9 e3 H, g1 |& n; h25.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! @

3 K" U; r. _/ ?2 g( A8 B
2 ^+ A% R, X* }6 V2 g
收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版