• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 在NandFlash里移植FATFS 复制链接 | 浏览器收藏 | 打印
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
楼主  发表于: 2011-08-30 22:36

 在NandFlash里移植FATFS


程序里没有注释在这里我就讲讲我的思路,FATFS默认读取一个扇区为512字节。nandflash以512字节为单位读是很容易实现的,但以512B为单位写要稍微麻烦点。我们在写nand时要擦除该块这样就会破坏其他数据。所以每次写之前都拷贝整块到内存,然后在这个内存块中写相应数据再擦除该块再把这块数据写回。FAT的信息都放在前面扇区这又和启动程序冲突,nand中碰到坏块又不能写入数据。为了解决这个问题我们得建一个转换表把坏块和FAT块都指向后面的好块。当然你在告诉FATFS磁盘容量时就应少给它点了。


说明:我的板子是Mini440  Nand256M,其他容量不支持,另外我发现FATFS可能有些BUG我改了一下里面的代码,可能存在其他错误  但我格式化Nand为FAT新建文件并写1K数据再读出来这个过程是没问题的
附件: uCos233.rar (740 K) 下载次数:544
级别: 新手上路
UID: 34504
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2010-12-16
最后登录: 2014-02-24
1楼  发表于: 2011-09-04 20:58
块交换算法,这个速度还是比较快的,支持一下,好在是64M,要是mini没有那么大的RAM那就不好办了
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
2楼  发表于: 2011-09-05 20:58

 回 1楼(alucard_yk) 的帖子

块交换算法?就是用其中某块作为交换区,而不用那么多内存?
级别: 新手上路
UID: 62993
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2012-02-12
最后登录: 2012-06-08
3楼  发表于: 2012-03-15 18:24
楼主太厉害了!正好是我需要的资料,非常感谢!
级别: 新手上路
UID: 66049
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2012-03-25
最后登录: 2012-03-28
4楼  发表于: 2012-03-25 23:49
楼主您好!看到你这份资料我很高兴,正在做SD卡驱动开发,需要移植ZnFAT,本人初学者,以前没有接触过文件管理系统的东西,所以有些地方不太明白。比如在您提供的这份文档下,有一个znFAT跟FATFE_R0这2个文件。如果我要znFAT文件管理的话。就只要看znFAT这个就行了对吧?最后一个问题就是在znFAT这个文件中znFAT.c里边有包含一个SDIO.H这个文件,不知能否提供下它的源文件。方便的话请发到297191837@qq.com这个邮箱。小弟万分感谢
级别: 新手上路
UID: 77699
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2012-09-11
最后登录: 2012-09-15
5楼  发表于: 2012-09-11 14:13
你好,我现在在做STM32+NAND FLASH做U盘,需要先将NAND FLASH 格式化为FAT文件系统,格式化完成后,可以出现盘符但是U盘显示容量为0,双击显示需格式化,点确定后蹦出格式化无法完成,请问是什么原因,一直实验但是老是这样,急!急!急!
级别: 新手上路
UID: 77558
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2012-09-09
最后登录: 2012-10-14
6楼  发表于: 2012-09-13 00:25
楼主,按照你的代码试了一下,可以运行,但我如果去掉CheckBad()和f_mkfs(0,0,0)两个函数之后,再运行的话,f_open的返回值就不为0了,程序就不能正常运行了,还请楼主指示!
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
7楼  发表于: 2012-09-13 09:35
CheckBad()是用来检查坏块的,f_mkfs(0,0,0)是用来格式化磁盘的,不能去掉
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
8楼  发表于: 2012-09-13 09:37

 回 5楼(qingqing) 的帖子

我这个NFTL比较简陋不适合STM32这种小内存设备
级别: 新手上路
UID: 77558
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2012-09-09
最后登录: 2012-10-14
9楼  发表于: 2012-09-13 18:01
CheckBad()可以去掉,不让它每次都检查,查f_mkfs(0,0,0)不去掉的话,每次运行要用好几分钟的时间进行格式化,肯定是不行的,有没有一种方法,只格式化一次,下次通电运行就不用再格式化了?
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go