本页内容 先选择一条接入路径核对版本并导入 SDK根工程:完整仪表应用Managed 工程:主业务最小接入产品移植边界
HARDWARE SDK / FreeRTOS

ESP32-P4 开源示例

选择完整仪表或托管工程,核对版本并定位适配文件。

获取 ESP32-P4 参考工程。应用和板级适配开源;SDK 核心通过匹配的头文件与静态库交付。

先选择一条接入路径

路径 适合什么项目 需要你实现什么
仓库根工程 JC1060P470C_I_W_Y、JD9165 1024×600 屏、P4+C6;需要主业务、BLE 通知、视频、地图和镜像 指定板型已接无线和显示;写入本机授权,量产时替换模拟车况和执行器
examples/managed-terminal 移植 Wi-Fi 主业务、主题、控车、HUD 与导航视频;单独使用时不能完成当前 App 首次添加 main/board_driver.c 中的 BSP 与显示/车辆驱动

两者是独立固件,不要把根工程的 main/terminal.c 塞进 Managed 工程。自 revision 24 起,Managed 可通过启动前的 moto_terminal_set_mirror / moto_terminal_set_audio 接入独立镜像和 Wi-Fi 音频,见投屏与音频。BLE 辅助实例、底图存储和同 owner 的连接接管仍采用 Core。感应解锁还需接好采样、校准存储和真实解锁。

核对版本并导入 SDK

先阅读所选仓库版本的 docs/VALIDATION.md 和 SDK 包的 BUILD_INFO.json,核对 CPU、ESP-IDF、FreeRTOS ABI 与构建配置。标注 ABI 7 的参考工程版本不能与 ABI 8 头文件/静态库混用;从接入团队取得配套版本。仅运行导入脚本不会自动完成源码迁移。

要使用本文的道路矢量功能,所选提交还须包含 main/route_vector_store.c、main/route_vector_view.c,并声明要求 r25;旧图片地图示例须先升级。若公开默认分支尚无配套版本,向接入团队取得完整工程与二进制包后再继续。

本网站当前接口说明以 SDK 1.0.0 / revision 27 / ABI 8 为基线;公开工程按其所选提交声明的包版本接入,不把 SDK 新增接口视为模板已经完成的功能。

以下命令使用 ESP-IDF 5.5.4,实际工具链以配套工程为准。将原始 ZIP 导入完整工程;不要先进入包内 examples/customer,那是另一套待实现 BSP 的模板。在自己的板上移植托管入口时,再按准备 SDK编译模板。

git clone https://github.com/oounet/moto-esp32p4-example.git
cd moto-esp32p4-example
# 先切换到与交付包配套的仓库版本,再导入。
python3 tools/import_sdk.py /path/to/sdk-package.zip
. /path/to/esp-idf-v5.5.4/export.sh

导入器校验包并写入 vendor/moto-sdk。它不签发设备授权;按设备配置读取硬件标识、配置可信公钥、写入本设备 .motolic,再按下面的 BLE 首次添加与 Wi-Fi 引导步骤连接。APP 和后台材料先按准备清单拿齐。

根工程:完整仪表应用

在仓库根目录执行:

python3 tools/fetch_lvgl.py
idf.py build
要看什么 仓库根目录下的文件
Wi-Fi、BLE 与镜像实例的创建及事件分流 main/terminal.c
授权读取与出厂配置 main/factory_license.c、main/factory_usb.c
控车和车况 main/terminal_board.c
HUD、视频解码与显示 main/hud_view.c、main/terminal_video.c
底图接收和显示 main/route_map_*.c、main/route_vector_*.c;见离线地图
Android 通知、iOS ANCS main/notice_view.c、main/ancs_adapter.c

移植时先确认屏幕、无线协处理器、引脚和分区,再替换相应驱动;不要把这些板型配置当成所有 P4 开发板的默认配置。

指定板型按以下顺序验证:

  1. 编译、按设备配置烧录并写入授权。
  2. App 登录并打开蓝牙,搜索车辆、确认 PIN 与云端绑定。
  3. 按提示加入车辆 Wi-Fi,确认主业务认证并切换主题。
  4. 重启开发板,核验绑定保留和自动重连。

根工程已有 BLE/ANCS、视频和地图接线;按功能清单继续启用和核验,无需从零拼出第二个 SDK 任务。移植前先读线程与实例架构。

Managed 工程:主业务最小接入

从仓库根目录执行:

cd examples/managed-terminal
idf.py build

该目录的 main/main.c 负责启动与取事件;main/board_driver.c 是你要实现的 BSP。它默认不读取真实授权、不启动实际无线或解码器,因此构建成功后仍需要硬件适配。它没有当前 App 首次添加所需的独立 BLE 实例;验证完整手机接入请使用 Core 根工程。

调用示例(相对于本工程 snippets/) 用途
quick_start.c、api.c 托管网络启动、事件与停止释放
vehicle.c、faults.c 控车完成、完整状态和故障上报
video.c 视频准备、重组与呈现回执
optional_features.c 路线/位置、音乐和仪表选择
advertising.c、ad_receipts.c、bulk.c 媒体广告、持久回执和独立数据传输
ota.c OTA 端口调用,安装仍需板级实现
bluetooth.c 高级外部传输示例;不可与 config.network 同用

产品移植边界

  • 示例车况为演示数据,量产接真实 CAN/UART 控制器。
  • P4+C6 示例未接通 HFP;通话音频需要相应硬件与驱动。
  • 广告需要播放器、安全空闲判定和持久回执;回执模板的 64 条容量只是示例上限。
  • OTA 示例演示接收和校验,不写 Flash、不重启;真实升级另接签名、分区、掉电恢复与回滚。

烧录前确认板型与分区。应用及第三方依赖许可见仓库 LICENSE、THIRD_PARTY.md。