12835|14

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

SDIO模式读写SD卡要注意的问题 [复制链接]

用ST提供的SDIO库函数读写SD卡老是不成功。
测试代码如下:
  while(SD_Init()!=SD_OK);
  SD_EnableWideBusOperation(SDIO_BusWide_4b);
  SD_SetDeviceMode(SD_POLLING_MODE);
  while(SD_ReadBlock(0,(u32 *)TestBuf,512)!=SD_OK); 

有调通过的高手能指点一下么?
调用SD_Init()之后是否还需要其它的操作才能正常读写SD卡,原来用SPI模式很好用,到SDIO模式之后死活读不出来。
此帖出自stm32/stm8论坛

最新回复

楼主你的问题是怎么解决的,我的SD卡不能写,读还是正常的,总是提示FIFO下溢错误  详情 回复 发表于 2012-8-4 11:33
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

什么芯片?什么程序?

                                  
此帖出自stm32/stm8论坛
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

用的STM32F103ZET6

                                 用的STM32F103ZET6,在MDK下编译。
此帖出自stm32/stm8论坛
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

4
 

SD卡不支持4位模式

  或许LS使用的SD卡不支持4位模式?
在调用  SD_EnableWideBusOperation(SDIO_BusWide_4b);
后SDIO 就工作在4位模式下了
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 

应该支持4位

我跑过ST的Mass_Storage例程,可以正常格式化SD卡和建立删除文件。那个例程里就是这么干的。我只不过是从那个例程里把SD卡相关的两个文件提出来加进我自己的工程里,初始化都调用一样的函数。就是读写不成功。

不过在那个Mass_Storage例程里有个奇怪的现象,就是我在配置USB LED以前调用SD卡读写函数也不成功,只有把读写代码放到它之后才能读写成功。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 

还有1点

  或许还有1点要注意:SDIO支持几种数据操作模式,即Polling、中断和DMA,记得是通过条件编译来选择的。
  LS不妨检查一下
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 

我用的Polling模式

                                 我跟它的例程一样,用的Polling模式啊
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 

终于找着了

                                 哈哈,终于让我找着原因了。哎,只怪自己太粗心了。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 

SPI模式

楼主,有用SPI模式对SD卡进行读写吗?文件系统的创建?
谢谢了
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 

有SPI模式下的读写

                                 文件系统也有
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 

麻烦下

楼主,麻烦下能把SPI和文件系统创建的原代码共享下吗?
谢谢了
我搞这个头都大了
ding_hongbin@163.com
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 

楼主,可否发给我一份SPI和文件系统创建的原代码呢?
lxx820607@163.com
QQ:122779462
谢谢了

此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 

我也遇到同样的问题,请问怎么解决的?

我也是从ST的2.0.3版本的固件库,里面有个SDIO的示例程序,我用的是STM32F103VET6,MDK3.24
执行如下操作
Status = SD_Init();
Status = SD_GetCardInfo(&SDCardInfo);
Status = SD_SelectDeselect((u32) (SDCardInfo.RCA << 16));
Status = SD_EnableWideBusOperation(SDIO_BusWide_4b);
Status = SD_SetDeviceMode(SD_POLLING_MODE);
Status = SD_ReadBlock(0x00, Buffer_Block_Rx, BlockSize);
是过了好多张SD卡,一直到SD_SetDeviceMode这里返回的状态都是SD_OK,可是
SD_ReadBlock却一直返回是SD_RX_OVERRUN(0x06)。无法读出数据
调试后发现SD_ReadBlock函数在发送完CMD17读一个块指令并得到正确响应之后,开始从SDIO数据通道读取数据,有下面的内容
if (DeviceMode == SD_POLLING_MODE)
  {
    /* Polling mode */
    while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
    {
      if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET)
      {
        for (count = 0; count < 8; count++)
        {
          *(tempbuff + count) = SDIO_ReadData();
        }
        tempbuff += 8;
      }
    }
在这个while循环之前SDIO_FLAG_RXOVERR 就已经一直是置位状态,所以导致数据无法读出,可是我在WHILE之前加SDIO_ClearFlag(SDIO_FLAG_RXOVERR);来清除标志,执行后依然无法读出,实在搞不明白,还请高人指点指点,谢谢
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 

从上周五开始遇到这个问题

                                 一直没法解决,ST的手册写的实在是不清不楚,看了半天也不知所云,看了这么多厂商的资料,除了国内的,就属ST的资料写得最差了,之前用ATMEL,它的资料就写的很详细,有问题仔细看看就明白了,也不用到处去问。现在ST的很多地方都需要自己做实验去摸索,还好是例程够多,可以依样画葫芦,可是一碰到问题就傻眼了,唉~~~0
此帖出自stm32/stm8论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

15
 
楼主你的问题是怎么解决的,我的SD卡不能写,读还是正常的,总是提示FIFO下溢错误
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条
【有奖直播】2025是德科技数字月-数字新品来助阵
直播时间:3月19日(周三)14:00
直播奖励:小米口红充电宝、倍思充电线、是德科技十周年鼠标垫

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表