LXK-98/ipod-classic-reverse-engineering

GitHub: LXK-98/ipod-classic-reverse-engineering

该项目通过实测手段完整逆向了 iPod Classic 6G/7G 液晶屏的引脚定义、总线协议与电气特性,并提供了配套的解码工具与硬件设计。

Stars: 0 | Forks: 0

# iPod Classic (6G/7G) LCD —— 逆向工程引脚定义与协议 完整的引脚定义、总线协议和电气特性(2.5" 320×240 LCD) 适用于 **iPod Classic 2009 "thin" 160 GB**(型号 A1238,逻辑板 820‑2437‑A, Samsung S5L8702 —— 即 Rockbox 称为 `ipod6g` 的修订版)。 这里的所有内容都是**实测**得出,而非从文档推断。当结果与 Rockbox 源码不一致时, 均已连同证据作了特别标注。 **状态:** 最初的六个目标已全部完成。还有一个未决的次要事项 —— 请参阅 [docs/OPEN-QUESTIONS.md](docs/OPEN-QUESTIONS.md)。 ## 结果概览 | 属性 | 值 | |---|---| | 排线连接器 | **34 针**,间距 0.3 mm | | 面板变体 | **type 2**(Apple 的四种之一)—— ILI9320/9326 风格的 16 位寄存器指令集 | | 逻辑电平 | **1.8 V** | | 总线 | 8080 系列并行接口,**18-bit RGB666**,数据在 **/WR 上升沿**锁存 | | 写周期 | **610 ns** (1.64 MHz) —— 低电平 70–80 ns,高电平 530–540 ns | | 整帧画面 | 76,800 次写入 ≈ **46.9 ms**,**每个像素一次传输** | | 刷新率 (TE) | **67.9 Hz** | | 背光 | **4 颗白光 LED**,**19.5 mA**,全亮度下 **12.76 V**,低边 PWM | **[→ 完整引脚定义:PINOUT.md](PINOUT.md)** (由 [`pinout.json`](pinout.json) 生成) ![重建的状态栏](https://static.pigsec.cn/wp-content/uploads/repos/cas/ec/ec1f33c3e274d2c69cea2b2f10e2792e58aa87bc10c6620c59c2eb6094b6f81d.png) *端到端验证:实时屏幕的第 0–3 行,由原始逻辑分析仪抓取数据重建 —— 包含蓝色图标、文本字形,以及带有红色低电量填充的电池轮廓。* ### 引脚摘要 | 引脚 | 功能 | |---|---| | 1, 2, 9–16, 18–25 | 18 线 RGB666 数据总线 | | 3, 6, 8, 17, 31 | GND | | 4, 5 | 背光阳极 (**12.76 V ⚠️**) / 阴极(经 25.6 Ω 电阻检测) | | 7 | TE(撕裂效应,67.9 Hz) | | 26, 33 | VDDIO 1.8 V / 3.0 V 电源轨 | | 27, 28, 29 | /WR, D/C, /CS | | 30, 32 | /RD 和 /RESET —— 均为低电平有效,空闲时为高([具体对应关系:待定](docs/OPEN-QUESTIONS.md)) | | 34 | ~1.54 V 模拟参考电压 —— 面板预期的**输入** | ## 文档 | 文档 | 内容 | |---|---| | [PINOUT.md](PINOUT.md) | 引脚定义表,由 `pinout.json` 生成 | | **[docs/DRIVING.md](docs/DRIVING.md)** | **如何编写驱动 —— 请从这里开始 Phase 6** | | [docs/HARDWARE.md](docs/HARDWARE.md) | 目标设备、转接板、仪器及安全规则 | | [docs/PROTOCOL.md](docs/PROTOCOL.md) | 总线协议、初始化序列、时序、像素格式 | | [docs/METHODOLOGY.md](docs/METHODOLOGY.md) | 各项结果的获取方法及复现步骤 | | [docs/FINDINGS.md](docs/FINDINGS.md) | 重要发现,包括实际情况与 Rockbox 源码存在差异之处 | | [docs/OPEN-QUESTIONS.md](docs/OPEN-QUESTIONS.md) | 尚未解决的问题 | | [docs/LAB-NOTEBOOK.md](docs/LAB-NOTEBOOK.md) | 完整的时间顺序日志(包含走过的弯路) | ## 仓库结构 ``` PINOUT.md generated pinout reference pinout.json single source of truth — everything else derives from this docs/ documentation (above) + the ModemManager udev rule tools/ capture, decode and reporting tools (Python, re-runnable) refs/ Rockbox sources used as ground truth (GPL v2, see refs/README.md) captures/ every logic-analyzer capture, gzipped, with JSON sidecars measurements/ DMM sweeps as TSV probe_maps/ probe wiring conventions hardware/interposer/ KiCad project for the 34-pin passive interposer board ``` ## 快速开始 ``` pip install -r requirements.txt python3 tools/rockbox_seq.py --summary # parse Rockbox into sequence tables python3 tools/report.py # regenerate PINOUT.md from pinout.json python3 tools/index_captures.py # regenerate captures/INDEX.md # 针对已知 lane map 解码任何 capture python3 tools/decode8080.py captures/20260801_215011_dryrun.csv # 从 captured frame 重建图像 python3 tools/frame2png.py captures/20260801_222433_dryrun.csv -o frame.png ``` 抓取新数据需要将 [gusmanb LogicAnalyzer](https://github.com/gusmanb/logicanalyzer) 的二进制文件放入 `vendor/` 目录中(该目录被 gitignored —— 请从该项目的 Releases 中下载)。 ## 核心发现 有三项结果与 Rockbox 源码相矛盾,或解决了源码中遗留的未决问题。详情及证据见 [docs/FINDINGS.md](docs/FINDINGS.md)。 1. **所有 18 条线均被主动驱动 —— 无一空闲。** 在纯色填充下,每条线都被观察到有高电平和低电平状态。`lcd-s5l8702.c` 将帧模式描述为 `APB[15:0] -> D[17:10, 8:1]`,这会导致两条线不传输任何数据;而一条从未被驱动的线无法在两个方向上跟踪颜色数据,但没有任何一条线表现出这种特性。 这些线按 **每个颜色通道 6 条 (RGB666)** 分组,且数据与 SoC 通过 `6bit = (5bit << 1) | (5bit >> 4)` 将 5 位通道扩展为 6 位的规则一致。 *注意事项:Rockbox 中的那段注释块以 `XXX: WIP, TBC` 开头 —— 其作者已将其标记为未经验证。不过无论该注释如何,他们的驱动程序本身都是正确的,因为驱动代码并不依赖于此注释。* 2. **在 Rockbox 下有两个引脚对传输相同的数据** —— 引脚 9/14 和 21/2 —— 这与它们各自作为 5 位通道扩展为 6 位时被复制的最高有效位(MSB)的情况一致。测得它们之间的电阻相差 6.66 MΩ,因此这不是短路。**尚未测试:**驱动程序能否为这些引脚对分配*不同*的值,以实现真正的 6 位颜色。我们的所有数据均来自 RGB565 源,在构造上它们就是完全相同的。 3. **每个像素一次总线传输**,经测量,46.92 ms 的帧时间与 76,800 × 610 ns 的计算结果吻合度达到 0.1%,由此证实了这一点。 ## 安全警告 - **引脚 4(背光阳极)电压高达 12.76 V** —— 会击穿额定耐压 5.5 V 的电平转换器输入 - 面板逻辑电平为 **1.8 V**;基于 3.3 V 参考电压的电平转换器将*无法*可靠读取 (例如在 3 V 参考电压下,TXU0104 的 VT+ 最大值为 1.92 V,刚好高于 1.8 V 的逻辑高电平) - 请将仪器接地连接至**信号**地(引脚 3/6/8/17/31 中的任意一个),而不是机壳 —— iPod 内部通过 **~300 Ω** 电阻将机壳与信号地相连 - 在进行通断测试前请断开电池;设备处于“关机”状态时 PMU 的待机电源轨仍然带电 ## 许可协议 **本项目基于 MIT 许何协议** —— 详见 [LICENSE](LICENSE)。此协议涵盖本项目的工具、 文档、测量数据、抓取记录、`pinout.json` 以及转接板硬件设计。 **特例:**位于 [`refs/`](refs/) 中的 Rockbox 源码副本采用 **GPL v2** 协议,并按 照相应条款进行分发,许可协议文本见 [`refs/COPYING`](refs/COPYING),出处说明见 [`refs/README.md`](refs/README.md)。`refs/sequences.json` 是 基于这些源码生成的,因此被视为受相同条款约束的衍生作品。 它们作为独立作品与本项目并存 —— 符合 GPL v2 第 2 条款中的“单纯聚合”——因此它们 不会使存储库的其余部分受到 GPL 的约束。`refs/` 之外的任何内容均不包含 Rockbox 代码;`tools/rockbox_seq.py` 仅对这些文件进行解析。 ## 致谢 本项目建立在 [Rockbox](https://www.rockbox.org/) 和 [freemyipod](https://freemyipod.org/) 项目先前的工作基础之上,正是他们的驱动源码使逐字节的精确 验证成为可能。抓取硬件及固件来自: [gusmanb/logicanalyzer](https://github.com/gusmanb/logicanalyzer)。
标签:Homebrew安装, iPod, 云资产清单, 显示技术, 硬件, 硬件接口, 逆向工具, 逆向工程