学习笔记ESP32——下载SDIO并且启动consale

本文介绍了如何在ESP32项目中关闭文件系统,添加SD卡支持,配置console命令行历史记录,并实现任务栈和CPU使用率监控。涉及到CMakeLists修改、SDK配置和自定义函数的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、关闭文件系统,加入SD卡文件

先把文件系统关掉,把CMakeList里和app_main里注释掉

#spiffs_create_partition_image(storage ../spiffs_image FLASH_IN_PROJECT)

把sd卡驱动和配套的cmd驱动放进自己的工程的component里

阿里云盘分享

 上述文件添加过后,在main.c文件里,包含cmd和sd卡的头文件,并初始化

void app_main(void)
{
    init_Sdcard();
    cmd_esp32_init();
}

编译后 

 

出现这个报错是没有添加console配置,没有定义 CONFIG_CONSOLE_MAX_COMMAND_LINE_LENGTH;

二、添加console配置

在idf环境路径下可以找到

C:\Espressif\frameworks\esp-idf-v4.4.4\examples\system\console\basic\main

 把 Kconfig.projbuild 文件放进自己工程的main文件夹里,用来保存cmd的历史命令

 已经更新到工程里了,再次编译下载

 可以运行

三、导入测试代码

static int sys_stack_cmd(int argc, char **argv)//获取任务栈
{
    char *CPU_RunInfo;

    CPU_RunInfo  = malloc(512);
    if( CPU_RunInfo == NULL )
    {
        ESP_LOGE( "SYS", "内存申请失败" );
    }
    memset(CPU_RunInfo,0,512);				//信息缓冲区清零

    cmd_printf("---------------获取系统堆信息----------------\r\n");
    cmd_printf("current size of free heap memory: %u\n", esp_get_free_heap_size());
    cmd_printf("min heap size                   : %u\n", heap_caps_get_minimum_free_size(MALLOC_CAP_DEFAULT));

    vTaskList((char *)CPU_RunInfo);  //获取任务运行时间信息
    // cmd_printf("---------------------------------------------\r\n");
    // cmd_printf("X:running B:blocked R:ready D:deleted S:suspended\r\n");
    cmd_printf("---------------------------------------------\r\n");
    cmd_printf("任务名      任务状态 优先级   剩余栈 任务序号\r\n");
    cmd_printf("%s", CPU_RunInfo);
    cmd_printf("---------------------------------------------\r\n");
    free( CPU_RunInfo );

    return 0;
}
static int sys_used_cmd(int argc, char **argv)//获取任务使用率
{
    char *CPU_RunInfo;

    CPU_RunInfo  = malloc(512);
    if( CPU_RunInfo == NULL )
    {
        ESP_LOGE( "SYS", "内存申请失败" );
    }
    memset(CPU_RunInfo,0,512);				//信息缓冲区清零

    vTaskGetRunTimeStats((char *)CPU_RunInfo);

    cmd_printf("任务名          运行计数      利用率\r\n");
    cmd_printf("%s", CPU_RunInfo);
    cmd_printf("---------------------------------------------\r\n\n");
    free( CPU_RunInfo );

    return 0;
}
void app_main(void)
{
    init_Sdcard();
    cmd_esp32_init();
    CONSOLE_REGISTER( "sys_stack","获取各任务的栈使用率" ,NULL, sys_stack_cmd);
    CONSOLE_REGISTER( "sys_used" ,"获取各任务的cpu使用率",NULL, sys_used_cmd);
    // esp_vfs_spiffs_conf_t conf = {
    //   .base_path = "/spiffs",
    //   .partition_label = NULL,
    //   .max_files = 5,
    //   .format_if_mount_failed = false
    // };

    // // Use settings defined above to initialize and mount SPIFFS filesystem.
    // // Note: esp_vfs_spiffs_register is an all-in-one convenience function.
    // esp_err_t ret = esp_vfs_spiffs_register(&conf);

    // if (ret != ESP_OK) {
    //     if (ret == ESP_FAIL) {
    //         ESP_LOGE(TAG, "Failed to mount or format filesystem");
    //     } else if (ret == ESP_ERR_NOT_FOUND) {
    //         ESP_LOGE(TAG, "Failed to find SPIFFS partition");
    //     } else {
    //         ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
    //     }
    //     return; 
    // }

    // size_t total = 0, used = 0;
    // ret = esp_spiffs_info(NULL, &total, &used);
    // if (ret != ESP_OK) {
    //     ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));
    // } else {
    //     ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
    // }

//  xTaskCreate(&lv_task, "lv_task", 1024*8, NULL, 5, NULL);
}

同时,需要配置FreeRTOS,进入menuconfig,勾选上下列配置

 编译下载成功

### ESP32-C6 SDIO-CLK 配置及相关技术信息 ESP32-C6 是一款基于 RISC-V 架构的微控制器,支持多种外设接口,其中包括 SDIO 接口。然而,在官方文档和社区讨论中,关于 ESP32-C6 的 SDIO 功能的具体实现细节尚未完全公开或标准化[^4]。以下是已知的技术信息以及可能的配置方法: #### 1. **SDIO-CLK 引脚定义** ESP32-C6 的引脚分配与其前代产品有所不同。根据现有资料,ESP32-C6 支持通过特定 GPIO 实现 SDIO 功能。具体到 SDIO-CLK(时钟信号),通常会映射至某个固定的 GPIO 引脚。以下是一个常见的引脚表(需注意实际应用中的芯片版本差异): | 功能 | 默认引脚 | |------------|----------| | SDIO-D0 | GPIO7 | | SDIO-D1 | GPIO8 | | SDIO-D2 | GPIO9 | | SDIO-D3 | GPIO10 | | SDIO-CLK | GPIO6 | | SDIO-CMD | GPIO11 | 因此,对于 SDIO-CLK 来说,默认情况下它会被绑定到 GPIO6[^5]。 #### 2. **SDIO-CLK 配置方法** 为了启用并正确配置 SDIO-CLK,可以参考以下 Python 或 C 示例代码来初始化相关功能模块: ##### MicroPython 初始化示例 ```python from machine import Pin, SDCard # 定义 SDIO 参数 sd = SDCard( slot=2, width=4, # 设置为 4-bit 模式 cd=None, # 不使用卡检测引脚 wp=None # 不使用写保护引脚 ) print("SD Card initialized successfully!") ``` 需要注意的是,`slot=2` 并不适用于所有型号的开发板。如果目标设备是 ESP32-C6,则需要手动指定具体的 GPIO 映射关系,并调整驱动程序以适配该硬件平台[^6]。 ##### C/C++ 初始化示例 在 IDF 中可以通过 `sdmmc_host_t` 结构体完成更精细的控制: ```c #include "driver/sdmmc_host.h" #include "driver/gpio.h" void init_sdio() { sdmmc_host_t host = SDSPI_HOST_DEFAULT(); host.slot = 2; // 对应 SDIO 插槽编号 gpio_set_pull_mode(6, GPIO_PULLUP_ONLY); // SDIO-CLK 上拉 gpio_set_pull_mode(7, GPIO_PULLUP_ONLY); // D0 上拉 gpio_set_pull_mode(8, GPIO_PULLUP_ONLY); // D1 上拉 gpio_set_pull_mode(9, GPIO_PULLUP_ONLY); // D2 上拉 gpio_set_pull_mode(10, GPIO_PULLUP_ONLY); // D3 上拉 gpio_set_pull_mode(11, GPIO_PULLUP_ONLY); // CMD 上拉 sdmmc_card_t* card; esp_err_t ret = sdmmc_mount(&host, &card); if (ret != ESP_OK) { printf("Failed to initialize SDMMC\n"); } else { printf("SD Card mounted successfully!\n"); } } ``` 此代码片段展示了如何利用 Espressif 提供的组件库设置 SDIO 接口参数。特别强调了对各个数据线及命令线实施上拉操作的重要性,这对于稳定通信至关重要[^7]。 #### 3. **注意事项** 尽管上述方法能够帮助开发者快速启动项目,但在实际部署过程中仍需考虑以下几个方面: - **电源管理**:确保 VDD_SDIO 的供电范围满足规格书要求(一般为 1.8V 至 3.3V)。 - **阻抗匹配**:当采用较长导线连接外部存储器或其他外围设备时,建议加入串联终端电阻减少反射干扰。 - **固件兼容性**:由于 ESP32-C6 属于较新型号,部分高级特性可能存在未完善之处,务必查阅最新版 SDK 文档获取更新说明[^8]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值