本帖最后由 caojin85cn 于 2018-2-20 21:46 编辑
环境:WIN7 64bit + MDK5.20
硬件:stm32F7 Nucleo (F767Zi)
STM32F7xx_DFP 版本2.9.0(目前最新的)
SDMMC配置参数
- SDHandle_SDMMC.Instance = SDMMC2;
- SDHandle_SDMMC.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
- SDHandle_SDMMC.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
- SDHandle_SDMMC.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
- SDHandle_SDMMC.Init.BusWide = SDMMC_BUS_WIDE_1B;
- SDHandle_SDMMC.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE;
- SDHandle_SDMMC.Init.ClockDiv = 10; //4Mhz
复制代码 SDMMC中断
- HAL_NVIC_SetPriority(SDMMC2_IRQn, 3, 1);
- HAL_NVIC_EnableIRQ(SDMMC2_IRQn);
复制代码
DMA中断- HAL_NVIC_SetPriority(DMA2_Stream5_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(DMA2_Stream5_IRQn);
复制代码
目前的问题是
使用HAL库提供的函数:HAL_SD_WriteBlocks_DMA
直接写一个块或者多个块,函数返回值正常,也可以进入DMA传输完成中断,DMA也未报错
但是后续在读取数据时发现之前写入的数据全部都是0
而如果调用非DMA方式写入函数:HAL_SD_WriteBlocks 做同样的写入操作,则结果正常,后续读取数据也是和写入的一致
简单来说,就是通过DMA方式写入SD卡的数据全都是0
还求各位给点意见,可能是什么地方的问题?如何定位?
最近发现2.9.0版本的HAL库在SDMMC方面有一些Bug,会不会导致这个结果?
补充:DMA的读取结果是正常的
|
SD卡是Lexar 16G Class6 这个问题应该和SD卡无关,试过sony和kingston一样的结果
SDMMC1和SDMMC2都试过,结果一样
DMA2 Channel4 Stream3 Stream6
DMA2 Channel11 Stream0 Stream5
都试过,也是一样的结果
评分
查看全部评分
我这个只是测一下SD卡读写的,并没有使用文件系统
我的问题是Cache一致性导致的,做一下Cache同步就可以了
你这个看起来是文件系统相关的,需要具体看一下文件系统对DMA读写的要求了
请问下,楼主这个 cache是怎么一回事,怎么做同步呢,我的好像也是读写错误,需要加入延时才能成功。