硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1886|回复: 7
收起左侧

[FileX] FileX+LevelX 挂载nor flash失败

[复制链接]

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
发表于 2022-6-1 17:12:26 | 显示全部楼层 |阅读模式
在格式化完OSPI_FLASH(四线制)后,挂载文件系统的话正常,但是如果重启后如果我不格式化直接挂载文件系统的话,会出现FX_BUFFER_ERROR(错误码0x21) image.png
image.png
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-6-1 17:58:05 | 显示全部楼层
如果我把缓冲区设置的很大,那么错误就变成了FX_FAT_READ_ERROR
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106416
QQ
发表于 2022-6-2 11:46:19 | 显示全部楼层
linminghui 发表于 2022-6-1 17:58
如果我把缓冲区设置的很大,那么错误就变成了FX_FAT_READ_ERROR

楼主的意思是每次上电都要重新格式化? 那这个应该是哪里的配置项或者驱动还有点问题。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-8-4 15:57:18 | 显示全部楼层
我这里也遇到了这个问题,是 FMC 的 NORFlash。
格式化后新建的文件系统是可以打开的,接下来重启设备打开文件系统就会失败,报的错和断点定位的原因都跟你截图一模一样。

我又仔细跟了几遍,发现是 levelx 层找到的 logic sector 0 的地址不对,文件系统的信息并不储存在找到的地址上。
这时候如果不再格式化,断电重启程序,仍然是一样的问题。
如果不断电,不格式化flash,复位程序再 open 一次,就正确了。
一旦正确后,接下来每次不断电复位和断电重启都会正确。

重新格式化flash,然后建立文件系统,重启第一次又不正确了。
接下来在第一次 open 后面再加一次 open,那么第一次 open 失败,第二次成功。
成功后复位程序,第一次就会成功。。。。

我单独测试 levelx 按 logic sector 来读写,都可以正确读回写入的数据。
但是加上 filex,就会有楼主的这个问题。  
原因就是 filex 调用  levelx 读取 logic sector 0 的时候,读的实际物理位置不对,但是 open 失败后,再 open 一次,logic sector 0 的实际物理地址就对了,跟第一次 open 的地址确实不一样。
但为什么会这样我还没找到原因。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-8-4 17:04:57 | 显示全部楼层
eric2013 发表于 2022-6-2 11:46
楼主的意思是每次上电都要重新格式化? 那这个应该是哪里的配置项或者驱动还有点问题。

621D7AE6-1E6E-4cf1-9008-A09EC7FF54C5.png
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-8-5 11:50:52 | 显示全部楼层
下面是我的打开文件系统的流程:
1、尝试打开,如果成功直接返回。
2、如果不成功则全片擦除。
3、建立文件系统,之后再次打开。

0E2C6B33-C3AB-4195-9586-20CCE3165BC0.png

为了模拟文件系统损坏的情况,我在调用这个函数之前主动整片擦除一次,则第一步打开文件系统肯定会失败,然后走下面的流程。
建立新文件系统后,再次打开是成功的。
然后复位程序,在进入这个函数前不再整片擦除,第一步打开文件系统会失败。
但是如果把接下来的再打开一次的代码块使能,则再次打开会成功。
再次打开成功后,以后每次复位,则第一次打开就会成功。


第二个情况,那就是把图中的 “2、打开失败则全片擦除 ” 这段代码注释掉。
在进入函数前主动整片擦除,第一步打开文件系统会失败,然后重新建立文件系统,并打开。
然后复位程序,则第一步打开文件系统会成功。


第三个情况,如果把第一步打开文件系统注释掉,直接进行第二步整片擦除,然后重建文件系统并打开。
然后重新把第一步打开文件系统代码使能,重新下载并运行,则第一步打开文件系统就会成功。


感觉就是已经操作了一次文件系统,levelx 就会从 flash 读取数据并建立数据结构。
这时候如果把 flash 格式化了,就会有问题。。。
但也有个疑问就是格式化了之后,又会 调用 levelx 重新再打开一次,按道理应该按最新的内容再次建立数据结构才对。


这个问题查了一个星期,没找到根本原因,也只能到这一步了,没时间继续查了  
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-8-5 13:55:43 | 显示全部楼层
我的问题找到原因了,楼主的是不是同样的原因?

0E2C6B33-C3AB-4195-9586-20CCE3165BC0.png
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
发表于 2023-7-7 01:09:37 | 显示全部楼层
ihavedone 发表于 2022-8-5 13:55
我的问题找到原因了,楼主的是不是同样的原因?

我也遇到了这个问题,所以解决方案是把 current_driver->initialized = FX_FALSE; 添加到DRIVERI_UNINIT这里就可以了吗?
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-19 15:03 , Processed in 0.299235 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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