同一个T卡,一直用原子哥的探索者开发板来做的,套一个大卡套,插入板子的卡座上,用原子哥的驱动代码,直接认卡,读写文件什么的都很顺利。
觉得T卡这部分搞定了。可是我们自己的硬件回来了,T卡就悲剧了。
我们用的STM32F411CEY6 这款芯片,电路图如下:
/*  
inout & Signal
SD_EN-------------PB14
SD_CLK------------PB15
SD_CMD------------PA6
SD_D0-------------PB4
SD_D1-------------PA8
SD_D2-------------PA9
SD_D3-------------PB5
*/
我直接在原子哥的驱动代码上做改动,将初始化部分的GPIO改成我们的硬件,(当然源代码中是著名了出处的)
调试发现1. CMD0-->errorstatus=OK, 但是没有任何respond; 2. CMD8 -->errorstatus=OK,还是没有任何respond;3.CMD55-->errorstatus=非法命令 0x10,SDIO的状态寄存器也变为0x40;
4.于是进入 MMC卡,发送CMD1-->errorstatus=OK,respond一直都是0,所以电压永远无法提取到,所以最后就以电压不在范围失败告终;
但是用原子哥的探索者板子,仿真CMD8成功了,就有respond了,然后CMD55 也会成功,也有respond接下来就是进入SD卡,CMD55+ACMD41试几次就成功了,以后的功能都能正常用。
开始怀疑是上拉的问题,试着把探索者板子的上拉焊掉,依然OK,害怕是33R电阻问题,焊掉,短接,问题依旧。
3v3电压也一直是对的, 我程序中尝试把CMD/SCK两条线不初始化,就会报respond timeout错误,这说明CMD/CLK两条信号应该是对的。
尝试不初始化DATA0~DATA3发现根本没任何影响,跟之前描述的现象一样,是否初始化过程中,本来就不用DATA线。只用CMD/CLK线呢?
如果只用这两条线,我代码也验证了,如果他们有问题,就直接会timeout而不会 ok,而如果不是他们的问题,SD卡就一个 VCC,GND了,代码我也是只改了GPIO的部分,SDIO48Mhz时钟也是配置好的。
真的不知道该怎么查找下去了。
项目有点急,希望大家帮帮忙,集思广益,出出主意,谢谢了。
一周热门 更多>