SD卡学习(SDIO和SPI模式)
SD卡學習(SDIO和SPI模式)
** SD卡的操作模式:SD卡模式(SDIO)、SPI模式(默認為SD模式)。
其中SD卡模式的信號線有:CLK、CMD、DAT0-DAT3,6根線。
SPI模式的信號線有:CS、CLK、MISO(DATAOUT)、MOSI(DATAIN),4根線。

SD卡只能使用3.3V的I/O電平。SPI模式下信號線要加10-100K的上拉電阻。
SD卡有五個寄存器:
| CID | 128 | 卡標識寄存器 |
| RCA | 16 | 相對地址寄存器(Relative Card Address):本地系統中卡的地址,動態變化,在主機初始化的時候確定,SPI模式中沒有。 |
| CSD | 128 | 卡描述數據:卡操作條件相關的信息數據 |
| SCR | 64 | SD配置寄存器:SD卡特定信息數據 |
| OCR | 32 | 操作條件寄存器 |
SD卡的命令格式:
命令CMD0就是0,CMD16就是16,以此類推。
SPI命令格式為6字節構成,高位在前(MSB)。
| 7 | 6 | 5-0 |
| 0 | 1 | command |
字節1的最高2位固定是01,低6位為命令號(CMD0就是0,CMD16就是16,以此類推),字節2-5為命令參數,有些命令是沒有參數的;字節6的高7位為CRC,最低位恒為1。
SD卡的命令總共有12類,下表為幾個比較重要的命令:
SD卡的主要相關各種命令解析
CMD0: SD卡進入IDLE和復位SD卡
CMD1: 讀OCR,是否為SD卡
CMD2: 獲取卡CID信息
CMD3: 獲取SD卡所分配的相對地址
CMD9: 獲取SD卡的存儲信息(容量、塊大小等)
CMD12:停止傳輸操作
CMD13:獲取卡的狀態
CMD16:設置SD卡塊大小
CMD17:使SD卡進入傳輸狀態、讀取單個塊
CMD18: 使SD卡進入傳輸狀態、讀取多個塊,直到收到CMD12為止
CMD24:使SD卡進入傳輸狀態、寫入單個塊
CMD25: 使SD卡進入傳輸狀態、寫入多個塊
| CMD0(0X00) | NONE | R1 | 復位SD卡 |
| CMD8(0X08) | VHS+Check Pattern | R7 | 發送接口狀態命令 |
| CMD9(0X09) | NONE | R1 | 讀取卡特定數據寄存器 |
| CMD10(0X0A) | NONE | R1 | 讀取卡標志數據寄存器 |
| CMD16(0X10) | 塊大小 | R1 | 設置塊大小(字節數) |
| CMD17(0X11) | 地址 | R1 | 讀取一個塊的數據 |
| CMD24(0X18) | 地址 | R1 | 寫入一個塊的數據 |
| CMD41(0X29) | NONE | R3 | 發送給主機容量支持信息和激活卡初始化過程 |
| CMD55(0X37) | NONE | R1 | 告訴SD卡,下一個是特定應用命令 |
| CMD58(0X3A) | NONE | R3 | 讀取OCR寄存器 |
SD卡和單片機的通信采用發送應答機制:

| 位 |
| 含義 |
初始化SD卡過程:
SPI操作模式下:在SD卡收到復位命令時,CS為有效電平(低電平),則SPI模式被啟用,在發送CMD之前要先發送74個時鐘,64個為內部供電上升時間,10個用于SD卡同步;之后才能開始CMD操作,在初始化時CLK時鐘不能超過400KHz。
接著我們看看SD卡的初始化,** SD卡的典型初始化過程如下:**
1、初始化與SD卡連接的硬件條件(MCU的SPI配置,IO口配置);
2、上電延時(>74個CLK);
3、復位卡(CMD0),進入IDLE狀態;
4、發送CMD8,檢查是否支持2.0協議;
5、根據不同協議檢查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等);
6、取消片選,發多8個CLK,結束初始化
這樣我們就完成了對SD卡的初始化,注意末尾發送的8個CLK是提供SD卡額外的時鐘,完成某些操作。通過SD卡初始化,我們可以知道SD卡的類型(V1、V2、V2HC或者MMC),在完成了初始化之后,就可以開始讀寫數據了。
SD卡讀取數據,這里通過CMD17來實現,具體過程如下:
1、發送CMD17;
2、接收卡響應R1;
3、接收數據起始令牌0XFE;
4、接收數據;
5、接收2個字節的CRC,如果不使用CRC,這兩個字節在讀取后可以丟掉。
6、禁止片選之后,發多8個CLK;
以上就是一個典型的讀取SD卡數據過程,SD卡的寫于讀數據差不多,寫數據通過CMD24來實現,具體過程如下:
1、發送CMD24;
2、接收卡響應R1;
3、發送寫數據起始令牌0XFE;
4、發送數據;
5、發送2字節的偽CRC;
6、禁止片選之后,發多8個CLK;
以上就是一個典型的寫SD卡過程。關于SD卡的介紹,我們就介紹到這里,更詳細的介紹請參考光盤SD卡的參考資料(SD卡2.0協議)。
總結
以上是生活随笔為你收集整理的SD卡学习(SDIO和SPI模式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: file_operations结构体介绍
- 下一篇: 扫雷-空白展开算法(优化)-详解