发新帖我要提问
12
返回列表
打印
[应用相关]

SD卡连续读写操作

[复制链接]
楼主: fangui
手机看帖
扫描二维码
随时随地手机跟帖
21
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写我到是没问题,

使用特权

评论回复
22
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);

使用特权

评论回复
23
fangui|  楼主 | 2009-1-8 16:46 | 只看该作者

返回来的是6

返回来的是6:SD_RX_OVERRUN,跟你的一样

使用特权

评论回复
24
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的例程有问题啊

使用特权

评论回复
25
fangui|  楼主 | 2009-1-8 17:09 | 只看该作者

是的,都是这样的

是的,都是这样的,可能还没有完善吧

使用特权

评论回复
26
alien2006| | 2009-1-8 17:24 | 只看该作者

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

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

使用特权

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

本版积分规则