OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4496|回复: 13

SPI驱动SD卡的一个小问题

[复制链接]

9

主题

20

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-12-21
在线时间
24 小时
发表于 2017-2-20 20:51:43 | 显示全部楼层 |阅读模式
5金钱
板子是F407discovery的,SPI驱动SD卡,每次写成功后,把SD卡拔下来用读卡器去读,电脑提醒需要格式化磁盘。。。也就是打不开SD卡,为什么呢?调试时,我已经通过串口返回写入的数据了,是正确的啊。。。。

最佳答案

查看完整内容[请看2#楼]

单块读和多块读最后面的: errorstatus=IsCardProgramming(&cardstate); while((errorstatus==SD_OK)&&((cardstate==SD_CARD_PROGRAMMING)||(cardstate==SD_CARD_RECEIVING))) { errorstatus=IsCardProgramming(&cardstate); }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-20 20:51:44 | 显示全部楼层
第二人生 发表于 2017-2-22 11:22
。。。具体是哪部分?能举例说明吗???

单块读和多块读最后面的:
        errorstatus=IsCardProgramming(&cardstate);
        while((errorstatus==SD_OK)&&((cardstate==SD_CARD_PROGRAMMING)||(cardstate==SD_CARD_RECEIVING)))
        {
                errorstatus=IsCardProgramming(&cardstate);
        }   
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-21 10:39:30 | 显示全部楼层
……你上文件系统了么?
回复

使用道具 举报

9

主题

20

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-12-21
在线时间
24 小时
 楼主| 发表于 2017-2-21 10:42:20 | 显示全部楼层
gsndragon 发表于 2017-2-21 10:39
……你上文件系统了么?

上了啊。。。
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-21 11:07:37 | 显示全部楼层
各个ff函数的返回值?
回复

使用道具 举报

9

主题

20

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-12-21
在线时间
24 小时
 楼主| 发表于 2017-2-21 11:12:09 | 显示全部楼层
gsndragon 发表于 2017-2-21 11:07
各个ff函数的返回值?

大部分返回OK,偶尔会返回Disk_error。
第二个问题,SD卡读写操作均正常,但断电再供电核心板,SD卡就死在了初始化上,重新烧写程序才能正常工作,这是为什么啊???
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-21 11:38:09 | 显示全部楼层
具体看下f_open,f_write和f_close的返回值?DISK_ERROR的话可能是你SD卡的读写函数有问题,写函数里有等待SD卡写完吗?
回复

使用道具 举报

9

主题

20

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-12-21
在线时间
24 小时
 楼主| 发表于 2017-2-21 13:52:37 | 显示全部楼层
gsndragon 发表于 2017-2-21 11:38
具体看下f_open,f_write和f_close的返回值?DISK_ERROR的话可能是你SD卡的读写函数有问题,写函数里有等待S ...

我是一个whie循环,while(Write)
        {
//                                delay_ms(500);
//                                 GPIO_ToggleBits(GPIOD,GPIO_Pin_13|GPIO_Pin_12);
              Write = f_write (&my_file, Buffer, sizeof(Buffer), &br1);    //D′èëêy¾Y
//                           f_printf(&my_file, "SD");
//                                f_printf(&my_file, "%4d", br1);
//                    f_puts( "FATFS",&my_file);
        }
写成功的话就跳出来了,关于你说的等待SD卡写完是这个意思吗?
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-21 14:22:04 | 显示全部楼层
不是,是在SD卡的写单块和写多块函数中,写完查询SD卡状态
回复

使用道具 举报

9

主题

20

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-12-21
在线时间
24 小时
 楼主| 发表于 2017-2-21 14:33:12 | 显示全部楼层
gsndragon 发表于 2017-2-21 14:22
不是,是在SD卡的写单块和写多块函数中,写完查询SD卡状态

是在SD_WriteDisk()这个函数里吗?
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-22 11:16:18 | 显示全部楼层
第二人生 发表于 2017-2-21 14:33
是在SD_WriteDisk()这个函数里吗?

不是……如果你是原封不动用的原子的例程的话就不用看了,肯定都有,就不是这个问题了……
回复

使用道具 举报

9

主题

20

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-12-21
在线时间
24 小时
 楼主| 发表于 2017-2-22 11:22:02 | 显示全部楼层
gsndragon 发表于 2017-2-22 11:16
不是……如果你是原封不动用的原子的例程的话就不用看了,肯定都有,就不是这个问题了……

。。。具体是哪部分?能举例说明吗???
回复

使用道具 举报

9

主题

20

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-12-21
在线时间
24 小时
 楼主| 发表于 2017-2-22 17:57:39 | 显示全部楼层
第二人生 发表于 2017-2-22 11:22
。。。具体是哪部分?能举例说明吗???

问题已经找到了,谢谢。
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-2-22 19:20:26 | 显示全部楼层
第二人生 发表于 2017-2-22 17:57
问题已经找到了,谢谢。

问题点是??
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 11:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表