基本概念
存儲卡有很多種類,CF卡、記憶棒、SD卡、XD卡、MMC卡、MS卡、TF卡、MicroSD卡等。平時最常見的有SD卡和MicroSD卡兩種, SD卡和MicroSD只是兩張卡的大小不同,規格版本是完全相同的,均由SD卡協會推出。
SD卡有不少規范,常用包含存儲空間和存儲速度兩種,廠商會把滿足的規范的圖標印在卡面上,所以通過卡上有的規格,就能很快判斷出這張卡的容量、類型和最低速度,甚至適用場景。
容量
SD | 早期版本現在已經基本停用,最高容量2GB,分區格式為FAT12(FAT)或FAT16 | ![]() |
DHC | SDHC:技術很成熟的種類,容量為4GB-32GB,分區格式為FAT32。 | ![]() |
SDXC | SDXC:目前市場存儲卡的主流,容量為64GB-2TB,分區格式為exFAT。 | ![]() |
SDUC | 新推出的版本,容量為2TB-128TB,分區格式為exFAT。 | ![]() |
速度分級
Class 2 大于等于2MB/s | ![]() |
Class 4 大于等于4MB/s | ![]() |
Class 6 大于等于6MB/s | ![]() |
Class 10 大于等于10MB/s | ![]() |
UHS總線模式
UHS-I | 最大讀取速度104MB/s | ![]() |
UHS-II | 最大讀取速度312MB/s | ![]() |
UHS-III | 最大讀取速度624MB/s | ![]() |
SD Express I | 最大讀取速度985MB/s | ![]() |
UHS速度等級
U1 | 最低寫入速度10M/S | |
U3 | 最低寫入速度30M/S | ![]() |
舉例
總線模式
SD模式
SPI模式
引腳對應
SD卡寄存器
上電時序要求
SD卡在上電要求250ms內電壓必須要達到要求的最小電壓值,并且至少需要保持74個SD卡時鐘周期以保證CMD線變為高電平,SPI模式下則要求CS信號線在至少74個CLK時鐘保持高電平
控制協議(以SD模式舉例)
command
command共包含6個字節
Response
Response 包含不同的種類,不同種類的長度不一樣
SD卡協議規定了不同的Command對應的Response
Data
命令控制時序
塊讀取時序
塊寫入時序
工作模式
SD卡根據上電后默認為SD卡模式,后所接收的指令來決定是否切換為SPI模式,SPI模式屬于SD卡控制的附加模式
切換方式:在CS引腳為低電平條件下向SD卡發送CMD0 (復位指令),返回R1寄存器狀態OK表示切換完成
退出方式:一旦切換為SPI模式,無法退回至SD模式,除非重新上電
兩種工作模式各有優劣
SD模式: 速率更高,線路多,通信較為復雜
SPI模式:速率相對較低,更加通用,線路少,控制簡單
SD模式
SD模式下的SD卡初始化流程
最重要的是ACMD41和CMD8命令及其結果返回
注意事項:初始化前應當考慮將SD卡的時鐘線頻率配置在400kHz以下,初始化完成后再恢復時鐘頻率
SPI模式
SPI模式下的初始化與SD模式相差無幾,
1、SPI模式下需要先控制SD卡進入到SPI模式
2、SPI模式下的命令/返回/時序等要求與SD模式都存在區別,需要區別對待
3、初始化流程中ACMD41/CMD8命令最為重要
ACMD41返回
CMD8返回
SPI模式驅動舉例
SPI時序要求
發送命令時序
時序中存在不確定的等待周期,如NCS NEC等,因此包含NCR在內的等待過程都需要設置重試等待機制,推薦使用
do while方式進行編程實現
塊讀取
對于讀到的數據而言,其包含以下結構,首字節為0xFE, 中間數據為塊大小數據,最后為2byte的CRC校驗值
塊寫入時序
參考資料:home - SD Association