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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示( A! A9 z% j5 ?" |3 S8 M' _
  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。* Y( o  K6 J# G" }; _
  特别注意本章25.5小节里面各块RAM的DMA操作问题。
9 t: r7 C+ ^+ v6 j# D7 c5 G! U6 Y# Q" p5 c5 @7 `
25.2 各块RAM在总线中的位置* c; r- X. J$ R7 R
这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。/ G- Q$ K5 M) @( F

3 C1 u! F" a% q# d& E! V+ d
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

' U( n% G; U/ T+ E# T0 }6 `9 D5 h
5 l3 ?: U" v+ J4 G这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。; }% @9 F  m7 y' J7 J# D5 l

/ o( d/ m4 H7 W6 k9 `7 p: A9 w1、  ITCM和DTCM
0 I" O! i; J! k$ @) \
: ]% c! b" [5 d; _! g( P- B# H这两个是直连CPU的。, X. ?* b: N+ p1 T( e* F- Z

% k6 X+ @% `$ a3 B) z2、  D1 Domain% \1 h: T/ j" H3 b7 ~# P; h
. Z+ W, K+ \& ?- Q4 Q: o. \, ?
D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。
( |  U; P+ k! d: K( P6 n, h" _' x
" u3 h" {9 ]& r2 [* W' U  6个从接口端ASIB1到ASIB67 _8 k' d8 a7 ]
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。" Y5 a- T  |4 h: ?8 Y% z
$ u; F$ g' m, ?$ r" W) ]
  7个主接口端AMIB1到AMIB7
, e8 D4 G  Y( D) f: r  W2 d. k外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。: t* g* `7 K+ J9 t& d

; b9 p: v6 M5 T9 J& U  w3、  D2 Domain4 ~& i0 M7 c/ v1 m, q/ t0 \
7 ]- v: p( n* N5 K
D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。; B' |( ^  X% A0 {3 g4 f4 M
; }$ l4 y" G! h4 R9 T4 W" v
  10个从接口/ m/ _/ c/ Y4 `# v& `6 z5 g
外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。% G" d) `3 z# s9 V0 q3 }( q2 p

  V, Y7 ^: d3 u5 m! [3 X  U  9个主接口
% C% d" ^6 @3 j+ d外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。
. u/ B; v; U8 R7 G% g0 V& _4 T% o# S) E  w
4、  D3 Domain
1 x! }7 \  `% g( b8 U& G3 u, y- B  X4 U' R! E6 }; _: B/ c) t
D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。+ b3 C+ \, |1 q
& ?* z( j/ R4 L# |9 J( |  P) K8 R
3个从接口7 }0 }6 k& c8 e& q4 d
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。  {' V0 b; v  w. t( f& X3 _

8 ?$ M# V) h' b: d! h+ _& z 2个主接口
% j/ z  \/ c) V% K2 ^4 O1 x# S外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线  s- G1 @) I+ P6 h+ e
' F" X! R9 }1 S: b. @8 o
25.3 各块RAM特性

7 u7 X7 o; @4 |  k3 s各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。
7 a( m5 N+ w/ E) V( q% s' `8 M, i3 Q. ]7 d  H& n# ^& U
  TCM区- z! c. q3 K$ j0 [( x: a
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。- |: Q1 {; c8 w7 t% m3 W" |

  b$ V- U0 U. X! N: ]速度:400MHz。
) ^5 j+ [3 ^" O" M' x+ |
9 L# T# ]: Q! W2 b$ x5 ~DTCM地址:0x2000 0000,大小128KB。
/ O/ V2 ~1 N' X" m' F. I% x/ s, ]' ~0 {1 Q6 b" n. F6 x
ITCM地址:0x0000 0000,大小64KB。2 ^9 d5 q; r( i# Z1 G/ Z7 o
& J, e0 F8 [9 T/ {6 C
  AXI SRAM区# H2 `+ d1 w7 [" V( A" V( V
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
6 w0 M0 _5 o, s: {% \
3 v; }+ L3 v! l6 i$ G) y/ |1 H: M( n速度:200MHz。& Y; y. I. c0 N* h# ]. B

, L% |( Y* u8 n# L9 [地址:0x2400 0000,大小512KB。
0 u* v4 }7 [4 }  W+ z( `& G# S2 {2 [7 T3 j7 D; T
用途:用途不限,可以用于用户应用数据存储或者LCD显存。! b. j% X4 q5 p; A# n% P

& O+ D. r) s) I  SRAM1,SRAM2和SRAM3区4 S" J1 s/ @# }! i3 ~
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。8 T! z! U+ a; i+ m. W- h1 H

: X7 y1 e/ o, c9 B/ v! `速度:200MHz。
1 N+ _  z: ?  v1 H0 E3 Z5 _# g( u1 y  Q, v9 @
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
6 T  ?/ ^/ i4 y2 R/ w- T% F) L2 u1 W0 [. V" k' ?) Z3 B$ j
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。0 V/ G0 ]' ?2 {( k
+ u& v* u6 |. R2 c, R
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
! q& V9 P- r9 l8 R& }' B7 e$ d
. _* v8 a0 n7 N6 ?  SRAM4区; x" s( \( a$ i0 k/ y; l
位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
; A. }( M- Z; e6 o0 F- {1 F
7 w$ V1 i. T( L0 Y; W( r速度:200MHz。* h7 f  s& x" k: a
. y  f' Q0 `: D+ [+ V0 [* f2 }
地址:0x3800 0000,大小64KB。. w7 H+ R$ C9 C% D) ~* Y% j, g- q

5 s4 D6 m8 \& r9 ?  f" w用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。! T9 E* _# [+ p# E  B

) \4 W7 k1 Z# u4 R5 V& o  Backup SRAM区
: N- ]0 H( ?) P. q; N: l+ o0 R备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
7 G* `" i( h6 m2 S$ g4 k
) C1 `1 A/ U# G! ?5 l  v% F速度:200MHz。/ l: }7 e$ O4 U; G' y

; r& r: I* e% |4 ?! @. ]$ U地址:0x3880 0000,大小4KB。
% Y; }2 G1 e, U+ ]3 \$ d# o
, d/ K+ l" k  W$ X用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。( c8 Y$ @+ v/ s9 ^! k( d( T
- G; Z# }3 f& r6 H$ S
25.4 各块RAM的时钟问题

% u6 c' W# l4 q2 E4 R& S正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。
. Z4 }- U, g: M* G1 D: p, \' y+ s& q0 g2 A! D2 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
) y( u, B$ J( w

: @+ E$ B+ t2 G2 t* Z% e0 H也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
" X* g, Z$ ~0 [' N' e8 o- f+ F7 w0 B
对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:
6 F, G* I: y. p" X9 B* N( w8 e" m+ M+ m
  1. #if 0/ G7 W- H. p/ o% `
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();8 l" k& `/ i9 E5 R9 ^
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();6 X# A8 R3 `, L: x8 Q3 n" L6 f
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();
    7 @/ \+ h0 b; @6 O) f
  5. #endif
复制代码

( W. {) ~, Z/ t6 u, Z; U25.5 各块RAM的DMA问题9 i3 x/ ^2 w" D) a
了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:
7 T5 R: d* r. o9 w& n) \8 i6 X- f, c4 t$ L
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

& R6 g0 z( f5 \+ V! }
; {* o& J- }8 Y$ Z  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。4 H% c" V1 Y/ ?; k$ v: w
  访问通路(每个小方块里面的字符)! |, D3 V! j- A9 |- u4 h
    任何有数字的表示有访问通路。
: W/ x) y: f2 l9 o7 U5 r0 R" u7 M; O- _' j! t
    短横杠“-”表示不可访问。2 Q; d8 C1 X% B9 s

' g3 Z) |& V, A" ]+ e6 p    有灰色阴影的表示有实用价值的访问通路。7 l6 E3 K  Y( F# M- L/ {) ?

4 |* ^4 U' q2 }+ B' v! y  表格中具体数值所代表的含义7 }8 D" _% Q/ \; S  m+ n! d1 q
    D=direct,
" y9 f! n1 a5 k8 Z' t/ E
7 U2 c% y. a" @9 c# a/ @2 q2 ^    1=via AXI bus matrix,5 V/ a1 S% T) n8 s7 ]! m1 ]
9 |" y# t: N. \
    2=via AHB bus matrix in D2,
0 x, F/ Y& ~* H  u: s% [$ \$ I8 a4 j/ g0 S2 {, `" e
    3=via AHB bus matrix in D3,
& h6 O, D$ t1 p% V3 b  N
. g$ _$ I  z/ U. Z9 w6 P    4=via AHB/APB bridge in D1,
" ?4 x, ~: `7 R) R0 B' m! D6 _2 g9 A" F" s
    5=via AHB/APB bridge in D2,
: \; L, d4 N' F4 S; V) L" _6 ~8 ]4 g  v3 I8 }. {( w) ^% @% U" g
    6=via AHB/APB bridge in D3,
% A5 G& S+ [, U7 t: b& k3 B
/ n2 q4 H7 O# j1 I! A& H, A" N: {; x    7=via AHBS bus of Cortex-M7,- `' f1 I' [. n- w* R' b( Q

) y3 T; {; p" M9 a    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
7 o8 z" i# ]" n
* a2 X! V( b9 Q6 x% h8 r  总线访问类型
# \9 x; j- n. @7 G普通字体表示32位总线。& z" ?! o. O4 j& ?% Y. p

% L- r) `+ q* r0 O1 |& Z斜体表示32位总线主机端/ 64位总线从机端。
, W% A* @/ \# H8 O8 V
3 W! F- r( A' W% R# v* X# J粗体表示64位总线。
3 ^) j' P2 E0 k7 P4 a
8 Y6 q- M7 E% [: |. L通过这个总线互联图,要了解到下面三个重要知识点:3 Y3 ^4 @0 Z  T2 n" x, K7 F

* L/ Y( n/ O) M2 ?1 `' s# \  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。& e1 I4 X, {* m! t/ f, ?& J
  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。
* n8 |$ {: c1 ?; p. d. n' _' \& `0 E  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。+ A$ T) f) G& W7 b& S
6 ?. O  j, T4 E1 T' V, a* N
25.6 实际工程推荐的RAM分配方案2 f) h2 c/ l+ V; h, l, f! T
鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。
9 D" M% u: s- f1 G
; C- L" ]. w+ ?1 k$ Y4 J% w本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。1 P- t* ]3 L8 Z# @& f, M3 D

8 I! {0 G# C- V# U- W0 A& K25.7 总结
4 [/ c, F! T5 v本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。
3 m4 D$ {/ t( X. J6 i/ w& U( N& s- M0 d% H! [3 w' E( ?  a
& u$ D% p2 c( Z- P' v% S
7 f6 s6 y4 A1 `. Y
收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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