用stc12c系列單片機(jī)利用IO模擬SPI總線驅(qū)動SD,其實(shí)SD開有兩種協(xié)議的版本其中是SPI和SDIO,考慮到SPI簡單,故采用SPI驅(qū)動SD卡,但是STC12C單片機(jī)的IO口是5V的電壓。而SD的接口電壓為3.3v故采用電阻分壓的方法將5v轉(zhuǎn)換為3.3v
利用兩個電阻分壓1.8k和3.5K分壓計算可以實(shí)現(xiàn)3.3v。通過multisim仿真結(jié)果和理論一致。
這樣就可以的到3.3v電平了。
stc和SD卡接口原理圖如圖。
寫好程序后發(fā)現(xiàn)怎么都不能實(shí)現(xiàn)。于是一點(diǎn)一點(diǎn)調(diào)試,利用串口跟蹤程序跑到哪一個函數(shù)里在讀字符串?dāng)?shù)據(jù)函數(shù)里發(fā)送‘a(chǎn)’(0x61)。
利用串口調(diào)試助手發(fā)現(xiàn)數(shù)據(jù)總是61,以為是SPI發(fā)送函數(shù)有問題。在向下底層讀字節(jié)函數(shù)判斷是否正常。發(fā)現(xiàn)依然不正常。
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退出卡槽。
編寫一個驗(yàn)證性程序,先讓所有的IO呈現(xiàn)點(diǎn)電平。用萬用表測量結(jié)果ok
在拉高IO口。單片機(jī)端為5v于是測量SD卡端,通過電阻分壓之后。測量發(fā)現(xiàn)只有1.2v左右。怎么會出現(xiàn)這個問題。
難道IO驅(qū)動能力太弱了嗎!趕緊找出STC12C的DS查看IO的驅(qū)動電流。發(fā)現(xiàn)趨勢驅(qū)動電流太低。
手冊上寫到可以采用推挽輸出這樣驅(qū)動能力增強(qiáng)。
按照手冊上將輸出的IO口全部改為推挽輸出
再次測量發(fā)現(xiàn)SD端可以產(chǎn)出3.3v和0v
抱著希望再一次下載SD的程序。
總結(jié)其實(shí)stc數(shù)據(jù)手冊上有關(guān)于5v轉(zhuǎn)3.3v的電路,比用兩個電阻分壓要可靠的多。
MCU的io設(shè)置開漏然后上拉到3.3v
現(xiàn)在許多的器件都是3.3v的IO所以5v轉(zhuǎn)3.3v電路很重要