紧急求助~~~~SD卡的fat32文件系统读BPB数据不正常~~~

[复制链接]
3984|4
 楼主| li543117 发表于 2008-9-15 13:50 | 显示全部楼层 |阅读模式
我做的SD卡的fat32文件系统,普通的正常读写没有任何问题,譬如利用欧冠测试数据写入到某个扇区,然后回读比较,结果均正常,读取硬件信息,结果正常,但是读取BPB数据就不正常:512BYTE的0扇区数据,前510全为0,理论上不正常,后面两位为0x55,0xaa,结果又正常。<br /><br />我现在怀疑可能是我读取BPB扇区的位置不对,如果有哪位知道是在哪个位置读取的请指教一下~~<br /><br />下面有读取BPB数据的程序,请大虾帮忙分析分析~~~<br /><br />void&nbsp;fnSD_InitDrive(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;MMC_read_sector(0,buffers.currentsector.u8data);//在0扇区处读取BPB数据<br />&nbsp;&nbsp;&nbsp;&nbsp;buffers.SectorCurrentlyLoaded=0xFFFFFFFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />uint8_t&nbsp;MMC_read_sector(uint32_t&nbsp;addr,uint8_t&nbsp;*Buffer)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8_t&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32_t&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPI_TransferByte(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;Write_Command_MMC(MMC_READ_BLOCK,addr&lt&lt9);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(temp&nbsp;!=&nbsp;0x00)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(READ_BLOCK_ERROR);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(SPI_TransferByte(0xff)&nbsp;!=&nbsp;0xfe);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt512;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*Buffer++&nbsp;=&nbsp;SPI_TransferByte(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;SPI_TransferByte(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPI_TransferByte(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(1);<br />}<br />
linnaldf 发表于 2008-9-20 14:05 | 显示全部楼层

你是用什么格式化SD卡的啊?

你的代码有格式化程序吗?还是通过windows来格式化?<br />FAT32支持隐藏扇区,保留扇区,BPB是在隐藏扇区之后的,BPB之后的第一个扇区也是有作用的,具体可以看看FAT规范,BPB之后的第6个扇区是BPB的备份扇区。你可以试试读前32个物理扇区的内容,用超级终端打印出来,如果格式化正确的话,肯定可以读取到BPB的。
xkleee 发表于 2008-9-20 16:39 | 显示全部楼层

RE

BPB未必在逻辑0扇区,如果逻辑0扇区前3字节为0,就读取第446后面的16字节的分区表,计算出BPB所在的扇区。
linnaldf 发表于 2008-9-20 18:06 | 显示全部楼层

人家那是SD卡

一般硬盘才有分区表,SD卡插到电脑上,当作是一个分区使用,就像U盘一样,其上面那来的分区表?BPB在逻辑扇区1,也就是隐藏扇区之后。如果没有隐藏扇区,逻辑扇区序号跟物理扇区序号是相等的,否则FAT系统扇区所对应的物理扇区序号等于隐藏扇区加上逻辑扇区序号
linnaldf 发表于 2008-9-20 18:29 | 显示全部楼层

用winhex软件看一下很快就知道BPB在那个扇区了

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

本版积分规则

32

主题

52

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部