SDIO 1bit读写都正常,就是非常慢,4bit查询模式、DMA模式挂掉

2019-07-21 00:51发布

[mw_shl_code=c,true] 代码用的是原子F407的[/mw_shl_code] [mw_shl_code=c,true]把关闭所有中断屏蔽掉,然后直接使用,并添加到文件系统,可以读写文件,但是会漏写,写400K的文件,只写进了200多k的样子,[/mw_shl_code] [mw_shl_code=c,true]查出错误在这里发生了[/mw_shl_code] [mw_shl_code=c,true] [mw_shl_code=c,true] else if(SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) //接收起始位错误 { SDIO_ClearFlag(SDIO_FLAG_STBITERR);//清除错误标志 return SD_START_BIT_ERR; }[/mw_shl_code] 原子哥说是太快了,我又一直加大分频一直到0x18,结果还是没变化,一样的错误。

换用DMA模式,代码一直停在这里
while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){}//等待DMA可配置


但是把初始化中的4位数据线改成1位的时候,读写都正常,就是很慢很慢[/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]if(errorstatus==SD_OK)errorstatus=SD_EnableWideBusOperation(SDIO_BusWide_1b);[/mw_shl_code] [mw_shl_code=c,true] [mw_shl_code=c,true]我看到貌似不少人遇到这样的问题,但是没找到解决了分享一下的,求指教。。。。[/mw_shl_code]
[/mw_shl_code] [mw_shl_code=c,true] [mw_shl_code=c,true]另外插问一下:例程SDIO DMA配置里面的DMA传输长度为啥是0,事实上用0 还是512 都没影响,为什么呢?[/mw_shl_code] [/mw_shl_code] [mw_shl_code=c,true]  DMA_InitStructure.DMA_BufferSize = bufsize;//数据传输量[/mw_shl_code] [mw_shl_code=c,true]会的大神帮下小弟 谢谢了[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
qq88714082010
1楼-- · 2019-07-21 01:21
 精彩回答 2  元偷偷看……
qq88714082010
2楼-- · 2019-07-21 05:30
代码用的是原子F407的
把关闭所有中断屏蔽掉,然后直接使用,并添加到文件系统,可以读写文件,但是会漏写,写400K的文件,只写进了200多k的样子,
查出错误在这里发生了

else if(SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET)    //接收起始位错误
    {
            SDIO_ClearFlag(SDIO_FLAG_STBITERR);//清除错误标志
            return SD_START_BIT_ERR;   
    }
原子哥说是太快了,我又一直加大分频一直到0x18,结果还是没变化,一样的错误。




换用DMA模式,代码一直停在这里
while (DMA_GetCmdStatus(DMA2_Stream3) != DISABLE){}//等待DMA可配置




但是把初始化中的4位数据线改成1位的时候,读写都正常,就是很慢很慢
if(errorstatus==SD_OK)errorstatus=SD_EnableWideBusOperation(SDIO_BusWide_1b);

我看到貌似不少人遇到这样的问题,但是没找到解决了分享一下的,求指教。。。。

另外插问一下:例程SDIO DMA配置里面的DMA传输长度为啥是0,事实上用0  还是512  都没影响,为什么呢?

  DMA_InitStructure.DMA_BufferSize = bufsize;//数据传输量

会的大神帮下小弟  谢谢了
qq88714082010
3楼-- · 2019-07-21 10:16


这是2.0高容量吧,8G的试了 4G的也试了  结果都一样
qq88714082010
4楼-- · 2019-07-21 12:27
 精彩回答 2  元偷偷看……
ricefat
5楼-- · 2019-07-21 12:50
4Bit好像跟库函数有关,以前搞103的时候有个低版本的SDIO就能4bit,库版本升级后4bit初始化就出错
正点原子
6楼-- · 2019-07-21 12:53
不能屏蔽关闭中断!!
用我代码的时候,先不要改,直接测试。测试成功再去改,容易找问题。

一周热门 更多>