用 AI 开始适配
把这句话交给能执行命令的 AI 编程助手,并提供原理图、芯片型号和可用参考驱动:
请读取 https://pxa.doit.am/board-agent.md,把我提供的开发板适配到 PXA。只修改新板目录、对应模拟器 Profile 和生成的本板依赖锁,不修改 PXA 接口、SDK、共享运行时或其他板子。先核对硬件资料,再实现、构建并按已有授权进行真机验收。
板适配使用独立的固件工作区,需要该仓库指定的 ESP-IDF 环境。应用开发用的独立 DevKit 无法替代固件工具链。配置 agent:
uv run --python 3.12 https://pxa.doit.am/setup.py --workspace . --mode board
.pxa/pxa board init my-board --target esp32s3 --reference pai-touch
工具生成板目录和现有 board-port 回调骨架,记录修改边界,并将未知硬件参数留在 board-port.json。脚手架有明确的编译阻断提示;它没有猜测 GPIO、供电或 Flash 分区,也不代表已适配成功。
填好硬件信息并实现驱动后运行 board check my-board、board build my-board。修改已有板时,先运行 scope begin --mode board --board my-board。交付前运行 scope check:SDK、ABI、共享组件和其他板子改动会列为越界,工具不会擅自还原文件。
这些检查是修改审计,不是操作系统沙箱。新 CPU 后端或缺失的平台接口需要单独的平台开发任务;不能为了适配一块板而悄悄改动应用接口。下面是实际实现顺序。
1. 收集硬件参数
先记录芯片与 Flash / PSRAM 容量、LCD 控制器与总线、分辨率和旋转、RGB565 字节序、触控 IC 与坐标范围、背光、电源、USB / UART 路由。使用原理图核对引脚,不能直接照搬其他板子的 GPIO。
2. 建立板级 component
创建以下结构:
firmware/boards/my-board/
board.cmake
CMakeLists.txt
idf_component.yml
sdkconfig.defaults
partitions.csv
include/pxa_board.h
src/my_board.cc
templates/board/ 提供 README 和 .example 元数据,尚不是可以复制即编译的完整 BSP。可从最接近硬件的现有板级实现参考 CMake 与驱动组合,再替换为自己的实现。
board.cmake 示例(仅适用于 ESP32-S3 板子):
set(PXA_BOARD_TARGET "esp32s3")
set(PXA_BOARD_COMPONENT "my-board")
板级物理依赖放在本目录的 idf_component.yml。只有所有板子都需要的依赖才进入公共 manifest。
3. 实现 board port
导出 pxa_board_register_selected(),在实现中调用 pxa_board_register() 注册 pxa_board_port_t。结构体设定 struct_size,port 本身和 context 都必须在注册后持续有效;注册函数保存指针,不复制结构体。
| 必需回调 | 应完成的工作 |
|---|---|
initialize |
初始化板级资源;成功后返回 true |
display |
返回有效的 lv_display_t* |
display_profile |
填充逻辑尺寸、形状与安全边距 |
以下是注册结构的示意片段,my_* 函数必须由 BSP 实现,不能直接拿来编译:
static pxa_board_port_t port = {0};
port.struct_size = sizeof(port);
port.initialize = my_initialize;
port.display = my_display;
port.display_profile = my_display_profile;
pxa_board_register(&port);
可选回调覆盖网络、音量 / 亮度、系统 ready、首帧、诊断与截图。先让仅显示的最小板子启动,再逐项增加能力。
4. 配置存储与内存
在分区表定义符合实际 Flash 容量的 LittleFS 数据分区,再配置相同的分区标签和挂载点。按真实硬件配置 PSRAM、DMA 可用内存、任务栈与像素缓冲。不要复制与自身容量不符的分区偏移或内存配置。
5. 打通显示与输入
先画纯色和边框,验证方向、颜色与裁切;再接 LVGL flush 完成通知;最后把触控坐标映射到相同逻辑空间。显示 Profile 与输入旋转应一致。
高频数据通路留在板级实现:framebuffer 所有权、DMA 提交、像素转换与 PCM 传输不能通过 board port 逐像素或逐采样转发。异步传输完成前不得复用或释放缓冲区。
6. 构建与桌面 Profile
tools/firmware.sh my-board build
创建 simulator/profiles/my-board.toml 表达尺寸和输入语义,字段、圆屏与安全区配置参考 Profile 与多设备模拟。模拟器 Profile 不替代 BSP,也不会自动新增打包器的 CPU target。
7. 最小验收清单
冷启动与重复重启 → 首帧 → 触控边界 → Hello 包安装 → App 启停 → 截图 → 内存压力与连续运行 → 存储恢复。完成基础通路后再接音频和网络,详细定位见板子调试。