[应用相关] SD卡连续读写操作

[复制链接]
12469|26
alien2006 发表于 2009-1-8 14:59 | 显示全部楼层

你再帮我确认

执行下面这些  
  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, buff, 512);
最后返回的状态是SD_OK (0x2A)吗?我都是SD_DATA_CRC_FAIL还有SD_RX_OVERRUN
    我得先找出这个4BIT读的原因,接下来也跟你一样是写,不过1BIT写我到是没问题,
alien2006 发表于 2009-1-8 15:17 | 显示全部楼层

DMA不好用的话,是不是你中断没设置啊

void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  // Configure the NVIC Preemption Priority Bits 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
 楼主| fangui 发表于 2009-1-8 16:46 | 显示全部楼层

返回来的是6

返回来的是6:SD_RX_OVERRUN,跟你的一样
alien2006 发表于 2009-1-8 17:01 | 显示全部楼层

嗯,果然跟我碰到的问题一样啊

两个办法可以解决SD_RX_OVERRUN
1、降低SDIOCK的速度,改成
#define SDIO_TRANSFER_CLK_DIV              ((u8)0x6)
2、加上硬件流控

    你先把SDIO速度降低看看,是不是也会出现0x02 SD_DATA_CRC_FAIL的错误呢。
   现在看起来怀疑还是ST提供的这个SDIO的例程有问题啊
 楼主| fangui 发表于 2009-1-8 17:09 | 显示全部楼层

是的,都是这样的

是的,都是这样的,可能还没有完善吧
alien2006 发表于 2009-1-8 17:24 | 显示全部楼层

块读取函数里CMD17命令OK之后,数据通道就启动传输

从SD卡读到FIFO里,然后程序从FIFO中读取数据,我反复看了程序和手册,数据通道没什么太多的设置。折腾了很久,我甚至开始怀疑是否SDIO 4BIT方式下硬件有问题了。本来我一直是用SPI方式操作SD卡,都是好好的,现在4BIT方式不能用, 1BIT方式下速度跟SPI没啥区别,郁闷死了。这下SDIO真成了**肋了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部