找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3567|回复: 1
打印 上一主题 下一主题
收起左侧

eFAT32文件系统对4G以上的miniSD卡支持

[复制链接]
跳转到指定楼层
楼主
ID:91350 发表于 2015-10-30 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   最近用eFAT32读写操作时发现文件系统只能对2G的卡进行读写,换成4G死活不行,于是乎开始搜了一下资料,原来是2G一下的是普通卡,上面没有HC标示,4G-32G是大容量的上面有HC字样如图:


不能支持4G的卡是及其坏的,所以我决定要让现在用的文件系统支持4G的存储卡片。

自然是上网找代码了,“偷”了RT的代码回来。回来看了一下代码,代码比较简单,就是他做了个I驱动封装结构而已剥掉他不管就好了。 然后开始移植,把和硬件无关的全部拿来,然后修改代码为我自己的style。换上自己的底层驱动。只保留他的运算和判断部分。交付文件系统的接口也做了修改。原来的代码中做了一个MSD_read/write和SDHC_read/write,两份驱动函数,后来阅读发现似乎没有什么区别,我就照葫芦画瓢了。OK一切具备后编译下载,并没有得到我期待的正常的创建读写文件,而是得了个大零蛋回来。什么都没有。从那时候开始找问题了,这是上周6的事。到现在基本上一周了。连续用掉哦好几个晚上,本来都是打帝国时代的。被无情占用了.
总结如下:

一、初始化:主要目的是挑选出来SDHC卡和普通的V1.X卡片。
1、初始化的CMD8命令的正确响应
区别是否是SDHC的一个重要节点是给他发送CMD8命令,如果是SDHC的都会响应的,在程序中对这两者的区别是V1.X和V2.X,代码如下



2、初始化发送CMD55 + ACMD41 命令

3、 读取OCR并分析


以上流程完成后初始化完成退出即可,有的程序中是还有后续的,哪些不要也可以。

二、读取卡片总的扇区数量。这个就可以知道这个卡片是多么大的了。

V1.X的是



三、也是最重要的一环就是加载物理地址0扇区
这个加载是文件系统自己加在的,但是在操作中发现BUFF数据对,但不能找到启动扇区。于是追踪文件系统发现文件系统不健全少东西呀,。根本原因在读取0扇区时返回的数据会被记录进mydis的分区结构体中,这个结构体返回的数据正确,在对结构进行判别的时候发现没有这一项,也就是SD卡文件系统的类型这项,如图

这块代码对是否是FAT家族进行判断,可能是代码年代久远,没有0X0C的定义,这个FAT32系统,所以在识别的时候他返回错误,这里只需要给他加入一个宏即可

//unkonw FAT32 SDHC
#define PT_FAT32x 0x0C       

这样系统就可以对启动扇区进行正常的加载了。
四、读写驱动
值得注意的是读写驱动核心的接口和MSD的一模一样,只不过是在地址输入的时候加了一个判断,

SDHC的下发的直接是扇区地址,无需转换。
完成这这些之后就可以成功的创建读写文件啦。


实际上大部分时间是用来阅读源代码上。因为拿来品不是简单的只用才行,要看个差不多吧,否则这种问题根本解决不了。现在好了附加产品是对文件系统的作者书写有了大概的了解,明白了里面很多原来以为晦涩的东西,以及他的构架。

他的构架也是分层的,最底层是硬件然后上来是硬件接口驱动,然后就是一个独特的IO管理系统,主要完成文件系统对内存的需求而制定的。遵循类似memalloc的规则,有分配有释放。单位是一个扇区的大小512字节。有栈记录有计数器。就是一个小型的内存管理。只是很小很简单。他直接参与和驱动的数据交换,数据被放进高速缓存中。然后在上面就是FAT的分区记录,对FAT的分区进行记录最多4个只用1个嘛。在上面就是基于文件和簇的还有FAT表相文件属性等等。最终留了UI接口。可以基本的按照unix那套进行啦。当然由于软件时间久远,有些地方难免有问题,FAT类型就是典型的。他只支持到0XB。FAT32的类型。现在是0XC。自己要fix.所以想要移植一个东西,也需要对他有充分的了解才可以。而且并非那么简单。有许多东西一时半会根本看不懂。3层结构那基本是开玩笑的。不过庆幸的是结构里面基本都是不带指针的,要是在来几个指针函数,小链表虎林的,还会晕菜更久

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:70069 发表于 2020-4-10 09:17 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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