10601|17

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WL板子EK-STM32F103调试读SD卡经验总结 [复制链接]

  一开始碰到的问题:发送CMD0能执行返回01,CMD1超时没响应。查到原因:模板程序控制SD供电逻辑反了。
#if 0 
#define MSD_POWER_ON()   GPIO_ResetBits(GPIOD, GPIO_Pin_10) 
#define MSD_POWER_OFF()  GPIO_SetBits(GPIOD, GPIO_Pin_10) 
#else
#define MSD_POWER_ON()   GPIO_SetBits(GPIOD, GPIO_Pin_10) 
#define MSD_POWER_OFF()  GPIO_ResetBits(GPIOD, GPIO_Pin_10)
#endif
第二个问题:单步执行CMD0,CMD1,有响应,直接运行没响应。查到原因,上电时间少于1ms,SD卡内部复位没准备好,初始化前加廷时1ms.
 /* delay 1ms*/
  delay(5000);
  /* MSD chip select low */  
  MSD_CS_LOW();
 /* Send CMD0 (GO_IDLE_STATE) to put MSD in SPI mode */
  MSD_SendCmd(MSD_GO_IDLE_STATE, 0, 0x95);
第三个问题:有时执行还是没有响应。原因,SD卡初始化SPI时钟要在100kHz到400kHz之间,更改SPI速率为180kHz.
第四个问题:读SD卡CSD寄存器没返回数据。原因:供电不足,平时只有2.9V,SPI通迅时,出现瞬间低于2.7V现像。短接直接供3.3V,如附图。继续其它试验。
此帖出自stm32/stm8论坛

最新回复

                                     详情 回复 发表于 2008-8-18 23:22
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

要给条裤子穿

                                  
此帖出自stm32/stm8论坛
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

欢迎顶帖

                                 不明白楼上的什么意思。
此帖出自stm32/stm8论坛
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 

挂文件系统了吗

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 

还没有支持文件系统,后面要做到

                                   拿到板子才一周。还没那么快做到支持文件系统,只是尝试用模板程序能正常读CSD,读块操作,写块操作。后面要做从SD卡读MP3文件,然后模拟IIS送出。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 

有关SD Card操作的解释

第一个问题:原设计电路电源控制逻辑是正确的。P-MOS管对应于逻辑“0”导通,对应于逻辑“1”关闭。
第二个问题:对于极少数SD卡不能正确操作的问题,请按以下方法修改程序:
  SPI_Config();
  //power on SD
  MSD_POWER_ON();
  Delay_us();         //此处增加延时时间,如重复
  Delay_us(); 
  Delay_us(); 
  Delay_us(); 
  Delay_us(); 
第三个问题在第二个问题解决之后即消除了。
第四个问题的出现是基于第一个问题而出现的:当P-MOS关断时,由于I/O电平通过SD卡信号引脚的泄漏,造成了电源电压为2.9V的假象。

此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 

楼上的硬件知识丰富

                                   谢谢Liuq的回复解释。我硬件知识弱一点,我接触的大部份电路都是高电平管子导通。
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 

俺还没有搞懂,但我们的二版主说给裤子,肯定没错了

                                 送出裤子一条。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 

穿着裤子亮照感觉就不一样

                                   开始不知道给条裤子穿什么意思,现在明白了,哈哈!!!原来如此。酷!
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 

文件系统 很期待

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 

电路是没问题的

                                 电路是没问题的,只是我发现在 SPI 写的库模块中有错误,状态判别反了,当程序中有快速中断时会死锁.
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

12
 

正在调试文件系统

                                   文件系统也是从网上下载了一份修改的。已经可以读出文件名了,可是不知道如何读出文件内容,还在琢磨。。。。。。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

13
 

我可以给你提供一个

不过有条件有  我没有写的部分    你到时候可要提供给我呀
  qq:53096947
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 

感谢13楼提供的程序

  读文件内容的程序也调通了,只是读了TXT文件,下一步调试读MP3文件。很奇怪,程序连续执行,SPI通迅前都要加1ms的廷时,否则读出来的数据都是0。
     delay(5000);
     MSD_ReadBlock(fp->buffer,sect*512,512);
难道是SPI通迅还不太稳定,待查。

此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

15
 

读一个扇区有部分数据出错。

板子已经恢复为6楼Liuq 所说的P-MOS管“0”导通。在调试SPI读扇区内容时,SPI速率设为36/4=9 MHz,读出512个字节,128字节之后的数据经常出错,调为36/8=4.5 MHz,情况会好一点,多次测试读同一个扇区还是发现有出错,哪位高人有什么经验指导一下。SD卡的CSD信息表示SD支持最速率10MHz. 
u8 checksum;
u16 crc16;
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))
    {
        checksum = 0;
      /* Read the MSD block data : read NumByteToRead data */
      for (i = 0; i < NumByteToRead; i++)
      {
        /* Save the received data */
        *pBuffer = MSD_ReadByte();
     checksum+=*pBuffer    ;
        /* 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) */
      crc16=MSD_ReadByte();
      crc16 = (crc16 <<8)|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;
}
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

16
 

请教kimfufree

我用STM32读写SD卡老是读不出来,能不能把你的程序给我参考一下,还有文件系统,怎样按文件来读取数据?谢谢!
liongt@yeah.net
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

17
 

压缩包大于6MB,公司发不出。

请参考昨晚发出的参考程序,我也只是测试了读FAT32根目录下的文件,有时还出现读数据块出错现像,没查明原因。现在没有继续下去了。注意加廷时就行了。
//********************************************************************************************
//读一个扇区
u8 ReadBlock(uint32 LBA)
//********************************************************************************************
{
    u8 retvalue;
    u8 retry = 3;
    do
    {
        delay(5000);
    retvalue = MSD_ReadBlock(FatFs.win,LBA*512,512);
    }while((retvalue == MSD_RESPONSE_FAILURE) && (retry--));

    if (retry == 0)
        return MSD_RESPONSE_FAILURE;
    else
        return MSD_RESPONSE_NO_ERROR;
}
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

18
 

密切关注和支持

                                  
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表