2020年11月1日星期日

[STM32] SDIO SD 卡讀寫測試

 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 卡,電路圖。

microSD
電路並沒有加提升電阻。除了 SDIO_CK 外,其餘訊號線可以加入 4.7K ~ 10K 的提升電阻。
如果需要自行購買連接器 DIY 接線的話,以下是 pin out 提示

Micro SD

Pin#NameFunction
1DATA2data bit 2
2DATA3data bit 3
3CMDcommand line
4VddSupply voltage
5CLKClock
6VSSGround
7DATA0data bit 0
8DATA1data bit 1

連接器 9 pin 可以為 SD Card 被裝入時的檢知訊號,預設是 Low 準位。

OK,開啟 STM32Cube。建立好專案後,在介面選擇項目中選好 SDIO


模式選擇 4-bit




在腳位顯示會出現 SDIO_D0、SDIO_D1、SDIO_D2,SDIO_D3,SDIO_CK,SDIO_CMD
剛好就是直接對應 線路上的訊號連接。



另外,在 PC2 選擇 GPIO_INPUT 做為SD CARD 裝入檢知訊號輸入腳。

SDIO








OK,硬體連接設定到這裡。因為我們要寫入文
件,所以要開啟 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);
	  }
}


第一段寫入 "Write data test with FatFs" 並關閉 Myfile。
第二段讀出 file.txt 檔案,並顯示出來



0 comments:

發佈留言