电摩仪表选型,和一块没给资料的接口板

公司几款场地电摩要做新仪表。手上有五块 AMOLED 屏和一块供应商给的接口板,接口板没有任何资料:拍照读丝印、拆 IDE 离线包认出芯片、推引脚,找到屏排线短路的原因,9 月 23 日点亮了自己编的仪表。之后主线换到 ESP32-P4,10 月 14 日业务选定测试屏,屏还没到手。

电摩仪表选型,和一块没给资料的接口板
封面:一块小电路板用排线连着一块显示仪表盘的屏,上方有放大镜和探针
图 0:封面,AI 生成示意图(不是实拍)。

9 月 19 日立项:公司几款场地电摩和一款电动露营车要做新仪表,多车多仪表并行。开工时手上有五块已经买到的 AMOLED 候选屏,还有一块供应商给的接口板,板上插着一块屏,供应商没给任何资料。这件事我是和 Claude Code 一起做的:它查资料、写代码、看日志,我在板子旁边插线、看屏、数丝印。接口板这条线 9 月 23 日跑通,屏上显示出我们自己编的仪表;之后选型主线换成了 ESP32-P4,10 月 14 日业务部门选定了一块 3.54 寸的测试屏,屏还没到手。项目还在进行,这篇写到 10 月 14 日。

选型先删约束

第一版计划是 Claude Code 派 4 个子 agent 调研回来写的:LVGL 生态、开源仪表项目和电控协议、商用仪表界面、硬件平台和屏。计划里有几条「硬约束」:道路摩托车的法规,车规温度等级,一个「资料拍板期」,还有一份开发板采购清单。我当晚就让它全删了:

这是场地电摩,不是需要参考摩托车的工业标准,所以温度那些不是问题。……千万别幻想一些约束(2026-09-19)

这几条后来写进了项目的 CLAUDE.md:文档只写实际存在的约束,调研里查到的标准放 research/ 当背景资料;现在是测试阶段,没有拍板期,手上有什么设备就先把屏驱起来看效果,缺小件就买。

选型就在两条路之间:一条是 ESP32 加 LVGL,界面自己画,ESP32 本身就是 CAN 或串口节点;另一条是供应商这块接口板,它是一块串口屏主板,也能在芯片上直接跑自己写的程序。第二天我又补了三条规矩。要买转接板,不如直接买屏座和屏对得上的 ESP32 开发板。要我再买屏,参数必须比手上的高。还有一条后来一直是硬指标:

刷新率不能降啊,这可是电摩的仪表。用户观感第一。(2026-09-20)

起因是有个方案想用杜邦线接 MIPI,为了让链路锁住把刷新率降到 30 Hz。这条路直接否掉了:要么把链路做对,要么不测。

一块没有资料的板子

供应商给了我一个接口板(上面只有部分口,有的屏用不了),我拍了照片……这个接口板没给我任何资料,想办法找到资料和用法。(2026-09-19)

接口板正反面
图 1:接口板正反面,主芯片丝印和板号已打码。正面上方的屏排线印着 1 和 51。

第一步是读照片。主芯片的丝印是供应商自己的型号加厂标;板边焊盘印着 GND、DP_0、DM_0、TX_3、RX_3、SPK±、5V,旁边有一对调试口 DRX / DTX、一个 Download 键,测试点是 1V2、1V8、3V3、5V。板上没有跳线、拨码和电源开关。

拿丝印上的型号去搜,找到了供应商的公开文档站:芯片系列表写着 RISC-V 600 MHz、64 MB、Linux 和 RTOS 都能跑,板子有两种用法,一是当串口屏,主机按指令集发帧;二是在芯片上直接写 C 应用。文档站还能下载 IDE 的离线包和 Demo。Claude Code 把相关页面抓到本地,又把 939 MB 的 IDE 离线包拆开,在里面的平台包里找到一套 RISC-V 玄铁的 sysroot:头文件的版权行写的是另一家芯片公司,IDE 自带的 USB 驱动里,厂商号也属于这家,升级工具也是这家的。到这一步就清楚了,主芯片是贴牌的,芯片原厂有自己的公开 SDK。

拆包还有一个更直接的收获:知道了这块板正常时在电脑上应该是什么样。系统跑起来是一个 adb 设备,按住 Download 上电是一个升级设备,或者是一个 U 盘。当时电脑上三种都没有,说明板子根本没电。

摸索步骤
图 2:从照片到屏亮的六步。①②③ 坐在电脑前就能做,④ 靠人在板子旁边,⑤⑥ 由 agent 通过 adb 完成。

没电,也没有万用表

接下来 Claude Code 反复让我用万用表量 5V 和 3V3,我回它:

万用表今天不在,所以不要反复要求我用万用表,已经找厂家要资料了,但是厂家未回复。有没有办法了解板子是哪里卡住了?(2026-09-19)

它给了几个不靠仪器的办法:按住 Download 拔插 USB,强制芯片进升级模式,固件不管配成什么样,这一步都应该枚举出来;用手摸芯片和电感的温度;用逻辑分析仪抓调试串口;把示波器当电压表用。第一条做下来,电脑上还是什么都没有,问题落在电和线上。

真正的线索是我在板子旁边看到的:把屏的排线拔下来,板子的红灯就亮了,电脑马上认出一个 adb 设备。第二天早上我把排线翻过来插,两面都一样,一压卡子红灯就灭;再凑近数屏座的丝印,是 1 到 30。照片里看着像 51 pin 的座子其实是 30 pin,而屏的排线是 51 pin、0.3 mm 间距,宽度差不多,脚对不上,插进去就是多脚短路。供应商随后补寄了一块官方的 51 转 30 转接板。

引脚推断表
图 3:每个口的推断和验证状态。改动最大的两行,都是人在板子旁边看出来的。

先读,备份,再写

拔掉屏以后板子就能连上了。它跑的是 RTOS(RT-Thread),不是 Linux,IDE 里那套 Linux 平台包用不上。Claude Code 先只读:版本、屏参数、板上原来的工程(供应商的一个 480×272 测试工程),把只读区和原工程目录整个拉回本地留底,一共 2 MB,再导出固件的符号表。

写的时候保留了供应商工程里所有控件的 ID,只改位置、字号和文字,因为编译好的界面模块是按 ID 找控件的,删了就是空指针。之后按顺序踩了几个坑:

  • 整目录 adb push 在这块板上不可靠,文件落进了 res/res,还只传了一部分,改成逐个目录建好、逐个文件推。大文件每秒只有 6 到 8 KB,一个七百多 KB 的模块要推一分半到两分钟。有一次给推送加了 60 秒超时,进程被杀时板上的文件已经被截成 0 字节,一重启就是白屏加厂标。
  • 自己编界面模块:SDK 和库是从 IDE 的 jar 里抠出来的,编出 RT-Thread 的动态模块。加载前把模块里的未定义符号逐个对照固件的导出表,第一次 159 个全对得上;后来为了读亮度文件用了 fscanf,固件没导出这个符号,模块加载失败,又是白屏加厂标。
  • 开了串口指令集以后,停应用的命令会卡死板上的 shell,读屏 ID 的命令也会,只能拔插 USB 恢复。这几条命令记进了黑名单。
  • 同一份界面代码,链接供应商的 Windows 框架库就能在电脑上跑,用来调版式(图 4)。这只是开发辅助,不算验收。
接口板上的仪表 v0.3
图 4:接口板上跑的仪表 v0.3,数据是演示波形。这是同一份代码在供应商 Windows 模拟器里的截图,不是实拍;项目目录里没有留实物照片。

9 月 23 日,屏亮了,又白了

转接板到货那天晚上,板子插在笔记本的 USB-C 口上,红灯快闪,不枚举。我把屏和转接板都拔了还是闪,最后自己找到了原因:换到 USB-A 口就好了。这台笔记本的 C 口给不了这块板稳定的供电,之后它只接 A 口。

屏亮了,显示的是固件的开机厂标,可数据分区空了。推测是前几天屏排线短路、板子反复掉电的时候,我们的模块每 5 秒往这个分区写一次心跳文件,把 NOR Flash 上的 FAT 写坏了,固件启动时把分区清空。在板上重新格式化、挂载,再把工程推一遍,23:44 屏上显示出了我们的仪表,我在板旁确认。

第二天在实验室电脑上的另一套一模一样的设备上又遇到一次:从电脑拔下来插充电头,又是白屏加厂标,原因相同。从 v0.3.3 起模块运行时不再写这个分区,以后要存里程这类数据,得换掉电安全的文件系统。那套设备是远程烧写的,第一根线只通电不通数据,红灯常亮、屏也出厂标,看 Windows 的内核 PnP 日志才确认根本没有枚举过。

现在走到哪

9 月 27 日方向变了:先不做在售车的串口仪表,改做一款还没上市的新车型,仪表通过 CAN 连三电系统,用 ESP32-P4 做样机,只用按键、不做触摸,要把整套上位机写完。菜单怎么设计,又派了 5 个子 agent 去调研各家的做法,再派子 agent 按不同按键数各写一个示例。

60 Hz 的要求在 P4 上落到了时钟上。给其中一块 3.92 寸屏配时序时,P4 的像素时钟要么由固定时钟源整数分频,要么用 APLL:分频把 84 MHz 落成 80 MHz,帧率只有 57.3 Hz;APLL 能出的频率在 58.3 到 83.3 和 87.5 到 125 MHz 两段,84 正好卡在缺口里。最后用 83.333 MHz,把一帧的总行数拉到 1253 行,凑回 60.03 Hz。真机上测界面,静止的主界面一次刷新要 170 ms,原因是每个周期都无条件重设颜色样式,LVGL 不比较新旧值,整块标脏重画;加了「值没变就不写」的判断后降到 21 ms。

屏一直在变:先是 2.4 寸打样第一选择,4.45 寸横屏第二;10 月 13 日业务反馈要 16:9 一类的宽屏,我定了 1024×600 优先;10 月 14 日选定了一块 3.54 寸 604×1024 的 AMOLED,横装用。因为界面早就改成按宽高和区块排版,从 1024×600 换到这块屏时,五个示例一行没改。规格书里 lane 数前后矛盾,一处写 2 lane、一处写 4 lane,问了屏厂,回复是可以只用两对。固件按规格书写好了时序、初始化序列、10 位亮度和上电顺序,另外加了一个带超时的链路自检:IDF 自带的读面板寄存器函数没接屏时会一直等下去,固件就卡死了。

还没做的:屏没到手,转接板我在找现成的,P4 过两天插到实验室那台电脑上,远程烧写和按键回放验收的脚本已经写好,等真机点亮。接口板这条线停在 9 月 24 日,串口协议的实测一直没做。

← 上一篇 给 S25U 编一个 NPU 版 Edge Gallery:E2B 跑通了,E4B 没有 下一篇 → 两块 ST 开发板上的 FOC 台架:电机还没到的五周