中级会员
 
- 积分
- 465
- 金钱
- 465
- 注册时间
- 2013-2-19
- 在线时间
- 1 小时
|
根据原子大侠的例子
SD卡可以读回0扇区的内容了。我在1扇区写入数据,然后在吧它读出来。
u8 ReadSector(u8 *buf,u32 sector,u8 cnt)
{
u8 res ;
if(SD_Type != SD_TYPE_V2HC)
sector <<= 9;//转换为字节地址
if(cnt == 1)//只写一个扇区
{
res = WriteCmd(CMD17,sector,0x01);
if(res == 0)
res = ReadOneBlock(buf , 512); //经过测试第二次这里读到的是01 ,即没有等到发回数据起始令牌
}
else//连续读
{
res = WriteCmd(CMD18,sector,0x01);
do
{
res = ReadOneBlock(buf , 512);
buf += 512;
}
while(--cnt && res==0);
WriteCmd(CMD12,0,0X01);
}
CS = 1;
return res;
}
单步调试时就是这句出错了“res = ReadOneBlock(buf , 512); //经过测试第二次这里读到的是01 ,即没有等到发回数据起始令牌”
返回的resp = 0x01.正常情况下是0,再根据ReadOneBlock函数定位找到的原因是
u8 ReadOneBlock(u8 *buf , u16 len)
{
if(GetResp(0xfe))//等待数据发回数据起始令牌0xfe
return 1; //读失败
即,发回数据令牌错误了,这个该怎么改做啊?
在读0扇区时没有这样的问题。 |
|