SDIO

SDIO驱动包括两层:硬件访问层(HAL)和RT-Thread的适配层。
HAL 提供用于访问 SDIO 外设寄存器的基本 API。 有关详细信息,请参阅 SDIO HAL 的 API 文档。
适配层提供 SDCARD 访问功能。 初始化后注册一个SDCARD设备,可以被文件系统访问。

驱动配置

硬件驱动程序默认初始化为 SDMMC 卡的块设备。 它可以使用 menuconfig 工具为每个项目启用,通常保存在 C 头文件中。 默认情况下,配置保存为 rtconfig.h

以下示例显示了在一个项目头文件中定义的标志,该项目在 BSP 中启用 SDIO。 对于 RT-Thread,它的 SDMMC 设备也需要启用。 为 BSP 选择配置的步骤:

  • 在项目下的命令中输入“menuconfig”

  • 选择“RTOS —>”

  • 选择“On-chip Peripheral Driver—>”

  • 选择“Enable SDIO” 启用SDIO驱动,定义宏BSP_USING_SDIO

#define BSP_USING_SDIO

这里显示了 RT-Thread SDIO 驱动程序配置:

  • 选择“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

配置完成后,用户需要在所有需要访问驱动程序的源代码中包含头文件。

使用 SDMMC

适配器层注册 RT-Thread 请求的硬件支持功能,并使用 HAL 实现这些功能。 对于使用 RT-Thread 的用户,可以使用以下代码作为示例:

// Find and open sdcard as block device
rt_device_t dev = rt_device_find("sd0");    // get block device
rt_err_t err = rt_device_open(dev, RT_DEVICE_FLAG_RDWR);

// read sdmmc, it's a block device, read size should be block based(default as 512)
char * buf = malloc(4096);
blk = len >> 9;
int size = rt_device_read(dev, addr, (void *)buf, blk);

// Write sdmmc
size = rt_device_write(dev, addr, buf, blk);


...

// Close block device
rt_device_close(dev);