记几个这周落地的小而新的设计
前几天写的都是故障复盘,这篇换个口味:收几个这周(其实跨了两三周)落地的小设计。每一个都是被具体问题逼出来的,但抽象一下都觉得"以后别的项目还能再用"。
前几天写的都是故障复盘,这篇换个口味:收几个这周(其实跨了两三周)落地的小设计。每一个都是被具体问题逼出来的,但抽象一下都觉得"以后别的项目还能再用"。
蓝牙模块挂在主机的 UART 上:手机连上蓝牙放歌,模块把曲名、艺术家、进度等状态以文本行推给主机,主机再转发到控制面板显示。没有正式协议文档,厂商给的"说明"和实际行为对不上。这篇记录怎么用外置串口把协议抓明白,以及五个疑点的修复——其中三个修复后来直接变成了协议设计。
设计师给了张横版 800×480 的欢迎图,产品屏幕却是竖着装的 480×800,LOGO 要在 U-Boot 阶段(内核还没起来)就显示。这篇记录从 PNG 到屏上点亮的完整管线,以及三个坑——其中"多放一张 BMP 就爆分区"这个,打包工具的报错信息几乎不会让你直接想到答案。
嵌入式产品最冤的一种坏:所有零件都是好的,软件也都在,就是开机那两秒的顺序不对,整机看起来像砖。这次的现象是烧完新固件"没有显示",最后定位到一个 tmpfs 目录偶发缺失,顺手把 init 脚本改成了三层自愈。这篇一半是排查实录,一半是设计。
T113 音源播放器上跑着两路业务串口:uart4(ttyS4)接 OTG 音源切换芯片,uart5(ttyS5)接蓝牙模块,DTS 里都配了 use_dma = <3>(TX/RX 全走 DMA)。这周先后出现两起"串口收不到数":先是 OTG 芯片"未连接",修好之后隔了一次烧录,蓝牙又"聋"了——同一个病根,两次发作在不同的串口上。这篇完整复盘根因、修复和一个值得记住的竞争格局故事。
产品没有网口,需求是:手机直连设备的 WiFi 热点,用 DLNA 把音乐投送到播放器出声。一天多时间从零搭通全栈,板验时四连修——每修好一个,下一个才露头,又是一次"叠罗汉"。这篇记录集成路径和四个坑。
这是迄今遇到的最迷惑的一次故障:快速切歌或切源,整机就"哑"了——不出声、面板失联,但所有进程都活着:ps 全在、心跳正常、没有任何 crash 和重启。软重启无效,断电是唯一恢复。最后定位到内核里的 sunxi rpmsg 竞态 Oops,而且 Oops 本身还死在打印路径里——这篇完整复盘。
用户第二轮功能反馈来了 11 项:BACK 作用域、页面白闪、字体车载放大、DLNA 错显、列表跳动、双视图、ID3 封面、播放列表清空……一天到几天修一轮,这篇记当天 UI 批次里三个最有味道的:180° 旋转、双视图布局、行高治理。
面板要显示当前曲目的专辑封面。封面埋在音频文件的标签里,而我们的曲库横跨三种格式——FLAC、DSF、MP3——意味着三种完全不同的标签结构;封面又是二进制大块数据,现有面板链路的文本行协议装不下它。这篇记录提取与传输两端的完整设计。
控制面板与播放主机之间走 USB Bulk 通信:面板是 host,按 VID/PID 枚举设备、claim 接口、开端点读写。这条链路平时很稳,但只要下位机重启或电气抖动,面板就会"失联且永不恢复"——只能重启面板。花了两天把这条链路修成自愈的,这篇记录三次修复和背后的通用教训。