前言
在前面的文章中,我們主要介紹了如何利用SDIO協定對SD卡進行讀寫操作的流程及注意事項。雖然SDIO協定讀寫SD卡的效率很高,但是,操作卻比較麻煩,另外,還需要使用的晶片具有SDIO外設。這對于不具備SDIO外設的晶片而言,絕對是一個災難。但值得慶幸的是,SD卡還支援利用SPI協定實作對SD卡的操作。比如,目前流行的DSP28335晶片便不具備SDIO外設。是以,如果想利用該DSP晶片擴充SD卡,就需要使用SPI協定。當然,該晶片是具備SPI外設的,即使沒有,我們也可以通過軟體進行模拟。然而在實際應用中,為了更進一步提高資料的傳輸效率,我們還可以使用McBSP外設,該外設的SPI模式同樣可以實作SPI協定讀寫SD卡。
本文,我們主要介紹利用SPI協定讀寫SD卡的一些重要的知識。
SDIO協定與SPI協定的比較
SDIO協定與SPI協定相較而言,SDIO協定讀寫SD卡的速度更快,再加上其支援4線模式,即利用4條資料線,同時發送4Bits資料,資料的傳輸效率就更高了,但是由于使用的引腳較多,是以也導緻了控制相對比較困難。
而SPI外設隻具有兩條資料線MISO和MOSI,分别用作資料的輸入和輸出,由于引腳較少,是以控制相對較容易。但是,資料的傳輸效率相對而言就比較低了。
但是,兩中協定的共同之處在于:均是通過指令實作對SD卡的控制,仍然是結合狀态機實作程式設計。
SD卡如何工作在SPI模式下
當SD卡上電之後,隻有第一次發送的CMD0指令才可以選擇SD卡工作在SPI模式下。這意味着,當SD卡處于SPI模式下時,僅能通過重新上下電,才能再次選擇SD卡的通訊模式,即選擇SDIO模式或者SPI模式,否則SD卡将一直處于SPI模式下。并且,SPI模式下的SD卡不支援 V2.0版本之後新增的指令。
卡識别模式與資料傳輸模式的切換
與SDIO協定一樣,SPI模式下的SD卡同樣具有兩種工作模式—卡識别模式和資料傳輸模式。狀态機流程如下:
初始化SD卡
SPI模式下初始化SD卡的狀态機如下:
主機讀取SD卡中的資料
SPI模式下,仍然支援讀取單塊資料或者多塊資料,時序圖如下。
讀取單塊資料
讀取多塊資料
主機向SD卡寫入資料
與讀取資料一樣,主機也可以選擇向SD卡寫入單塊資料或者多塊資料,時序圖如下。
寫入單塊資料
寫入多塊資料
注意事項
1、工作在SPI模式下的SD卡,不再具備速度等級之分,将被當作class 0的速度等級進行處理;
2、SPI模式不支援SDIO模式下的一些指令;
3、SPI模式與SDIO模式下相同的指令,可能具有不同的作用。
4、SPI模式下的指令和響應的詳細資訊,請參考SD協定,有詳細介紹。
總結
本文主要介紹了SD卡工作在SPI模式的一些重要知識點,但是同樣不涉及程式實作部分。但是相信大家已經對如何實作控制SD卡有了一個大概的輪廓,相信實作起來也不是很難。由于本文能力有限,文章難免有不足或錯誤之處,還望各位讀者可以及時指正,謝謝大家!
https://blog.csdn.net/IssacMi/article/details/102785961?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-9-102785961.nonecase&utm_term=spi%E8%AF%BB%E5%86%99sd
https://www.csdn.net/gather_22/Mtjacg3sNzk2OTQtYmxvZwO0O0OO0O0O.html