固件架构与源码
本文引用的文件
firmware/port/README.mdesp32s3/firmware/README.mdfirmware/port/mpconfigport.hfirmware/port/Makefileesp32s3/firmware/CMakeLists.txtesp32s3/firmware/esp32_common.cmakeesp32s3/firmware/makeimg.pyesp32s3/firmware/main/CMakeLists.txtesp32s3/firmware/boards/mpython_v3/mpconfigboard.cmakeesp32s3/firmware/boards/labplus_Ledong_v2/mpconfigboard.cmakeesp32s3/firmware/boards/manifest.pyfirmware/port/builtins/modmachine.cfirmware/port/builtins/modmusic.cfirmware/port/builtins/modnetwork.cfirmware/port/builtins/modradio.cfirmware/port/builtins/modframebuf.cfirmware/port/builtins/modmotion.cfirmware/port/builtins/modcodec.cfirmware/port/builtins/modxunfeiAI.cfirmware/port/modules/ssd1106.pyfirmware/port/modules/neopixel.pyfirmware/port/modules/mpython_ble/application/codexpad.pyfirmware/port/file_system/siot.pyfirmware/port/file_system/xunfei.pyfirmware/port/file_system/yeelight.pyfirmware/port/file_system/smartcamera.pyesp32s3/firmware/modules/radio.pyesp32s3/firmware/modules/ai_cloud.pyesp32s3/firmware/modules/xunfei.py
产品概述
mPython掌控板是基于ESP32双核芯片的MicroPython微控制器平台,面向K12创客教育场景。固件以MicroPython为核心,在FreeRTOS上运行,提供REPL、文件系统、GPIO/ADC/PWM/I2C/SPI等外设能力,以及WiFi/BLE网络、音频、传感器、显示等扩展能力。项目同时维护了两条产品线:
ESP32版(firmware/port):成熟稳定,内置大量C级模块与Python扩展库,适合教学与快速原型。
ESP32-S3版(esp32s3/firmware):基于ESP-IDF v5.x + CMake构建,新增LVGL/AI视觉、GPS、心率等能力,支持多板型(mpython_v3、labplus_Ledong_v2等)。
核心价值在于“C层高性能+Python层易用性”的分层设计,既满足底层驱动性能需求,又通过Python模块降低开发门槛;构建流程清晰、板型配置解耦,便于二次开发与定制。
章节来源
firmware/port/README.md:1-20esp32s3/firmware/README.md:1-20
核心业务流程
启动与初始化
引导程序加载分区表与应用镜像,FreeRTOS任务调度MicroPython VM。
端口层初始化串口REPL、内存管理、VFS、网络栈、蓝牙等。
用户代码执行
Python脚本从冻结模块或LittleFS文件系统加载执行。
调用C级builtins(如machine/music/network)或直接使用Python模块(如neopixel/gui)。
硬件交互
C驱动访问外设(I2C/SPI/ADC/PWM/TIMERS),暴露为Python接口。
传感器/音频/显示等通过drivers与modules组合实现。
构建与烧录
ESP32版使用Makefile+ESP-IDF v3/v4;ESP32-S3版使用idf.py+CMake。
生成bootloader/partitions/app/VFS/语音模型等,合并为最终固件镜像。
sequenceDiagram
participant Boot as "引导程序"
participant IDF as "ESP-IDF/FreeRTOS"
participant MP as "MicroPython VM"
participant Py as "用户Python脚本"
participant Mod as "C级模块/Python模块"
participant HW as "硬件外设"
Boot->>IDF : 加载分区表与应用
IDF->>MP : 创建并启动VM任务
MP->>Py : 执行boot.py/main.py
Py->>Mod : 调用machine/music/network等
Mod->>HW : 读写寄存器/中断/DMA
HW-->>Mod : 数据/事件
Mod-->>Py : 返回结果/回调
Py-->>MP : 继续执行/退出
图表来源
esp32s3/firmware/esp32_common.cmake:126-180esp32s3/firmware/makeimg.py:179-200
章节来源
esp32s3/firmware/esp32_common.cmake:126-180esp32s3/firmware/makeimg.py:179-200
功能模块清单
C级编译模块(builtins)
machine:GPIO/ADC/PWM/I2C/SPI/TouchPad/Timer等基础外设控制。
music:兼容micro:bit的音乐播放与节拍控制。
network/WiFi:WLAN连接与网络协议栈。
radio:无线广播(ESP32版)。
framebuf:帧缓冲绘制。
motion:六轴传感器(加速度/陀螺仪/磁力计)。
codec:音频编解码与录音/播放(ESP32版)。
xunfeiAI:讯飞语音听写与TTS(ESP32版)。
Python级模块(modules)
设备驱动与工具:ssd1106(OLED)、neopixel(WS2812)、gui、logging、weather等。
BLE高级库:mpython_ble(advertising/services/gatts等)。
网络与物联网:urequests、umqtt、tinywebio、siot等。
硬件驱动(drivers)
codec、mpu6050、rfid、rgbLED5x5等底层C驱动。
文件系统扩展(file_system)
siot(SIoT物联网)、yeelight(智能灯)、xunfei(讯飞AI)、smartcamera(AI摄像头)等应用级库。
graph TB
subgraph "C级模块(builtins)"
M["modmachine"]
U["modmusic"]
N["modnetwork"]
R["modradio"]
F["modframebuf"]
O["modmotion"]
A["modcodec"]
X["modxunfeiAI"]
end
subgraph "Python模块(modules)"
S["ssd1106"]
P["neopixel"]
G["gui"]
B["mpython_ble"]
Q["urequests/umqtt"]
end
subgraph "驱动(drivers)"
D1["codec"]
D2["mpu6050"]
D3["rfid"]
D4["rgbLED5x5"]
end
subgraph "文件系统(file_system)"
FS1["siot"]
FS2["yeelight"]
FS3["xunfei"]
FS4["smartcamera"]
end
M --> D1
M --> D2
M --> D3
M --> D4
U --> M
N --> M
R --> M
F --> M
O --> M
A --> M
X --> N
S --> M
P --> M
G --> F
B --> N
Q --> N
FS1 --> N
FS2 --> N
FS3 --> N
FS4 --> N
图表来源
firmware/port/builtins/modmachine.cfirmware/port/builtins/modmusic.cfirmware/port/builtins/modnetwork.cfirmware/port/builtins/modradio.cfirmware/port/builtins/modframebuf.cfirmware/port/builtins/modmotion.cfirmware/port/builtins/modcodec.cfirmware/port/builtins/modxunfeiAI.cfirmware/port/modules/ssd1106.pyfirmware/port/modules/neopixel.pyfirmware/port/modules/mpython_ble/application/codexpad.pyfirmware/port/file_system/siot.pyfirmware/port/file_system/xunfei.pyfirmware/port/file_system/yeelight.pyfirmware/port/file_system/smartcamera.py
章节来源
firmware/port/builtins/modmachine.cfirmware/port/builtins/modmusic.cfirmware/port/builtins/modnetwork.cfirmware/port/builtins/modradio.cfirmware/port/builtins/modframebuf.cfirmware/port/builtins/modmotion.cfirmware/port/builtins/modcodec.cfirmware/port/builtins/modxunfeiAI.cfirmware/port/modules/ssd1106.pyfirmware/port/modules/neopixel.pyfirmware/port/modules/mpython_ble/application/codexpad.pyfirmware/port/file_system/siot.pyfirmware/port/file_system/xunfei.pyfirmware/port/file_system/yeelight.pyfirmware/port/file_system/smartcamera.py
数据与状态
构建配置与开关
mpconfigport.h集中定义MicroPython特性开关(线程、VFS、SSL、WebREPL、FrameBuffer等)、内置模块注册、根指针与平台标识。
板级cmake(mpython_v3/labplus_Ledong_v2)指定目标芯片、SDKCONFIG默认集、源文件列表与冻结清单。
模块依赖关系
builtins通过mpconfigport.h注册为内置模块名(machine/network/music/audio/radio等),被Python层直接import。
modules与file_system作为扩展库,按需要冻结到固件或通过文件系统加载。
运行时状态
FreeRTOS任务调度MicroPython VM;事件钩子处理挂起任务与异步事件。
VFS将LittleFS挂载为内部文件系统,存储用户脚本与资源。
NVS用于持久化配置(如传感器偏移、网络凭据等)。
flowchart TD
Start(["构建入口"]) --> Cfg["读取mpconfigport.h<br/>与板级cmake"]
Cfg --> Modules{"启用哪些模块?"}
Modules --> |C级| Builtin["注册builtins<br/>machine/network/music..."]
Modules --> |Python| Freeze["冻结modules/file_system"]
Builtin --> Build["编译链接"]
Freeze --> Build
Build --> Pack["makeimg.py打包<br/>bootloader/partitions/app/VFS/语音模型"]
Pack --> Flash["烧录到Flash"]
Flash --> Run["FreeRTOS启动MicroPython"]
Run --> App["执行用户脚本"]
App --> State["运行时状态: VFS/NVS/网络/外设"]
图表来源
firmware/port/mpconfigport.h:14-61firmware/port/mpconfigport.h:180-218esp32s3/firmware/boards/mpython_v3/mpconfigboard.cmake:1-44esp32s3/firmware/boards/labplus_Ledong_v2/mpconfigboard.cmake:1-50esp32s3/firmware/makeimg.py:179-200
章节来源
firmware/port/mpconfigport.h:14-61firmware/port/mpconfigport.h:180-218esp32s3/firmware/boards/mpython_v3/mpconfigboard.cmake:1-44esp32s3/firmware/boards/labplus_Ledong_v2/mpconfigboard.cmake:1-50esp32s3/firmware/makeimg.py:179-200
关键约束与边界
构建系统差异
ESP32版:Makefile + ESP-IDF v3/v4,需设置ESPIDF路径与工具链,支持BOARD变量选择板型。
ESP32-S3版:idf.py + CMake,顶层CMakeLists.txt包含板级配置,支持variant与lockfiles校验。
板型与配置边界
每个板型有独立mpconfigboard.cmake与sdkconfig集合,避免交叉污染。
冻结清单(manifest.py)决定Python模块是否内嵌,影响固件体积与启动时间。
模块可用性边界
ESP32版:audio/radio/xunfeiAI为C级内置;ESP32-S3版:radio迁移至Python模块,新增ai_cloud/xunfei等。
部分引脚/外设受限(如P4光线、P10声音),通用IO需避开专用功能。
运行时约束
堆栈与内存:MicroPython任务栈与Python堆大小有限,需关注大对象分配。
网络与BLE:需正确配置天线与RF参数,不同板型可能需额外初始化。
集成与扩展边界
drivers与modules分层清晰,新增驱动应优先放入drivers,Python封装放在modules。
file_system中的扩展库属于应用层,不纳入核心构建,按需部署。
章节来源
firmware/port/Makefile:1-200esp32s3/firmware/CMakeLists.txt:1-107esp32s3/firmware/main/CMakeLists.txt:1-14esp32s3/firmware/boards/manifest.py:1-16esp32s3/firmware/modules/radio.pyesp32s3/firmware/modules/ai_cloud.pyesp32s3/firmware/modules/xunfei.py