|
1G mini SD卡 逻辑扇区0 总是等不到令牌0xfe(返回的总是0xff)
[复制链接]
1G Sandik miniSD卡(SPI模式) 初始化成功
读取0扇区(启动扇区)也成功
返回分区数据(只有一个分区)如下:
从0扇区(启动扇区)的第446个字节开始分别为分四个分区描述(此处由于只有一个分区,所以只给出前16个字字):
[446]---------0x00
[447]---------0x03
[448]---------0x3D
[449]---------0x00
[450]---------0x0B//0X0B说明SD卡为FAT32文件系统格式
[451]---------0x1F
[452]---------0xFF
[453]---------0xD7
[454]---------0xF9//0XF9为逻辑扇区0 所对应的物理扇区
[455]---------0x00
[456]---------0x00
[457]---------0x00
[458]---------0x07
[459]---------0x44
[460]---------0x1E
[461]---------0x00
上述数据 与WINHEX比较 数据是正确的。
其中 读取0扇区(启动扇区)和读逻辑扇区的程序代码是一样的(源代码如下)
在读取0扇区(启动扇区)的时候 读命令CMD17返回 开始令牌(0xfe)返回 数据返回都很正常
在读取逻辑扇区0的时候 读命令CMD17返回 正常 可以在等待开始令牌(0xfe)的时候就一直等不
到OXFE
我是读了0扇区(启动扇区)得到逻辑扇区0的物理扇区位后 再去读逻辑扇区0 的 经果就出现上述情况
两者是不是有些什么地方我没有注意到?谢谢!
/****************************************************************************
*函数功能: 向SD卡读取一个扇区
*入口参数: 无
*返回参数: 无
* :
*创建时间: 2008-11-03
*
*修改时间:
*历史版本: V0.9------第一次创建
* V
*备注:
******************************************************************************/
BYTE MmcSdReadSigngleBlock(INT32U sector, BYTE * buffer)
{
INT8U r1;
INT8U r2;
INT16U i;
INT8U ucTemp[1];
INT8U retry;
ucTemp[0] = 0xff;
retry = 0;
do
{
r1 = MmcSdSendCommand(17, sector<<9);//发active命令
retry++;
if(retry>10) return 1; //超时退出
} while(r1);
// if(r1 != 0x00)
// return r1;
//等数据的开始
do
{
ucTemp[0] = 0xff;
r2 = SPIWriteSdPro8Bit(ucTemp,1);
}while(r2 !=0xfe);
//while(SPIWriteSdPro8Bit(ucTemp,1) != 0xfe);
for(i=0; i<512; i++)//读512个数据
{
ucTemp[0] = 0xff;
*buffer++ = SPIWriteSdPro8Bit(ucTemp,1);
}
SPIWriteSdPro8Bit(ucTemp,1);//伪装crc校验码
SPIWriteSdPro8Bit(ucTemp,1);
return 0;
}
|
|