hpdell 发表于 2017-9-14 20:15:03

xiang90721 发表于 2017-9-13 19:18
哥们能否把你的F7的关于SDMMC的配置及驱动给我参考参考






A、优先级
   SDMMC2_IRQn         " bsp_drver_sd.c "             0xe
   DMA2_Stream0_IRQn      " bsp_drver_sd.c "            0xf
   DMA2_Stream5_IRQn      " bsp_drver_sd.c "            0xf
   SDMMC2_IRQn 这个的优先级必须比 DMA2_Stream0_IRQn, DMA2_Stream5_IRQn 高一个数量级,如上所设置的

xiang90721 发表于 2017-9-15 09:55:02

hpdell 发表于 2017-9-14 20:15
A、优先级
   SDMMC2_IRQn         " bsp_drver_sd.c "             0xe
   DMA2_Stream0_IRQn    ...

非常感谢,按照你的配置方式,SDMMC的DMA方式调通了,但是发现,使用DMA和不使用DMA读写速度没多少变化,我是直接块读写操作,每次多块写入16K字节(512*n),速度也就2.7m/s

你有测试过么

hpdell 发表于 2017-9-19 20:03:17

xiang90721 发表于 2017-9-15 09:55
非常感谢,按照你的配置方式,SDMMC的DMA方式调通了,但是发现,使用DMA和不使用DMA读写速度没多少变化, ...

你是如何测试的啊 ???

xiang90721 发表于 2017-9-19 21:31:57

本帖最后由 xiang90721 于 2017-9-19 21:33 编辑

hpdell 发表于 2017-9-19 20:03
你是如何测试的啊 ???
具体测试方法:
tick_start = HAL_GetTick();//获取开始测量前的时钟计数
for(i=0;i<5000;i++)
{
   ret = BSP_SDMMC_Write(buf,i*n,n);//BSP_SDMMC_Write为使用库函数HAL_SD_WriteBlocks_DMA()封装的块写入函数而已
      if(ret != MSD_OK)
      {
          //do something
         while(1);
      }
}
tick_end = HAL_GetTick();
write_speed = buf_len*5000*1000/(tick_end - tick_start);//buf_len为数组buf数据长度,为512*n字节,系统滴答时钟配置的为1ms一次
通过如上的方式计算得出的写入速度测试,读出速度也是同样的方式计算得出。
SD卡为class 4,且供给SD的时钟为24M

nihaoshijie5188 发表于 2018-2-25 13:45:51

非常感谢,下载学习!

jumpcnzhang 发表于 2018-8-22 12:44:42

我用的cube生成的代码,dma rx没有问题,但是dma tx时候进不了中段,请问是是要对齐哪里?

jumpcnzhang 发表于 2018-8-22 12:46:23

加系统的话是用队列进行完成保护的,dma配置收发都是对齐word。

jumpcnzhang 发表于 2018-8-22 12:46:54

读可以,写不行。
页: 1 [2]
查看完整版本: ST的hal库有问题手头有STM32L4或STM32F7的帮忙测试DMA SD卡