OpenEdv-开源电子网

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

使用最新的fatfs挂载W25Q128出错

[复制链接]

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
发表于 2020-7-25 11:45:48 | 显示全部楼层 |阅读模式
本人在移植最新版本的fatfs文件系统的时候(最新版本为R0.14版本),f_mount一直返回13,w25q128已经被格式化,还是会出现这样的问题,(扇区大小为4096,改成512也同样的问题)
但是我用fatfs R0.13C及早期版本正常,用最新版本就会出现这个问题,代码跟进去,发现到了check_fs,直接返回3

即:if (ld_word(fs->win + BS_55AA) != 0xAA55) return 3;
附件为完整的代码程序,烦请高手帮忙解惑。

yuanzi_fatfs_14.rar

1.17 MB, 下载次数: 102

最新版本fatfs移植挂载W25Q128源码

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

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2020-7-25 12:00:26 | 显示全部楼层
纠正一下,在check_fs出,直接返回2,不是3,是在check_fs函数的最后地方返回
return 2;        /* Valid BS but not FAT */
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2020-7-25 12:24:02 | 显示全部楼层
死在这个地方: fs->win[BS_JmpBoot],我的板子返回的是0x04,不满足fs->win[BS_JmpBoot] == 0xE9 || fs->win[BS_JmpBoot] == 0xEB || fs->win[BS_JmpBoot] == 0xE8中的任意一个
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2020-7-25 12:34:51 | 显示全部楼层
我自己直接把源码修改了下,居然能挂载成功,这个有点看不懂。
        if (fs->win[BS_JmpBoot] == 0x04 ||fs->win[BS_JmpBoot] == 0xE9 || fs->win[BS_JmpBoot] == 0xEB || fs->win[BS_JmpBoot] == 0xE8) {        /* Valid JumpBoot code? */
                if (!mem_cmp(fs->win + BS_FilSysType, "FAT", 3)) return 0;                /* Is it an FAT VBR? */
                if (!mem_cmp(fs->win + BS_FilSysType32, "FAT32", 5)) return 0;        /* Is it an FAT32 VBR? */
        }
改成上面这样居然能成功,这个是为啥
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-7-25 18:28:23 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2020-7-27 10:59:39 | 显示全部楼层
nashui_sx 发表于 2020-7-25 18:28
http://www.openedv.com/forum.php?mod=viewthread&tid=301616&extra=

我按照他的方式,尝试做过修改,问题还是一样的,不管设置扇区大小为4096还是512,都有同样的问题,有点懵逼,我是单独的挂载W25Q128
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-7-27 16:59:27 | 显示全部楼层
北辰 发表于 2020-7-27 10:59
我按照他的方式,尝试做过修改,问题还是一样的,不管设置扇区大小为4096还是512,都有同样的问题,有点 ...

我的那个代码可以直接用的呀,没问题 估计你还是别的地方有问题
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2020-7-27 17:29:49 | 显示全部楼层
本帖最后由 北辰 于 2020-7-27 17:31 编辑
nashui_sx 发表于 2020-7-27 16:59
我的那个代码可以直接用的呀,没问题 估计你还是别的地方有问题

你的代码是针对战舰的板子么
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2020-7-27 17:42:04 | 显示全部楼层
北辰 发表于 2020-7-27 17:29
你的代码是针对战舰的板子么

看错,直接修改代码,可以支持战舰,正在实验
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2020-7-27 18:39:14 | 显示全部楼层
nashui_sx 发表于 2020-7-25 18:28
http://www.openedv.com/forum.php?mod=viewthread&tid=301616&extra=

我觉得很有可能是内存的问题,我没有用到内存管理的方式,直接在函数里面分配较多的局部变量,
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-7-27 20:37:12 | 显示全部楼层
北辰 发表于 2020-7-27 17:42
看错,直接修改代码,可以支持战舰,正在实验

我发的代码都是103全部都能用
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-10-22
在线时间
4 小时
发表于 2020-10-25 12:06:02 来自手机 | 显示全部楼层
问下fmkfs的参数work和fmount参数fs必须要用全局吗
回复 支持 反对

使用道具 举报

3

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2017-5-18
在线时间
47 小时
 楼主| 发表于 2021-1-22 11:23:10 | 显示全部楼层
于鱼同游 发表于 2020-10-25 12:06
问下fmkfs的参数work和fmount参数fs必须要用全局吗

这个不一定,放在全局主要是考虑堆栈大小,和调用问题
当你对一件事情有强烈渴望的时候,整个宇宙都会帮你达成,坚持给宇宙发渴望信号 ,就是梦想成真的秘诀。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 17:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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