系统与硬件

PXA 创作与开发指南

ESP 板子构建与烧录

按板选择依赖、工具链和构建目录,再安装应用进行验证。

中文指南 · 6 分钟阅读 · PXA 0.10.0
适用环境与阅读准备

适用环境固件工作区

开始前目标板对应的 ESP-IDF 环境;真机串口

术语速查 →

只想安装官方系统?

使用 网页烧录,按设备型号安装 GitHub 最新稳定固件,无需 ESP-IDF。数据保留方式见 烧录教程。下面的源码构建适合修改系统或驱动的开发者。

获取固件工作区

只开发 App 请继续使用 DevKit;修改系统、板级驱动或构建固件才需要此工作区。

git clone --branch v0.10.0 --recurse-submodules https://github.com/SmartArduino/pxa-workspace.git
cd pxa-workspace

本章所有 tools/ 命令均从此目录执行。先按对应板级 README 安装并激活 ESP-IDF;ESP32-S31 需要支持该芯片的 IDF main 工具链,不能沿用只支持 S3 的旧环境。用 idf.py --version 核对环境。

选择已有板级实现

工作区中已有 pai-touch、sensecap-watcher、esp32s31-korvo-1、esp-mosaico、doit-gamekit、doit-gamekit-1、doit-esp32s31-devkit 和 espp4-a 目录。这表示存在板级接入代码,不等于所有硬件能力已经完成相同程度的验证。以对应 README、原理图和实际硬件修订为准。

board.cmake 在 IDF 发现组件前选择芯片和板级 component;每块板子有独立 sdkconfig.defaults、分区与依赖 manifest。

编译、烧录与监视

先激活适合目标板的 ESP-IDF:

tools/firmware.sh pai-touch build
tools/firmware.sh pai-touch app-flash --port /dev/ttyACM0 --baud 2000000
tools/firmware.sh pai-touch monitor --port /dev/ttyACM0 --baud 115200

上面的 app-flash 用于分区和引导程序已经匹配的日常升级,只写应用分区。全新设备首次初始化使用 flash;改变分区表或首次挂载自动格式化可能影响原数据,请先核对板级配置。

工具使用 build/firmware/pai-touch/,其他板子只替换第一个参数。等效的直接构建入口是:

idf.py -C firmware -B build/firmware/pai-touch -DPXA_BOARD=pai-touch build

切换板子使用独立构建目录,避免残留芯片与驱动配置。首次解析生成 firmware/dependencies.lock.<board>,由组件管理器维护,不手工修改。

配置和数据分区

tools/firmware.sh pai-touch menuconfig

PXA 数据分区使用 data/littlefs;分区标签必须与 CONFIG_PXA_STORAGE_PARTITION_LABEL 完全一致,挂载点使用绝对路径。普通固件编译与烧录不负责构建或覆盖应用数据分区。

需要工厂预置时另用 tools/factory.sh image pai-touch 生成镜像。该镜像会替换整个 PXA 数据分区,不适用于需要保留用户 App 的日常升级。首次挂载失败是否格式化由 CONFIG_PXA_STORAGE_FORMAT_IF_MOUNT_FAILED 决定。

安装一个验证应用

关闭 monitor 后执行:

mkdir -p local/my-apps
pxa init local/my-apps/board-hello --id pxa-board-hello
pxa device info --port /dev/ttyACM0 --baud 2000000
pxa run local/my-apps/board-hello --device /dev/ttyACM0 --baud 2000000

这个 C++ Hello 使用 Core 2;不要从旧 apps/pxa/hello 的 C 示例复制包。pxa run 会读取设备目标。手动打包时,ESP32-S31 使用 --target esp32s31;其他板子若工具未定义默认 App target,就显式给出其真实芯片支持的 target。

验收结果

确认上电启动、显示方向、触控坐标、包安装、App 启停和重启后的持久状态。再逐项验证网络、音频、亮度和电源;失败时沿板子调试的顺序定位。

下载完整固件

八块板子的官方固件 0.10.0 内嵌 PXA 0.10.0,提供合并镜像、分区文件、应用分区镜像、刷写说明和 SHA-256。选择与板名完全一致的文件;Watcher 使用 32 MiB flash,DOIT ESP32-S31 DevKit 使用 8 MiB,其余六块使用 16 MiB。DOIT GameKit 没有触控,使用手柄。

合并固件包含字体与商城,用于首次安装,会覆盖应用和数据分区。保留原数据的升级只写 app 文件,并先核对现有分区表相同。ESP32-S31 手动进入 ROM 下载模式后使用 --before no-reset,串口出现并不能单独证明 ROM 已就绪;完整命令见对应 ZIP 的中文说明。

完整镜像预装商城 0.9.6;保留数据升级会保留原商城。升级后,旧商城可按 PXA Host 的实际能力查询并安装兼容的新版商城,操作见保留数据后更新商城。板级固件由 firmware/VERSION 编号,内嵌 PXA 由 deps/pxa-system/VERSION 编号;自定义整机发行号不会改变应用兼容性。

发行维护者可设置 PXA_FIRMWARE_BUILD_ROOT,使用独立构建树和新 sdkconfig,避免把本地实验配置带入发行包。tools/build_firmware_release.py 从构建产物读取 flash 参数和分区,检查越界/重叠,使用本轮发布的原始商城包生成文件系统,再合并镜像。

标准服务与板级扩展

文件和 SD 使用标准 Storage/FS,麦克风使用 Audio,已定义的物理量使用 Sensor, 振动使用 Haptics。没有对应硬件的板型应返回不可用,不用伪造数据填补。

标准尚未覆盖的接口复用仓库 extensions/ 的 pxa-ext SDK。 org.doit.peripherals 0.3 通过 UUID/版本协商发现逻辑端口,并按每个 scope 授权:Watcher 提供 indicator.rgb、grove.i2c、camera.jpeg 和 vision.inference,Korvo 提供 RGB 和 JPEG,GameKit 1 提供状态灯。 这是非标准扩展,不应将私有服务编号标成 PXA 标准能力。

DevKit 的 extensions/peripherals/README.md 包含协议、SDK CMake 接入与 examples/camera、examples/indicator;标准录音示例位于 sdk/guest-cpp/examples/capture。应用必须处理授权拒绝、设备忙、无摄像头或 无模型,后台与撤权时释放资源。视觉示例仅保存本地文件,不上传图像或刷写模型。

Watcher 与 Korvo 的 SD 按启动状态挂载;无卡继续启动,不自动格式化。插拔请 先关机。Watcher 的 SD 和 Himax 共用 SPI2,不能由应用重新初始化或释放总线。 Korvo 本版数据区从 0x700000 开始,旧 4 MiB 应用布局不能直接刷新版 app; 先导出私有数据、存档与设置,再完整迁移并按原签名身份恢复。

新增板级功能仍优先查询标准;标准缺项才定义自有扩展,并保留身份、版本、权限、 资源上限、取消与清理规则。未来标准覆盖时优先迁移,必要时在标准仓库提交 issue 并附公开的扩展合同,不静默改变已有编号的含义。

参考实现与资料v0.9.0/README.md ↗zh-CN/pxa-app-delivery.md ↗esp32s31-korvo-1/README.md ↗

输入关键词,搜索全部教程。