OpenEdv-开源电子网

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

STM32+SD卡+Fatfs 打开文件的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-4-20
在线时间
0 小时
发表于 2011-4-20 14:18:51 | 显示全部楼层 |阅读模式
 最近把FATFS移植到STM32+SD卡上。开始比较顺利,添加了下面的函数后,就基本可以用了
STATUS disk_initialize (BYTE);
DSTATUS disk_status (BYTE);
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);
DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);
DRESULT disk_ioctl (BYTE, BYTE, void*);

用f_open();来打开根目录下的txt 文件正常:
f_mount(0, &fs);
 res=f_open(&fsrc,"0:/file1.txt",FA_OPEN_EXISTING|FA_READ);
 printf("res_open:%x \n",res);
可以从串口把txt的文件内容打印出来。

但是当我想打开下一级文件夹里面的文件时,就出错了。代码如下:
f_mount(0, &fs);
 res=f_open(&fsrc,"0:/file1.txt",FA_OPEN_EXISTING|FA_READ);
 printf("res_open:%x \n",res);

这时f_open();返回的错误是“1”(A hard error occured in the low level disk I/O layer) ,说是底层驱动出错。

不知道这种打开目录下的文件的方法对不对,希望有做过类似实习的大侠们指点指点。




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-4-20 14:24:48 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-4-20
在线时间
0 小时
 楼主| 发表于 2011-4-20 14:31:06 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
不知道师兄是用什么文件系统的呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-4-20 15:34:19 | 显示全部楼层
回复【3楼】huijian:
-------------------------------
无名氏.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

98

主题

408

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2010-12-14
在线时间
0 小时
发表于 2011-4-20 15:42:12 | 显示全部楼层
回复【楼主位】huijian:
-------------------------------
把你disk I/O 层的那个.c文件贴上来看看,你移植的是哪个版本??006 or 008??
希望openedv能给大家提供一个友好的技术交流平台!
回复 支持 反对

使用道具 举报

98

主题

408

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2010-12-14
在线时间
0 小时
发表于 2011-4-20 15:55:21 | 显示全部楼层
FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */
单步调试一下看看吧!!
希望openedv能给大家提供一个友好的技术交流平台!
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2010-12-21
在线时间
0 小时
发表于 2011-4-20 15:58:43 | 显示全部楼层
最近在看了fatfs,学习中~~
回复 支持 反对

使用道具 举报

98

主题

408

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2010-12-14
在线时间
0 小时
发表于 2011-4-20 16:03:13 | 显示全部楼层
回复【楼主位】huijian:
-------------------------------
下一级为什么用“0:/file1.txt” ,记得不是这样的!
希望openedv能给大家提供一个友好的技术交流平台!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-4-20
在线时间
0 小时
 楼主| 发表于 2011-4-21 12:48:25 | 显示全部楼层
回复【5楼】张洋:
-------------------------------
谢谢关注!问题解决了,上面贴的代码复制粘贴的时候复制错地方了。我的代码如下:
f_mount(0, &fs);
res=f_open(&fsrc, "0:/folder1/file3.txt", FA_OPEN_EXISTING | FA_READ);
if(!res) printf("Open file OK \n");
s=sizeof(buffer);
for(;;)
{
res=f_read(&fsrc,buffer,s,&br);
if(res||br==0) break;
for(t=0;t<s;t++)
{
 if(buffer[t]) printf("%c",buffer[t]);
}
}
printf("\n\n\nprint file over \n");

代码还是原来的写法,我把卡格式化了一遍,重新试了就可以了。
代码的编写主要参考了FATFS官网的资料,我感觉官网上的资料挺好的。也在这里给大家推荐一下:
http://elm-chan.org/fsw/ff/00index_e.html

还有就是我的读写SD卡的底层代码是借用刘军师兄的,在这里感谢一下! (*^__^*) 嘻嘻……
>
回复 支持 反对

使用道具 举报

4

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2016-1-25
在线时间
75 小时
发表于 2016-11-23 17:01:27 | 显示全部楼层
huijian 发表于 2011-4-21 12:48
回复【5楼】张洋:
-------------------------------
谢谢关注!问题解决了,上面贴的代码复制粘贴的时候复 ...

您好,我也碰到打开文件返回FR_DISK_ERR的情况,SD卡格式化也不行,还有其它的办法吗
回复 支持 反对

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-8-22
在线时间
11 小时
发表于 2016-12-13 11:51:53 | 显示全部楼层
反复开关开发板就能遇到这个问题 mark
回复 支持 反对

使用道具 举报

16

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2021-9-8
在线时间
57 小时
发表于 2021-11-3 14:29:27 | 显示全部楼层
我读u盘的时候,可以读到u盘,但是用f_open打开u盘里面的文件就会就跟你遇到的情况一样,怎么改呀
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 02:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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