ESP32 SDMMC技术文档翻译

SDMMC 主机外设
概述
SDMMC 外设支持SD卡、MMC卡和SDIO卡。SDMMC的软件是基于SDMMC驱动之上的,由下面几个部分组成。
SDMMC主机外设(driver/sdmmc_host.h)---驱动支持APIs接口发送命令到从机设备,发送和接受数据,处理条件错误。
SDMMC协议层(sdmmc_cmd.h)---该组件处理SD协议的细节,初始化SD卡和数据数据传输的命令。尽管当前只支持SD (SDSC/SDHC/SDXC) 卡,在将来会支持MCC/eMMC卡。

协议层与主机通过sdmmc_host_t结构建立联系。这个结构包含指向各种功能的主机。这个设计可以实现SD主机使用SPI接口。
应用程序示例
在examples/storage/sd_card这个实例中将SDMMC驱动和FATFS文件系统结合在了一起。这个实例实现了初始化SD卡使用POSIX 和 C库APIs接口来写读数据。看实例中的README.md文件获取更多的信息

协议层APIs接口
协议层获取到描述SDMMC主机驱动sdmmc_host_t结构体,列表它的功能,并且提供了指向驱动函数的指针,协议层特定SD卡信息存储在sdmmc_card_t结构中。当发送命令到SDMMC主机驱动程序,协议层使用sdmmc_command_t结构来描述命令,参数,将返回值,和数据传输,如果任何。

正常使用的协议层如下:

1、调用主机驱动程序函数来初始化主机(例如sdmmc_host_init、sdmmc_host_init_slot)。
2、调用sdmmc_card_init来初始化SD,传递主机驱动信息和sdmmc_card_t结构体信息(作为参数)
3、使用sdmmc_read_sectors sdmmc_write_sectors读写卡扇区,,传递卡信息结构的指针(卡)。
4、当不再使用SD卡时,调用主机驱动程序函数失能SDMMC主机外围和释放资源分配的驱动程序(例如sdmmc_host_deinit)。
5、大多数应用程序需要使用协议层只有一个任务;因此协议层不实现任何锁定sdmmc_card_t结构,或当访问SDMMC主机驱动程序。这种锁是实现更高的层,必要时(如文件系统驱动程序)。


结构体 sdmmc_host_t
SDMMC主机描述
这个结构体定义了SDMMC主机的属性和功能,可由上层使用。
公共成员


uint32_t flags
1、定义主机属性标志
int slot
2、接口槽数&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32的Non-Volatile Storage (NVS)是一种存储系统,可以在ESP32中存储和检索数据,即使在断电重启后也可以保留数据。备份ESP32的NVS数据非常重要,以防止意外丢失数据。 以下是备份ESP32 NVS数据的步骤: 1. 使用ESP-IDF提供的nvs_flash_init函数初始化NVS系统。 2. 使用nvs_open函数打开NVS命名空间。 3. 使用nvs_get_blob函数获取要备份的数据。要备份所有数据,可以使用nvs_get_all函数。 4. 关闭NVS命名空间并调用nvs_flash_deinit函数。 5. 将备份数据写入外部存储器,如SD卡。可以使用ESP-IDF提供的SD卡驱动程序来实现。 下面是一个简单的示例代码,演示如何备份ESP32的NVS数据到SD卡上: ```c #include "esp_system.h" #include "nvs_flash.h" #include "nvs.h" #include "driver/sdmmc_host.h" #include "sdmmc_cmd.h" #include "esp_vfs_fat.h" #define NVS_NAMESPACE "my_namespace" #define SD_MOUNT_POINT "/sdcard" void backup_nvs_data() { // 初始化NVS系统 esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); // 打开NVS命名空间 nvs_handle_t nvs_handle; ret = nvs_open(NVS_NAMESPACE, NVS_READONLY, &nvs_handle); ESP_ERROR_CHECK(ret); // 获取要备份的数据 size_t nvs_size = 0; ret = nvs_get_blob(nvs_handle, "my_data", NULL, &nvs_size); ESP_ERROR_CHECK(ret); uint8_t* nvs_data = malloc(nvs_size); ret = nvs_get_blob(nvs_handle, "my_data", nvs_data, &nvs_size); ESP_ERROR_CHECK(ret); // 关闭NVS命名空间 nvs_close(nvs_handle); // 卸载SD卡 esp_vfs_fat_sdmmc_unmount(); // 挂载SD卡 sdmmc_host_t host = SDMMC_HOST_DEFAULT(); sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); esp_vfs_fat_sdmmc_mount_config_t mount_config = { .format_if_mount_failed = true, .max_files = 5 }; sdmmc_card_t* card; esp_err_t card_ret = esp_vfs_fat_sdmmc_mount(SD_MOUNT_POINT, &host, &slot_config, &mount_config, &card); ESP_ERROR_CHECK(card_ret); // 将备份数据写入SD卡 FILE* fp = fopen("/sdcard/nvs_backup.bin", "wb"); fwrite(nvs_data, nvs_size, 1, fp); fclose(fp); // 卸载SD卡 esp_vfs_fat_sdmmc_unmount(); // 释放内存 free(nvs_data); } ``` 在这个例子中,我们使用了ESP-IDF提供的SD卡驱动程序来挂载和卸载SD卡,并使用标准的文件IO函数来写入备份数据。 请注意,此代码仅用于演示目的。在实际应用中,您需要根据您的需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值