对于U盘,本人在刚开始时以为是,通过文件系统来操作文件的读写、格式等。所以一想到对中文长文件名的支持,就有点畏惧,因为光是对长文件名的支持代码都要170K,而LPC11U14是没有这么大的空间的。通过学习,感觉自己完全是误会了,其实U盘的代码变不复杂,当然要产品化还是很难的。下面简单讲讲U盘的实现。
1.怎样实现文件读写?
U盘的命令很多,而我们使用的就几个,其中最重要的是Read(10/12)和Write(10/12)两个命令,PC机就是通过这两个命令来读写U盘的,而这两个命令中我们只需要知道该读写哪一个扇区,然后通过SD卡的扇区读写函数就可以实现文件的读写操作了。
2.那么PC怎么知道文件的存放地址,以及有那些文件的呢?
要知道文件的读写就离不开FAT文件系统了,所以存储介质里边必须有FAT表,而FAT里边就是存放文件,目录等的信息(具体的FAT表这里就不介绍了,网友可以到网络上去搜索)。所以在NXP的源代码里边有个数组DiskImage,这个数组就是模拟FAT表和启动扇区的,如:0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,0x00,0x02,0x01,0x01,0x00,从前面几个字节就可以看出是启动扇区的命令吧。。。。。
所以只有我们的介质里边有启动扇区和FAT表,那么我们只需要按照PC指令读取相应的扇区,PC机获取启动扇区和FAT表后就可以解码出文件的存储格式,文件大小等一系列信息了,跟读取硬盘没有多大的区别。。。。
[ 本帖最后由 zhaojun_xf 于 2011-12-13 07:50 编辑 ] |