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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示; L% F/ R9 [1 G4 Y  u8 X
  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。4 U/ X; H* o! F, C- F; z
  特别注意本章25.5小节里面各块RAM的DMA操作问题。5 F0 j+ D# j1 i9 q+ T' o
9 t+ N8 N) @, \# Z
25.2 各块RAM在总线中的位置
+ l% x- I* }. }这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。
; N3 M) u$ X8 K! g8 p( S. t) f$ i8 [$ C# P  b- e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

9 X/ I. e. {; w
7 w! S/ Z6 k' @0 i  d. v这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。7 |4 t) ?- k6 _( J' ^/ T6 q
3 B1 M0 P1 J: s7 d
1、  ITCM和DTCM4 k) c1 j& C; I0 Z

! t. Z* H; [9 \4 ~% K3 E# I. Q! [( ]7 C这两个是直连CPU的。
+ q/ O3 i2 V  O+ V! |  k; `# W
7 ]" H# z3 L+ ?/ l/ i2、  D1 Domain2 W2 Q# r3 T% I4 |9 i. ?& Y
) @4 S1 b8 A3 F) [5 i6 f( v6 ~+ O
D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。
4 u6 M/ r8 i4 L$ G( m; t* p' Q/ p8 u+ \: r6 L6 c
  6个从接口端ASIB1到ASIB6
$ X1 e+ z3 L: E2 O4 ^3 |! I8 N外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。
1 p3 W+ _- ]$ ^+ E3 }1 Q% Q- C, z2 }  X7 b: {  `) g
  7个主接口端AMIB1到AMIB7# S. T1 I4 I# U
外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。% @9 V3 E1 m7 ]
4 v! f7 }9 T& L6 _
3、  D2 Domain
7 @) G. D3 B* E8 P; F0 [, C, _% _4 j3 d
D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。( Z+ `# u- \/ l# d, h

3 a7 Z' s+ R) z  10个从接口5 S6 b0 R9 b6 q' E  m9 [  `
外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。1 D! B' e( Z7 c. A# }. o
+ y' q! I: i* f' N8 X: m; l1 ]6 i7 T
  9个主接口
% Y9 M& T) U  Q7 v, \外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。  L7 N: t4 S) j2 T/ ^

; n5 w7 G9 B8 J" m4、  D3 Domain0 b, A  l1 G2 n0 ~5 y' c

+ p1 s& G# W& H  |) D0 `D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。$ t3 x7 ^# \+ N7 B* z0 T
% H/ `/ _% V+ Z( [) m: p
3个从接口1 Y* @1 o' h: U( M5 u5 K+ e
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。. Q' a; b( W* k- X) Y, Z
: {) w4 V9 O; w! \- {' \
2个主接口
& X9 d6 J: _. n. v( @外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线
& w7 T2 }7 H* V8 o  `6 A# @
4 B; E) o* E/ {25.3 各块RAM特性

+ n" c% T1 Z) E: G) U各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。7 V* g9 j0 i4 R- Q; Z5 P9 ~5 V
! Z9 e2 \# P" E" N
  TCM区4 q8 j% f: A4 K8 @% `  i/ s6 b+ @
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。6 O& C2 d6 x# _; C* U! e
0 `$ i9 D6 v. W. q. [5 X
速度:400MHz。2 ~0 Z" i( Y" R2 J9 d

7 [- j  S( z* Q9 A; H4 X0 uDTCM地址:0x2000 0000,大小128KB。
* }+ e! J# V# S0 {! f/ u$ {3 r+ H! K
ITCM地址:0x0000 0000,大小64KB。
: |- F5 {# Z$ q9 T* L. s( P& C% k" T! B, i0 V+ B; Q: v% q
  AXI SRAM区) S  U; d8 X" m) J$ j6 i
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
0 U6 y6 t1 k3 r; |2 ^4 x" K( D; t, U# l0 w& W: a
速度:200MHz。
( W' l7 ^* T) S. L$ ]) l7 v8 R9 P3 N& x, h' E5 K
地址:0x2400 0000,大小512KB。
& a) |! `5 e1 i* t# D: }2 t8 L/ ~% V+ ^1 r+ Q
用途:用途不限,可以用于用户应用数据存储或者LCD显存。; k# x8 Q6 _+ q6 o# s9 @: {. |5 F
# ?+ B/ Q0 `, k4 a/ B6 ]  @
  SRAM1,SRAM2和SRAM3区
9 S2 `9 g$ m1 F0 d' }位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。/ @* H" k% y% u
8 l3 k# b7 J, ~' k
速度:200MHz。
2 q) b2 n3 T) H' X. k1 m% b* v8 ?! }$ m+ l
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
* Q* u  X2 z) I8 W- |2 `: u* ~: t+ k  r; o; s
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
9 y3 \) U& H2 W4 H6 }$ t9 G
* Z- ?. p% l* e6 Y: mSRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。, m7 @& I: \& _# e- }3 \1 I# h

1 [; F( M5 q( J; S  SRAM4区
% n& _: }& Z+ ^5 I. J0 y+ T9 m位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。& d" d% ~4 [2 Y9 K! n

) O4 @- ?) X$ Y3 @- p) \速度:200MHz。
" w/ R# p! v9 t+ L& w. M/ |* A6 m- U
2 v* L+ n- ?2 Z9 W2 P/ @地址:0x3800 0000,大小64KB。, }" c1 m( ^6 z0 M. c2 o
/ T. W" v+ j* \+ a
用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。
8 [( q0 Q4 B( f- t' l4 E: |2 A7 a8 w+ t
  Backup SRAM区6 J5 \/ I2 O' ?( d
备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
+ x2 i9 T6 d! i# ~) r, L7 }1 R; I' J. [2 ~5 u# ^
速度:200MHz。
" [, \5 ?9 T1 n: x
: U/ k6 J7 E6 r& f. d$ i+ F9 d5 @. x地址:0x3880 0000,大小4KB。
" B+ B9 b2 [4 k+ l3 n7 t: s
( B5 H2 q- l  T' X用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。
% H0 D' W; l9 q( N) W4 C' K/ {5 Y/ |0 ]. L2 {6 t8 y7 G
25.4 各块RAM的时钟问题

6 R6 c1 B5 m/ h. S* _- w9 _正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。0 S. W" o0 _1 ~
, s& |3 m/ N4 T5 a
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

4 @5 w) v5 J+ ~) u
0 X  U; g% N5 j3 e# V也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。8 j' v7 l1 j( ~6 M/ T8 C% ?

0 x9 v! O( r. Y2 o. ]% x$ F对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:- E! d$ q; H; l/ c% _

1 @$ j  r5 o/ k
  1. #if 0
      F, ]" ]/ P8 f: O* e$ c3 \% r
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();
      l6 t+ S! @4 m2 w. H" ~7 e
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();4 _2 Z5 L2 d9 ^5 l
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();3 |- e0 A5 W( D4 f
  5. #endif
复制代码

# M! {4 o9 Y# D, g" M25.5 各块RAM的DMA问题
. w, O( ]2 o; g了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:
* |$ M3 r) ^0 `* u
2 m; l* Q# D# z8 `& D4 G
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

! F3 S) v9 S& t. t' L% N" N
* T4 O- |5 J) I  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。
2 C3 o  X! r2 k) |4 F# k8 u" B' |( R- I  访问通路(每个小方块里面的字符)
  o2 p6 Z. w! k5 x8 M    任何有数字的表示有访问通路。
6 |) L. i+ e7 k7 Q3 e- ^5 Y7 ], L( p; s1 Z" R: m
    短横杠“-”表示不可访问。
5 a) ^( t" l5 v/ b6 _% r9 W% v0 I! c+ h4 B3 y1 i! }8 e8 o6 u
    有灰色阴影的表示有实用价值的访问通路。' a; h! \$ }) B7 T8 v

+ l3 i7 u; S7 Y+ x  表格中具体数值所代表的含义
5 i. |* p! v- u" S* R  ^  t: ^9 F    D=direct,5 O+ ~2 q) K# z

7 U' f( F7 V2 I0 g    1=via AXI bus matrix,3 q7 H: Q0 g4 Y$ K
9 J3 d+ L, y# G" \& p1 p) p3 p) y
    2=via AHB bus matrix in D2,% Y% `" f: i/ G# T
- f+ |& W# B- G) ~7 p/ n( _2 m
    3=via AHB bus matrix in D3,
8 a: x7 `9 @& ~* h# H  h
! X5 d9 q: `, P: Z  |0 E5 K+ A    4=via AHB/APB bridge in D1,
  `: y) U/ J8 Y
/ q5 H* C$ i6 w& T+ }$ Y    5=via AHB/APB bridge in D2,
( Z7 z) ?8 o) C$ _
$ @; U2 n# t6 `2 }( K+ v) v. q; S    6=via AHB/APB bridge in D3,% p* F2 `4 s2 T5 F& L, n7 e! a
5 C) s3 s! _% f
    7=via AHBS bus of Cortex-M7,
  W* V% K# \+ P$ U0 \3 J' a3 a( K* `8 t
. z9 b3 t" J+ l    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。3 a7 _8 @% Z5 Q! |
$ `6 y9 h: c: t+ d. U) p3 _
  总线访问类型
0 a0 ~/ W* M, R普通字体表示32位总线。. W; ], G3 d- ?* f5 _
( N# A6 s0 H8 v+ Q: c" o/ l5 d
斜体表示32位总线主机端/ 64位总线从机端。/ {/ f. s4 Y6 K% t
" \% d" {, ^( k* ?2 A4 `
粗体表示64位总线。
( r# R3 q$ P; ^1 _" ~% B  L# [  u  r8 p. v# ?" @) R- t
通过这个总线互联图,要了解到下面三个重要知识点:' W- i! l2 R& v- i1 q
/ o$ \9 o* ^% H  F- ^0 w
  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。2 F2 X8 ~; [3 @
  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。( y& L. d6 H; X; c$ q
  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。
5 W: ~5 j' Z5 ~
5 }) C0 r: g* W2 I' Q! `. f6 q25.6 实际工程推荐的RAM分配方案
( j6 i. C, a2 W( }9 S1 C鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。
, `6 X. P4 b% {' h; t2 m( z6 s) L, l) z' f  z3 T/ `
本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。6 b  J+ n, R! u9 B
5 |7 T' L9 b9 h8 A! Q- g" V
25.7 总结
9 [. R% h0 O2 ^* T本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。
  w9 e2 s8 P. S+ W
- A( K' @, F+ g) P$ ]
# S; U$ w  N; g6 M& v% m5 W/ r2 o2 T$ u/ t1 X
赞 收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版