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

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

[复制链接]
STMCU小助手 发布时间:2021-10-26 23:03
25.1 初学者重要提示/ g. G2 v7 C3 @$ f; J% y
  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。8 z4 u! ?/ |5 g6 Q. G' x
  特别注意本章25.5小节里面各块RAM的DMA操作问题。1 K4 c- W0 A9 r+ z; p
25.2 各块RAM在总线中的位置, e5 H2 T6 E( _* P4 s. {. V- W1 P; u
这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。2 X2 ]0 B3 J5 n+ j4 x
; C) r+ E1 ^! M4 _) N( p3 [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

& ~8 @3 E8 S, x; Q& W$ n' p: X7 Q这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。9 X" M/ ]$ N' p- Z# f
& t% m7 P# {/ R9 e. B7 S. G8 I9 {+ R  O
1、  ITCM和DTCM
7 T3 s0 V) U& A6 F
2 Q/ k3 _# J9 S2 T, D9 L. {2 S2 g这两个是直连CPU的。( h8 A" d& m! t+ L0 H; b
0 ?" u; k3 b* R+ O5 l) O
2、  D1 Domain
0 n% `; E) q2 o8 f) n6 Z0 U6 l! J1 k" w1 L# L8 s6 Q& w
D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。3 c# x& b& ^* M" z: y
* d- o; T4 T& J' h8 _6 H
  6个从接口端ASIB1到ASIB6
5 E  ~6 l1 v& s3 i7 M外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。
4 q7 I+ v( L) [9 k' i0 p- N6 b" q9 `1 _# M5 z- X" o: o
  7个主接口端AMIB1到AMIB7
% H6 t- B4 M% N. E& {! e; U, A% H外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。
6 p- T7 ]. u% _& J( L$ C" F8 A
7 s4 S# G8 }/ Y+ Z# S/ v& G3、  D2 Domain3 W6 I$ X3 K& ^5 E+ \5 \$ Y

1 ], h6 A7 m; y1 @7 YD2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。
* [2 t( {/ L* k$ s% t- {: ]- g& R  a3 m( V$ q
  10个从接口
1 c( h" N2 Z9 ]0 @- D外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。7 H& A& n+ _. P: j2 e; p

% r) P' O+ X2 `1 F) H5 P; J! n! U  9个主接口5 `: K: \- n0 T* p8 L
外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。& \7 C3 t7 t# _% Z: T  y2 Y$ Y" R2 V8 d, a. ~

* f$ s7 s, _+ y- e: K( u4、  D3 Domain
- N! m# U8 L; j
) ^6 f( P) U$ ~5 P2 SD3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。- m- t. A- O. p# }2 h" ~7 m
5 q+ T: h. Y) P- y. B# e( E8 Q
3个从接口4 }. q$ _1 c$ b2 z
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。8 d8 z" f0 Z2 `1 A# S3 Z

8 \6 g2 w6 ~5 m' x 2个主接口
  D. z* \/ n- K" X+ x, r外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线
) [/ _$ @! d: i/ ?5 t  L) o7 [7 _7 @- s' D; K% O  g
25.3 各块RAM特性( c- ]4 j4 d. E3 s
各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。% y  x! ]1 @8 d) }
( a+ e9 m$ Y- Z
  TCM区
7 J6 k& B' B6 m% A: p$ `TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
! {2 ~3 D, I6 \& K
2 i' Q; D. `8 O: z速度:400MHz。* P3 r& {+ s$ a0 D4 m6 x% ?4 m

; }* c) N5 C# `: }DTCM地址:0x2000 0000,大小128KB。
1 X& c" o; G% I5 r+ ^1 W
- U5 ]. `2 l& L: |5 c. v- \ITCM地址:0x0000 0000,大小64KB。
2 ^  A( S! m" ]6 l3 }3 Q- i# X2 `2 ?
6 b7 p) p& R& Y' ?  AXI SRAM区7 ^' I* {0 N$ n: c2 q
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。4 X: y' O6 P/ [

5 G  ~7 g8 t% X" v+ U! R速度:200MHz。5 N7 Y6 L0 B. Y0 A: d$ Z  O
$ ~1 F- b$ J+ v1 r. F# C
地址:0x2400 0000,大小512KB。
/ N: G6 G3 j+ C1 Q1 ^, X! i2 q- d6 g& _6 ^: R2 G4 k% ]0 j/ g) G
用途:用途不限,可以用于用户应用数据存储或者LCD显存。$ o1 C  ^) J/ R: U; b+ A9 O8 t

# a3 f' p+ \& f* l  v# u  SRAM1,SRAM2和SRAM3区
/ W% h7 |$ ~% a( @3 e" E位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。
: n3 O$ I) [9 F5 Q2 E
7 g. r& n) R& _2 D. R  @速度:200MHz。
) ~: F8 J9 `5 \- H" y. E( v, s+ }
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
9 w* s7 W! H0 m% }7 J: m8 m7 f9 d! V3 _( I( G. J4 Q' L+ q7 T3 N
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。, [1 M1 _- X. }; m/ J0 F

2 k2 D! J7 D. |9 XSRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
) S: E1 ^: |* I: u3 M) K7 H
! ~0 W% c" ^& Q* k! ?2 n2 D- }1 I" `2 l  SRAM4区
8 y: |6 L5 v* b6 A8 Y位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。, y' R% ]! c2 M
5 e/ {) X+ y: v# z
速度:200MHz。
: L( k5 W' ^2 e5 F) G; a0 `* u. `6 [$ V6 o2 ~8 R1 q5 i; }
地址:0x3800 0000,大小64KB。
  _0 s* z- Z) o& `; U
8 w$ _1 p" Y2 `3 z( o! u用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。# Z: D+ l7 |: K4 u  V

, r  W; |% i$ B$ a! }9 s$ `: t  Backup SRAM区
1 m: {; J# S: c1 }# `备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
& z! y6 {+ z2 ]! H0 B( b
! `6 I  O1 `7 w5 h4 X1 p9 @速度:200MHz。
: g7 d0 P' P2 l: A- g" W- P  e2 I; S& s7 l; R. s4 [
地址:0x3880 0000,大小4KB。6 K7 ]5 B' u: [1 x5 F2 N0 x

- a6 T/ w- M; O5 q) ?用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。' h) F3 R; i& N3 v3 h

3 P4 |  O, C7 ~- f) a+ y/ @25.4 各块RAM的时钟问题$ {, p& ~* p) Q# n) K* D& }$ E6 j3 S
正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。
5 P7 Q! j2 M5 F8 r
0 y2 J- y$ P( d( W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
2 q4 D0 w4 |" }* N
也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
( Q+ A$ w1 W& m! O& J7 |5 B/ ]9 x
对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:* e2 E$ s7 {! y
  1. #if 0
    + [. J% X1 b) p4 ]" n  C0 g
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();% e/ A% x$ M6 m! D  W) c+ m$ ^
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();
    7 N6 L! F7 z% [1 {6 p. W' Y2 g( g
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();
      Z; q( a) ?' k$ E: O7 s8 }' y
  5. #endif
复制代码

4 Y" t, \5 J: n( j: s, ~; J25.5 各块RAM的DMA问题
( M5 d* i  @) }了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:( y. ]: w& _- c  K" A; Z! s

% D9 O! F4 h/ \* t# X  _  U4 I# |
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
4 M3 @# W+ c# f  J: r
  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。
: R1 u. Q- O' }! n$ g* X# h  访问通路(每个小方块里面的字符)$ \0 H: i$ }8 E+ Y7 z5 d, f& ~
    任何有数字的表示有访问通路。! r9 V" Q4 A3 Q

2 B  [. r6 q9 |    短横杠“-”表示不可访问。
2 U, O: s# K7 u! n8 Q; q- v  l) [5 ]; B# ~. c9 `) e5 I7 \$ b! n
    有灰色阴影的表示有实用价值的访问通路。
- \- ]7 R. T/ L; R# |6 f% ]. ]- U# R+ z% o/ g
  表格中具体数值所代表的含义) b. ~: s! z. g) ^9 v
    D=direct,
9 W/ b' z* K  K( Z8 X! i: J) ?0 i
    1=via AXI bus matrix,
2 _- c+ h$ G  t5 s" i3 m! W+ y2 I* y0 b" P9 f. H! E
    2=via AHB bus matrix in D2,. u4 X5 d& y( `; h2 J

7 B& x. K9 y% U# b" {* |    3=via AHB bus matrix in D3,4 k* ]0 A% |. m% G
4 K1 ~" h3 o' U1 ~$ l
    4=via AHB/APB bridge in D1,# U5 n# F" `5 U" r' R; M) H9 F
- I; h( l2 u! V" B" U5 L0 ~
    5=via AHB/APB bridge in D2,
# C/ v9 X. M5 I7 \3 p' [
* t" s9 |! t- \3 {& c; `. [! ]2 t    6=via AHB/APB bridge in D3,
4 L9 q+ o& n' @# `9 o8 M, j. e$ Z6 V- |% h7 l
    7=via AHBS bus of Cortex-M7,9 C6 G, j' A7 H. b8 Z
# a6 k2 G; m6 n% u# Y5 d
    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
1 u" y: _2 c$ y% R, {8 V5 s7 w, f* y3 ^6 t1 d7 `* a
  总线访问类型6 v' X  j( G1 F! f6 O7 l2 s, Q6 M  g
普通字体表示32位总线。
5 I4 R4 a' N! l3 b) s/ u+ Y( R$ {( X2 C- z" Q) K
斜体表示32位总线主机端/ 64位总线从机端。4 `% P  t8 x: M1 R/ H7 F

9 X$ `6 T- x  w6 g  h( K7 W粗体表示64位总线。) p% o* x, O1 X+ i" P% I8 G* R
0 D/ V3 O& U0 o9 `% ]: \8 \! n0 F

' [& p* g8 z% i6 J  k9 ^6 X# }+ d* |" w
通过这个总线互联图,要了解到下面三个重要知识点:
, e- x$ {( U5 I$ N8 i4 F4 e2 A1 ~4 M: E0 L1 b. {3 `
  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。6 m: u5 v, X+ s3 u* v6 I2 o+ b8 l
  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。
" N3 E4 p- C! g9 t% I  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。1 k1 J- ~. E- ?- G
25.6 实际工程推荐的RAM分配方案
. h1 E( A3 l$ @" a  Y8 ]鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。+ a& T3 W$ e  H! z4 f

- D% x) ?9 q, }# q) T1 ?: m本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。+ p* k5 j% m/ ]% j8 _

! f$ S6 \* j/ x25.7 总结
3 w5 W- I7 m) M- W# D- Z本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。
5 p2 h4 n3 s, [( t8 N4 w( \+ G' C8 T4 c) c
1 y9 }5 o6 N/ z$ J
, T: W9 I( O$ k9 i' K6 C' o" K

9 m& o  a- a% p! N
赞 收藏 评论0 发布时间:2021-10-26 23:03

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版