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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:22
25.1 初学者重要提示5 L1 O0 @0 t: Z( Z6 s3 _& G. h
  TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。
/ u. a" S6 [5 M* E! J6 J  特别注意本章25.5小节里面各块RAM的DMA操作问题。0 p4 ?9 S% F/ q, ]& _9 j$ V9 _

: L! r& e# [6 X- k# T7 S& X8 A5 ?25.2 各块RAM在总线中的位置- S5 @* Z2 W1 ?  `. m5 A% {
这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。" V% e2 L7 v# X( W( J
7 ^& U; M+ o6 V- [
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

5 K6 U; K& Y1 ?* U7 M* j% X& `' L  F* j
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。
2 A9 Z: y9 q  N3 g& a0 |" I. d" ?# e  F* j4 S" ]6 x
1、  ITCM和DTCM  w& ?" i; F2 G$ u' [, }7 b$ U* f( S# T

9 c4 F7 w0 q: b# E; y9 n4 r这两个是直连CPU的。
, {( ]- w  h4 Q0 T  Y
/ N! T: q  E7 R# Q5 b9 ^0 p2、  D1 Domain3 A% v* ?* z6 ]+ d

3 o4 F0 b2 q# M1 W" i) ^D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。+ Z+ s& U* n. p, X4 `4 j. T. E
! c" g5 P4 M  D
  6个从接口端ASIB1到ASIB65 ]6 t& v0 l* y+ q8 w2 Y% _/ T
外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。! n- f6 }; o! ?1 v

$ @% w# Y& k7 C" e, b# U! o+ u  7个主接口端AMIB1到AMIB7
- U/ E9 x1 G( U4 f& u外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。
  o+ x5 u" J. e( W- F2 s. ]/ }1 r9 _. }8 U4 A
3、  D2 Domain
! F* `8 {  [: Y: W3 A
' w% s# B6 j" r$ B4 p1 {D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。* G% Q$ x; k) X+ K$ y4 c- y

! {- ]2 c( v8 N* e7 e$ s  10个从接口( ?9 Y) v5 c* }2 v% S/ j
外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。
6 G/ U9 z# u: I# v1 ~
+ o$ c3 x8 Y2 v) `" y- ?  9个主接口
; ^; X% S! q( c+ j外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。
8 W, d/ t5 b4 a/ k9 |8 S
  n( U+ A2 P* b) G2 {" W$ s1 S4、  D3 Domain& i+ _/ n9 m4 q0 b& e

) T! i; U) y1 Z/ P  k# \3 yD3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。
: X5 N. O5 ~# E  p) U# T2 d
4 S" }; K/ z- t9 U 3个从接口% w; h+ e# N4 q- d
外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。
# ?3 {' M: Q. E/ `7 R- i, V) }' f5 [5 z% e& h1 ]  W4 D( c
2个主接口8 I* Z, ]- c: l7 P- j
外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线
, ^1 V& @+ z. B/ p" }+ h/ S! A. r
2 a7 @1 S% E9 G6 f25.3 各块RAM特性
# x# H' f5 d/ w9 j) w9 c4 R
各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。
# p$ i  Z( W. Y2 l/ L- t4 P& `1 C3 L) u$ O
  TCM区7 Z* S+ L# N: X6 M" L7 i
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。5 K4 q7 I8 q. p8 o" X. V
6 p/ Y/ Q1 V% S' m1 Q% a, a
速度:400MHz。7 T5 k! ~4 O. P( m& r5 i

& L' w; b: }  R$ P& HDTCM地址:0x2000 0000,大小128KB。
6 c# ]! C' ~& C3 X4 z
' |; H' d- ~" X0 v0 L0 D! {! i# Z) W' ?+ yITCM地址:0x0000 0000,大小64KB。
3 V" B2 C" Y3 I; G' V4 ]' `) p) N! H1 |
  AXI SRAM区6 `$ O1 j  K2 e$ e- E, q( b% p# d( q
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。/ C4 F4 S2 W/ o5 @8 ]# N
8 L" g  p, v8 X* D: ?
速度:200MHz。6 j0 u; M' l& E

# r$ ~8 J& E+ ?- A: g# z; `: R% ]地址:0x2400 0000,大小512KB。- F) U( N3 R1 d9 k4 W
, S* {+ M* ?0 s( r# [  i. l
用途:用途不限,可以用于用户应用数据存储或者LCD显存。
3 [2 w( q0 D' z$ f3 v6 B; Y* w8 Y. u
( P/ ~& F( w6 W6 P, e9 g  SRAM1,SRAM2和SRAM3区- @. O& _/ N, B% o  J2 {' p
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。
% g* p/ m1 {9 v/ Q$ z% z, |. I4 e: U3 V' v+ g9 n3 o
速度:200MHz。. D8 }! N2 f# D) n/ r& F+ _% \

. r6 _0 M$ [/ m5 U" nSRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
* e" p3 p4 P9 `& D
* P, L, I; W- qSRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
: D) l  X6 s9 E- R$ c9 g0 \' j0 X( l2 Z; t. m7 K# \
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。! E- |) t" c) {( S7 I8 w

+ u$ K/ K; v$ x; s5 q1 z  SRAM4区* Z/ C4 O9 ?/ i9 {  d& \1 R
位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
5 ~( t5 j/ X( e" X5 j! H$ j2 y2 ~6 E# q. C2 J
速度:200MHz。) p0 m1 u6 f$ j4 a2 z& t5 L; O4 B" P
/ H$ \+ u6 q1 Z5 G1 ^! g: }
地址:0x3800 0000,大小64KB。
9 Y8 I/ \. T4 ^
) N  Z" n# j4 A; ]+ }用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。7 [& M& c8 D$ |% [! z) `7 c
- R6 z1 x5 Q4 |8 E$ f4 V2 T8 n
  Backup SRAM区+ B, N8 ^* H" j" b1 j
备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。
! N. Q. T: z; D# o2 y" s8 h6 L$ ]
速度:200MHz。+ v+ i* U& u& g$ h9 {
9 W' N' h1 o* n$ f
地址:0x3880 0000,大小4KB。& p& m# {6 G6 O: K3 Z
5 j7 Z( j, o7 V
用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。7 v( t% V$ V% S/ f
7 R4 |! p" P* A. E
25.4 各块RAM的时钟问题

) }" @$ E) Z9 j2 c# J, W正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。/ M# M* d- a3 m" [$ Z

( G% E* f" X7 z* _( y" y! V6 m
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png

  [5 c. M' V, _$ t: ~, w* i
, \  A2 d6 ]! \" A- c也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。
. F# U6 _. s7 i3 _/ w* D6 ~8 q7 Z; Y0 r' t, y
对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:& W2 s+ A% ]1 X1 i, t
. E1 E" I% k0 c
  1. #if 0
    / s: l: m, v% S1 Q6 }
  2.         __HAL_RCC_D2SRAM1_CLK_ENABLE();0 `* {" ^# E, _5 x
  3.         __HAL_RCC_D2SRAM2_CLK_ENABLE();
    9 b, i" i3 ]( P$ q8 V$ X
  4.         __HAL_RCC_D2SRAM3_CLK_ENABLE();, A" I/ B  Z6 `+ @+ V
  5. #endif
复制代码
: Y& d  h( b7 p: J2 M- q
25.5 各块RAM的DMA问题* y5 y1 g! F" ]% t* @
了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:0 n; o& E5 i6 ^: m' s/ Y; |' @

2 l: P, R( g0 I& S4 i2 l8 q
aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDE5MDYvMTM3OTEwNy0yMDE5.png
2 Y) y2 \8 O7 U

- |2 M1 ~/ V/ ?5 G3 H* n  加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。
) I3 Q- l: `$ L& G9 G! {  访问通路(每个小方块里面的字符)
- `$ b% g) t1 A% ~3 n% o' V' Z    任何有数字的表示有访问通路。, F5 I# j) B0 P9 P. c
3 s! U  D+ z. U+ h) X
    短横杠“-”表示不可访问。
' E& l0 L+ J0 Y5 u% d& i/ H+ E+ `' K& `* \# _, L3 H& T7 ~7 b
    有灰色阴影的表示有实用价值的访问通路。
% E. W1 C2 A1 Q$ n5 I* w5 v# d) [$ b
  表格中具体数值所代表的含义0 N) t0 O/ ~2 Z: \
    D=direct,
, o* I+ p3 e  w" r9 \
0 Y+ u1 O; o$ A- [- q6 ~( [    1=via AXI bus matrix,
4 f( H% n1 Q7 I/ Z) z
& }" z% T. `  q3 j* S, `    2=via AHB bus matrix in D2,
- s& j6 W& y9 T( M- q/ n
: A+ L$ j# x# n8 J, Z; {    3=via AHB bus matrix in D3,: u4 j; W/ z5 M. c

8 K( n: P6 Y; C4 k( r2 m    4=via AHB/APB bridge in D1,/ W! y% }, @2 l; \; W0 L: h1 }

3 |0 n3 H& x/ n    5=via AHB/APB bridge in D2,
- r( J! q: I. J* B% b, b( I# _7 d& N+ ]$ W* }) ^7 a3 L
    6=via AHB/APB bridge in D3,  g6 R9 D, T) E2 }
; f2 G; s! \* B+ \- {: ~2 g; V
    7=via AHBS bus of Cortex-M7,
7 F+ i; Z9 |1 C/ `, y
+ D) P* I( s  K, }! ]    多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。
, E, P/ o. [. y/ C$ E! X7 o8 i7 ~2 ^$ Z4 D  u
  总线访问类型
0 c/ {$ Z( c0 v7 {3 k; v, `; c1 R/ Q普通字体表示32位总线。9 C; e: K9 u5 ]. N

9 s' k  v5 r& C. Y' l3 P2 _斜体表示32位总线主机端/ 64位总线从机端。
# C. e8 P& ^$ p6 ]! u; \! N
8 E( q/ u; Z$ G6 u/ e% ~粗体表示64位总线。4 G" |4 a: D) z* ?

8 @! M2 @8 Q! J( K; ~通过这个总线互联图,要了解到下面三个重要知识点:
) V9 }' f/ s) ^: L% N
8 S$ a4 |( B+ i9 }8 R8 T  DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。
% Q! V# m: R; ]2 {; s  AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。
8 R; v  e4 d2 ]7 s  SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。
8 h7 [3 u- ^- K6 }
2 T9 y* ?1 Q* Y5 z( B25.6 实际工程推荐的RAM分配方案1 f2 w3 \% _% D0 s$ N/ ?! F. m
鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。
0 @  N0 P! Y( e2 z  ]+ R2 I0 ?2 M8 ]0 }. ?7 A
本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。0 P9 x2 D$ r+ G+ r

0 w( d" u: K- n8 S, l/ \25.7 总结0 U8 V( _' }' u; N, I! n
本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。% q+ F9 q5 r8 a' x8 |0 q# n# P
! q1 g- S1 _" U( s% C' l( b: m. L* Z

: n7 f5 ^, }  S, f4 Q) P/ A) U8 ?, k: X& M1 \/ U$ D- G
收藏 评论0 发布时间:2021-12-22 13:22

举报

0个回答

所属标签

相似分享

官网相关资源

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