用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的程序。
總結其實stc數據手冊上有關于5v轉3.3v的電路,比用兩個電阻分壓要可靠的多。
MCU的io設置開漏然后上拉到3.3v
現在許多的器件都是3.3v的IO所以5v轉3.3v電路很重要