打印
[应用相关]

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

[复制链接]
4966|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alien2006|  楼主 | 2009-1-5 20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    刚刚开始玩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系列的学习板,劳驾帮忙试验指点一下啊,谢谢!
沙发
walnutcy| | 2009-1-5 22:11 | 只看该作者

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

使用特权

评论回复
板凳
香水城| | 2009-1-5 22:33 | 只看该作者

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

先看看初始化能不能过,卡的ID是否能读出来。

使用特权

评论回复
地板
alien2006|  楼主 | 2009-1-6 00:31 | 只看该作者

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

我依次执行
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错误是怎么回事呢?继续抓狂中。。。

使用特权

评论回复
5
zusen| | 2009-1-6 08:40 | 只看该作者

关注一下,下步也用到SD

使用特权

评论回复
6
luomh98| | 2009-1-6 09:15 | 只看该作者

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

使用特权

评论回复
7
alien2006|  楼主 | 2009-1-7 00:37 | 只看该作者

又是一个晚上

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

使用特权

评论回复
8
wangji666666| | 2014-11-5 16:11 | 只看该作者
楼主调通了吗?我也是这个问题

使用特权

评论回复
9
wangyao19920204| | 2014-11-22 11:23 | 只看该作者
楼主 请问你SD_DATA_CRC_FAIL的错误后来是怎么解决的,我现在也遇到这个问题在抓狂中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

136

帖子

6

粉丝