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

基于STM32H7使SDMMC1分散加载

[复制链接]
STMCU小助手 发布时间:2023-3-11 22:23
先来一张中文参考手册中的系统架构图,可以看到,STM32H7系列包含两个SDMMC控制器:SDMMC1和SDMMC2。
- [* g+ }/ G4 p  p7 ~) b
" _* B! ?: f5 o; F/ G& S0 Y
2020042810074782.png : ?8 y. ^& n/ y
3 u$ U- h# b) e0 c! u  O
在芯片手册中的架构图能够更直观地看出来:
/ S: r: p' Q  B! Y6 j& D
) Q. f: w5 }3 `* V
20200428103709907.png
; X, J6 B0 c- Q& L" g! r+ B. [
# N% e5 ^, F( y9 H7 J! D; {SDMMC内部集成一个IDMA,H7系列有很多总线主设备,包括DMA1、DMA2、BDMA、MDMA、DMA2D,还包括IDMA和以太网DMA这种专用DMA。) z3 o7 ^8 i  Y( B+ @: Y: q
$ o- v% K) f0 {: o2 l. o. N
20200428101952116.png
$ c' F* i' i# b; y+ U
7 M- p) q+ h3 S9 K$ j
查看系统架构图和关于总线主设备的描述:, Y3 k& l0 H+ H5 N9 f# H$ X7 ?7 ]: S9 V
SDMMC1和SDMMC2相比,和SRAM1、SRAM2都没有构成总线矩阵,只能访问AXI SRAM区域的内存。0 v: Y0 h% ~: r) s% d

1 D8 _* Q1 e& X1 R* F4 S# S
20200428102256498.png & g" y0 {) K; V  R* ]& k
202004281013193.png 5 U" L( ~/ R* N! h
' x" ~& e7 @. `6 m+ Q

3 k1 P9 H: x! l9 ^7 A所以我们的使用IDMA进行SD卡的访问时,buffer必须放在AXI SRAM上面。! z: @% N5 ~/ r& {3 R
& f% X, ?2 r, Y) O# c- P
观察SRAM的分配,可以知道AXI SRAM分布在从0x24000000开始的512K区域上:/ V. i5 B: x, q

  t' ]; a9 e" A0 r* G9 a% I
20200428103349402.png
+ q3 ?2 K2 j/ |, l7 r- e! z
) K+ ~* B" y) w1 k# ?! l2 Q- N& ^ 202004281043205.png 6 e- m8 p% B8 {% d; `4 W6 L; P

3 f3 M: B* F0 B那么我们第一种情况,在编译器上只描述一部分内存DTCM:
+ k. c" o- g8 m9 S- w& F% l, r8 j* j: D9 Z* a* i5 N
20200428104636191.png + \7 _6 [" `4 u& U* y/ h* s" Y

6 c! T+ E# I3 D: R在进行变量定义的时候强制指定地址:
8 S4 o0 i' S; N8 _
  1. __attribute__((at(0x24000000))) uint8_t Buffer_Block_Tx[MULTI_BUFFER_SIZE/4];( J" J% Y% O8 [3 K5 [7 j1 k
  2. __attribute__((at(0x24040000))) uint8_t Buffer_Block_Rx[MULTI_BUFFER_SIZE/4];4 D2 {/ @6 _4 D2 G# s9 U
复制代码

& h( C- n, |+ f: B7 R  h4 V6 h可以看到指定的两个数组已经存在了AXI内存上,其他的都是DTCM内存上:
+ B+ c- E9 M: u, c8 ~$ I7 s' R1 F
20200428104916712.png 1 J( L8 s3 k; y7 o% D& u; k) t5 P( b

: a6 X9 D' A4 |5 {如果我们的工程配置上直接分配好了内存区域,这里使能了DTCM和AXI-SRAM内存:
* F( ~- `2 V6 d- K" r, y1 X/ o/ h7 F; G
20200428102455716.png
% d! Q2 ^9 ], s8 G6 ^
! O0 t" Y0 K& `- u
这里我们并没有强制指定地址:) R; b1 }- F0 P
  1. uint8_t Buffer_Block_Tx[MULTI_BUFFER_SIZE/4];: J$ r: I) ~4 s6 \, ?
  2. uint8_t Buffer_Block_Rx[MULTI_BUFFER_SIZE/4];/ H, I! D" e" k  b) F
复制代码
' C* D7 O4 m, n; @: g$ r4 z# Q
但是因为SRAM2的size要大一些,所以优先分配到SRAM2:+ u* N8 G! K( l( w! K6 u: ]2 U# m

) @; b. o; f) m+ b2 V5 y4 W
20200428105136958.png 0 N5 Y+ J5 c- P# `

. n- G/ c1 _8 P9 M所以也是被分配在了AXI内存区域上。
, g. Q2 `1 a$ @1 _) `* \/ @————————————————- }, }% U- @) j) ~/ ^% y
版权声明:小盼你最萌哒
$ O% {& w& x) O2 }
6 `- X& ~( B& I7 V) T+ K7 h+ H8 g  W
赞 收藏 评论0 发布时间:2023-3-11 22:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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