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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示
# ?' e. U# j, `9 |' g/ @" }  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。! s2 v! a8 W6 w# `& N) Y
  特别注意本章25.5小节里面各块RAM的DMA操作问题。! ^% [5 S" z4 B+ [3 e
& H0 R$ ?0 D' R) J, |
25.2 各块RAM在总线中的位置
$ N. T3 a: p: \( k5 E这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。
6 J. t" c. z( }8 C  V* t9 D7 ^4 [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

' S$ C" _: w0 O7 ^5 N, x. z
9 b' z  G" `4 p: t( H1 [这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。
$ o) u2 R' N# @* ?1 @; x3 p0 r
2 u6 u% {* f6 r; z1、  ITCM和DTCM
7 ^  u( U4 \- u3 n+ Z3 P4 `
7 X$ j% t9 E2 V9 B) f2 X这两个是直连CPU的。
1 ^6 R* j" w6 I4 P
8 O- M% F3 o# G2、  D1 Domain$ @" V4 l- d! V/ ^- M

  f; j3 [1 L! D6 G9 CD1域中的各个外设是挂在64位A**线组成6*7的矩阵上。0 U! A6 q/ ]5 t/ J: Z# U7 G( U+ f

& W2 L6 q/ E/ @; j# w1 H  6个从接口端ASIB1到ASIB63 z- y- n! |  m/ [" X
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。0 R( H! l" q: n% B
2 F# a( X* x$ E
  7个主接口端AMIB1到AMIB7: x3 W1 J8 g9 @
外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。
3 y9 Q& @6 p( ~0 L# T6 o: L9 b: Q  u6 W& f! S# q% |" ~
3、  D2 Domain
5 W/ o7 w& b6 P" E
$ ]  Q6 x+ |- i& {) z$ w! A& }D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。7 }' p2 h' J: J0 D7 L6 `

& E( \1 p  R+ s9 b  10个从接口
  |. n3 b, ?- R5 p3 u外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
8 ^) x  g6 `: z4 @2 H# ?3 v# D. x* \& a0 y
  9个主接口& }) s+ o4 f+ x2 o& T3 X4 R5 f+ ?
外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。2 C( |4 K2 g! ]5 G+ [3 V# m# K

- B7 }1 o/ o0 i4 x5 _3 R/ Z4、  D3 Domain0 C6 g# x& ^9 v% g* I( N/ w7 D
( i! U! `( A( g3 M
D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。& Z( N9 g0 P6 C1 S* b

( M4 C2 K' [6 a 3个从接口
, Q' v% K, Q9 D2 J; n8 w6 G外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。
* S+ n- }# M( y4 E) P
" M9 I& m& {& `* p 2个主接口( \+ C) g* f3 `) n) q" T" E7 b5 ~
外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线
' ~3 W- H: m, [1 v8 t2 ^2 K
% x* y4 n/ [# m3 ]25.3 各块RAM特性
! k0 i  L9 a9 o: s) K
各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。( m) V/ d  B% d4 J: [
: L- D9 h! ]% E) r5 \
  TCM区
4 B$ _# Q) A  z8 x7 A5 g) ]TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
7 d" b# x4 I0 E+ g) u  r3 _
" ]1 f- x$ n3 t! e速度:400MHz。
5 g/ Z2 C2 O7 S& @/ c
: g6 `. v6 b, r. ADTCM地址:0x2000 0000,大小128KB。
* u' P" v0 N0 ~6 U2 v. [2 n+ P$ S' i3 K% B, P# q9 i
ITCM地址:0x0000 0000,大小64KB。: ~! S" C6 I) F' g$ }
9 E2 q8 g) b- O. J# q8 s
  AXI SRAM区- c5 E$ C0 \9 s) [$ L, }/ d' `
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
' \8 Z2 q- h9 i/ ]) t' t; _! ~4 Q* |7 R
速度:200MHz。
. H1 k, ]$ U. H4 [2 s+ `4 h3 p6 {
地址:0x2400 0000,大小512KB。
3 E1 t+ j  D+ L3 E, p9 Z$ F* `& c( q" A/ ~1 U
用途:用途不限,可以用于用户应用数据存储或者LCD显存。$ b% Q! L, p, `. m. q& v; J5 J
7 A+ C+ c; P; e4 ^# u( y9 a
  SRAM1,SRAM2和SRAM3区" g0 @) H. C6 X' R/ W
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。
6 X& v2 v- a0 Q- n# L! w' G4 G( R- v4 L1 X
速度:200MHz。4 @1 p$ y: c0 E$ n6 h& p
2 {& f/ ]3 Y! s6 w
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。4 l1 E# P5 c) y# b2 A6 b7 U

, E) S- M2 \6 o/ X# {2 PSRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。4 a$ x% o& m  Y, O/ t' z
9 u# i$ e( w* _3 ]
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。, ^- W3 X/ C  _" ?# A
5 l7 k2 \5 W3 a2 I: t0 y
  SRAM4区7 g5 J+ `0 G  a$ Y2 F" {0 x
位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
3 F2 o6 Q' d3 @8 E
3 q: `4 @9 H6 J( x# K3 n速度:200MHz。. D' x# v3 F2 G4 G: P
) Y9 z( z" J) K7 E" @% X# T5 T$ E
地址:0x3800 0000,大小64KB。
  e/ N: q: m8 Z) _$ s8 o8 d/ R% x& c( E' B. g: n
用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。& L9 {5 f, T6 G# B% s& p& q
9 X! u  @7 M' o" d2 J& q
  Backup SRAM区  j; F8 @; x( w- j
备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
  ]& r. j* D7 X4 Z8 ]4 u2 r8 P1 O/ {
速度:200MHz。
# M/ J. t6 T9 e9 S$ H$ `
' T" T8 C6 v5 W% ~. g* |0 i地址:0x3880 0000,大小4KB。8 J- V1 r& ^6 [7 z* J& ^* q! H! i

6 K$ R  k4 B) f; M用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。' c  N+ i( r, o1 o8 b: C
6 X% X# b+ p* v. n& i  I" o
25.4 各块RAM的时钟问题
6 Q3 A% Z0 ^. g# G
正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。7 P; r" ~  G% ~  F- f' l

# e7 b3 p$ a( S9 P, A2 t
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

7 ~1 e' I5 m3 q6 _/ w% S. o% S# `( e/ j0 L9 t$ a
也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
  ?; Z) E0 {7 o' Q( y5 Q8 F
. ]' q/ S% B6 q! p, F对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:
" N7 g' v$ H/ P  |. m9 S# }4 i; Q' j$ ^
  1. #if 0
    7 A& [$ }" \" y
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();
    * ]( I0 d( D# T7 o# G
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();
    : i1 U3 Q; l" G7 k$ C' O
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();% |+ ~7 A4 G% m4 L. z+ Z
  5. #endif
复制代码
$ [; \8 g+ G1 _1 L
25.5 各块RAM的DMA问题. E& K6 L; x- h- B& Z' P  i4 o1 F8 f' o
了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:
+ y6 N$ v3 u  Q* X7 @! y
3 D7 a7 Y% J2 E+ }7 e/ W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

8 S0 U! T. ^4 G  l4 J! C0 ^4 e
  ~- v( |9 L- b0 x3 d  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。3 A; C; G) u2 O6 K
  访问通路(每个小方块里面的字符)6 s& R: V. [' Q7 t2 Z
    任何有数字的表示有访问通路。! t( f5 @6 Y. Q) |* h

, v- a! H, @6 m* P; w    短横杠“-”表示不可访问。
5 Q: C1 u$ q  V* `9 ?, ~8 ~0 ~# m
# w9 x) O: g( X( o; y9 A; t1 ^    有灰色阴影的表示有实用价值的访问通路。
/ C. @% _. K/ M. M, N- l. t: c
$ N+ ~/ L/ h  g7 ^! ^  表格中具体数值所代表的含义/ F' {. c* S. E3 i5 ?
    D=direct,
; U" u1 Y: C$ |8 W2 R) ]7 y! h( G7 @* i4 V( y# {5 }& T
    1=via AXI bus matrix,
3 }. {! ^4 V# q. C2 S2 R$ Z3 o5 F4 b1 N& d' }" V0 L! Z
    2=via AHB bus matrix in D2,) F; }, l! {- {/ A, a( G8 ~
4 l3 [& S, d2 n
    3=via AHB bus matrix in D3,2 N2 n% M. E0 j- q. N) P9 d
! \2 {5 G; a* _+ }' k  @6 M4 W, Y/ z
    4=via AHB/APB bridge in D1,# o8 o$ o+ Z" }

% ^' j. S; k0 ?' @$ G$ }9 _    5=via AHB/APB bridge in D2,- h* C- s1 }2 G

8 I7 x/ ]0 X, B; s2 ~  n) r    6=via AHB/APB bridge in D3,1 Q( r) U! F2 j2 K! d8 [' C2 B: x

' r" O4 ^, F& J  I( h, Q4 `    7=via AHBS bus of Cortex-M7,: y9 M0 }- O" w$ Q2 V
2 ~# X. U7 }& ~0 w
    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
6 c/ ]$ @+ I* u$ O1 p& q
) |9 _5 x( W) M8 D$ F  总线访问类型' ^* a% E1 [4 ^$ c  ]
普通字体表示32位总线。, T) o/ Y& L# u) |  q+ ^6 F" q

5 p( l' k% A% X( v) q3 j3 N8 v斜体表示32位总线主机端/ 64位总线从机端。
4 D4 X8 @, D- e% B' N- t3 L. f* c; j( p% ~) \, i2 V( y
粗体表示64位总线。
1 d/ q% ]; K/ T0 A7 h: c+ Z
7 e: R( @+ R# m+ y  |% a# J0 n( w' m通过这个总线互联图,要了解到下面三个重要知识点:/ T, \2 I6 k1 N" _- I
" V# M% ?3 s" v
  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。
% \/ Z) r3 V8 @$ }$ I- A6 k4 A# Q  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。
9 R+ v2 q) P, l  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。" w4 U" I$ a  N/ E: H

, v5 p8 |6 c  v0 O4 S: L25.6 实际工程推荐的RAM分配方案
: d; M. e+ ^: a, S+ g) z% g& m, ]鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。3 B7 D) z" i/ R) _

8 Q/ K8 F6 j8 u" J本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。
, [+ J+ o" K: Y, c2 m8 R/ p8 p5 N- c$ n* K$ e
25.7 总结
- x7 A. ?0 f8 m, i本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。
& _" ^6 I- k5 {3 j( U& X" w* E$ g% E  G$ I* v( p4 e- X  G( B, b

4 @- n9 i7 S  N" o) R/ M5 a- z9 S" A* U) B
收藏 评论0 发布时间:2021-12-22 13:22

举报

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