中科因仑“3+1”工程特种兵精英论坛

标题: 网友遇到过写TF卡轮询SD_WaitReady时间太长的情况吗? [打印本页]

作者: 张衍波    时间: 2015-10-27 18:46
标题: 网友遇到过写TF卡轮询SD_WaitReady时间太长的情况吗?
做数据采集,原来规划每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;
}转载






欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4