3846|3

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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;
}

最新回复

遇到过读可以,写就一直等不到开始令牌的情况,后来发现是SPI(硬件SPI)的时序问题 建议把SPI时序放低一点,在初始化的时候等侍次数设长一点  详情 回复 发表于 2009-5-26 15:40
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
哎呀,虽然做过,但是貌似不是你这个操作系统。
帮顶...
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
SPIWriteSdPro8Bit 是写?还是读?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
遇到过读可以,写就一直等不到开始令牌的情况,后来发现是SPI(硬件SPI)的时序问题
建议把SPI时序放低一点,在初始化的时候等侍次数设长一点
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表