专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
大神们有MSP430跟SD卡进行SPI通信的例子吗??
2019-03-24 10:34
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
8228
11
1640
我初始化SD卡那步就失败了。。。。,代码如下,求大神帮忙看看
/**************SD卡控制端定义*******************/
#define SD_CS_0 P4OUT&=~BIT5
#define SD_CS_1 P4OUT|=BIT5
/******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 -->
/****************初始化spi***********************/
void init_spi()
{
P3SEL|=BIT1+BIT2+BIT3;
UCB0CTL1|=UCSWRST;
UCB0CTL1|=UCSSEL__SMCLK;
UCB0CTL0|=UCMST+UCCKPL+UCSYNC+UCMSB;
UCB0BR0=0x02;
UCB0BR1=0;
UCB0CTL1&=~UCSWRST;
UCB0IE|=UCRXIE;
}
/***********************************************/
/**************SPI发送一个字节******************/
void SPISEND_BYTE(uchar DATA)
{
while(!(UCB0IFG&UCTXIFG));
UCB0TXBUF=DATA;
}
/***********************************************/
/**************SPI接收一个字节******************/
uchar SPIREAD_BYTE()
{
while(!(UCB0IFG&UCRXIFG));
return UCB0RXBUF;
}
/***********************************************/
复制代码
加载中...
jianping-sun
3楼-- · 2019-03-24 23:08
/**********发送命令到SD卡************/
uchar SDSEND_COM(uchar CMD[])
{
uchar res;
SD_CS_0;
SPISEND_BYTE(CMD[0]);
SPISEND_BYTE(CMD[1]);
SPISEND_BYTE(CMD[2]);
SPISEND_BYTE(CMD[3]);
SPISEND_BYTE(CMD[4]);
SPISEND_BYTE(CMD[5]);
res=SPIREAD_BYTE();
SD_CS_1;
return res;
}
/*************************************/
/*********初始化SD卡*****************/
uchar SD_INIT()
{
uchar i ,res;
for(i=0;i<=12;i++)
{
SPISEND_BYTE(0xff);
}
SD_CS_0;
delayus(10);
do
{
res=SDSEND_COM(CMD0);
i++;
}while(i<100);
if(res!=0x01)
{
return 0;
}
else
{
i=0;
SD_CS_1;
SPISEND_BYTE(0xff);
SD_CS_0;
do
{
res=SDSEND_COM(CMD1);
i++;
}while(i<100);
i=0;
if(res!=0x01)
{
SD_CS_1;
return 0;
}
else
{
SD_CS_1;
SPISEND_BYTE(0xff);
SD_CS_0;
do
{
res=SDSEND_COM(CMD16);
i++;
}while(i<100);
if(res!=0x00)
return 0;
else
{
SD_CS_1;
return 1;
}
}
}
}
/************************************/
/*********往SD卡写数据***************/
uchar SDWRITE_BLOCK(uchar* BLOCK,int32 add)
{
uint i,res;
add<<=9;
CMD24[1]=((add&0xff000000)>>24);
CMD24[2]=((add&0x00ff0000)>>16);
CMD24[3]=((add&0x0000ff00)>>8);
CMD24[4]=add;
SD_CS_0;
do
{
res=SDSEND_COM(CMD24);
i++;
}while(i<100);
if(res!=0x05)
{
SD_CS_1;
return res;
}
else
{
for(i=0;i<=12;i++)
{
SPISEND_BYTE(0xff);
}
SPISEND_BYTE(0xfe);
for(i=0;i<512;i++)
{
SPISEND_BYTE(*BLOCK++);
}
SPISEND_BYTE(0xff);
SPISEND_BYTE(0xff);
res=SPIREAD_BYTE();
if(res!=0x05)
return 0;
else
{
delayus(10);
SD_CS_1;
return 1;
}
}
}
/**********SD卡读数据*****************/
uchar SDREAD_BLOCK(uchar* BLOCK,int32 add)
{
uint i,res;
add<<=9;
CMD17[1]=((add&0xff000000)>>24);
CMD17[2]=((add&0x00ff0000)>>16);
CMD17[3]=((add&0x0000ff00)>>8);
CMD17[4]=add;
SD_CS_0;
do
{
res=SDSEND_COM(CMD17);
i++;
}while(i<100);
if(res!=0xfe)
{
SD_CS_1;
return res;
}
else
{
for(i=0;i<512;i++)
{
*BLOCK++=SPIREAD_BYTE();
}
SPIREAD_BYTE();
SPIREAD_BYTE();
SD_CS_1;
return 1;
}
}
复制代码
加载中...
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的,秒好
加载中...
1
2
下一页
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- /****************初始化spi***********************/
- void init_spi()
- {
- P3SEL|=BIT1+BIT2+BIT3;
- UCB0CTL1|=UCSWRST;
- UCB0CTL1|=UCSSEL__SMCLK;
- UCB0CTL0|=UCMST+UCCKPL+UCSYNC+UCMSB;
- UCB0BR0=0x02;
- UCB0BR1=0;
- UCB0CTL1&=~UCSWRST;
- UCB0IE|=UCRXIE;
- }
- /***********************************************/
- /**************SPI发送一个字节******************/
- void SPISEND_BYTE(uchar DATA)
- {
- while(!(UCB0IFG&UCTXIFG));
- UCB0TXBUF=DATA;
- }
- /***********************************************/
- /**************SPI接收一个字节******************/
- uchar SPIREAD_BYTE()
- {
- while(!(UCB0IFG&UCRXIFG));
- return UCB0RXBUF;
- }
- /***********************************************/
复制代码- /**********发送命令到SD卡************/
- uchar SDSEND_COM(uchar CMD[])
- {
- uchar res;
- SD_CS_0;
- SPISEND_BYTE(CMD[0]);
- SPISEND_BYTE(CMD[1]);
- SPISEND_BYTE(CMD[2]);
- SPISEND_BYTE(CMD[3]);
- SPISEND_BYTE(CMD[4]);
- SPISEND_BYTE(CMD[5]);
- res=SPIREAD_BYTE();
- SD_CS_1;
- return res;
- }
- /*************************************/
- /*********初始化SD卡*****************/
- uchar SD_INIT()
- {
- uchar i ,res;
- for(i=0;i<=12;i++)
- {
- SPISEND_BYTE(0xff);
- }
- SD_CS_0;
- delayus(10);
- do
- {
- res=SDSEND_COM(CMD0);
- i++;
- }while(i<100);
- if(res!=0x01)
- {
- return 0;
- }
- else
- {
- i=0;
- SD_CS_1;
- SPISEND_BYTE(0xff);
- SD_CS_0;
- do
- {
- res=SDSEND_COM(CMD1);
- i++;
- }while(i<100);
- i=0;
- if(res!=0x01)
- {
- SD_CS_1;
- return 0;
- }
- else
- {
- SD_CS_1;
- SPISEND_BYTE(0xff);
- SD_CS_0;
- do
- {
- res=SDSEND_COM(CMD16);
- i++;
- }while(i<100);
- if(res!=0x00)
- return 0;
- else
- {
- SD_CS_1;
- return 1;
- }
- }
- }
- }
- /************************************/
- /*********往SD卡写数据***************/
- uchar SDWRITE_BLOCK(uchar* BLOCK,int32 add)
- {
- uint i,res;
- add<<=9;
- CMD24[1]=((add&0xff000000)>>24);
- CMD24[2]=((add&0x00ff0000)>>16);
- CMD24[3]=((add&0x0000ff00)>>8);
- CMD24[4]=add;
- SD_CS_0;
- do
- {
- res=SDSEND_COM(CMD24);
- i++;
- }while(i<100);
- if(res!=0x05)
- {
- SD_CS_1;
- return res;
- }
- else
- {
- for(i=0;i<=12;i++)
- {
- SPISEND_BYTE(0xff);
- }
- SPISEND_BYTE(0xfe);
- for(i=0;i<512;i++)
- {
- SPISEND_BYTE(*BLOCK++);
- }
- SPISEND_BYTE(0xff);
- SPISEND_BYTE(0xff);
- res=SPIREAD_BYTE();
- if(res!=0x05)
- return 0;
- else
- {
- delayus(10);
- SD_CS_1;
- return 1;
- }
-
- }
- }
- /**********SD卡读数据*****************/
- uchar SDREAD_BLOCK(uchar* BLOCK,int32 add)
- {
- uint i,res;
- add<<=9;
- CMD17[1]=((add&0xff000000)>>24);
- CMD17[2]=((add&0x00ff0000)>>16);
- CMD17[3]=((add&0x0000ff00)>>8);
- CMD17[4]=add;
- SD_CS_0;
- do
- {
- res=SDSEND_COM(CMD17);
- i++;
- }while(i<100);
- if(res!=0xfe)
- {
- SD_CS_1;
- return res;
- }
- else
- {
- for(i=0;i<512;i++)
- {
- *BLOCK++=SPIREAD_BYTE();
- }
- SPIREAD_BYTE();
- SPIREAD_BYTE();
- SD_CS_1;
- return 1;
-
- }
- }
复制代码有一次用toshiba的卡,调了一个星期都不好
换上sandisk的,秒好
一周热门 更多>