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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示
! v- g) M( z0 Z' \! ?  X  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。6 |" e+ y) @) v2 E1 n+ C* S* I$ `% V
  特别注意本章25.5小节里面各块RAM的DMA操作问题。
# n; \$ N! b  \+ S  f
$ }: F. i, o4 O) _" J$ Y% L25.2 各块RAM在总线中的位置- s0 b2 f9 g1 I; D: O
这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。2 F. v% f1 S& p
7 o: v1 p+ b2 j& |3 C2 I+ w
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
( A( E- E; N/ l  j) v4 A
9 D" m- A$ D! R
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。
5 p; n4 C' a; z$ B# v" }' A4 ^1 a0 J, j, A, H6 k, h
1、  ITCM和DTCM
7 @4 v2 D) q! s( M1 L9 l3 m1 e2 Z$ U# [* x
这两个是直连CPU的。
1 x: M: T5 i8 m/ y; a1 ]' Y* @+ k5 ?, S
2、  D1 Domain
1 O" ~7 N) Q" ]" O! I
7 x1 b  ~; d, Y" gD1域中的各个外设是挂在64位A**线组成6*7的矩阵上。
! i8 p9 ?) p3 X& y& _% {" ~- W# Y2 g# b
  6个从接口端ASIB1到ASIB60 a, m: o- y2 s6 @# t8 V& q+ |
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。9 w( Q) r9 z/ P" X

1 t( a% I+ ?5 b% p  7个主接口端AMIB1到AMIB7' O  J0 u; ]. N. l6 @. b0 Q
外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。- O: j, V/ O' x: @- W( c
/ `/ N8 k5 h9 _! @4 k6 [
3、  D2 Domain
. u1 y% h" H$ [* i8 F
: n$ Y- h, W  s0 Z7 ~! D* PD2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。/ `, F' `' }; p1 f/ I8 ^' K

; [6 h3 [  w) K2 R% R0 A! B  10个从接口0 r' e# c8 H  s" G3 o
外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
' e5 n; }- m( e/ P$ W) e% [8 R7 `) i' E4 c7 G
  9个主接口
7 f0 ?( O8 e7 {  R- x, L% X外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。) ]; j- z, z6 f4 P& q# h+ B/ S" O
- ^! L( [: _% R: |$ y4 T
4、  D3 Domain
/ p0 t5 G# ?) g6 u- P* x5 E" \7 x$ l& E2 b
D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。- V% k4 |& d/ |, C
9 T; {9 a0 }  I+ z8 e
3个从接口
8 F. a( r' x/ B+ f! h6 Y% j8 @外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。
# b) j  j7 I( O! L
7 }  u' y  u2 d& n1 v2 ~ 2个主接口4 Z" B, c  R# {) \- D$ V. e6 q4 x4 u- w
外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线9 f8 B2 h; r5 _, V& v' Z+ y

! H0 s% x( `4 |25.3 各块RAM特性

" k2 M  g% C9 a" ?+ O! s! J0 |8 U6 }2 j& z各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。
6 y) L' z: ]/ ]1 W4 R: Z# z0 S- ?5 ^
  TCM区9 M/ c$ y; ~! `* o, Q! b: o1 U
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
+ G: M1 r! q% [+ t5 u5 J) P' s+ F
% @9 R4 a' F6 S速度:400MHz。
. m- s% D$ F% W7 n" b. l& M" h
6 q. F; \* O  jDTCM地址:0x2000 0000,大小128KB。6 Y* g$ a& y% z4 ^( k9 R

' j) d0 `: z% H+ d: ]ITCM地址:0x0000 0000,大小64KB。! D& }% r( K# ^: R; f, j7 g: F

8 ~8 h5 P% c4 i% \3 ~7 {  AXI SRAM区& l3 @# j, a) ^+ K( Q1 {. I
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
7 h4 `# G6 W: ?( ^& d, L. L
1 S3 I6 W* Z/ q  X( B' q/ E速度:200MHz。# W6 }6 o/ G. j. `

) z$ v: {) }% p$ B8 V2 ]% m& w地址:0x2400 0000,大小512KB。
1 N5 ^# Z5 c# N5 Y# N) ^9 Z+ }* q9 z- o& n+ m2 D* x
用途:用途不限,可以用于用户应用数据存储或者LCD显存。
1 {* \5 S9 w, e& i) l% G+ X% ]" j/ d/ v5 p1 k: Z8 V7 K% n7 ^
  SRAM1,SRAM2和SRAM3区* I/ }  A  z( X% H: j
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。
* A9 `( r5 `0 c/ R" n$ a5 M( Q" M8 }5 V4 {  }% {; _! G& t& o+ v
速度:200MHz。( C5 c  e$ j5 ^7 \! x9 A/ K& Q4 V

) m$ ]) V2 I, `8 b; k& r" @$ b2 {SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
" H4 t- A' K0 f1 H. L& Y. v* \
) m6 J0 X. H4 _- b3 [8 e: aSRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
+ ?0 K" W- k: E/ p. P) A: x9 D$ x3 n( @; U
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
. Z+ B! o: u; j6 f0 l7 k, v8 C! y9 @% P+ S3 p: n  z
  SRAM4区3 w4 |* G* W7 G* t% C
位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
" s' \+ _4 D0 L# Z7 D- d1 c
: T" g/ c% d( t' O: ^2 g' q) [速度:200MHz。
7 i2 b; }+ J3 f* }
! k+ F8 R& q- z2 p. ^3 J' s地址:0x3800 0000,大小64KB。- P2 V0 B2 g" E" P1 ~& d. i5 T4 G  J
+ V$ b5 G% T; z: K/ c8 ?( x3 B( _: T
用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。! B8 G0 ^, g& I+ Q( J' Z0 c+ K% F
& ?, ~2 b1 Q5 U
  Backup SRAM区
& L) Q! o1 g/ e: C备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
" X# r2 e( _1 v+ }  p3 ^9 r3 i" l5 v  [7 ?  P- z! k
速度:200MHz。# A! d1 @) A1 j1 c" B5 I5 C. F# Y

- A3 L+ ?' Y2 A0 V0 R, q. I. }地址:0x3880 0000,大小4KB。
! ?1 y( s8 `1 |
' x5 m; X: c4 C) ^/ Q. A$ j用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。
; s# y) L( G: d9 L6 `
2 [5 R# Z6 _5 A% e1 j: w. R25.4 各块RAM的时钟问题
* C9 b' k/ u" V* W# V
正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。
. z& E8 j' u, L9 r
) v' {2 P2 V4 j
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

1 Z& T3 b5 [# b2 h4 T- ]' u9 d$ [) L; t  J4 b# v8 i
也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
9 N7 s7 \$ _9 L& E0 n0 v2 F. U
' ^8 }* h1 g5 r7 N4 X6 Z  ^5 U7 q对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:
" [3 f7 V8 h* P3 L" h* y+ d6 z4 v0 l  d3 j* f$ j
  1. #if 0. B1 d1 w: c5 I$ B  L' M
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();4 U1 [2 v4 d- H0 w  F( O
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();9 z7 L6 h6 u7 G6 ~; m: k( [' U
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();
    6 k' e' L! a( `4 w4 P) [
  5. #endif
复制代码
4 J3 ], O4 g0 v% P8 z2 f2 H
25.5 各块RAM的DMA问题
+ F# w& ^1 h- u0 P% q$ q了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:
( g1 U" ~7 {' E, v  p; u$ [: ?" a+ l6 S+ C/ @  t* O# r
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
. h& V: ~' X: B$ y( t3 s

+ |, }, o$ c: }; a  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。% |0 F' G8 J! ]% I1 M- {
  访问通路(每个小方块里面的字符)
/ u5 f+ _: ?  Y$ g9 z/ R8 k) E    任何有数字的表示有访问通路。
4 W1 u* f- k( q4 j. v' L$ x5 \/ V0 D6 G- Y
    短横杠“-”表示不可访问。
, Q3 q, t/ l( c: X! Y' O5 P: q
4 D) D( \: a8 @' S# p6 @% A    有灰色阴影的表示有实用价值的访问通路。! e6 Q7 C+ ]+ f* H* h* y0 N& @
- B, l2 }, H3 j+ a  t
  表格中具体数值所代表的含义
% {8 [* C/ G! |0 A$ _1 Y0 N6 l    D=direct,: ~% ~9 d+ J6 t. r: N

5 {3 X  P7 B* [5 T# t    1=via AXI bus matrix,
8 z$ s. q+ p& f' y% W+ W$ o6 F7 ]7 H( T" C+ N  X1 E  K
    2=via AHB bus matrix in D2,- ^" Z& [8 l5 E, K' t
5 [: F8 }& l9 J( t
    3=via AHB bus matrix in D3,
" {' ~- G9 ~+ m& R* r- i  \. J3 n5 p1 [, l( K: i+ Q$ u5 m
    4=via AHB/APB bridge in D1,
( b  p  Q4 R* @& k+ a& O$ P; v) m5 W+ t" `. Z5 r7 w
    5=via AHB/APB bridge in D2,
& `7 T- D, x) o$ B. ~; J- K9 X: L& f. t" f7 h8 b/ y2 r
    6=via AHB/APB bridge in D3,
: r. \* N6 g" _2 g. n
+ |/ U/ o6 E6 K% C% _# I* ?* `: c    7=via AHBS bus of Cortex-M7,
/ K' ]* t- H/ c' y9 B- G+ g! F7 O" _: L& n7 Y
    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。2 k. [9 e' G# I- E" I
& q% X# m& C5 g' ^/ P9 |) x, c/ c9 F
  总线访问类型. X1 k. \0 O9 r; X) H, D+ ^1 n
普通字体表示32位总线。' ?# ?9 B; e3 B* M1 v8 D

$ S1 C( J  I! \# }3 ]斜体表示32位总线主机端/ 64位总线从机端。
# `. R, }7 _6 I9 u" ?9 B$ U# v& K0 e. E, V$ z8 F: y
粗体表示64位总线。" i, _, H' p$ U: \
4 r0 ?: c" _0 x2 q8 {& _! }" W
通过这个总线互联图,要了解到下面三个重要知识点:
. R  ^$ U2 Q+ c) ?/ @) a
- e1 w1 d( d2 H+ y% _# u) W/ B  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。
  u8 J- \  K1 [. L* f  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。# l1 K. t+ m5 d2 ?; m* `
  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。
, s, ^7 J% b8 d- t4 a9 }
! J3 f& @$ N; [2 D$ C25.6 实际工程推荐的RAM分配方案+ ]  ^1 j% L& N
鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。8 S2 x% i' n( u) \: D

& R. o, C8 n5 c3 A) S! `8 b5 H  E本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。
4 n0 ?8 R% d2 n4 A# P$ {) j' C! h' F
25.7 总结
" h1 ~6 S8 R; d7 F/ I! Z2 b8 q, f本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。& r' k0 {( b  g/ s! \
* l# W5 [& T% Q  p' X$ Y3 T) t: X2 ]
/ z& p. h5 w% R& p
' {  G( s6 r& k
赞 收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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