专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
求大神支招,SD卡可以初始化但是无法读写
2019-03-24 18:06
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
7320
8
1162
初始化是成功的,但是发送读命令一直返回0x7f,写命令一
void SEND_BYTE(uchar DATA)
{
uchar i,temp;
temp=DATA;
CS=0;
for(i=0;i<8;i++)
{
CLK=0;
if(temp&0x80)
MOSI=1;
else
MOSI=0;
temp<<=1;
CLK=1;
}
}
uchar READ_BYTE()
{
uchar i,temp=0;
CS=1;
SEND_BYTE(0xff);
CS=0;
for(i=0;i<8;i++)
{
temp<<=1;
CLK=0;
CLK=1;
if(MISO==1)
temp|=1;
else
temp|=0;
}
return temp;
}
/***********发送命令*************/
uchar SEND_COM(uchar CMD[])
{
uchar i,temp;
CS=1;
SEND_BYTE(0xff);
CS=0;
for(i=0;i<6;i++)
{
SEND_BYTE(CMD[i]);
}
i=0;
do
{
temp=READ_BYTE();
i++;
}while((temp==0xff)&&(i<200));
CS=1;
SEND_BYTE(0xff);
return temp;
}
/*************初始化函数***************/
uchar SD_INIT()
{
uchar i,j=0,res;
for(i=0;i<=10;i++)
{
SEND_BYTE(0xff);
}
CS=0;
do
{
res=SEND_COM(CMD0);
j++;
if(j==200)
{
return 0xff;
}
}while(res!=0x01);
i=0;
CS=1;
SEND_BYTE(0xff);
CS=0;
do
{
res=SEND_COM(CMD8);
j++;
if(j==200)
{
return 0xff;
}
}while(res!=0x01);
do
{
SEND_COM(CMD55);
res=SEND_COM(CMD41);
i++;
if(i==200)
{
return 0xff;
}
}while(res!=0x00);
i=0;
CS=1;
SEND_BYTE(0xff);
CS=0;
do
{
res=SEND_COM(CMD16);
i++;
if(i==200)
{
return 0xff;
}
}while(res!=0x00);
return res;
}
复制代码
直返回0xff,怎么回事??我把初始化跟读写函数贴出来给大家看看。。。
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
jianping-sun
2019-03-24 22:53
这边是读写的函数
uchar SD_ReadSector(uchar *buf,long int sector)
{
uchar response,i=0;
sector*=512;
CMD17[1]=((sector)>>24);
CMD17[2]=((sector)>>16);
CMD17[3]=((sector)>>8);
CMD17[4]=sector;
CS=1;
SEND_BYTE(0xff);
CS=0;
do
{
response=SEND_COM(CMD17);
i++;
if(i==200)
{
return response;
}
}while(response!=0);
i=0;
while(READ_BYTE()!=0xfe);
for(i=0;i<512;i++)
{
*buf++=READ_BYTE();
}
CS=1;
SEND_BYTE(0xff);
return 0;
}
uchar SD_WriteSector(uchar *buf,long int sector)
{
uchar response,i=0;
sector*=512;
CMD24[1]=((sector&0xff000000)>>24);
CMD24[2]=((sector&0x00ff0000)>>16);
CMD24[3]=((sector&0x0000ff00)>>8);
CMD24[4]=sector&0x000000ff;
CS=1;
SEND_BYTE(0xff);
CS=0;
do
{
response=SEND_COM(CMD24);
i++;
if(i==200)
{
return response;
}
}while(response!=0);
SEND_BYTE(0xfe);
i=0;
for(i=0;i<512;i++)
{
SEND_BYTE(*buf++);
}
SEND_BYTE(0xff);
SEND_BYTE(0xff);
response=READ_BYTE();
if(response&0x1f!=0x05)
return response;
while(READ_BYTE()!=0xff);
CS=1;
SEND_BYTE(0xff);
return 0;
}
复制代码
加载中...
查看其它8个回答
一周热门
更多
>
相关问题
相关文章
基于51单片机的计算器设计
0个评论
51单片机300个proteus仿真实例下载
0个评论
51单片机 蜂鸣器
0个评论
51单片机驱动RC522模块
0个评论
基于51单片机的指纹密码锁
0个评论
AT89C51单片机制作简易密码锁
0个评论
51单片机汇编语言计数器
0个评论
51单片机精确延时设计
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- uchar SD_ReadSector(uchar *buf,long int sector)
- {
- uchar response,i=0;
- sector*=512;
- CMD17[1]=((sector)>>24);
- CMD17[2]=((sector)>>16);
- CMD17[3]=((sector)>>8);
- CMD17[4]=sector;
- CS=1;
- SEND_BYTE(0xff);
- CS=0;
- do
- {
- response=SEND_COM(CMD17);
- i++;
- if(i==200)
- {
- return response;
- }
- }while(response!=0);
- i=0;
- while(READ_BYTE()!=0xfe);
- for(i=0;i<512;i++)
- {
- *buf++=READ_BYTE();
- }
- CS=1;
- SEND_BYTE(0xff);
- return 0;
-
- }
- uchar SD_WriteSector(uchar *buf,long int sector)
- {
- uchar response,i=0;
- sector*=512;
- CMD24[1]=((sector&0xff000000)>>24);
- CMD24[2]=((sector&0x00ff0000)>>16);
- CMD24[3]=((sector&0x0000ff00)>>8);
- CMD24[4]=sector&0x000000ff;
- CS=1;
- SEND_BYTE(0xff);
- CS=0;
- do
- {
- response=SEND_COM(CMD24);
- i++;
- if(i==200)
- {
- return response;
- }
- }while(response!=0);
- SEND_BYTE(0xfe);
- i=0;
- for(i=0;i<512;i++)
- {
- SEND_BYTE(*buf++);
- }
- SEND_BYTE(0xff);
- SEND_BYTE(0xff);
- response=READ_BYTE();
- if(response&0x1f!=0x05)
- return response;
- while(READ_BYTE()!=0xff);
- CS=1;
- SEND_BYTE(0xff);
- return 0;
- }
复制代码一周热门 更多>