6316|6

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2.0.3版固件里面的SDIO例程,4BIT方式有朋友试验成功的吗? [复制链接]

    刚刚开始玩VE的芯片,跑SDIO的那个例程,SD卡都可以正常初始化并设置成4BIT方式,可是读的时候始终返回SD_RX_OVERRUN,怎么试都是一样的结果。
    例程是直接拿来用的,都没有改过,连线的接法也是参照评估版的电路图,除了CLK外,CMD DAT0~DAT3都是接47K的上拉电阻的,反复检查了多遍,可以排除硬件原因,SD卡也试了好几张从512M 1G 2G 4G 8G都是这样。
    执行Status = SD_EnableWideBusOperation(SDIO_BusWide_4b);返回SD_OK,但是执行SD_ReadBlock后返回SD_RX_OVERRUN,如果用1BIT方式则都正常,实在是搞得有点抓狂了。
    哪位高人有E系列的学习板,劳驾帮忙试验指点一下啊,谢谢!
此帖出自stm32/stm8论坛

最新回复

                                    做了很多次试验都是一样的结果   包括那个Mass_Storage的例程,也是在初始化完成设置4BIT方式成功后再readblock,如果SDIOCK的频率高于18M则是返回FIFO上溢出,频率调低后则是返回数据CRC错误的信息,那怕我是降低频率SDIOCK到1MHZ也是CRC错误,实在是晕死,都搞不清是哪里的问题,等待高人指点   详情 回复 发表于 2009-1-7 00:37
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

你试下那个读卡器的例程,记得是可以的

                                  
此帖出自stm32/stm8论坛
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

调试SD卡的程序,要一步一步来,不要一下就进入ReadBlock

                                 先看看初始化能不能过,卡的ID是否能读出来。
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 

谢谢香版,我初始化应该是没问题的

我依次执行
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);
以上各步骤状态返回都是SD_OK,并且读出的SDCardInfo中的CSD, CID, 容量等信息都是正常的的,SDIO->CLKCR中也是4BIT设置,然后执行
Status = SD_ReadBlock(0X00, Buffer_Block_Rx, BlockSize);
就是返回SD_RX_OVERRUN,
readblock函数中有这样的一段
/* 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;
      }
    }
感觉似乎是4BIT方式下FIFO涌入的数据太快,来不及及时从FIFO中读出,因此导致溢出,而1BIT方式下速度就没问题了。晚上又仔细翻阅了参考手册,发现SDIO中还有个硬件流控的功能,当即将溢出的时候,控制器会停止SDIO_CK,并冻结状态机,试验了一下果然SDIO_FLAG_RXOVERR的标志果然不再置位,流控起作用了,能够读出128个32BIT数据。然而新的问题又出现了,这次是SDIO_FLAG_DCRCFAIL又置位了,数据CRC错误。
     又继续试验,把加的流控去掉并把之前的修改还原,由于是怀疑4BIT方式下速度太快导致FIFO来不及读出,所以我把SDIO时钟从原先默认的24MHZ降到了12MHZ甚至更低,果然这下FIFO读取不再溢出了,不过函数返回的都是SD_DATA_CRC_FAIL数据CRC错误!
    经过晚上的试验,看来在SDIO时钟较高的情况下FIFO溢出的问题可以通过降低时钟频率或者是开启硬件流控来解决。但现在情况是这个数据CRC错误是怎么回事呢?继续抓狂中。。。
此帖出自stm32/stm8论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

5
 

关注一下,下步也用到SD

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 

SD卡+FAT已经调试通过,正准备将SD改为4Bit方式

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 

又是一个晚上

   做了很多次试验都是一样的结果
   包括那个Mass_Storage的例程,也是在初始化完成设置4BIT方式成功后再readblock,如果SDIOCK的频率高于18M则是返回FIFO上溢出,频率调低后则是返回数据CRC错误的信息,那怕我是降低频率SDIOCK到1MHZ也是CRC错误,实在是晕死,都搞不清是哪里的问题,等待高人指点
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
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
快速回复 返回顶部 返回列表