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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示
, q! G' p( M0 P3 h" F1 x$ @( m) c  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。! I0 O* @1 X( V
  特别注意本章25.5小节里面各块RAM的DMA操作问题。  ^$ h5 y2 h  [( t; z
) b/ ^" O' u" i
25.2 各块RAM在总线中的位置
+ t+ h$ d# @! n! p1 q% G4 K这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。
- T: i1 `" k6 d% q) m% s9 C: r5 T3 A: U& m
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

1 n- T2 V. C& j0 M) D. T
) L' x  z: J, P; e; j, U( I: Z这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。8 p! _% V$ k% S/ a; }& L5 B

+ M) @4 _  @+ Z; H- d7 _1、  ITCM和DTCM
% c! x+ q* y/ |( e: V
- Z1 |7 F  ]) f2 v! ~  ~这两个是直连CPU的。' v' A4 d- O% K1 U

1 F2 I, u# Q' N& m2、  D1 Domain2 j, \- T! S, P9 ]' X
% D6 Y; e% V  ]6 w/ T+ O) i
D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。; }& V0 x0 V8 H: w
2 ?, r# j* T# b9 x. q; e& ?- e$ ]9 y% r
  6个从接口端ASIB1到ASIB6; H0 t, d+ t+ X. X; n4 B9 T
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。
  Q4 Z, |7 z! g! K: m. S' J/ K5 \& E7 J2 q! i9 R, ~( ~" V/ g
  7个主接口端AMIB1到AMIB7
' P+ Y( l2 b) g0 ?/ h2 o外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。0 g- }! `1 W9 X. @4 g. s$ k
6 W4 [" [+ r( q2 m& P
3、  D2 Domain
, a" a+ ]7 l+ o. \4 C9 D. s. \7 [; X9 }# }$ U% O3 J* w8 J
D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。
1 Z, X1 v, E8 g4 x6 e: L/ s
( y0 A, A  V2 e6 q* M  10个从接口0 c, b. A( Z& _2 w  K6 F
外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
: P9 ]2 ^& p, f9 v
( r& u8 @# ?7 D2 Q4 n9 D' V; U  9个主接口
! e* v( m& E/ V) B) y) W/ o2 Q4 N外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。
: a; I2 y$ b! L& x
2 U- M9 [; X+ B* B! _) J4、  D3 Domain
4 m9 r6 o) W8 h2 u9 N$ S. k% d! y: D' I( w& j% p4 g4 A
D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。* C9 N* l- ~7 g
! m  U9 Z9 J0 R* A& M4 W$ L6 C
3个从接口6 i; z! K6 V$ H3 r% x- V6 I
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。$ B4 N" w3 Y) e" y  ]

7 ^+ U  s9 u5 h8 s; Q! Z) k 2个主接口
; a0 s" a: O" K5 }& ?: M9 j/ J外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线9 ^- {1 n% W$ u& f

- {. N  b1 w, J, t6 [/ t0 T25.3 各块RAM特性
% X3 ~( m$ i# {& V3 N
各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。
% a& S  G% d* s0 S7 R$ s
$ H6 m* k+ H# V  D8 l3 ^  TCM区' n$ \9 u# c: ?* C/ M" v( ?$ W
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。9 s. E; d# \$ V3 y: i$ C9 P

. A$ b2 V, ]) X" o+ z# e: \速度:400MHz。
: I$ R' q$ u8 H/ n
2 a  z+ `2 R% x; R/ M7 R- PDTCM地址:0x2000 0000,大小128KB。
- a8 P2 c. B6 G( G' b3 h, P4 c" L% |3 R4 B# T& `
ITCM地址:0x0000 0000,大小64KB。
3 p( f# x+ ]. H* G
+ I4 x% @& m) S+ a: I+ p$ A' n  AXI SRAM区
8 {& N3 C) y* H$ \1 k" i" A& j6 }位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
0 D9 T. s- S: I$ M& }( I8 h, g' k
速度:200MHz。
, C, W! C( Y9 g; z% ^
* B  h2 W  w# p0 f地址:0x2400 0000,大小512KB。7 \. [9 \- v1 d3 h# f

" c! k/ Z, \9 m$ U3 \用途:用途不限,可以用于用户应用数据存储或者LCD显存。# m% y5 H9 C- T, ?3 {3 O. z
0 ^9 \2 v' V/ }3 Q  L
  SRAM1,SRAM2和SRAM3区
  U9 {  {' z6 J& d9 F7 h位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。: n& z) t  P; z5 o. W. `$ V! f/ E

. d5 L9 Y3 z( E5 Z* ^速度:200MHz。7 H) v+ }# A: X1 y. t
9 `' I/ ?9 _: p4 K5 ]/ d. L
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
/ O* d& c9 |. u  o) m
. g( f2 y4 `7 B; e9 _$ lSRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。2 p. C6 h, \2 }$ g! E7 K$ ^

0 n4 j& ^1 y: G2 o- mSRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
: U6 s: I! t; l  q+ d1 P6 N: ]
5 S( [2 @0 l6 A# d% }  SRAM4区
+ I2 c9 N! a3 }  C8 J* i$ H* k6 c位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。! v6 J$ D8 \- ~% M- p, f

' V, Y  L* P; _9 {1 \' H8 N0 n' w速度:200MHz。
2 |1 I7 L5 M: r8 ?% a3 W" a. L$ C' e
地址:0x3800 0000,大小64KB。
  l9 Z% f* ?4 N  W. Z3 N' K" m2 _  u- _1 E! f, C4 O& W
用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。! W& F- [! a8 X% e+ ?1 U1 ^

- N6 x8 S, O1 q6 f" ]2 N+ F& o' O  Backup SRAM区" k* o  K. Z. o3 _  I7 W8 c6 I
备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
, M  F# r+ |. N' Z9 l: k, U
( l4 ~% s* m, g/ R# ]5 Z. ]速度:200MHz。& k$ x4 V1 l$ N$ c

' L& \% [: g  V地址:0x3880 0000,大小4KB。
  C; F4 u5 ~' y( I8 o" J
1 e0 D2 S' B' b. {) h用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。+ C  C+ w6 h* W
* Q) v3 k' L; B7 \) f: ?- Y
25.4 各块RAM的时钟问题
/ F) b$ y3 ~; E1 [- `  o5 T! T
正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。& J" v& {, `/ P/ W3 {

7 R6 r4 M8 [( i7 n2 i& U
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

) ?; s; Y/ U2 H
) @1 F% e. s0 [# d( P; Z  U* O1 w: x也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
2 ?" i( }  n9 _1 V3 |- y7 i+ _7 l+ u8 v) d5 P) F  G( e7 x5 t
对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:: |$ q( {" {2 G/ g. L& S1 l4 d0 [
8 k( r$ D' {3 H
  1. #if 0  [+ d; R& c/ m3 l  v, q
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();
    9 G* r: S4 ^6 v( S: B
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();
    5 W- p5 U- J) \6 p
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();
      _4 `( ]# g; r& [' o. _# y# D
  5. #endif
复制代码

$ t2 I; [0 n% F: @25.5 各块RAM的DMA问题
: p3 [" x& D; I! G9 t1 U/ P, R了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:8 f; x) s* Y& X& f0 p6 W0 ?

" m: |, U, ]: U+ I: ~& H
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
6 z: ^  {! X+ L3 ~2 N! W

  Q3 l$ e2 N0 Q0 a  M4 W4 w7 G  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。2 ]1 \4 M# d7 O5 A5 c
  访问通路(每个小方块里面的字符)- k+ G# ]$ a) A! j! \
    任何有数字的表示有访问通路。/ f0 n6 R9 E2 k; D' P6 l5 K" V: a
* ~: u+ N4 j) Q
    短横杠“-”表示不可访问。
( @6 _1 a  w% y' S3 b) }; b
5 m1 g7 R  E$ E- U; ~    有灰色阴影的表示有实用价值的访问通路。2 s' y+ r, R  f( b! S/ a
" k& A' C7 c4 i: I$ L& o5 A' X
  表格中具体数值所代表的含义
9 l9 S- T0 A6 j0 P8 o. d7 ?    D=direct,* p- U6 j: t4 p7 b9 B1 Z0 v+ D

* a& L) ]! F4 Z9 N$ m' \0 Z    1=via AXI bus matrix,, N6 O1 k/ W" T! _! K; l

+ X5 P/ [5 U* F  U2 m    2=via AHB bus matrix in D2," l- D+ x! w5 C, ]+ `# ^/ v

3 y1 E' M/ q* V8 A& t+ w    3=via AHB bus matrix in D3,
, l0 e+ J( s, R$ o1 k  u
5 z9 }& U7 f. j* K* O, R    4=via AHB/APB bridge in D1,
" w7 z& }; `' v' X5 f4 T0 R% v! @- r' M
    5=via AHB/APB bridge in D2,
9 T# c- y/ y$ N) n; N% w6 R+ x/ T/ R9 e  s" L
    6=via AHB/APB bridge in D3,
) R$ [7 {( Y5 x/ f; x+ l: D( a! n9 ?1 T% d( l; e& g' F# U
    7=via AHBS bus of Cortex-M7,! j: k8 O  y& M9 Q# J# m+ Y, h

# [( p% u' _% d: p    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
) T' r# h5 d* I) u4 I5 U7 c! k
" n: e* w% y3 C. A+ y8 T/ B- j  总线访问类型& Q8 C7 u2 M8 [5 B
普通字体表示32位总线。5 H* i5 J/ d, c9 M) E
% @: t7 H3 e) O: D+ u! N% B( F4 M
斜体表示32位总线主机端/ 64位总线从机端。
0 D+ H5 \. A, I- r4 y0 g; e/ ]  C4 O1 D$ Z' S
粗体表示64位总线。+ u, ~( Y# w5 U) T) s
  T9 b) X" s5 }
通过这个总线互联图,要了解到下面三个重要知识点:: ~2 F; S$ Y- U/ C3 R& f8 X
! @  x+ R4 F) Y6 X* Z8 ^. M
  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。8 A9 \# r8 e, J, i
  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。, w) S( ]" |  Z8 D( u9 s! k
  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。
+ Y4 e( a2 F" j. t7 i" q$ K) x! i( K3 u# ]0 Z" J
25.6 实际工程推荐的RAM分配方案' A8 N  h1 u3 C; H1 l
鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。% T- Y5 G* m$ r* z4 d/ S( H: ^

- `4 H, |) Q1 `1 Q- d, R- e本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。
9 G5 }) n: ~1 W) b3 x- }
$ P6 t4 z0 _( k% b5 p. h25.7 总结5 u+ x5 r5 C$ J
本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。
" F1 g7 g/ d" o& w7 _$ {! L% z
3 N, j& T- W- t/ m/ j9 S
3 y+ R' {6 G6 y# J* a! a* Z0 _5 ?+ O9 }& |  |
收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似分享

官网相关资源

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