ESP32-S2 上的 Circuitpython

此端口将 ESP32-S2 系列模块从 Espressif 添加到 Circuitpython。ESP32-S2 模块是专为物联网应用设计的低功耗、单核 Wi-Fi 微控制器 SoC。

该端口的组织方式:

  • bindings/ 包含一些必需的 ESP-IDF 绑定,用于异常和内存。

  • boards/ 包含每个开发板的配置文件和端口上可用的 breakout。

  • common-hal/ 包含特定于端口的模块实现,由共享模块和共享绑定使用。

  • esp-idf/ 包含乐鑫 IoT 开发框架安装,包括端口的所有驱动程序。

  • modules/ 包含特定于某些 ESP32-S2 硬件模块的信息,例如用于 WROVER 和 WROOM 上的闪存和 RAM 的引脚。

  • 外设/包含外设设置文件和外设映射信息,按系列和子变体排序。此目录中的大多数文件都可以使用tools/ 中的 python 脚本生成。

  • supervisor/ 包含内部闪存、串行和 USB 的特定于端口的实现,以及port.c文件,它在启动时初始化端口。

  • tools/ 包括用于调试和其他目的的有用 python 脚本。

在根级别,请参阅mpconfigboard.h和mpconfigport.mk以获取特定于端口的设置和已启用的 circuitpython 模块列表。

连接到 ESP32-S2

Saola等ESP32-S2开发板内置的USB接口并不是开发板自带的USB接口,而是一个调试和编程接口。实际的 ESP32-S2 原生 USB 暴露了 Circuitpython 驱动器和 CDC 连接,它位于 IO 引脚 19 和 20 上:

通用输入输出接口

USB

20

D+(绿色)

19

D-(白色)

地线

地(黑色)

5V

+5V(红色)

使用 USB 适配器 或分支 电缆 连接这些引脚以访问 Circuitpython 驱动器。

建筑和闪烁

在构建或刷写 ESP32-S2 之前,您必须安装 esp-idf。每次更新 esp-idf 时都必须重新执行此操作,但不是每次构建时都重新执行此操作。运行from移动到 esp32s2 端口根目录,运行:cd ports/esp32s2 circuitpython/

./esp-idf/install.sh

在此初始安装后,您必须将 esp-idf 工具添加到您的路径中。每当您打开一个新的 bash 环境进行构建或刷写时,您也必须这样做::

. esp-idf/export.sh

当 Circuitpython 将 ESP-IDF 更新为新版本时,您可能需要再次运行此安装过程。所使用的确切命令也可能因您的 bash 环境而异。

诸如 Saola 之类的建筑板通常是通过make flash完成。 默认端口是tty.SLAB_USBtoUART,它仅适用于某些 Mac 设置。在大多数机器上,无论是 Mac 还是 Linux,您都需要通过运行ls /dev/tty.usb*并选择仅在插入开发板时出现的端口来自己设置端口。带有端口设置的示例 make 命令如下:

make BOARD=espressif_saola_1_wrover flash PORT=/dev/tty.usbserial-1421120

调试

ESP32-S2 支持使用 JLink 或其他探针硬件通过 OpenOCD 进行 JTAG 调试。官方教程可以在 Espressif 网站上 这里找到,但它们主要针对内置调试的 ESP32-S2 Kaluga。

在 esp-idf 安装和设置过程中,OpenOCD 会自动安装并添加到您的 bash 环境中。您可以根据教程使用openocd --version 仔细检查它是否已安装。在不包含集成调试器的电路板上,根据 JTAG 调试说明 连接 JTAG 探针。

调试器物理连接后,必须使用附加的配置文件运行OpenOCD,并指定接口(调试器探测器)和目标或板(目标仅用于SOC,在不存在完整板配置文件时可以使用)。通过在bash中运行echo $OPENOCD_SCRIPTS来检查OPENOCD_SCRIPTS 环境变量,可以找到这些文件的路径位置。接口将位于interface/目录中,目标和板分别位于target/board/目录中。

注意:不幸的是,除了 Kaluga 之外,esp32-s2 没有任何板文件,并且包含的target/esp32s2.cfg 目标文件默认不会在 Jlink 上用于 Saola 1 等板,因为默认速度不正确。此外,这些文件受 GPL 保护,不能包含在 Circuitpython 中。因此,您必须自己复制 esp32s2.cfg 文件并手动添加以下行,在文件开头的下方:transport select jtag

adapter_khz 1000

完成后,您的最终 OpenOCD 命令可能如下所示:

openocd -f interface/jlink.cfg -f SOMEPATH/copied-esp32s2-saola-1.cfg

Where SOMEPATH 您复制的配置文件的位置在哪里(例如,可以将其放置在 port/boards 目录中,并带有前缀以忽略它 .gitignore)。来自 espressif 的接口、目标和板配置文件只需要它们来自 $OPENOCD_SCRIPTS 位置的路径,您不需要包含它们的完整路径。OpenOCD 运行后,使用以下命令连接到 GDB:

xtensa-esp32s2-elf-gdb build-espressif_saola_1_wrover/firmware.elf

并按照乐鑫 GDB 教程说明进行连接,或将它们添加到您的 gdbinit:

target remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c