MyFPGA Forum

 找回密码
 注册
搜索
查看: 4284|回复: 1
打印 上一主题 下一主题

SD卡源码问题

[复制链接]
跳转到指定楼层
1#
发表于 2010-7-30 14:49:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是DE0配套提供的SD卡应用的代码:

bool SD_card_init(void)
{
    alt_u8 x,y;
   
    // richard add:  pull-high DAT3 to enter SD mode?
#ifndef SD_4BIT_MODE   
  //  SD_DAT3_OUT;
   // SD_DAT3_HIGH;
#endif  
    //printf(("--- Power On, Card Identification Mode, Idle State\r\n"));
   // printf(("default 1-bit mode\r\n"));
  
    usleep(74*10);
   
    SD_CMD_OUT;
    SD_DAT_IN;
    SD_CLK_HIGH;
    SD_CMD_HIGH;
    SD_DAT_LOW;
   
    gbActive = FALSE;
    read_status=0;
    for(x=0;x<40;x++)
        Ncr();
    for(x=0;x<5;x++)
        cmd_buffer[x]=cmd0[x];
    y = send_cmd(cmd_buffer);
   //printf(("CMD0[GO_IDLE_STATE]\r\n"));
    do
    {
        // issue cmd55 & wait response
      for(x=0;x<40;x++);
        Ncc();
      for(x=0;x<5;x++)
        cmd_buffer[x]=cmd55[x];
      y = send_cmd(cmd_buffer);
     // printf(("CMD55[APP_CMD]\r\n"));
      Ncr();
      if(response_R(1)>1){ //response too long or crc error
        //printf(("response error for CMD55\r\n"));
        return FALSE;
      }         
      Ncc();
。。。。。。。。。。。。。。省略

alt_u8 response_R(alt_u8 s){
  alt_u8 a=0,b=0,c=0,r=0,crc=0;
  alt_u8 i,j=6,k;
  while(1)
  {
    SD_CLK_LOW;
    SD_CLK_HIGH;
    if(!(SD_TEST_CMD))
        break;
。。。。。。。。省略

我要问的CMD线是双向的,因此发送命令和接收响应的时候都应该要改变CMD线的方向。
而初始化程序SD_card_init(void)中SD_CMD_OUT初始化命令线为由主机向SD卡发送,而在接受响应时调用response_R()函数中并没有SD_CMD_IN。而
直接if(!(SD_TEST_CMD)),这样也能测试成功,实在是匪夷所思。。。
2#
发表于 2011-5-9 09:35:55 | 只看该作者
是啊,我也觉得很神奇,都是乱来的。连SD卡的CS片选都没有,怎么可能成功啊,我都试了n多次都失败了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-7 23:05 , Processed in 0.037432 second(s), 15 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表