SDIO驅(qū)動(dòng)包括兩層:硬件訪問(wèn)層(HAL)和RT-Thread的適配層。
HAL 提供用于訪問(wèn) SDIO 外設(shè)寄存器的基本 API。 有關(guān)詳細(xì)信息,請(qǐng)參閱 SDIO HAL 的 API 文檔。
適配層提供 SDCARD 訪問(wèn)功能。 初始化后注冊(cè)一個(gè)SDCARD設(shè)備,可以被文件系統(tǒng)訪問(wèn)。
驅(qū)動(dòng)配置
硬件驅(qū)動(dòng)程序默認(rèn)初始化為 SDMMC 卡的塊設(shè)備。 它可以使用 menuconfig 工具為每個(gè)項(xiàng)目啟用,通常保存在 C 頭文件中。 默認(rèn)情況下,配置保存為 rtconfig.h。
以下示例顯示了在一個(gè)項(xiàng)目頭文件中定義的標(biāo)志,該項(xiàng)目在 BSP 中啟用 SDIO。 對(duì)于 RT-Thread,它的 SDMMC 設(shè)備也需要啟用。 為 BSP 選擇配置的步驟:
- 在項(xiàng)目下的命令中輸入“menuconfig”
- 選擇“RTOS —>”
- 選擇“On-chip Peripheral Driver—>”
- 選擇“Enable SDIO” 啟用SDIO驅(qū)動(dòng),定義宏BSP_USING_SDIO 這里顯示了 RT-Thread SDIO 驅(qū)動(dòng)程序配置:
- 選擇“RTOS”—>
- 選擇“RT-Thread Components —>”
- 選擇“Device Driver—>”
- 選擇“Using SD/MMC device drivers ”
- 選擇“The stack size for mmcsd thread” 輸入 2048, 更改宏 RT_MMCSD_STACK_SIZE,1024 太小。 如果不需要,其他配置不改變。
#define RT_USING_SDIO
#define RT_SDIO_STACK_SIZE 512
#define RT_SDIO_THREAD_PRIORITY 15
#define RT_MMCSD_STACK_SIZE 2048
#define RT_MMCSD_THREAD_PREORITY 22
#define RT_MMCSD_MAX_PARTITION 16
配置完成后,用戶需要在所有需要訪問(wèn)驅(qū)動(dòng)程序的源代碼中包含頭文件。
使用 SDMMC
適配器層注冊(cè) RT-Thread 請(qǐng)求的硬件支持功能,并使用 HAL 實(shí)現(xiàn)這些功能。 對(duì)于使用 RT-Thread 的用戶,可以使用以下代碼作為示例:
rt_device_t dev = rt_device_find("sd0");
rt_err_t err = rt_device_open(dev, RT_DEVICE_FLAG_RDWR);
char * buf = malloc(4096);
int size = rt_device_read(dev, addr, (void *)buf, blk);
size = rt_device_write(dev, addr, buf, blk);
...
rt_device_close(dev);