查看: 1438|回复: 0
打印 上一主题 下一主题

网友遇到过写TF卡轮询SD_WaitReady时间太长的情况吗?

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-27 18:46:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做数据采集,原来规划每20mS保存一扇区的数据。

测试中发现大部分TF卡会出现丢写数据的问题,仅有两张卡没有问题。

用逻辑分析仪抓5秒的波形,分析波形,
正常的每个扇区写入时间为两三个毫秒(因为怀疑通信速率是否太高,已经将SPI时钟降到1MHz)。
出现异常的地方扇区写入的时间特别长,二三十毫秒,甚至八九十毫秒。
致使后面采集的数据来不及写入,而丢失。

从波形看,出现问题没有什么特别规律,

同样出问题的卡,这次5秒也许没有出现异常波形,后面一次5秒采集就出现5、6个异常。
不过,会出问题的卡,每5秒的采集大部分都是会出现异常,5秒内不出现异常的相对少。

没有两张问题的卡,绝大部分情况下都不会出现异常,但偶尔也会看到异常。


仿真分析依次从SD.C里下面函数深入: SD_WriteDisk、SD_SendCmd、SD_Select、SD_WaitReady

最后确定在SD_WaitReady函数下这个while循环语句占用了很长时间。
从抓到的SPI波形看,SD_SPI_ReadWriteByte(0XFF)返回的都是0x00。
这个出现异常的轮询时间不固定。
unsigned char SD_WaitReady(void)
{
        unsigned int t=0;

        do
        {
                if(SD_SPI_ReadWriteByte(0XFF)==0XFF)
                {
                         return 0;
                }

                t++;                 

        }while(t<0XFFFFFF);

        return 1;
}转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表