请选择 进入手机版 | 继续访问电脑版

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

基于STM32H7使SDMMC1分散加载

[复制链接]
STMCU小助手 发布时间:2023-3-11 22:23
先来一张中文参考手册中的系统架构图,可以看到,STM32H7系列包含两个SDMMC控制器:SDMMC1和SDMMC2。
. h0 E9 o5 u; a  ^) r, g4 j, D
- V# A6 x4 Z/ D
2020042810074782.png * [9 z% r$ ~2 I5 J
) V' D4 F- Q5 ~% Z) M, B2 L
在芯片手册中的架构图能够更直观地看出来:  A$ e) t, _' [" l5 X0 T$ M

/ Z# S) g9 B& y0 |& k; N/ {
20200428103709907.png . b" m, H  M1 i# C5 a6 ~/ c
3 D4 m' z) \3 r- V' O+ ]* I9 j
SDMMC内部集成一个IDMA,H7系列有很多总线主设备,包括DMA1、DMA2、BDMA、MDMA、DMA2D,还包括IDMA和以太网DMA这种专用DMA。
3 ^" z0 R0 R2 B- a7 e
% L6 w' k: n, @# U6 Z7 r
20200428101952116.png 1 T3 b9 p/ S% \' z9 o
9 z; Q) K# Y: q% G- O
查看系统架构图和关于总线主设备的描述:/ X$ e& x# b0 ^2 x1 B$ G  R( r$ U5 O) J
SDMMC1和SDMMC2相比,和SRAM1、SRAM2都没有构成总线矩阵,只能访问AXI SRAM区域的内存。; h0 _( H% f$ g& N8 W; ]

. j/ g% U& R% }; {
20200428102256498.png 5 R' U$ }9 G1 [8 r7 d. T
202004281013193.png
$ A0 Q* E& ^( b( Z/ b7 Y: X, Y8 ^, n3 ^
- e& E5 u5 v( `# Q
所以我们的使用IDMA进行SD卡的访问时,buffer必须放在AXI SRAM上面。! I, d& o. }" j! i* C, P7 e# p  h

# f: h) v  u  w- \! z/ h7 v观察SRAM的分配,可以知道AXI SRAM分布在从0x24000000开始的512K区域上:
6 y: {" r: x' {
8 B8 N* G$ S7 V0 ^1 H
20200428103349402.png 6 {& W$ Y1 y# z) T
7 Y% N1 w# _7 N) e7 D
202004281043205.png ; l8 O- k$ L8 Z7 u" K5 c+ C5 Q5 @
/ p- M. C% W/ U' m) Y' W
那么我们第一种情况,在编译器上只描述一部分内存DTCM:4 u& M+ ]: ?+ m& q4 D4 B

/ v6 R8 `2 @1 Z) W7 M
20200428104636191.png
+ j7 F6 O$ v' A- v! \; d5 e

4 d1 r: c% Y, e在进行变量定义的时候强制指定地址:9 T- n* O) I* t4 E/ J
  1. __attribute__((at(0x24000000))) uint8_t Buffer_Block_Tx[MULTI_BUFFER_SIZE/4];
    : c* B5 r- q* R5 s7 p
  2. __attribute__((at(0x24040000))) uint8_t Buffer_Block_Rx[MULTI_BUFFER_SIZE/4];
    9 `6 h$ t+ G8 d4 V4 W* b' X
复制代码

" f; L* x5 P/ R: D3 z' d/ y可以看到指定的两个数组已经存在了AXI内存上,其他的都是DTCM内存上:8 X+ j2 I' P* W  d& Q3 e! N; `
9 `1 w$ a1 b# v! G0 c* }  ?
20200428104916712.png
: C3 _4 X/ V( A0 {1 f. F. G2 @; Y/ G( F" u5 O1 h' M
如果我们的工程配置上直接分配好了内存区域,这里使能了DTCM和AXI-SRAM内存:
& Y6 ^8 C' j. N4 Z& c3 f8 @2 F" p2 V' H( }
20200428102455716.png
) c# Q8 Y5 x" p& U+ h

/ {6 ~+ _/ {6 N  ^2 K! O这里我们并没有强制指定地址:
1 C" A6 v. Q) u# }2 {
  1. uint8_t Buffer_Block_Tx[MULTI_BUFFER_SIZE/4];1 V0 E2 r8 Q0 V1 y) E. m7 I: t
  2. uint8_t Buffer_Block_Rx[MULTI_BUFFER_SIZE/4];
    $ K( ~$ h) }3 x6 \2 q& P
复制代码

( V( V$ o$ }3 B' k" s6 @* l1 _但是因为SRAM2的size要大一些,所以优先分配到SRAM2:
, G, z  a- a8 j: i' R' W; y- F4 x1 P/ Y( M+ T
20200428105136958.png
+ }9 H+ ]0 L4 X# V" T

0 j5 r: Z4 |1 V4 Y/ ?) g所以也是被分配在了AXI内存区域上。1 Q8 G  u6 u8 O- g0 q2 o4 `9 }
————————————————% y0 B, A; d: t7 P% s6 n1 q
版权声明:小盼你最萌哒2 p, h8 j3 E; w, A; C( ?
$ a: Z. R+ {  L  g

8 P1 D5 Q. S: |& Y5 @, X
收藏 评论0 发布时间:2023-3-11 22:23

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版