ESP32-P4-NANO是一款微雪(Waveshare)设计的基于 ESP32-P4 芯片的双核 RISC-V 高性能开发板;支持丰富的人机交互接口,包含MIPI-CSI(集成图像信号处理器 ISP)和 MIPI-DSI 接口,此外还支持 SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI™ 等常用外设。它还支持 USB OTG 2.0 HS、以太网和 SDIO Host 3.0,以实现高速连接;芯片集成数字签名外设和专用密钥管理单元,保证其安全性,ESP32-P4-NANO专为高性能和高安全的应用设计,充分满足嵌入式应用对人机界面支持、边缘计算能力和 IO 连接特性等方面提出的更高需求。
本教程旨在指导用户搭建 ESP32-P4 硬件开发的软件环境,通过简单的示例展示如何使用 ESP-IDF 配置菜单,并编译、下载固件至 ESP32-P4 开发板等步骤。
ESP-IDF(Espressif IoT Development Framework)是乐鑫(Espressif)推出的开源物联网开发框架,专门用于其ESP32系列芯片的开发。ESP-IDF提供了构建物联网应用的必要工具和库,包括Wi-Fi、蓝牙、外设驱动、文件系统、网络协议栈、加密、安全和实时操作系统(FreeRTOS)等。
下面描述只适用于使用VSCode + ESP-IDF环境搭建
学习一门语言或开发环境的最好方式是从入门开始,在本章节详细介绍如何创建项目、从现有项目开发、以及嵌入式经典教程HelloWorld和常用接口I2C的使用
├── CMakeLists.txt ├── main │ ├── CMakeLists.txt │ └── main.c └── README.md
CMakeLists.txt
进行配置和定义的。CMake
会首先通过读取工程目录的顶层CMakeLists.txt
的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt
中引入了需要的组件、程序后,编译工具CMake
会根据索引导入每个所需要编译的内容。编译过程如:当我们打开一个ESP-IDF工程时,底部会自动加载环境,对于ESP32-P4-NANO的开发,底部工具栏也是一个非常重要的,如图示:
esp32p4
为目标芯片了解完VSCode 用户界面底部工具栏说明后,通过Hello World工程可以快速入门和了解ESP32开发环境的基础项目。它演示了如何使用ESP-IDF来创建一个基本的应用程序,并且涵盖了ESP32的开发流程,包括编译、烧录和监视器调试的步骤。
HelloWorld
后,设置好目标端口、芯片类型(此处注意,选择好芯片类型时右下角有加载动作,这是ESP-IDF正在执行idf.py set-target esp32p4
的操作指令,它需要从包管理器拉取对应芯片的架构包环境,需要一定时间处理,请一定要耐心等待,如果此时点击构建等操作会有报错!!!)app_main
主函数,通过条件判断来确定打印内容输出,并在末尾添加了循环,实现10s重启芯片。app_main
函数是ESP-IDF(Espressif IoT Development Framework)开发框架中用户应用程序的入口点。它是ESP-IDF项目的核心函数,相当于C语言标准程序中的main函数。在ESP32开发中,app_main
函数是由实时操作系统(FreeRTOS)调度的第一个任务,这也是用户代码执行的起始点。I2C是一个较常用的串行通信总线,它可以通过两条线进行通信,一根数据线(SDA, Serial Data)和一根时钟线(SCL, Serial Clock),并支持多主多从模式。在ESP32-P4上一共有2个I2C总线接口,芯片内部通过 GPIO 交换矩阵可配置使用任意 GPIO 管脚,这个特性可以让我们自由的使用任意 GPIO 作为I2C的引脚控制,当然ESP32-P4 I2C支持Slave、Master模式,以下主要使用 I2C 主机(Master)模式,用于 ESP32-P4 启动通信、控制并向从设备(可以是任何I2C接口的传感器)发送数据请求或接收数据。 ESP32-P4-NANO的I2C引脚默认使用SCL(GPIO8)
、SDA(GPIO7)
ESP-IDF中,I2C总线需要i2c_master_bus_config_t
指定配置:
i2c_master_bus_config_t::clk_source
选择 I2C 总线的源时钟,使用默认I2C时钟源(通常都使用默认时钟源)则为I2C_CLK_SRC_DEFAULT
即可i2c_master_bus_config_t::i2c_port
设置控制器使用的 I2C 端口,正如上述说明,ESP32-P4的I2C是有两个的,当有两个不同的I2C需要同时启用,则需要使用其来区分i2c_master_bus_config_t::scl_io_num
设置串行时钟总线 (SCL) 的 GPIO 编号,在ESP32-P4-NANO上,为 8i2c_master_bus_config_t::sda_io_num
设置串行数据总线 (SDA) 的 GPIO 编号,在ESP32-P4-NANO上,为 7i2c_master_bus_config_t::glitch_ignore_cnt
设置 Master Bus 的 Glitch Period,如果线路上的 Glitch Period小于此值,可以过滤掉,通常值为 7i2c_master_bus_config_t::enable_internal_pullup
启用内部 pullups,在ESP32-P4-NANO上,已经有额外的I2C上拉,无需启用内部上拉经上所述,I2C配置为:
i2c_master_bus_config_t i2c_bus_config = { .clk_source = I2C_CLK_SRC_DEFAULT, .i2c_port = I2C_NUM_0, .scl_io_num = 8, .sda_io_num = 7, .glitch_ignore_cnt = 7, .flags.enable_internal_pullup = false, };
i2c_tools
工程,选择好COM口和芯片型号,点击⚙️
进入设置,这里会打开一个新的标签:SDK Configuration editor也就是menuconfig,我们直接在搜索栏中搜索I2C,看到此时内容已经检索,并且示例例程中的SCL GPIO Num、SDA GPIO Num已经对应上了SCL(GPIO8)
、SDA(GPIO7)
此示例演示了Ethernet driver与esp_netif的基本用法。 Ethernet driver的初始化包含在该项目的单独子组件中,以清楚地区分驱动程序的初始化和esp_netif初始化。该示例的工作流程如下:
TXD[1:0]
:发送数据线,由GPIO34、GPIO35控制RXD[1:0]
:接收数据线,由GPIO30、GPIO29控制TX_EN
:发送启用信号,由GPIO49控制CRS_DV
:载波检测和数据有效信号,由GPIO28控制REF_CLK
:参考时钟,由GPIO50控制,50MHz由 PHY 外侧连接的 25 MHz 无源晶振经过倍频产生MDIO
和MDC
:用于以太网的管理数据接口(控制和配置PHY),由GPIO52、GPIO31控制RESET
:控制 IP101GRI 复位,由GPIO51控制ethernetbasic
工程,选择好COM口和芯片型号,点击进入设置,这里会打开一个新的标签:SDK Configuration editor也就是menuconfig,我们直接在搜索栏中搜索ETH,看到此时内容已经检索,将下图中参数与之对应,即可:espressif
的设备已经连接,此时ESP32-P4-NANO已经连上网络了。ESP32-P4-NANO板载了一个 4-Wire SDIO3.0的卡槽,可拓展片外存储
ESP-IDF中,使用sdmmc_host_t
和sdmmc_slot_config_t
设置配置,如设置默认20MHz通信频率、4线宽度通信,则为:
sdmmc_host_t host = SDMMC_HOST_DEFAULT(); sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
在支持 40 MHz 频率通信的设计中,可以调整 sdmmc_host_t 结构体中的 max_freq_khz 字段,提升总线频率:
sdmmc_host_t host = SDMMC_HOST_DEFAULT(); host.max_freq_khz = SDMMC_FREQ_HIGHSPEED;
ESP32-P4-NANO上的SDMMC 4线连接定义应该为:
sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); slot_config.width = 4; slot_config.clk = 43; slot_config.cmd = 44; slot_config.d0 = 39; slot_config.d1 = 40; slot_config.d2 = 41; slot_config.d3 = 42; slot_config.flags |= SDMMC_SLOT_FLAG_INTERNAL_PULLUP;
sdmmc
工程,选择好COM口和芯片型号,因为demo工程将引脚定义为宏,所以需要进行配置,当然也可以直接填入引脚数值。点击进入设置,这里会打开一个新的标签:SDK Configuration editor也就是menuconfig,我们直接在搜索栏中搜索sd,看到此时内容已经检索,并且示例配置已经配置,勾选上默认初始化且默认创建示例文件:ESP32-P4本身不带WIFI/BT功能,而ESP32-P4-NANO 通过 SDIO 连接了一块ESP32-C6 模组来拓展WIFI功能。ESP32-C6作为Slave,通过一系列指令集支持 ESP32-P4 作为 Host 通过SDIO 来使用WIFI 6/BT 5功能,通过添加两个组件后,可以做到无缝使用esp_wifi
。
// 在一个WIFI工程下,通过ESP-IDF组件管理工具添加下述两个组件 idf.py add-dependency "espressif/esp_wifi_remote" idf.py add-dependency "espressif/esp_hosted"
wifistation
工程,进行组件的添加idf_component.yml
,此文件的作用已经在ESP-IDF工程目录章节说明过是用于管理项目组件的espressif/esp_hosted: "*"
和espressif/esp_wifi_remote: "*"
两个组件,在构建项目时,它们会被添加到项目中I2S(Inter-IC Sound)是一种用于传输音频数据的数字通信协议。I2S 是一种串行总线接口,主要用于音频设备之间的数字音频数据传输,例如数字音频处理器 (DSP)、数字-模拟转换器 (DAC)、模拟-数字转换器 (ADC) 和音频编解码器。
ESP32-P4 包含 1 个 I2S 外设。通过配置这些外设,可以借助 I2S 驱动来输入和输出采样数据。ESP32-P4-NANO板载了es8311 Codec芯片和NS4150B功放芯片组合,I2S总线和引脚分布如下:
功能引脚 | ESP32-P4-NANO引脚 |
---|---|
MCLK | GPIO13 |
SCLK | GPIO12 |
ASDOUT | GPIO11 |
LRCK | GPIO10 |
DSDIN | GPIO9 |
PA_Ctrl(功放芯片使能脚,高电平有效) | GPIO53 |
ESP32-P4-NANO es8311驱动使用了ES8311组件,使用时可以通过IDF Component Manager来添加。
idf.py add-dependency "espressif/es8311"
i2scodec
工程,进行组件的添加idf_component.yml
,此文件的作用已经在ESP-IDF工程目录章节说明过是用于管理项目组件的espressif/es8311
组件,在构建项目时,它们会被添加到项目中echo
模式时,音频将由麦克风收录,扬声器输出ESP32-P4-NANO使用ESP32-P4NRW32芯片,具有以下新特性:
MIPI-DSI图像处理还可以使用2D-DMA控制器处理,支持PPA和JPEG编解码外设。
idf.py add-dependency "waveshare/esp_lcd_jd9365_10_1"
来向你的工程中添加组件。esp32p4
核心,接下来可以直接通过点击编译、烧录、监视,完成后可以查看屏幕已经点亮刷新色条了:此示例演示如何使用 esp_driver_cam 组件捕获相机传感器信号并通过 DSI 接口显示它。此示例将通过ESP 摄像头传感器驱动程序esp_cam_sensor
,并通过 CSI 接口捕获摄像头传感器信号并通过 DSI 接口显示。
esp32p4
核心,接下来可以直接通过点击编译、烧录、监视,完成后可以查看屏幕已经点亮刷新摄像头采集的画面了,这里放一个ESP32-S3-Touch-AMOLED-1.8展示此示例演示如何使用ESP32-P4-NANO板载的ESP32-C6作为从机,使ESP32-P4驱动IP101注册网络后通过ESP32-C6实现WiFi AP功能,工作原理如下图
esp32p4
核心,接下来可以直接通过点击编译、烧录、监视,完成后可以接上网线,查看WiFi进行上网。如果有选配Luckfox POE Module则可以接上PoE交换机直接取电上网。本示例展示了ESP32-P4通过MIPI DSI接口将LVGL图像显示,可充分体现ESP32-P4强大的图像处理能力
idf.py add-dependency "waveshare/esp_lcd_jd9365_10_1"
来向你的工程中添加组件。esp32p4
核心,接下来可以直接通过点击编译、烧录、监视,完成后可以查看屏幕:本示例基于 ESP_Brookesia,展示了一个类似 Android 的界面,其中包含许多不同的应用程序。该示例使用了开发板的 MIPI-DSI 接口、MIPI-CSI 接口、ESP32-C6、SD 卡和音频接口。基于此示例,可以基于 ESP_Brookesia 创建一个使用案例,从而高效开发多媒体应用程序。
idf.py add-dependency "waveshare/esp_lcd_jd9365_10_1"
来向你的工程中添加组件。esp32p4
核心,接下来可以直接通过点击编译、烧录、监视,完成后可以查看屏幕:1.此问题复现在使用VS Code插件的情况下,在部分情况下VS Code插件安装的ESP-IDF存在bug,现有的解决方式是换为IDF工具执行编译烧录。
1.现有芯片是EC01版本,当前版本未进⾏ ADC 校准,暂时不建议您使⽤ ADC 功能。
2.USB Serial Jtag 功能尚未⽀持,将在未来的版本中⽀持。
1.现有芯片是EC01版本,当前芯片部分内容与量产版本有差异,暂不能提供ESP32-P4 ECO1的芯片手册和PCB封装。待量产版本应用后将更新至【资料】栏,感谢关注。
1.当前芯片SDK还未开放拉满ESP32-P4 HP 核心速率,等SDK成熟后会更新在ESP-IDF中
周一-周五(9:30-6:30)周六(9:30-5:30)
手机:13434470212
邮箱:services04@spotpear.cn
QQ:202004841