
首先这是一个产品研发阶段的一个老问题放了很久都没有去解决就是两个不同厂商的sd卡一个可以更新一个不能更新简单来说就是都能用fatfs挂载成功但是一个读不到数据一个可以读所以没管他就用能读的卡去用了最近突发奇想把这个问题解决一下修修bug。这个问题一解决我就来记录了还是挺兴奋的花了好几天才搞定的。这个程序是stm32上面所以sd卡都能更新的驱动我拿到swm32上面来用的导致了上面的问题我是先debug找找为什么会失败找了很久没找到问题我决定还是上逻辑分析仪吧简单粗暴一点直接将sd卡的初始化重新撸一遍。当然这个还是网上其他大佬的csdn我来参考的去重新对一下波形的。这一对就发现问题了看下面这个波形这个是正确的波形当然我网上找了很久没看到别人用逻辑分析仪去抓波形去写驱动的有人写就好了我直接对照。两个sd卡他们的时序要求容忍度其实是不同的导致了有的sd卡初始化其实都是不对的我两张发送0x40命令的时候其实返回都是0x01这没问题但是在后面的0x48开始出现问题了他返回的竟然是0xc1,一些乱七八糟的值这让我有点崩溃咋办返回的值不对我问ai查csdn问大佬查硬件终于ai的一个回答给了我希望它说每个命令之间需要拉高cs然后拉低cs重置一下这个我在网上看了很多人的spi初始化sd卡都没讲到这一点这很关键以前stm32的驱动也没写这个不知道为什么之前的能用可能stm32牛吧或者spi频率正好加入这个重置后数据可以正常返回了接着一个波形一个波形往下看问题又出现了spi频率拉高怎么做这个也困扰了我几个小时我查寄存器查数据手册改寄存器的值发现都不行逻辑分析仪抓出来的就是有问题最后发现是逻辑分析仪的采样频率太小我真服了。导致波形看起来怪怪的。也算长个记性吧。接下来的问题就是spi驱动flash和sd卡的竞争问题了这个用逻辑分析仪看出来的我sd卡频率16MHZ然后拉高释放cs后flash来操作这个spi直接把频率拉到32MHZ去了导致flash释放的时候sd卡去用的时候spi的频率还是32MHZ导致sd卡出错了这个解决办法就是让flash和sd卡的spi频率一样不然的话好像只能每次都初始化spi把频率拉回来。总结一下这个文档记录一点别人没讲过的问题都讲得我也不想记录感觉逻辑分析仪还是很强让人一眼看出问题所在ai也是真的厉害能够提供思路但是让它解决问题他就想死循环一样出不来解决问题还是差了点。