大神们有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
1楼-- · 2019-03-24 19:09
 精彩回答 2  元偷偷看……
jianping-sun
2楼-- · 2019-03-24 20:25
< :TI_MSP430_内容页_SA7 -->

  1. /****************初始化spi***********************/
  2. void init_spi()
  3. {
  4.   P3SEL|=BIT1+BIT2+BIT3;
  5.   UCB0CTL1|=UCSWRST;
  6.   UCB0CTL1|=UCSSEL__SMCLK;
  7.   UCB0CTL0|=UCMST+UCCKPL+UCSYNC+UCMSB;
  8.   UCB0BR0=0x02;
  9.   UCB0BR1=0;
  10.   UCB0CTL1&=~UCSWRST;
  11.   UCB0IE|=UCRXIE;
  12. }
  13. /***********************************************/


  14. /**************SPI发送一个字节******************/
  15. void SPISEND_BYTE(uchar DATA)
  16. {
  17.   while(!(UCB0IFG&UCTXIFG));
  18.   UCB0TXBUF=DATA;
  19. }
  20. /***********************************************/

  21. /**************SPI接收一个字节******************/
  22. uchar SPIREAD_BYTE()
  23. {
  24.     while(!(UCB0IFG&UCRXIFG));
  25.     return UCB0RXBUF;
  26. }
  27. /***********************************************/
复制代码
jianping-sun
3楼-- · 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. }
复制代码
jianping-sun
4楼-- · 2019-03-25 01:26
 精彩回答 2  元偷偷看……
lcofjp
5楼-- · 2019-03-25 06:02
请参考我发过的一个帖子,5529显示汉子的那个帖子,里面有官网提供的例程,spi操作sd卡的,我手机不上网不方便找
ljj3166
6楼-- · 2019-03-25 09:37
最简单的想法,你的卡兼容不?
有一次用toshiba的卡,调了一个星期都不好
换上sandisk的,秒好

一周热门 更多>

相关问题

    相关文章