搜索
bottom↓
回复: 20

TR-THREAD的文件系统到底怎么个弄法?我弄了两天了,都还不对-_-

[复制链接]

出0入0汤圆

发表于 2011-3-18 18:57:55 | 显示全部楼层 |阅读模式
TR-THREAD的文件系统到底怎么个弄法?我弄了两天了,都还不对-_-

下面说说我的做法:
1、我要创建的是基于SPI FLASH的文件系统;
2、我已经实现在SPI FLASH的底层驱动(块设备),注_册块设备文件“spi0”,并测试块读写,完全OK;
3、dfs_init();
4、elm_init();
5、
if (0 == dfs_mount("spi0","/","elm",0,0))
{
    rt_kprintf("File System initialized!\n");
}
else
{
    rt_kprintf("File System initialzation failed!\n");
}
打印:File System initialized!
6、
#define TEST_FN "/test.dat"
int fd;
//只写&创建打开
fd = open(TEST_FN, O_WRONLY|O_CREAT|O_TRUNC,0);
if (fd < 0)
{
    rt_kprintf("open file for write failed\n");
}
打印:open file for write failed。
7、看文档,网络人肉搜索,结果:没弄明白-_-。

怎么个弄法?谢谢各位了。

出0入0汤圆

发表于 2011-3-18 22:32:50 | 显示全部楼层
估计你的驱动有问题,接口符合RT-Thread的要求吗?如果是RT-Thread 0.4.x,需要一个标准的块设备接口。

出0入0汤圆

 楼主| 发表于 2011-3-18 22:46:18 | 显示全部楼层
是RT-Thread 0.3的的内核。
但驱动我测试过了,读写都是没有问题的。
现在公司要用RT-Thread做产品。

出0入0汤圆

 楼主| 发表于 2011-3-18 22:47:31 | 显示全部楼层
而且我还参考了STM32 RADIO的代码了。具体问题不知道出现在哪里?-_-

出0入0汤圆

发表于 2011-3-19 08:31:14 | 显示全部楼层
spi flash 不需要先格式化吗?

出0入0汤圆

 楼主| 发表于 2011-3-19 09:25:22 | 显示全部楼层
怎么格式化?

出0入0汤圆

 楼主| 发表于 2011-3-19 09:40:52 | 显示全部楼层
0.3版本的内核,读写接口的POS参数的单位是BYTE,0.4版本的则是page OR block,对吗?

出0入0汤圆

发表于 2011-3-19 10:42:47 | 显示全部楼层
回复【6楼】814840090  
0.3版本的内核,读写接口的pos参数的单位是byte,0.4版本的则是page or block,对吗?
-----------------------------------------------------------------------
是.

文件系统建议使用新的.内核部分则可以考虑不换.
新版的格式化可以使用 mkfs("elm","sd0")

出0入0汤圆

 楼主| 发表于 2011-3-19 11:06:44 | 显示全部楼层
0.3版本的不需要格式化的,对吗?楼主说的新版指的是0.4版的,对吗?
又看了一遍

RT-Thread实时操作系统编程指南
版本0.3.0
RT-Thread工作室
March 18,

没看出个所以然后来,觉得介绍得好简单。看来得一步步跟踪代码了。

出0入0汤圆

 楼主| 发表于 2011-3-19 14:51:24 | 显示全部楼层
运行到下面这一句就直接返回错误了:
if (fmt || LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs))        /* No valid FAT patition is found */
{
return FR_NO_FILESYSTEM;
}

No valid FAT patition is found?

没有找到分区?
具体什么问题呢?

出0入0汤圆

 楼主| 发表于 2011-3-19 14:54:42 | 显示全部楼层
错误原因:在FLASH上没有找到FAT分区。

难道要格式化SPI FLASH不成?

出0入0汤圆

 楼主| 发表于 2011-3-19 14:55:17 | 显示全部楼层
继续研究。。。。

出0入0汤圆

发表于 2011-3-21 11:24:44 | 显示全部楼层
楼主,我也遇到跟你一样的问题了,不知道你解决了没有呀!!我用的SD总线模式,底层驱动都测过,全部OK的

出0入0汤圆

发表于 2011-3-21 12:36:42 | 显示全部楼层
0.3、0.4的spi都需要格式化。

但是0.3.x通常是不带格式化的函数(可以用fatfs带的那个),0.4.x默认带格式化的函数,看看mkfs函数就知道了。

出0入0汤圆

发表于 2011-3-21 12:49:57 | 显示全部楼层
有什么问题呀, 官方就有一个现成的SPI FLASH例子或者STM32 Radio的也行:
2_filesystem_spiflash, 这个工程。
运行一下那个例子:
\ | /
- RT -     Thread Operating System
/ | \ 0.4.0 build Mar 21 2011
2006 - 2011 Copyright by rt-thread team
SPI File System initialized!
finsh>>ls()
Directory /:
resource            <DIR>
setup.ini           118
SD                  <DIR>
radio.pls           3364
        0, 0x00000000
finsh>>

出0入0汤圆

 楼主| 发表于 2011-3-21 12:50:41 | 显示全部楼层
回复【13楼】ffxz
0.3、0.4的spi都需要格式化。
但是0.3.x通常是不带格式化的函数(可以用fatfs带的那个),0.4.x默认带格式化的函数,看看mkfs函数就知道了。
-----------------------------------------------------------------------

果然是没有格式化的原因;格式化后就可以正常打开文件了。
但有一个问题又出来了:
size = write(fd, s, sizeof(s));总是一直返回0.-_-

我一直跟踪,发现是没有 free cluster 了,文件系统里面的注释是:full disk.

刚格式化完的FLASH怎么就满了呢?还没有弄明白。

继续研究。。。。。。。。。。。。。。

出0入0汤圆

 楼主| 发表于 2011-3-21 12:53:09 | 显示全部楼层
官方的STM32 Radio例子我也看了。full disk 的问题没搞明白。-_-

出0入0汤圆

发表于 2011-3-21 13:49:50 | 显示全部楼层
学习,学习,正好一个项目也用到文件系统了。
打算用SD卡

出0入0汤圆

 楼主| 发表于 2011-3-22 12:36:30 | 显示全部楼层
问题找到了:SPI FLASH 没按4K字节读写,但按4K字节擦除了。但底层没有做数据保护的情况下,擦了不该擦的数据。晕了。
谢谢各位的帮忙~~~~~~~~~

出0入0汤圆

发表于 2011-3-23 22:28:09 | 显示全部楼层
回复【18楼】814840090
问题找到了:spi flash 没按4k字节读写,但按4k字节擦除了。但底层没有做数据保护的情况下,擦了不该擦的数据。晕了。
谢谢各位的帮忙~~~~~~~~~
-----------------------------------------------------------------------

请教一下,你用的那种硬件,STM还是NPX?

出0入0汤圆

 楼主| 发表于 2011-3-24 08:48:15 | 显示全部楼层
STM
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 17:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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