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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
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在总线中的位置
0 o' z4 i( |) X- ?2 H. ]这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。5 o. S2 b: ~, ^2 m; E; s" u; C- H5 g3 e
8 y  [$ |3 ^1 Q8 X) H+ c  d
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

( i$ f4 w" g1 P" m" F' b/ h; H; Z% Z0 N$ k7 f2 U& t
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。
2 e2 x, X8 V9 N9 a  ]! v8 M. g* L" a  p  c6 V
1、  ITCM和DTCM7 c3 M7 G! v  P# N# u, u! j

. ]5 ^& U& @( b" {) G* M3 o( x* E这两个是直连CPU的。
; s9 @! ]0 u1 X" p6 p- k6 _0 o( q* ~/ d2 B2 l& ]4 g
2、  D1 Domain
; d: `4 _' v% l2 |7 B  B6 g
- Q' m3 R; G0 w; P$ y' fD1域中的各个外设是挂在64位A**线组成6*7的矩阵上。
( S( ?4 `) C" P1 |) D4 c
" h* |7 }8 j0 m/ v1 S  6个从接口端ASIB1到ASIB6
4 e0 w( G0 t- T3 M  G4 D外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。8 |* m1 ~: c% h, x7 r  ~; \
" ~: Z9 \$ e1 t
  7个主接口端AMIB1到AMIB7
/ }. m$ x0 v7 v9 [. s* w5 w外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。
5 n1 K% ^( _, F+ D3 d: o
' k# M" m& l' }, W3、  D2 Domain
8 \) X8 _+ b: }1 b5 I9 y1 K
( i' g! P/ Y& n- B/ y( t' ZD2域的各个外设是挂在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个主接口
* X! ^' X1 Y+ B3 t4 ?5 e# _# q外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。8 t  c5 R+ m+ B& J

% x. h1 [  T0 q& h) ?% l4、  D3 Domain$ A! n7 ~( g" S

: {& Z" f6 D$ y; m! U2 LD3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。) O% ]' m! ~2 i# ]8 q$ y" l  k

3 x% J5 R' n* [( t6 Q& O 3个从接口* X1 l9 t4 m0 H% J* f% J9 H$ S
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。
, {, @1 q8 W: `
; W, a* p; X* m# ]! P; T- |' v 2个主接口) c9 ^  `1 t: X$ Z
外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线
1 ?7 |, D- M# I2 E! G, G
8 `6 [; y% ]; D2 S$ T25.3 各块RAM特性
  w6 L# k7 c+ U4 F# O
各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。* ]( s* p! t7 C  |7 P

/ r3 x/ b; J' @5 `' l  T: Z  TCM区
! a) a. z0 _, E7 c, y, J8 }8 }8 ITCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。0 a+ W$ T' t! z% p% e

* b* L; j7 F' {0 [) X" D速度:400MHz。
+ p- |8 z: o) Z% |! o# V5 c' @, L2 n; U) Q1 b" e, l
DTCM地址:0x2000 0000,大小128KB。
* M" N! _* ?2 W: d9 ^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区
. j+ |$ l! |; ^: v0 G) h  c$ W9 X位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
" A; O  Z, y7 x, ?9 d4 W) k$ X# u, ~8 J9 b4 J1 {) ~
速度:200MHz。* z; g0 w2 R" m" z0 \5 w

7 Q% N0 ~; ~7 C6 r5 f% z地址:0x2400 0000,大小512KB。
- a# u1 E- G# l: N/ `" p7 ~, y; r& [, a
用途:用途不限,可以用于用户应用数据存储或者LCD显存。0 h* i$ ~! I" n. [- v6 Z& L5 L
8 L- N8 K0 U/ h) B) m
  SRAM1,SRAM2和SRAM3区
) W1 H) P/ f2 x! b& t, B8 G; M# J3 R- g位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。1 K) I8 }) k7 [1 K  J) ~4 `
- N, m" m  n) O3 ]* t
速度:200MHz。
' P: f( W% a3 w0 w3 k0 q- {) a" Q4 L! X
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
3 W) K: h* M4 D: S3 n+ X
& ]. q2 b4 J6 x; d4 z+ ESRAM2:地址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区
7 f6 q3 `/ v) G2 H位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
* u" I, a+ U1 I1 h/ j. t! D. ~& x! U" q: o
速度:200MHz。- t7 }, b# ^) v

( d( i/ C0 l* ^/ Q! O+ a地址:0x3800 0000,大小64KB。
" V) [/ b  e6 f" f  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

$ z& m0 {; C, \" F$ T: X( l' R  Backup SRAM区7 Z: |1 _2 Z0 z- G
备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。+ _0 g) I7 m& y' ^) k

' q4 j9 {) u3 S速度:200MHz。
- u  j! Q  w& g+ @, U+ O! u8 ^
  ?' C  b5 i4 Z地址:0x3880 0000,大小4KB。
+ ]! |* R" y% }7 z7 B9 V. O  e3 a1 ?1 F
用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。
6 ~# D- w8 j0 O1 @( w% z
# e. w. z& z7 [( o- g25.4 各块RAM的时钟问题

9 A& M( l$ G2 ^; D正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。
1 [1 |, G1 }$ O% `$ ~, ?; r5 X
: W( u! l$ ^* U0 V+ y
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
" F: B( u4 a1 }5 z' O7 A

/ A. b- }2 U, g4 {也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
/ C1 d- p( z- e$ m! G$ ]
4 K, N5 {4 W5 t: X- I4 n6 K& {对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:
5 U+ V' p4 _* L! J4 g2 h* x7 T# B4 u
  1. #if 0
    6 W1 o  I2 o+ S; ], Y
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();- [& g1 n: H& L) n8 C
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();- H/ H, q" W, @+ _( X. I
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();
      F6 F* ~5 n7 H7 i7 n
  5. #endif
复制代码
/ C6 u- ?6 |0 B) B2 g( u
25.5 各块RAM的DMA问题8 C. P3 S" t' Q# B: M
了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:
) v0 D3 u# W% k; M3 d; G# C. Q$ ?+ Q, d0 b" O) T. A% o
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
3 p9 V8 w# Y) S5 t. V+ s
* 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; |
    短横杠“-”表示不可访问。
6 U) F/ R0 R+ v+ X
) H+ M. z7 n% J    有灰色阴影的表示有实用价值的访问通路。
/ a3 H% G' j+ T, s+ i+ ?% _4 ^% J' 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,
5 U2 ]  G1 ^  C1 t. Z, C! F# ]: n# A: `( H
    2=via AHB bus matrix in D2,
+ w6 q, r6 `" v% e$ a  `. v9 F2 m3 O3 d; l
    3=via AHB bus matrix in D3,
4 R: Y* S) _$ H! J1 ^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,
8 G4 C! B) K& ]! |, y: s* {0 s* u; t4 l1 Z3 t( s+ \8 E
    6=via AHB/APB bridge in D3,* M$ y/ f& p5 f3 {) o, ^

* ]# `) ?" s+ F. l0 k    7=via AHBS bus of Cortex-M7,
& x& v. p! ?3 Q4 i- j# B- P$ Y( N* p. L% z) F! M
    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
  z* K- ^- R+ e% |2 R( v5 G# q4 P4 C+ a0 g# n( q  C: `
  总线访问类型8 q3 x' B4 b( a7 L# G9 L
普通字体表示32位总线。+ e/ U& D- t& y/ x

8 K7 w: w$ c3 ?" W, h斜体表示32位总线主机端/ 64位总线从机端。
# C6 n3 t6 f- Z
7 D, }1 q- l( ^' L粗体表示64位总线。
3 h) E& V* h* l% w( `+ D7 N& L2 h1 E3 ~! 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。
% l* @) A' Q8 D: C- q0 [& s8 M1 H! L0 P2 `
25.6 实际工程推荐的RAM分配方案
6 f. `6 @3 j4 E) h鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。
, D4 `/ i+ s6 z! u$ n
/ k1 X4 O% B$ W7 x本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。  w; w7 x5 c+ y' [. U. o

8 \+ l4 m% ^5 h3 l25.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

: g9 O0 b2 z2 N# I9 w  J; [
收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版