SD卡驱动在很多情况下都可以正常的识别SD卡,但是有一些卡却无法识别。
查看log,可以看到一些初始化命令无法获得响应,总是超时。
请问大家遇到过类似的问题吗?可能是哪些方面的原因呢?
哪些命令超时
驱动初始化会发一些命令来确定卡是MMC还是SD
SD卡不支持MMC的命令,所以会没有响应
最好仔细看以下初始化到哪一步有问题
我也遇到过类似的问题,不过和驱动没有什么太大的关系。
当时是硬件部分为了过EMI测试多加了一些电容,导致在初始化过程中会有很多命令出现Timeout。
后来将电容去掉就OK了,但是中间具体原因我也不是很清楚。
如果要验证这个可以把SD卡的工作频率降低,一般情况下那些识别不了的卡也就可以识别了。
不过这个也只是验证,真正使用是不可能把频率降低的,不然读写速度会变慢。
当然也不排除SD卡本身的问题。
可能的原因:
1. pcb布线长度导致时钟、数据线有一定的时差,一般卡容差大没影响,有些卡容差小就容易暴露,尤其是非品牌的劣质卡。
2. 布线、板材等造成时钟线的寄生电容过大,使边沿不够陡,就是上去慢,下来也慢,影响了时序的判断,造成无码。特别强调是:时钟线。
3. 非原装、非水货的劣质卡(能不能叫山寨卡呢)很容易出问题,不要使用。
另外,MMC和SD可以不用担心兼容性,目前大部分的cpu提供的SD相关驱动都会支持MMC和SD的,自动识别。
引用: 引用 5 楼 shuiyan 的回复:
可能的原因:
1. pcb布线长度导致时钟、数据线有一定的时差,一般卡容差大没影响,有些卡容差小就容易暴露,尤其是非品牌的劣质卡。
2. 布线、板材等造成时钟线的寄生电容过大,使边沿不够陡,就是上去慢,下来也慢,影响了时序的判断,造成无码。特别强调是:时钟线。
3. 非原装、非水货的劣质卡(能不能叫山寨卡呢)很容易出问题,不要使用。
另外,MMC和SD可以不用担心兼容性,目前大部分的cpu提供的SD相关驱动都会…
相当专业的回复,学习了。
是不是大容量的SD卡?大容量的SD卡一般用的是MLC结构的NAND FLASH.估计不大稳定,听说也只能擦1万次,而小容量的SD卡采用的是SLC结构的NAND FLASH,质量更好,可以擦10万次.
除了以上认为可能是硬件问题外也可以检查一些软件不兼容的情况,前几天就发现有张卡读不了,跟踪发现返回一个寄存器时出错,直接跳过就可以识别了
可能的原因:
1. pcb布线长度导致时钟、数据线有一定的时差,一般卡容差大没影响,有些卡容差小就容易暴露,尤其是非品牌的劣质卡。
2. 布线、板材等造成时钟线的寄生电容过大,使边沿不够陡,就是上去慢,下来也慢,影响了时序的判断,造成无码。特别强调是:时钟线。
3. 非原装、非水货的劣质卡(能不能叫山寨卡呢)很容易出问题,不要使用。
另外,MMC和SD可以不用担心兼容性,目前大部分的cpu提供的SD相关驱动都会…
U盘见过类似的情况,SD卡用的比较少,没见过。我碰到的问题是有些U盘初始化时会在mode sense 10命令上超时,主要是timming有问题。你看看你的SD卡是不是也是这种情况。我以前用的是WINCE 4.1,MS的support工程师说很难解决,建议我们换U盘。不过后来用WINCE 5.0好很多。建议你用最新的WINCE并且打最新的补丁再试试。实在不行改改一些时序方面的参数什么的。
引用: 引用 2 楼 hhyh612 的回复:
哪些命令超时
驱动初始化会发一些命令来确定卡是MMC还是SD
SD卡不支持MMC的命令,所以会没有响应
最好仔细看以下初始化到哪一步有问题
debug时候发现在检测卡的类型时候,就是在CSDDevice::DetectSDCard中发送的命令超时。
导致其无法判断卡的类型。
有人说需要在卡的初始化阶段降低频率,保持在400KHz以下,但是SDMemory已经保证了其在100KHz的最低时钟频率下进行初始化,还有其他的原因吗?
不知道你遇到在哪一个Command时遇到的Timeout,微软的Bus层驱动兼容
所有的卡包括SD,MMC和SDIO,所以如果用SD卡的话对于CMD1和CMD5来说发生Timeout是正常的。
我也遇到过,有些不支持。
或者有一些SD卡用一段时间后不支持了,拿出来在PC上格式化一下就可以了。
LZ先试试在PC上格式化一下看看。。。