大神们有MSP430跟SD卡进行SPI通信的例子吗??

2019-03-24 10:34发布

我初始化SD卡那步就失败了。。。。,代码如下,求大神帮忙看看
  1. /**************SD卡控制端定义*******************/
  2. #define SD_CS_0 P4OUT&=~BIT5
  3. #define SD_CS_1 P4OUT|=BIT5
  4. /******SD_DI-->P3.1,SD_DO-->P3.2,SD_CLK-->P3.3****/
复制代码

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
jianping-sun
2019-03-24 23:08
  1. /**********发送命令到SD卡************/
  2. uchar SDSEND_COM(uchar CMD[])
  3. {
  4.   uchar res;
  5.   SD_CS_0;
  6.   SPISEND_BYTE(CMD[0]);
  7.   SPISEND_BYTE(CMD[1]);
  8.   SPISEND_BYTE(CMD[2]);
  9.   SPISEND_BYTE(CMD[3]);
  10.   SPISEND_BYTE(CMD[4]);
  11.   SPISEND_BYTE(CMD[5]);
  12.   res=SPIREAD_BYTE();
  13.   SD_CS_1;
  14.   return res;
  15. }
  16. /*************************************/

  17. /*********初始化SD卡*****************/
  18. uchar SD_INIT()
  19. {
  20.   uchar i ,res;
  21.   for(i=0;i<=12;i++)
  22.   {
  23.     SPISEND_BYTE(0xff);
  24.   }
  25.   SD_CS_0;
  26.   delayus(10);
  27.   do
  28.   {
  29.     res=SDSEND_COM(CMD0);
  30.     i++;
  31.   }while(i<100);
  32.   if(res!=0x01)
  33.   {
  34.     return 0;
  35.   }
  36.   else
  37.   {
  38.     i=0;
  39.     SD_CS_1;
  40.     SPISEND_BYTE(0xff);
  41.     SD_CS_0;
  42.     do
  43.     {
  44.       res=SDSEND_COM(CMD1);
  45.       i++;
  46.     }while(i<100);
  47.     i=0;
  48.     if(res!=0x01)
  49.     {
  50.       SD_CS_1;
  51.       return 0;
  52.     }
  53.     else
  54.     {
  55.       SD_CS_1;
  56.       SPISEND_BYTE(0xff);
  57.       SD_CS_0;
  58.       do
  59.       {
  60.         res=SDSEND_COM(CMD16);
  61.         i++;
  62.       }while(i<100);
  63.       if(res!=0x00)
  64.         return 0;
  65.       else
  66.       {
  67.         SD_CS_1;
  68.         return 1;
  69.       }
  70.     }
  71.   }
  72. }
  73. /************************************/


  74. /*********往SD卡写数据***************/
  75. uchar SDWRITE_BLOCK(uchar* BLOCK,int32 add)
  76. {
  77.   uint i,res;
  78.   add<<=9;
  79.   CMD24[1]=((add&0xff000000)>>24);
  80.   CMD24[2]=((add&0x00ff0000)>>16);
  81.   CMD24[3]=((add&0x0000ff00)>>8);
  82.   CMD24[4]=add;
  83.   SD_CS_0;
  84.   do
  85.   {
  86.     res=SDSEND_COM(CMD24);
  87.     i++;
  88.   }while(i<100);
  89.   if(res!=0x05)
  90.   {
  91.     SD_CS_1;
  92.     return res;
  93.   }
  94.   else
  95.   {
  96.     for(i=0;i<=12;i++)
  97.     {
  98.       SPISEND_BYTE(0xff);
  99.     }
  100.     SPISEND_BYTE(0xfe);
  101.     for(i=0;i<512;i++)
  102.     {
  103.       SPISEND_BYTE(*BLOCK++);
  104.     }
  105.     SPISEND_BYTE(0xff);
  106.     SPISEND_BYTE(0xff);
  107.     res=SPIREAD_BYTE();
  108.     if(res!=0x05)
  109.       return 0;
  110.     else
  111.     {
  112.       delayus(10);
  113.       SD_CS_1;
  114.       return 1;
  115.     }
  116.    
  117.   }

  118. }
  119. /**********SD卡读数据*****************/
  120. uchar SDREAD_BLOCK(uchar* BLOCK,int32 add)
  121. {
  122.   uint i,res;
  123.   add<<=9;
  124.   CMD17[1]=((add&0xff000000)>>24);
  125.   CMD17[2]=((add&0x00ff0000)>>16);
  126.   CMD17[3]=((add&0x0000ff00)>>8);
  127.   CMD17[4]=add;
  128.   SD_CS_0;
  129.   do
  130.   {
  131.     res=SDSEND_COM(CMD17);
  132.     i++;
  133.   }while(i<100);
  134.   if(res!=0xfe)
  135.   {
  136.     SD_CS_1;
  137.     return res;
  138.   }
  139.   else
  140.   {
  141.     for(i=0;i<512;i++)
  142.     {
  143.       *BLOCK++=SPIREAD_BYTE();
  144.     }
  145.     SPIREAD_BYTE();
  146.     SPIREAD_BYTE();
  147.     SD_CS_1;
  148.     return 1;
  149.    
  150.   }

  151. }
复制代码

一周热门 更多>

相关问题

    相关文章