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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示) c* o3 H. ^. [: n: Z: D9 S2 b* X1 U% U
  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。
$ A, T7 t2 |4 z  y2 F: H: o; t  特别注意本章25.5小节里面各块RAM的DMA操作问题。. T: S5 D0 ?+ d' E
; U4 c9 h4 W  ]( z! i1 M1 g
25.2 各块RAM在总线中的位置
4 Q7 ?' A! N* `7 @这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。# M& I& x* ^6 ?/ G: A  \  e

( u, a5 [* N& ^4 k! J
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

9 l; Z: i4 t: Y' z6 J* c2 H/ i6 u
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。+ X( d1 `5 m0 z( J5 {
: {6 T! n0 ^* d
1、  ITCM和DTCM9 I) L  ^1 k- r* `- q% A# V& |0 T

& R  X& W8 x! U1 ?" R这两个是直连CPU的。
$ _; \' _  O/ z
7 J4 G3 a# c' ^2、  D1 Domain1 x  Z8 v) }: C2 d1 |3 S; A

; [( t* s' j! n  p0 P9 Q: kD1域中的各个外设是挂在64位A**线组成6*7的矩阵上。
6 \+ c0 j, h5 x  C$ K  d1 n7 }
  6个从接口端ASIB1到ASIB6
: f* [$ k& M% f$ I2 d9 F外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。- |, T  a: r5 F+ X3 {
, h( s! k* @" {" a% c) o" q( h
  7个主接口端AMIB1到AMIB7
! h4 W$ F/ j2 H: r1 I1 E; C外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。
1 {' g3 V- P! m$ {4 p  K. H
( h" I& Q2 p) R- h1 t4 S- x3、  D2 Domain4 A' [' k* C3 v5 _# \9 B
# E+ [9 u& r5 P7 [
D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。
/ w- F" T6 f3 ]% j3 \: i3 v" q9 t# }% Z; D3 _
  10个从接口
$ M5 \0 K9 @/ @* A. N外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
5 }( a1 ~& p2 Q0 w9 i0 g* a1 L" ^6 z) k) e) i
  9个主接口
+ a6 A+ r- Z5 u$ ^( x外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。
+ s$ j3 |9 K" a& f1 G. T2 Q# ]
3 l) g- \! p6 r! G6 ]4、  D3 Domain# `3 Z4 V" X2 n: V/ j4 u' Y1 w) [

- Y$ i" @; L& j4 y% h2 d& k8 nD3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。
8 {3 u2 ]2 \8 O7 `2 u9 q  ?; c" z3 @# h5 a! c6 W# }6 s5 q
3个从接口6 Y6 i, V- |! h% Q5 U
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。
4 C4 f2 z* Q7 A4 J9 [) O9 A8 v
5 q4 g- Z1 l- ?4 W$ V' t 2个主接口7 V& M9 a3 i7 e: c. S
外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线
: x9 l# v: x! P9 q+ T1 m- O3 B) B! h- l: m4 O
25.3 各块RAM特性

( Q# R- D1 R! h5 g各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。
$ |$ }( _) c4 }' z) \; S! R9 q# Y! U% I# [  M
  TCM区+ |& Q) k# I4 ]" E1 k5 u9 G+ f
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
8 ?( j: @& Y% {
6 n7 x. H2 z3 t速度:400MHz。9 I. R0 I3 \% Z  X
# x/ s  h; B! u1 i- X7 K
DTCM地址:0x2000 0000,大小128KB。
/ M: B1 o2 m# W
. P4 }, K2 J1 |0 ~) [( W) g# \; nITCM地址:0x0000 0000,大小64KB。
. h0 U9 d* ^; {( |/ {( \
% y( X8 c) |; B9 N* N; L/ W" s  AXI SRAM区
! B# q" A& n' d4 N# P. Q- ~" Z% K3 P% n, _位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
1 n; {1 j8 S0 z0 s
- J* Y2 h2 v' S速度:200MHz。. G/ o, @1 O+ ^2 m6 K7 a
, ]$ [  a; a. W" z; w4 k
地址:0x2400 0000,大小512KB。' J$ O3 T' @/ T2 u
" g: [5 T/ G/ A
用途:用途不限,可以用于用户应用数据存储或者LCD显存。" y( D, P% I4 W8 G* n3 b

( K: e. [9 b0 {3 [  SRAM1,SRAM2和SRAM3区2 j( s; w9 J" Y/ H2 H: ~
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。% C$ x4 F$ N, g9 _6 d

8 E& C8 N+ E! b5 _* Z7 K, G. Q  s速度:200MHz。! @/ K9 f& ?1 S- B' u  t
* F9 h+ [4 z$ i. t& }! ^
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。! j0 `0 o6 P% \

3 x) {" j; x' v' ^! w: ISRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
7 e) M# g# e# [, R: {0 S; M3 c2 _0 Z" a* Q4 t! \
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。+ b- r1 x/ Q- W2 D, S+ B1 ?, l7 Y" b" D! J

2 J. d6 l; N$ f2 N; w: v" g  SRAM4区
! p3 S" e+ i8 s3 s( q1 Q$ N位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
6 m% X2 m- c7 n* X6 w
0 E4 J+ ?  N6 {. T3 N速度:200MHz。2 o% y  u! r7 g8 S4 b; @; L

( Y* a, B1 ~" j7 X+ _地址:0x3800 0000,大小64KB。5 G- ]* E5 _0 a4 `7 Z

; M3 N$ \8 S$ T  H$ D' w用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。9 {, [8 u8 Q7 ~8 B
( j' B( E2 `7 h$ D$ [- x
  Backup SRAM区
8 J1 F2 o$ G. j3 ~& X备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。. C+ i8 W4 W& D5 C9 {
/ D, O. q/ ~; S6 c. d: F
速度:200MHz。
& [# z$ j# t0 W" N( D$ l* I
* Z6 e% J, S- o9 I4 i# a" `! y地址:0x3880 0000,大小4KB。6 W+ ^+ k! O5 x! y2 [. U

7 v) ^8 P6 @: V6 t用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。
: h0 u, n% X1 p3 l2 b8 P0 E( b% q1 D# _- e
25.4 各块RAM的时钟问题

/ u- w% @5 V8 F7 }正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。1 v  {" s& |9 P% g
. l( ]4 G1 U. d. z( _: v) I" N
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

# [* m; r7 b# U8 o' P; L4 K6 E9 ^1 G- W6 \- h& f- ^. U
也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
; I3 e3 a8 F3 I1 _2 w: b" g; B) K6 N; o6 m: T
对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:" P2 y* ?, c- T7 S8 r9 K

  u, J* f) h6 c* }6 T
  1. #if 0
    6 S/ o+ \1 T- [9 v% \) Z
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();' V2 C( w/ j" w8 {& Y
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();
    7 |7 }' Z6 `1 N; j0 q4 r7 S1 O, T% m" v
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();
    0 \  n8 @" t; N, t. t. Q! B! E$ V
  5. #endif
复制代码
: s, [2 A! G; q8 O# q$ g* Y8 f
25.5 各块RAM的DMA问题( I; ~2 h8 U  ?5 v5 l
了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:3 \6 H3 D6 g* X% n# a8 A
5 {5 q- V/ a$ }& n& k. o# U3 e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
8 z( i1 E1 Z0 l8 V4 n" J. T

; v" d' A  l' U2 q& ^# E/ I) J" U  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。* o1 a( b* a5 i8 a
  访问通路(每个小方块里面的字符)
4 r" A2 l, F3 s0 A5 @3 ^    任何有数字的表示有访问通路。
+ W+ g' o. M* L$ ^9 Y9 ^% F# e. o- F. T6 p! Q( [* ^& S" C
    短横杠“-”表示不可访问。
- i% b" U) ~: i5 v; j, ]/ P' h$ s0 T: r
    有灰色阴影的表示有实用价值的访问通路。
9 l7 B5 F3 h# n4 {  O& a9 ~5 i" ~* ?! Z+ t' y. b6 `" e
  表格中具体数值所代表的含义; p$ t* _4 j6 c. R2 }2 Z
    D=direct,
! u3 Q: s1 o8 T! w( D. q$ p$ g' F2 y
    1=via AXI bus matrix,4 C3 p8 Q( K+ F# }, z

* Y$ w# r+ k0 r9 n3 v# [( _* p    2=via AHB bus matrix in D2,: o6 R3 s! e  f/ U% u/ c7 I$ H
( p, |0 y6 v: d8 m5 I
    3=via AHB bus matrix in D3,
+ V# c! T2 ^9 {. P1 u, V3 P# _& r$ L. P+ k4 z- E3 s
    4=via AHB/APB bridge in D1,* ^8 z( k; q+ E3 g8 t+ H+ `9 K
- Y0 p8 p& l1 C3 M6 F
    5=via AHB/APB bridge in D2,
$ Q  ]3 c( u) y% [
/ _" m! x; W) i    6=via AHB/APB bridge in D3,$ }1 g& t( i2 m' D6 s4 x) z

% b6 m7 d- A! H7 D    7=via AHBS bus of Cortex-M7,' E' P8 O2 P' o  T* g
5 ]7 z* C% H" Y- _# P2 U! R
    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
% F, N6 _# ^2 y& X/ V
' L; n% Z3 ~, Q' O! X  总线访问类型0 o$ I* s5 b. L; T, q6 f
普通字体表示32位总线。
% n  u, n( m1 e* T" o+ F
% I7 Y" z% R3 V+ ^' Y2 ^斜体表示32位总线主机端/ 64位总线从机端。
/ z7 ]8 u, W$ q# ]  O' m; P. }9 ^" t$ g  j( k) A
粗体表示64位总线。
: o3 z  B( t# ?( o2 j6 `/ w; _( b+ P9 G7 m" X5 C& X. B- _; S
通过这个总线互联图,要了解到下面三个重要知识点:' S( z1 v( t) o# M( V5 P

% k+ ^. j- r+ m8 Q# w  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。
! J/ L  k8 @1 G; g1 k% t  h7 d0 C  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。: k2 C  G; ?; b
  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。5 ^, i+ {* T2 k4 B& w4 X8 E8 @

7 i$ {% w- O3 k0 g. J: u; [- X25.6 实际工程推荐的RAM分配方案8 K9 w) h2 H8 b- L( ~# A
鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。
  ^2 p; N; |2 b4 e" k" \6 d- j
9 q1 f" \& \# z本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。; a, h5 e( I" H- b6 O5 f
3 V8 w+ R( K6 o" C- y, W7 L
25.7 总结
1 V( z) V& R( U  f. T本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。$ x9 x. O+ @1 @. _! `1 B
& B- p8 q4 y. ?4 b

1 O# a1 o5 q) {, l
9 p3 \$ i' e* P' {2 \. Y
收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似分享

官网相关资源

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