系统与硬件

PXA DEVELOPER GUIDE

全新板子的适配

从板级目录和三个必需回调开始,逐步打通显示、输入与应用运行。

中文指南 · 3 分钟阅读 · 开发版

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 启停 → 截图 → 内存压力与连续运行 → 存储恢复。完成基础通路后再接音频和网络,详细定位见板子调试。

参考实现与资料zh-CN/adding-a-board.md ↗include/pxa_board_api.h ↗board/README.zh-CN.md ↗

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