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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示
7 |' F; I/ n: F2 b  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。2 ?: x8 n# ~* s% K
  特别注意本章25.5小节里面各块RAM的DMA操作问题。
# w3 G: h( k$ j; m( ~( S; R: {# i! _7 t0 |" g" s
25.2 各块RAM在总线中的位置7 v- b& p) F3 Z  b6 G* S$ }
这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。
5 K( E' ~0 e5 G$ o/ l  @
) ]. s. ?% b0 {9 R4 s% W
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

3 ~/ v( |1 L# G: K1 {8 U
2 P8 O# V* R; y! V+ P/ g这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。
, ]6 J+ W  X/ g
: c" R& N4 [$ l  E9 }6 I1、  ITCM和DTCM7 |* p! C) Z8 R
4 [- j- @# U( s0 J
这两个是直连CPU的。* ]) r( T0 _* F$ Z# k* C5 U; }
( f% |, j% C2 z* O" ^- ~" a& }
2、  D1 Domain
( Q" `7 p1 V2 I/ v$ Q* J
' ~, _+ E& M9 RD1域中的各个外设是挂在64位A**线组成6*7的矩阵上。! s7 S% g0 I' P/ a1 \% P

6 }1 T7 P- F1 q. @/ k; h$ G3 ^  }  6个从接口端ASIB1到ASIB6; ~, k3 R9 i, b' J
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。7 @; _/ ^/ ~1 [5 ?1 ~
  r" j1 w) \5 _. E! x0 m
  7个主接口端AMIB1到AMIB7
9 g0 q; K, n+ g) U1 \, G/ Z; ^外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。- D, O: ~, {7 K' Q7 _

5 ^* d! ^# o) q! c3、  D2 Domain
: Y' a) }; {  H' A( {" L! T1 @, R" r4 E; _7 P
D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。
/ Z; N% j- T0 W, t
, Y! a4 l* e7 e# u  10个从接口( C7 o' J7 g6 |5 ?* r$ V5 C
外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
  A# }% d& K8 N
, E, q4 n6 a  w# C7 p- a2 L  9个主接口
  ]. m, Q9 }- g9 @外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。
2 |# A* u. A+ A+ b5 o
: L0 L" g) Z) V+ f$ N& }4、  D3 Domain2 M4 y+ X4 F7 E( `; ^
* P3 {% A1 s& j$ W: f
D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。
( a' T2 n* ~( A- U: ~' A1 y& R7 j$ E% u
3个从接口
  z9 W8 n& {0 s0 M! f外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。5 r- j( O: }: u) _: ]# C
3 I2 `# ^( {7 W6 e6 L5 T/ g2 x" B
2个主接口3 p4 \. ~* G8 T; x# O- H: R
外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线2 [' l  ^5 z; p

* p" A; x  r0 i7 t- I25.3 各块RAM特性
9 Z1 b  s1 f7 ~/ C4 q; a  p! }
各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。/ g: c, z3 C! d+ {# x

8 U1 R$ z% e: s9 H  v% |: y  TCM区+ J" e5 z9 L4 T
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
) o* J& }$ V  z# q% ~( T& Z: Z4 V8 s! {; @' ^7 m2 A9 G' U
速度:400MHz。
! V+ [4 g$ t  c' z
" Y- y& g5 i# n! E# t- ?DTCM地址:0x2000 0000,大小128KB。
% J, D+ x+ D2 O6 Q3 j. u7 b& C' ^) P9 Y8 y( M9 [
ITCM地址:0x0000 0000,大小64KB。
' \& |- n  ^8 o* l
. S# ]1 V& U  {" o) ^  AXI SRAM区
9 `) t; F6 W  m  b位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
- g9 _0 R& ^6 U% l; s
5 F4 |/ p' i2 }( w& v速度:200MHz。
" ?8 ?8 U- C0 a. |* a# v% L
& m8 K/ }* B0 b9 @2 L地址:0x2400 0000,大小512KB。# W/ W0 d* ^5 G! \
+ A% z" h% e2 S; e
用途:用途不限,可以用于用户应用数据存储或者LCD显存。
. {. E% I8 N3 F" L# o3 _, y' I
- C2 R7 a7 k" z5 {  SRAM1,SRAM2和SRAM3区
/ C, w1 V& y: r; |位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。
, q, U  z! A  f7 E/ W6 c$ i5 t& K3 c6 e6 ?5 h; ^1 H4 i
速度:200MHz。
/ ]$ N7 b+ J( Z' V
4 m3 v; A7 C* FSRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。4 V& |5 w* Z# O, f+ t
. j9 s% z# m$ I/ l% `
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
1 W# |( y1 Q+ A4 ?
. E- F7 K% u4 GSRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。  w" s: r* Q/ g4 h# X/ ]: o
+ I  D! w" W: K0 i, H6 v& u0 L0 o9 n
  SRAM4区
* B5 o( u3 X4 c1 ^位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。9 [1 {9 p. @$ T( [9 q
! l, t9 X' ]# s1 f5 ~
速度:200MHz。
4 e% ]& u' h$ c% Q; s
3 y4 v1 c* g. I7 z( Y5 `+ i地址:0x3800 0000,大小64KB。# S& V7 X. d  [& B9 s

, X7 T8 t& v6 k% D' M2 R- B用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。5 {# j: b' C9 w+ g! p0 i1 v
7 ~" }; V; T. r: v6 E
  Backup SRAM区/ j. G& |3 C+ R  o4 C. B
备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。# a' [1 G3 [# C# J
* K8 E" r. R$ w& x- i6 p* X( i# |
速度:200MHz。, C+ _9 o$ \* d( ~' y$ m; L

: H/ \# l7 x' A7 u+ R# A地址:0x3880 0000,大小4KB。
9 K, D, I" {* V; _! g
' M. I4 A& A% b  g9 o& V用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。
, K! L6 g3 ^+ ^, E. f" z& t
. Q; ^" E% w. z8 D% c25.4 各块RAM的时钟问题
' X$ A+ ^0 m! X' G% k
正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。
- a/ E: `+ `: G9 V7 ?" S. [% q. l1 d( P/ u5 w$ z1 e
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
6 [; S4 ^3 w) Y! B5 T: _3 w

/ w0 w9 M7 ~8 @8 q/ X也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。1 E5 O6 Q: q! w- o1 b4 U. {
1 P5 O! x# Y- K* v3 W. U2 [
对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:$ Q  [1 u, a6 I) u

3 x& o  {/ R7 D9 N" B
  1. #if 0
    4 r# \) s  |  N2 D6 c+ z
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();% n/ ~- f: L; }2 x* ?, L
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();2 ~& x# u0 B& \. i3 y
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();* X1 B3 L5 {' [
  5. #endif
复制代码

( L7 S5 V2 R) g6 f/ F) |: W6 O. n25.5 各块RAM的DMA问题% P( h' b3 U/ \4 b
了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:
: g% M6 @2 \; P# I$ ]$ y$ S) d3 g  Z. Y- S4 m5 N; z! ]
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

# k' |" y( s. x, B' c+ V
. Z/ y( t+ i# Z% a6 C+ n  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。
6 q. b. v4 ^1 z+ a9 o  访问通路(每个小方块里面的字符)* X. E, a. Q; i$ O, N) `
    任何有数字的表示有访问通路。
- G. V  m4 o/ z; v$ ], _5 x4 M# G4 T! t
    短横杠“-”表示不可访问。
* O4 D' Y# U9 T
# K5 d5 N. K8 J9 z1 r    有灰色阴影的表示有实用价值的访问通路。
5 C) Q' P& p8 r8 l! z( G& X' P- _+ {, W! r) K
  表格中具体数值所代表的含义' v% q/ z0 ]$ t& a: p- J
    D=direct,
( K. I, L' v! n( m0 I8 i6 O( i. O5 \, B0 O) C1 \
    1=via AXI bus matrix,
! P0 o: k2 k0 x, b7 ~! U, x9 q' X
8 x: i  `& |9 }) I$ ]: W& W2 @9 s    2=via AHB bus matrix in D2,
# o! P# d+ U) n- m, t2 _! A
  O0 E# ?3 I0 ~6 ]6 v7 M    3=via AHB bus matrix in D3,  Z- Z+ g/ ]* [

/ q; V( w5 D$ r5 y. F    4=via AHB/APB bridge in D1,
4 |  [- w. q- x, m3 V9 Y7 S/ C
    5=via AHB/APB bridge in D2,
0 Y9 U6 z: F/ w3 i  K  x6 y5 S( R" `1 F; h
    6=via AHB/APB bridge in D3,
% @) E( K* k* q0 f+ H2 p9 I! }1 m8 ?9 t8 ?& Q* K2 y! _. U+ |/ K
    7=via AHBS bus of Cortex-M7,+ c7 U9 F% n5 ~4 F1 S5 _& r# G

, J  Y) {$ z5 i    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。; R  q! U2 Y# }( g/ y

9 J* D9 x4 D- j6 q$ J  总线访问类型
) t0 }3 {5 Z" p6 P7 d, A普通字体表示32位总线。
9 U1 K; s) k, o* I1 }' U, g; k0 k/ f% h' R
斜体表示32位总线主机端/ 64位总线从机端。
$ l8 L/ ~  O* K5 v
" ]! v# d# h$ m: }. R粗体表示64位总线。0 u" e0 Q! C! J5 ~

6 h' u% |4 H! W  D通过这个总线互联图,要了解到下面三个重要知识点:! t# M2 T+ c2 X* V
# a6 F1 L' b1 x
  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。1 `7 ?. U4 A4 D! K  _+ Q4 X
  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。7 Q8 ~' s' [: [
  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。
3 s# K' j8 P" d  c, i3 d# G
. g5 h7 R0 L" M. d25.6 实际工程推荐的RAM分配方案
9 _" K0 ]  p" m; Y6 d鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。
+ @0 y" p8 ]% e/ F( i, r: j( l, |" N' e) _; }- s) o+ C, k
本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。6 K" E6 }5 t: }+ d; G8 r- P
* o+ p- c% S% z7 L/ J+ C7 L
25.7 总结
0 {: Q1 z4 n8 z6 ~  Z% V本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。
* Y# x) ]7 r5 p7 v7 v2 m- }, q; K! M$ s+ u8 _
# |  ^& x) h. k
8 I- t, c  `7 W
收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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