1.SD卡簡(jiǎn)介
SD存儲(chǔ)卡(Secure Digital Memory Card)是一種基于半導(dǎo)體快閃存儲(chǔ)器的新一代高速存儲(chǔ)設(shè)備。SD存儲(chǔ)卡的技術(shù)是從MMC卡(MultiMedia Card)格式上發(fā)展而來,在兼容SD存儲(chǔ)卡基礎(chǔ)上發(fā)展了SDIO(SD Input/ Output)卡,此兼容性包括機(jī)械,電子,電力,信號(hào)和軟件,通常將SD、SDIO卡俗稱SD存儲(chǔ)卡。
SD卡具有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動(dòng)靈活性以及很好的安全性,它被廣泛地應(yīng)用于便攜式裝置上,例如數(shù)碼相機(jī)、平板電腦和多媒體播放器等。
SD卡支持兩種總線方式:SD方式與SPI方式。其中 SD 方式采用 6 線制,使用 CLK、 CMD、 DAT0~DAT3進(jìn)行數(shù)據(jù)通信。而SPI方式采用4線制,使用CS、CLK、DataIn、DataOut 進(jìn)行數(shù)據(jù)通信。
SD 方式時(shí)的數(shù)據(jù)傳輸速度與SPI方式要快,STM32F103ZE自帶SDIO接口驅(qū)動(dòng),4位模式最高速度可達(dá)24MHZ,8位總線模式下可達(dá)48MHZ,本章節(jié)將介紹如何使用HAL庫完成對(duì)SD卡驅(qū)動(dòng)。

2.SDIO簡(jiǎn)介
SD/SDIO MMC卡主機(jī)模塊(SDIO)在AHB外設(shè)總線和多媒體卡(MMC)、 SD存儲(chǔ)卡、 SDIO卡和CE-ATA設(shè)備間提供了操作接口。
SDIO的主要功能如下:
- 與多媒體卡系統(tǒng)規(guī)格書版本4.2全兼容。支持三種不同的數(shù)據(jù)總線模式:1位(默認(rèn))、 4位和8位。
- 與較早的多媒體卡系統(tǒng)規(guī)格版本全兼容(向前兼容)。
- 與較早的多媒體卡系統(tǒng)規(guī)格版本全兼容(向前兼容)。
- 與SD存儲(chǔ)卡規(guī)格版本2.0全兼容。
- 與SD I/O卡規(guī)格版本2.0全兼容,支持良種不同的數(shù)據(jù)總線模式:1位(默認(rèn))和4位。
- 完全支持CE-ATA功能(與CE-ATA數(shù)字協(xié)議版本1.1 全兼容)。
- 8位總線模式下數(shù)據(jù)傳輸速率可達(dá)48MHz。
3.硬件接口

引腳 | SDIO | SPI |
SDIO_D2(PC10) | 數(shù)據(jù)線 | |
SDIO_D3(PC11) | 數(shù)據(jù)線 | SPI_CS 片選 |
SDIO_CMD(PD2) | 控制線 | SPI_MOSI主機(jī)輸出 |
SDIO_SCK(PC12) | 時(shí)鐘 | SPI_SCK時(shí)鐘線 |
SDIO_D0(PC8) | 數(shù)據(jù)線 | SPI_MISO主機(jī)輸入 |
SDIO_D1(PC9) | 數(shù)據(jù)線 |
4 軟件設(shè)置




5 代碼生成
??1.SD初始化
相關(guān)配置可參考STM32中文參考手冊(cè)_V1.0第20.9.2時(shí)鐘控制寄存器SDIO_CLKCR。


2.SD讀寫扇區(qū)函數(shù)
為了方便后續(xù)FATFS文件系統(tǒng)移植,我們這里封裝兩個(gè)函數(shù)SD卡寫扇區(qū)和讀扇區(qū)。
void SD_WriteDisk(uint8_t *buf,uint32_t sector_add,uint32_t cnt)
{
HAL_SD_WriteBlocks(&hsd,buf,sector_add,cnt,5000);//SD卡寫塊
while(HAL_SD_GetCardState(&hsd)!=HAL_SD_CARD_TRANSFER);//等待數(shù)據(jù)傳輸完成
}
void SD_ReadDisk(uint8_t *buf,uint32_t sector_add,uint32_t cnt)
{
HAL_SD_ReadBlocks(&hsd,buf,sector_add,cnt,5000);//SD卡讀塊
while(HAL_SD_GetCardState(&hsd)!=HAL_SD_CARD_TRANSFER);//等待數(shù)據(jù)傳輸完成
}
3.主函數(shù)
uint8_t buf_tx[4096]="SD卡SDIO驅(qū)動(dòng)HAL庫配置測(cè)試數(shù)據(jù)STM32F103ZET6 -- Ver1.0";
uint8_t buf_rx[4096];
MX_GPIO_Init();
MX_FSMC_Init();
MX_SDIO_SD_Init();
MX_USART1_UART_Init();
MX_SPI2_Init();
/* USER CODE BEGIN 2 */
char buff[200];
NT35310_Init();//LCD初始化
LCD_Display_Str(LCD_WIDTH/2-strlen("SD卡初始化")/2*8,20,16,(u8 *)"SD卡初始化",BLACK);
if(hsd.State!=HAL_SD_STATE_READY)
{
LCD_Display_Str(20,40,16,(u8 *)"SD Init ERR",RED);
}
else
{
LCD_Display_Str(20,40,16,(u8 *)"SD Init OK",RED);
LCD_Display_Str(20,60,16,(u8 *)"卡類型:",RED);
if(hsd.SdCard.CardType==CARD_SDHC_SDXC)//2.0告訴卡
{
LCD_Display_Str(20+8+strlen("卡類型:")*8,60,16,(u8 *)"SDHC",RED);
}
else if(hsd.SdCard.CardType==CARD_SDSC)//2.0普通卡
{
LCD_Display_Str(20+8+strlen("卡類型:")*8,60,16,(u8 *)"SDSC",RED);
}
snprintf(buff,sizeof(buff),"塊大小: %d byte\n",hsd.SdCard.BlockSize);
LCD_Display_Str(20,80,16,(u8 *)buff,RED);
snprintf(buff,sizeof(buff),"卡容量大小: %.2f GB\n",(hsd.SdCard.BlockNbr>>11)/1024.0);
LCD_Display_Str(20,100,16,(u8 *)buff,RED);
}
LCD_Display_Str(LCD_WIDTH/2-strlen("SD數(shù)據(jù)讀寫測(cè)試")/2*8,130,16,(u8 *)"SD數(shù)據(jù)讀寫測(cè)試",BLACK);
SD_WriteDisk(buf_tx,100,2);
LCD_Display_Str(20,150,16,(u8 *)"SD寫數(shù)據(jù): OK",RED);
SD_ReadDisk(buf_rx,100,3);
LCD_Display_Str(20,170,16,(u8 *)"SD讀數(shù)據(jù): OK",RED);
LCD_Display_Str(20,190,16,(u8 *)"數(shù)據(jù)內(nèi)容:",RED);
LCD_Display_Str(20,210,16,(u8 *)buf_rx,BLUE);

-
STM32
+關(guān)注
關(guān)注
2283文章
10986瀏覽量
361297 -
SD卡
+關(guān)注
關(guān)注
2文章
573瀏覽量
64887 -
SDIO
+關(guān)注
關(guān)注
2文章
73瀏覽量
19696 -
HAL庫
+關(guān)注
關(guān)注
1文章
121瀏覽量
6643
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何使用STM32CubeMX生成MSC與SDIO模版實(shí)現(xiàn)以SD卡為載體的U盤?
【技術(shù)精選】嵌入式STM32原創(chuàng)征文活動(dòng)精選文章
STM32CubeMX生成一個(gè)SD卡讀寫程序
STM32CubeMX新建工程的過程及方法解析
STM32CubeMx學(xué)習(xí)之——?jiǎng)?chuàng)建LED燈工程(基于STM32L071KBU)

STM32學(xué)習(xí)之STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)

STM32CubeMX 窗口及工具介紹

STM32CubeMX系列|SD卡

stm32 CubeMx 實(shí)現(xiàn)SD卡/sd nand FATFS讀寫測(cè)試

評(píng)論