對SD卡的驅動主要有初始化、讀、寫、擦除等。
1、初始化 步驟:
(1)延時至少74clock
(2)發(fā)送CMD0,需要返回0x01,進入Idle狀態(tài)
(3)循環(huán)發(fā)送CMD55+ACMD41,直到返回0x00,進入Ready狀態(tài)。
如果是MMC,此步應發(fā)送CMD1。
2、讀 步驟:
(1)發(fā)送CMD17(單塊)或CMD18(多塊)讀命令,返回0x00
(2)接收數(shù)據(jù)開始令牌0xfe(或0xfc) + 正式數(shù)據(jù)512Bytes + CRC 校驗2Bytes
默認正式傳輸?shù)臄?shù)據(jù)長度是512Bytes,可用CMD16設置。
3、寫 步驟:
(1)發(fā)送CMD24(單塊)或CMD25(多塊)寫命令,返回0x00
(2)發(fā)送數(shù)據(jù)開始令牌0xfe(或0xfc) + 正式數(shù)據(jù)512Bytes + CRC校驗2Bytes
4、 擦除 步驟:
(1)發(fā)送CMD32,跟一個參數(shù)來指定首個要擦出的扇區(qū)號(SD手冊上說是塊號)
(2)發(fā)送CMD33,,指定最后的扇區(qū)號
(3)發(fā)送CMD38,擦除指定區(qū)間的扇區(qū)
此3步順序不能顛倒。
還要注意發(fā)送CMD命令時,后面要跟一個字節(jié)的CRC校驗數(shù)據(jù),總之要保證每次發(fā)送的數(shù)據(jù)包長度符合協(xié)議要求,命令、數(shù)據(jù)符合時序要求。