• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

STC12C系列单片机驱动SD卡

用stc12c系列单片机利用IO模拟SPI总线驱动SD,其实SD开有两种协议的版本其中是SPI和SDIO,考虑到SPI简单,故采用SPI驱动SD卡,但是STC12C单片机的IO口是5V的电压。而SD的接口电压为3.3v故采用电阻分压的方法将5v转换为3.3v


利用两个电阻分压1.8k和3.5K分压计算可以实现3.3v。通过multisim仿真结果和理论一致。



这样就可以的到3.3v电平了。






stc和SD卡接口原理图如图。


写好程序后发现怎么都不能实现。于是一点一点调试,利用串口跟踪程序跑到哪一个函数里在读字符串数据函数里发送‘a’(0x61)。

利用串口调试助手发现数据总是61,以为是SPI发送函数有问题。在向下底层读字节函数判断是否正常。发现依然不正常。

0xFF! 53 44 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 62 FF 63 62 FF 63 62 FF 63 62 FF 63 62 FF 63 62 FF 63 62 FF 63 62 FF 63 62 FF 63

突然想到IO口的电平是不是正常,于是将SD退出卡槽。

编写一个验证性程序,先让所有的IO呈现点电平。用万用表测量结果ok

在拉高IO口。单片机端为5v于是测量SD卡端,通过电阻分压之后。测量发现只有1.2v左右。怎么会出现这个问题。

难道IO驱动能力太弱了吗!赶紧找出STC12C的DS查看IO的驱动电流。发现趋势驱动电流太低。

手册上写到可以采用推挽输出这样驱动能力增强。

按照手册上将输出的IO口全部改为推挽输出

再次测量发现SD端可以产出3.3v和0v


抱着希望再一次下载SD的程序。


竟然成功驱动SD开,并且写入数据之后读数据对比也成功了。




总结其实stc数据手册上有关于5v转3.3v的电路,比用两个电阻分压要可靠的多。

MCU的io设置开漏然后上拉到3.3v



现在许多的器件都是3.3v的IO所以5v转3.3v电路很重要





全部回复(12)
正序查看
倒序查看
eason
LV.4
2
2014-04-23 20:34
楼主好帖子,学习了,感谢继续!
0
回复
wheelzhou
LV.9
3
2014-04-23 20:40
@eason
楼主好帖子,学习了,感谢继续!
好贴,必须收藏
0
回复
utada08
LV.2
4
2014-04-23 20:51

学习了   感谢楼主

0
回复
2014-04-24 09:10

强帖留名

0
回复
shenx123
LV.10
6
2014-04-24 14:13

做实验需要哪些准备?

0
回复
2014-04-24 20:37
@shenx123
做实验需要哪些准备?
51单片机最小系统,SD卡套,几个电阻
0
回复
2014-04-24 20:50
@小雨飘飘
51单片机最小系统,SD卡套,几个电阻
发点有价值的东西大家都学学!
0
回复
joyban
LV.3
9
2014-04-25 10:24
有没有硬件图啊?
0
回复
山东大汉
LV.10
10
2014-04-27 23:59
@wheelzhou
好贴,必须收藏
5转3.3 和3.3转5, 用在什么地方呢, 我写了一个帖子,但是是电源的,单片机的话,有什么讲究呢
0
回复
cltwolf
LV.5
11
2014-04-29 13:33

这个好贴,学习学习学习,必须学啊。

0
回复
2014-06-26 13:29

LZ只是犯了个IO口常识错误啊。

一般单片机有强推输出的,默认是弱上接输出,只有几百个uA。

在高速情况下是需要考虑IO口的驱动能力的。

0
回复
2014-06-26 13:31
@shenx123
做实验需要哪些准备?

STC的只需一个串口下载线。 一个STC单片机 单片机接上电源和地线,写上程序,它就可以工作了。

0
回复