先来一张中文参考手册中的系统架构图,可以看到,STM32H7系列包含两个SDMMC控制器:SDMMC1和SDMMC2。 ) V' D4 F- Q5 ~% Z) M, B2 L 在芯片手册中的架构图能够更直观地看出来: A$ e) t, _' [" l5 X0 T$ M 3 D4 m' z) \3 r- V' O+ ]* I9 j SDMMC内部集成一个IDMA,H7系列有很多总线主设备,包括DMA1、DMA2、BDMA、MDMA、DMA2D,还包括IDMA和以太网DMA这种专用DMA。 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; ] / 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 观察SRAM的分配,可以知道AXI SRAM分布在从0x24000000开始的512K区域上: 7 Y% N1 w# _7 N) e7 D / p- M. C% W/ U' m) Y' W 那么我们第一种情况,在编译器上只描述一部分内存DTCM:4 u& M+ ]: ?+ m& q4 D4 B 在进行变量定义的时候强制指定地址:9 T- n* O) I* t4 E/ J
可以看到指定的两个数组已经存在了AXI内存上,其他的都是DTCM内存上:8 X+ j2 I' P* W d& Q3 e! N; ` 9 `1 w$ a1 b# v! G0 c* } ? 2 @; Y/ G( F" u5 O1 h' M 如果我们的工程配置上直接分配好了内存区域,这里使能了DTCM和AXI-SRAM内存: 3 f8 @2 F" p2 V' H( } 这里我们并没有强制指定地址:
但是因为SRAM2的size要大一些,所以优先分配到SRAM2: ' W; y- F4 x1 P/ Y( M+ T 所以也是被分配在了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 |
Stm32H7XX GCC下分散加载实现
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
DIY-STM32H750核心板
[nucleo-H7A3ZI-Q]1-点亮一个皮皮灯
DIY-STM32H743核心板
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
1月10日有奖直播 | 基于STM32 的CODESYS智能自动化解决方案
STM32的CAN FD位定时设置注意事项
用 STM32CUBEMX 生成 STM32H735 LWIP PING 不成功
基于STM32H7 EXTI + SPI +DMA 双缓冲应用经验分享