求大神支招,SD卡可以初始化但是无法读写

2019-03-24 18:06发布

初始化是成功的,但是发送读命令一直返回0x7f,写命令一
  1. void SEND_BYTE(uchar DATA)
  2. {
  3.         uchar i,temp;
  4.         temp=DATA;
  5.         CS=0;
  6.         for(i=0;i<8;i++)
  7.         {
  8.                 CLK=0;
  9.                 if(temp&0x80)
  10.                         MOSI=1;
  11.                 else
  12.                         MOSI=0;
  13.                 temp<<=1;
  14.                 CLK=1;
  15.         }
  16. }


  17. uchar READ_BYTE()
  18. {
  19.   uchar  i,temp=0;
  20.         CS=1;
  21.         SEND_BYTE(0xff);
  22.         CS=0;
  23.   for(i=0;i<8;i++)
  24.   {
  25.                         temp<<=1;  
  26.       CLK=0;
  27.       CLK=1;
  28.       if(MISO==1)
  29.         temp|=1;
  30.       else
  31.         temp|=0;   
  32.   }
  33.   return temp;
  34. }

  35. /***********发送命令*************/
  36. uchar SEND_COM(uchar CMD[])
  37. {
  38.   uchar i,temp;
  39.         CS=1;
  40.         SEND_BYTE(0xff);
  41.         CS=0;
  42.   for(i=0;i<6;i++)
  43.   {
  44.     SEND_BYTE(CMD[i]);
  45.   }
  46.         i=0;
  47.         do
  48.         {
  49.                 temp=READ_BYTE();
  50.                 i++;
  51.         }while((temp==0xff)&&(i<200));
  52.   CS=1;
  53.         SEND_BYTE(0xff);
  54.   return temp;
  55. }

  56. /*************初始化函数***************/
  57. uchar SD_INIT()
  58. {
  59.   uchar i,j=0,res;
  60.         for(i=0;i<=10;i++)
  61.     {
  62.       SEND_BYTE(0xff);
  63.     }
  64.         CS=0;
  65.   do
  66.   {
  67.     res=SEND_COM(CMD0);
  68.     j++;
  69.                 if(j==200)
  70.                 {
  71.                         return 0xff;
  72.                 }
  73.   }while(res!=0x01);
  74.         i=0;
  75.         CS=1;
  76.         SEND_BYTE(0xff);
  77.         CS=0;
  78.   do
  79.   {
  80.     res=SEND_COM(CMD8);
  81.     j++;
  82.                 if(j==200)
  83.                 {
  84.                         return 0xff;
  85.                 }
  86.   }while(res!=0x01);
  87.         do
  88.   {
  89.                 SEND_COM(CMD55);
  90.     res=SEND_COM(CMD41);
  91.     i++;
  92.                 if(i==200)
  93.                 {
  94.                         return 0xff;
  95.                 }
  96.   }while(res!=0x00);
  97.         i=0;
  98.         CS=1;
  99.         SEND_BYTE(0xff);
  100.         CS=0;
  101.         do
  102.   {
  103.     res=SEND_COM(CMD16);
  104.     i++;
  105.                 if(i==200)
  106.                 {
  107.                         return 0xff;
  108.                 }
  109.   }while(res!=0x00);
  110.         return res;       
  111. }
复制代码
直返回0xff,怎么回事??我把初始化跟读写函数贴出来给大家看看。。。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
jianping-sun
2019-03-25 06:30
chunyang 发表于 2015-2-9 19:08
列出详细的程序流程,再跟SD卡的读写时序比较,这样更容易发现问题。直接贴代码,简单是简单了,结果呢?


是按照时序来的,还参考了好几个别人的程序。。。

一周热门 更多>