3555|11

180

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

大神们有MSP430跟SD卡进行SPI通信的例子吗?? [复制链接]

我初始化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****/
复制代码


最新回复

文件系统对吗?  详情 回复 发表于 2015-1-13 08:01
 
点赞 关注

回复
举报

180

帖子

3

TA的资源

一粒金砂(中级)

沙发
 
  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****/
  5. /**************************************/
  6. uchar CMD0[6]={0x40,0x00,0x00,0x00,0x00,0x95};//切换到SPI模式命令
  7. uchar CMD1[6]={0x41,0x00,0x00,0x00,0x00,0x01};//初始化命令
  8. uchar CMD16[6]={0x50,0x00,0x00,0x02,0x00,0x01};//设置扇区大小512BYTE
  9. uchar CMD17[6]={0xfe,0x00,0x00,0x00,0x00,0x01};//从SD卡中单个块读取数据命令,中间四个字节为地址
  10. uchar CMD24[6]={0x58,0x00,0x00,0x00,0x00,0xff};//向SD卡中单个块写入数据命令,中间四个字节为地址
复制代码
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

板凳
 

  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. /***********************************************/
复制代码
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

4
 
  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. }
复制代码

 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

5
 
刚才出了点问题,代码补发在下面
 
 
 

回复

6040

帖子

195

TA的资源

版主

6
 
请参考我发过的一个帖子,5529显示汉子的那个帖子,里面有官网提供的例程,spi操作sd卡的,我手机不上网不方便找

点评

工程量有点大。。。待我慢慢消化。。。。。  详情 回复 发表于 2015-1-9 22:23
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

7
 
最简单的想法,你的卡兼容不?
有一次用toshiba的卡,调了一个星期都不好
换上sandisk的,秒好

点评

现在就1个SD卡。。。  详情 回复 发表于 2015-1-9 22:24
 
个人签名

So TM what......?

 

 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

8
 
lcofjp 发表于 2015-1-9 20:23
请参考我发过的一个帖子,5529显示汉子的那个帖子,里面有官网提供的例程,spi操作sd卡的,我手机不上网不方便找


工程量有点大。。。待我慢慢消化。。。。。

 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

9
 
ljj3166 发表于 2015-1-9 20:42
最简单的想法,你的卡兼容不?
有一次用toshiba的卡,调了一个星期都不好
换上sandisk的,秒好


现在就1个SD卡。。。

 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

10
 
先试试看其他的卡,不一定是程序的问题。DEBUG先从简单的开始。
 
 
 

回复

565

帖子

5

TA的资源

纯净的硅(中级)

11
 
文件系统对吗?

点评

格式化为FAT32啦  详情 回复 发表于 2015-1-13 11:03
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

12
 


格式化为FAT32啦

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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