打印
[应用相关]

sd卡读写

[复制链接]
3183|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jackbao|  楼主 | 2008-3-13 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead)
{
  u32 i = 0;
  u8 rvalue = MSD_RESPONSE_FAILURE;

  /* MSD chip select low */
  MSD_CS_LOW();
  /* Send CMD17 (MSD_READ_SINGLE_BLOCK) to read one block */
  MSD_SendCmd(MSD_READ_SINGLE_BLOCK, ReadAddr, 0xFF);

  /* Check if the MSD acknowledged the read block command: R1 response (0x00: no errors) */
  if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR))
  {
    /* Now look for the data token to signify the start of the data */
    if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))
    {
      /* Read the MSD block data : read NumByteToRead data */
      for (i = 0; i < NumByteToRead; i++)
      {
        /* Save the received data */
        *pBuffer = MSD_ReadByte();
        /* Point to the next location where the byte read will be saved */
        pBuffer++;
      }
      /* Get CRC bytes (not really needed by us, but required by MSD) */
      MSD_ReadByte();
      MSD_ReadByte();
      /* Set response value to success */
      rvalue = MSD_RESPONSE_NO_ERROR;
    }
  }

  /* MSD chip select high */
  MSD_CS_HIGH();
  /* Send dummy byte: 8 Clock pulses of delay */
  MSD_WriteByte(DUMMY);
  /* Returns the reponse */
  return rvalue;
}
其中有一句if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))为什么不成立
沙发
香水城| | 2008-3-13 16:04 | 只看该作者

用的是哪家的SD卡?容量是多大的?

使用特权

评论回复
板凳
jackbao|  楼主 | 2008-3-14 09:11 | 只看该作者

sms064fff5

使用特权

评论回复
地板
香水城| | 2008-3-14 10:04 | 只看该作者

这是什么?还是不明白你用的是哪家的SD卡?容量是多大?

使用特权

评论回复
5
jackbao|  楼主 | 2008-3-14 11:29 | 只看该作者

st开发板 stm32f10x-128k-eval 自带的

使用特权

评论回复
6
香水城| | 2008-3-14 13:32 | 只看该作者

如果使用的是ST的开发板和自带的SD卡,问题就好办了

先问几个问题:
1)你是否改过程序?这个问题总是出现吗?用的是什么程序?
2)是否试过其它SD卡?也有同样问题吗?
3)是否试过把板上自带的卡通过其它读卡器操作成功?

你是通过什么渠道拿到这个板的?如果上述诊断后都不能解决问题,你可以找提供给你板子的代理商寻求帮助,他们解决不了会交给我们处理,谢谢。

使用特权

评论回复
7
jackbao|  楼主 | 2008-3-14 16:23 | 只看该作者

我们有用过别的卡

我就是st代理的技术。
  这个程序 我只是把先前一个调试flash的程序 驱动和main改为sd卡的

读不行
写语句
MSD_ReadBlock(Rx_Buffer, Memory_Offset, 512);
为什么 字节必须是512才可以

使用特权

评论回复
8
香水城| | 2008-3-14 17:32 | 只看该作者

为什么字节必须是512才可? 因为SD卡要求必须以512字节操作

请参考SD卡的技术资料,这个限制不是ST定的。

估计是因为SD卡里用的是NAND Flash有关,这样可以简化SD卡内部电路的设计。

使用特权

评论回复
9
jynkelan| | 2008-3-20 09:05 | 只看该作者

那个sd卡演示程序是不完整的 。

  程序不全兼容MMC,SD1.0,SD2.0或者是SD2.0大容量卡,如果只是
if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ))不成立,尝试多发几次读命令,反复判断MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ)的值,个人觉得这个sd卡程序还是得重写,我这写了一下,已调试通过。大家有兴趣的可以一起讨论。jynkelan@yahoo.com.cn

使用特权

评论回复
10
jackbao|  楼主 | 2008-3-20 12:55 | 只看该作者

能否共享一下 向你学习

chenjinb03@163.com

使用特权

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

本版积分规则

92

主题

260

帖子

0

粉丝