本帖最后由 GoldSunMonkey 于 2013-8-1 22:15 编辑
一个文件可能由多个簌组成,这些簌可能分布磁盘的不同位置(考虑文件可能不是连续分布在磁盘)从FAT表中可以读取到该文件的所有簌位置 假如第一个簌地址就是02,其对应的扇区=4+2+500+32=538 那么在读指令的地址参数就填入538对应的二进制数,这样就可以读本扇区的数据了既然一个簌包含连续的32扇区那么在接收完第一个单512字节数据完成后,SD状态机应该返回到stand-by状态等待下一个读指令的发出吧(这时地址就自动累加538+1),直到538+31为止一个簌块读取结束。然后获取FAT表中下个簌的地址并换算为对应的扇区号,操作一样等读到文件最后一个簌区的时候,是不是根据文件大小来确定最终读指令操作结束(也就是在文件读完毕的时候应该有个系统响应信号给控制器吧) 【在阅读规格书的过程中,里面另一个就是多块读指令,在指令发出去以后它应该是不间断的发送512字节数据块,终止次操作要靠CMD12;那这个多块读指令发出去之后,SD卡应该是默认按照连续簌来自动读扇区吧?或者通过此办法来累积32次,表示一个簌读完,如果下一个簌不是连续的则发CMD12指令终止然后再发新簌的首个的扇区地址,如果是连续的则重新计数,如此反复,这样是否也可行呢】 那么在实际的操作过程中就可以这样操作吧:读取512字节的系统区,用一个计数器把关键字节的数据提取出来作为数据区偏移的依据,例如保留区,隐藏区,FAT表大小,根目录(默认就是32个扇区)记录下拉,这样首个数据区地址就可以定了,后面的地址只是在这个基础上的累加 【FAT表的疑惑】我用一个磁盘读取工具读格式化的FAT16文件系统,在分区表那块怎与一些文档介绍的不同?隐藏区的扇区用磁盘读取工具无法读出来吗?是不是计算数据区的位置在保留区,fat表大小,根目录,再自动吧隐藏区的扇区加上就是数据区的首扇区了吧 |