SD 卡 (Secure Digital Memory Card) 在目前生活上應該是不陌生的媒體儲存載體,數位相機、手機、3D列印機.... 等。在做工控專案時常常透過 SD 卡當做機台紀錄的使用,以便了解設計的專案是否有按照既定行程走。這裡簡單介紹 透過 SDIO 介面 讀寫 SD 卡的方法。
這次使用 STM32F401RE 來執行 SD 讀寫功能,所以先來看STM32 規格手冊如何描述
大致來說支援 SDIO Card Specification Version 2.0 的版本且支援 1-bit 與 4-bit 資料寬度,版本 2 就是 SDHC 的版本也就是最大可支援 32GB 容量的 SD 卡 ,在選擇使用上就要注意一下。更多的資訊可以在 sdcard.org 找相關資料。
使用的是 MicroSD 卡,電路圖。
電路並沒有加提升電阻。除了 SDIO_CK 外,其餘訊號線可以加入 4.7K ~ 10K 的提升電阻。
如果需要自行購買連接器 DIY 接線的話,以下是 pin out 提示
Pin# | Name | Function |
---|---|---|
1 | DATA2 | data bit 2 |
2 | DATA3 | data bit 3 |
3 | CMD | command line |
4 | Vdd | Supply voltage |
5 | CLK | Clock |
6 | VSS | Ground |
7 | DATA0 | data bit 0 |
8 | DATA1 | data bit 1 |
連接器 9 pin 可以為 SD Card 被裝入時的檢知訊號,預設是 Low 準位。
OK,開啟 STM32Cube。建立好專案後,在介面選擇項目中選好 SDIO
在腳位顯示會出現 SDIO_D0、SDIO_D1、SDIO_D2,SDIO_D3,SDIO_CK,SDIO_CMD
剛好就是直接對應 線路上的訊號連接。
件,所以要開啟 FATFS 第三方套件。
FATFS 是適合小型嵌入式系統的 FAT/exFAT 文件系統,程式碼由 C 組成。非常適合像 單晶片類的器件做開發,想要得到更多資訊可以到 http://elm-chan.org/fsw/ff/00index_e.html 查詢。
設定完成後,在 STM32Cube 產生原始碼並噵入IDE 中。
建立 WriteTest() 測試 functioin
extern FATFS SDFatFS; /* File system object for SD logical drive */
extern char SDPath[4]; /* SD logical drive path */
extern FIL MyFile; /* File object for SD */
static void WriteTest(void)
{
uint8_t wtext[30],rtext[30];
uint32_t wdataten,rdataten;
if(f_mount(&SDFatFS, (TCHAR const*)SDPath, 0) == FR_OK)
{
if(f_open(&MyFile, "file.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
{
sprintf(wtext,"Write data test with FatFs");
if(f_write(&MyFile,wtext,strlen(wtext),(void *)&wdataten) == FR_OK)
{
printf("write OK.\r\n");
}
f_close(&MyFile);
}
if(f_open(&MyFile, "file.txt", FA_READ) == FR_OK)
{
if(f_read(&MyFile, rtext, sizeof(rtext), (void *)&rdataten) == FR_OK)
{
printf("Read:%s\r\n",rtext);
}
f_close(&MyFile);
}
f_mount(NULL, (TCHAR const*)"", 0);
}
}
0 comments:
發佈留言