13518|18

60

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

为什么在FatFs文件系统下写文件会出现这个问题? [复制链接]

我把FatFs 移植到LPC1114上以后,给一个文件写内容:比如给SD卡里面的“ration.txt”文件写512个字母d,结果是在“ration.txt”里面出现了如下现象!

(注意:文件头从下面字母g前面的一个空格开始)

    g  T dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

 

可以看出,字母d的数目不足512个,而且开头还有g,空格,T和一些符号!

请问这是怎么回事?

 

声明:1.经测试,读写一个扇区函数和多个扇区函数都能使用!

           2.用diskio.c文件里面的函数查看SECTOR_SIZE = 512

                                                             BLOCK_SIZE = 64

                                                             SECTOR_COUNT = 3862528

            用的是正品2G SanDisk卡!

 

 

谢谢!

 

 

下面这个图是我在写512个字母c出现的现象:

 

haha.JPG (62.81 KB, 下载次数: 7)

haha.JPG
此帖出自NXP MCU论坛

最新回复

不错     标记  详情 回复 发表于 2012-7-24 13:51
点赞 关注
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 

回复
举报

2130

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
用编辑软件看下你写入的16进制码,windows的文本编辑器功能还是不行的
此帖出自NXP MCU论坛
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
你用f_lseek - Move read/write pointer, Expand file size 先定位一下,再写入试试看。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

4
 

回复 沙发 leang521 的帖子

用WINHEX软件看了下,确实是写入了整整512个字节!

不过前11个字节是乱码!

如下图:

 

此帖出自NXP MCU论坛
 
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

5
 

回复 沙发 leang521 的帖子

 

2.JPG (161.37 KB, 下载次数: 0)

2.JPG
此帖出自NXP MCU论坛
 
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

6
 

回复 板凳 zhaojun_xf 的帖子

函数里面是有f_lseek的,如下:
FRESULT FATFileWrite(const TCHAR *fileName, uint8 *buf, uint8 rcvCount)
{
            FATFS fs;           // 定义文件系统
            FIL file;               // 定义文件
            UINT  bw;          // 字节计数器   
            FRESULT res;  // 函数执行状态值

           f_mount(0, &fs);    // 加载文件系统
          res = f_open(&file, fileName, FA_OPEN_ALWAYS|FA_WRITE); // 打开文件
          if(res != FR_OK)
           {
                    return res;
           }
          else
          {
                   res = f_lseek(&file, DATA_SIZE*(rcvCount-1));         // 获取偏移量
         if (res == FR_OK)
                 {
                        res = f_write(&file, buf, 512, &bw);             // 写文件
                        if (res != FR_OK)
                        {
                                 return res;
                        }
                 }
                 else
                 {
                       return res;
                 }
         }
         f_close(&file);        //关闭文件
     f_mount(0, 0);      // 卸载文件系统
         return FR_OK;
}
此帖出自NXP MCU论坛
 
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

7
 
你用的哪个函数写的,吧输出从文件改到串口试试,当然最高还是跟踪下
此帖出自NXP MCU论坛
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

8
 
从你这段代码看不出问题所在,但从输出结果看应该出在BUF上, f_lseek这个函数也很可疑
此帖出自NXP MCU论坛
 
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

9
 

更加奇怪的现象出现了!惊!

我用flseek函数定位在ration.txt文件的第三个512字节开始写512个数字9,结果你看前面1024出现了什么现象,如下图:

我是用ISP串口方式自动下载的程序!根本没有用JLINK!

[ 本帖最后由 richgood 于 2011-5-6 18:05 编辑 ]

12.JPG (122.06 KB, 下载次数: 0)

12.JPG
此帖出自NXP MCU论坛
 
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

10
 
有点像指针出了问题,但是没法确定啊
此帖出自NXP MCU论坛
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

11
 
有可能是你的RAM空间不够造成数据缓存与其他数据区重合,你可以改一下堆栈看看。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

12
 

回复 11楼 zhaojun_xf 的帖子

以前我的buffer是定义在FAT的API文件下:FATAPI.C
现在我把buffer定义在main.c当中,结果写入的字节当中前面有一半都成了乱码。
我在给“ration.txt”写入数据之前,先用串口把buffer的数据输出到电脑,看到buffer的数据没有乱,说明就是进入文件系统后,数据乱了。

请问接下来怎么调试比较好?用的编译器是KEIL MDK4.0
此帖出自NXP MCU论坛
 
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

13
 
DEBUG
此帖出自NXP MCU论坛
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

14
 

回复 12楼 richgood 的帖子

看了你并没有采纳我的建议,就是因为进入FATFS才会因为堆栈问题改变缓存。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

15
 

回复 14楼 zhaojun_xf 的帖子

请问怎么改堆栈?

 

谢谢!

 

此帖出自NXP MCU论坛
 
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

16
 

在启动代码中有,下面是根据向导改的,也可以直接到启动代码中进行修改。

此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

17
 

回复 16楼 zhaojun_xf 的帖子

非常感谢leang521和zhaojun_xf两位版主的帮助!

在下的问题已经解决了!

果然是STACK_SIZE搞的鬼!

 

 

在KEIL的启动代码中,默认的STACK_SIZE为512字节,而SD卡的扇区最小就是512,只一个Buffer就都占了,在加上其它一些数据,不重合才怪!改为2048以后,问题就解决了!

 

就这么个小动作,搞了一个星期!搞的我都快放弃FATFS呀!结果不是FATFS的问题!

 

再次感谢!高人呀!

 

 

 

[ 本帖最后由 richgood 于 2011-5-8 10:49 编辑 ]

22.JPG (58.52 KB, 下载次数: 20)

22.JPG
此帖出自NXP MCU论坛
 
个人签名Cortex-M0交流论坛
http://www.rationmcu.com
 
 

回复

113

帖子

0

TA的资源

一粒金砂(中级)

18
 
标记一下啊啊!!!
此帖出自NXP MCU论坛
 
个人签名中国人民解放军总装备部
 
 

回复

272

帖子

0

TA的资源

一粒金砂(中级)

19
 
不错     标记
此帖出自NXP MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表