SD卡的SPI模式的初始化順序
為什么在使用CMD0以后不使用CMD1?CMD1是MMC卡使用的指令,雖然本文并不想討論MMC卡的問題,但是我還是要說:為了實現(xiàn)兼容性,上電或者發(fā)送CMD0后,應該首先發(fā)送CMD55+ACMD41確認是否有回應,如果有回應則為SD卡,如果等回應超時,則可能是MMC卡,再發(fā)CMD1確認。
正確的回應內(nèi)容應該是:
CMD0——0x01(SD卡處于in-idle-state)
CMD55——0x01(SD卡處于in-idle-state)
ACMD41——0x00(SD卡跳出in-idle-state,完成初始化準備接受下一條指令)
這里要說的是如果最后的回應內(nèi)容還是0x01的話,可以循環(huán)發(fā)送CMD55+ACMD41,直到回應的內(nèi)容0x00。
在所有的指令中,唯獨CMD0特殊,在向SD卡發(fā)送以前需要向SD卡發(fā)送74+個時鐘。那么為什么要74個CLK呢?因為在上電初期,電壓的上升過程據(jù)SD卡組織的計算約合64個CLK周期才能到達SD卡的正常工作電壓他們管這個叫做Supply ramp up time,其后的10個CLK是為了與SD卡同步,之后開始CMD0的操作,嚴格按照此項操作,一定沒有問題。
關于SD卡的SPI總線,在讀入數(shù)據(jù)時SD卡的SPI是CLK的上升沿輸入鎖存,輸出數(shù)據(jù)也是在上升沿。
向SD卡寫入一個CMD或者ACMD指令的過程是這樣的:
首先使CS為低電平,SD卡使能;其次在SD卡的Din寫入指令;寫入指令后還要附加8個填充時鐘,是SD卡完成內(nèi)部操作;之后在SD卡的Dout上接受回應;回應接受完畢使CS為低電平,再附加8個填充時鐘。
在SD卡的Din沒有數(shù)據(jù)寫入時,應使Din保持高電平。
評論