FAT表的应用

zhqx0502   2008-12-3 15:17 楼主
我的U盘使用的是FAT表文件系统,请问用FLASH的物理地址上我要怎么去找到logic 0地址,有什么标志或者什么提示吗?

回复评论 (13)

不懂

看其它高手的!

点赞  2008-12-3 15:38
知道有谁懂吗?
谢谢!
点赞  2008-12-3 16:35
没有人知道吗?
点赞  2008-12-3 16:39
不清楚你要做的是什么程序,所以也不知道自己懂不懂。
点赞  2008-12-3 17:32
没有读过U盘,建议你自己用winHEX这个软件读数据出来看,它会帮你分析好MBR,BPB这些的,学习文件系统的好帮手。
点赞  2008-12-3 17:35
楼主,看下这篇帖子吧,这是我见过的最全的fat表分析了

[url=http://www.dostor.com/article/2004/0402/9652140.shtml][/url]
点赞  2008-12-3 22:40
引用: 引用 6 楼 ilovedrv 的回复:
楼主,看下这篇帖子吧,这是我见过的最全的fat表分析了

http://www.dostor.com/article/2004/0402/9652140.shtml


这个我也看到过,但不清楚
点赞  2008-12-3 22:53
不存在分区表的话,磁盘第0扇区就是分区第0扇区,存在分区表的话则需要分析分区表获取分区第0扇区。当然,这个磁盘上的第0扇也并非就是Flash上的0地址,不过这个就不用管了,这是主控的事,你从系统中是看不到这一转换过程的。另外不使用第三方软件格式化或分区的话,U盘都是不带分区表的,因为在windows系统中,可移动介质分区是没有意义的,即便存在多个分区,系统也只会显示第一个分区。
点赞  2008-12-8 10:34
U盘的flash一般是NAND flash,其基本构成是block,每个block又有多个page,每个page容量一样,常见的是2KB/page的,以前的512B/page的现在基本不用了(page的字节数指的是可存储用字节,未包含最后的信息位)。

驱动中会将一个page分成4个sector,这样就符合通用fat对sector的定义:512字节。

而由于nand的坏块的存在,导致logic0 sector在每个芯片上是不确定的。

你如果写应用程序,那调用系统API能获得的磁盘logic 0就是经过驱动转换后的fat格式的logic0,而不是真正物理的逻辑0区。
如果想获得真正的逻辑区信息,可以尝试用CreateFile的方式打开磁盘(文件方式),然后ReadFile(...)读取512字节即可。
点赞  2008-12-8 12:03
我觉的应该有个物理-逻辑的映射表,因为对于逻辑来说,物理总是在变化的,但是我不知道该怎么去做
有谁知道吗?
点赞  2008-12-11 09:20
引用: 引用 10 楼 ppzzhhsky 的回复:
我觉的应该有个物理-逻辑的映射表,因为对于逻辑来说,物理总是在变化的,但是我不知道该怎么去做
有谁知道吗?

确实存在这么个映射关系,但是这是由主控芯片来处理的,对系统来说是完全透明的。除非你要把flash芯片拆下来自己读才需要了解相关的东西,否则这个映射关系如何你不需要知道。由于这个映射关系涉及到的wear levelling算法是各家主控厂商的机密,所以你也不可能找到相关资料,只能自己做逆向工程,通过分析flash的spare area(flash芯片每个page除了存储正常数据的区域,还会有一小段用于存储特殊数据,这个就是spare area)上的数据来自己寻找映射关系。
点赞  2008-12-11 10:53
U盘的话,NAND FLASH的坏块管理是由usb-nand转换芯片实现的,所以windows系统是不知道的。

而所谓的物理-逻辑映射表,是指U盘有效block与逻辑存储空间的映射,这个表可以在fat表中修改。有TFFS之类的文件系统能实现这个表的变化。
点赞  2008-12-11 16:34
引用: 引用楼主 ppzzhhsky 的帖子:
我的U盘使用的是FAT表文件系统,请问用FLASH的物理地址上我要怎么去找到logic 0地址,有什么标志或者什么提示吗?

你的问题都描述错了,根据物理地址去找逻辑0地址?
对于文件系统使用的是逻辑地址,如果想把逻辑地址对应的物理地址找出来,需要在驱动中找才行,但是你的U盘的驱动代码你是没有的,所以我觉得你的目的达不到。
点赞  2008-12-13 09:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复