引言:Vintage 外设的兼容困境
1998 年 iMac 发布时,Apple 从 ADB(Apple Desktop Bus)全面转向 USB,留下大量经典外设面临接口淘汰。Griffin Technology 于 1999 年推出的 iMate 转换器,成为连接 1990 年代 Apple Extended Keyboard II 等机械键盘与现代系统的桥梁。然而,这款设备隐藏着一个鲜为人知的设计缺陷:一枚未在文档中提及的 CR1225 纽扣电池,在耗尽后会导致 USB 总线陷入持续的复位循环。
本文基于对 iMate 硬件的逆向工程,解析其 ADB 到 USB 的协议转换架构、HID 事件映射机制,以及硬件握手时序,并提供可落地的修复参数与兼容性复现方案。
协议转换架构:从单线串行到 USB HID
iMate 的核心是 Cypress CY7C63413-PVC—— 一款 1997 年发布的 8 位 RISC 微控制器,集成 USB 低速(1.5 Mbps)接口。该芯片负责将 ADB 的单线串行协议转换为 USB HID 报告。
ADB 总线采用四线 Mini-DIN 接口:5V 电源、地线、ADB 数据信号,以及独立的电源开关信号(PSW)。与 USB 的差分信号不同,ADB 是单线双向串行总线,设备通过主机的轮询机制响应。iMate 的固件需要模拟 ADB 主机的轮询行为,同时将按键事件封装为 USB HID 报告描述符定义的标准输入报告。
在 USB 枚举阶段,iMate 向主机呈现两个独立接口:HID v1.00 键盘(接口 0)和 HID v1.00 鼠标(接口 1)。这种复合设备架构允许同时支持键盘和 ADB 鼠标,无需额外的驱动程序。
HID 事件映射与报告描述符
iMate 的 HID 实现遵循标准键盘报告格式:8 字节输入报告,包含 1 字节修饰键(Shift、Ctrl、Alt、Command)和 6 字节按键码数组。然而,其映射存在局限性 —— 固件不区分左右修饰键,左右 Shift、Alt/Option 和 Command 被映射为相同的 HID 使用码。这一设计源于 ADB 键盘本身仅通过单一扫描码区分修饰键,iMate 未在转换层引入位置信息。
对于电源键,iMate 的处理更为特殊。ADB 键盘的电源键通过 PSW 引脚直接拉低实现,而非通过数据总线传输。iMate 的固件检测到 PSW 信号变化后,通过 USB 远程唤醒机制或专用电源按钮信号触发主机开机。这种设计需要额外的硬件电路支持,也是隐藏电池存在的根本原因。
硬件握手时序与噪声耦合
iMate 的故障模式揭示了硬件握手时序的脆弱性。当 CR1225 电池耗尽或移除时,USB D- 信号线出现随机低电平毛刺,触发主机执行总线复位。逻辑分析仪捕获显示,这些毛脉冲宽度远小于 USB 规范要求的 10 ms 复位持续时间,本质上属于电气噪声而非有效信号。
根本原因在于 PSW 信号路径的浮空设计。电池通过 2.2 MΩ 上拉电阻维持 PSW 引脚的高电平状态。电池耗尽后,该节点失去低阻抗泄放路径,ADB 数据信号通过寄生电容耦合到 PSW 线路,形成共模噪声。示波器测量显示,PSW 引脚噪声幅度可达 5V 以上,足以触发后续 FET 开关电路。
iMate 的电源转换电路采用三级 FET 级联:Q1(P 沟道)响应 PSW 下拉,Q2(P 沟道)作为 USB 电源检测开关,Q3(N 沟道)控制 USB D- 信号的下拉。当 PSW 噪声超过 Q2 的栅极阈值(约 -1.2V Vgs)时,Q2 误导通,进而激活 Q3 将 D- 拉低,形成虚假的 USB 复位信号。
修复方案:去耦电容与阻抗优化
修复该故障的最小侵入性方案是在 BATT+ 与地之间并联 100 nF 陶瓷电容。该电容为 PSW 线路提供低阻抗交流泄放路径,抑制噪声耦合。焊接位置可选择 D3 二极管(3 引脚)与电池座焊盘之间,0603 或 0805 封装的贴片电容均可适配。
对于需要电源键功能的用户,应更换 CR1225 电池。CR1220 电池(相同电压,略薄)可作为兼容替代品。若无需电源键功能,移除电池并添加上述去耦电容即可恢复基本键盘功能。
更彻底的修复可考虑在 PSW 线路上增加额外的 RC 滤波(如 10 kΩ 串联电阻 + 100 nF 对地电容),或降低 Q3 栅极下拉电阻阻值(从 2.2 MΩ 降至 100 kΩ 量级),提高噪声容限。
复现 Vintage 兼容层的工程要点
对于希望复刻 iMate 功能或构建现代 ADB-USB 转换器的开发者,以下参数至关重要:
时序参数:ADB 总线时钟约为 100 kHz,位周期 100 μs。主机发送命令后需等待设备响应,超时阈值建议设置为 3-5 ms。USB 低速设备的帧周期为 1 ms,HID 轮询间隔通常配置为 10 ms。
电气参数:ADB 总线空闲状态为高电平(5V),逻辑低为 0V。PSW 信号需支持至少 100 mA 的瞬时拉低电流以兼容 vintage Macintosh 的 100 kΩ 上拉电路。USB D- 信号的下拉电阻应确保在电源键激活时产生有效的 SE0 状态(单端零)。
固件实现:开源社区 TMK 固件提供了成熟的 ADB 协议栈实现,支持键盘扫描码转换、鼠标移动 / 按钮事件处理,以及可配置的键位映射(如 Command/Option 与 Alt/Win 互换)。基于 STM32 或 RP2040 的现代实现可完全替代 iMate 的专用 MCU 方案。
结论
Griffin iMate 的设计反映了 1990 年代末外设过渡期的工程权衡:在缺乏 USB 远程唤醒标准的早期实现中,通过独立电源维持电源键功能是一种务实的选择,但电池寿命与噪声抑制的权衡留下了隐患。逆向工程揭示了 ADB 到 USB 协议转换的核心机制 ——HID 报告封装、PSW 信号转换电路,以及关键的噪声耦合路径。
对于维护 vintage Apple 外设的用户,100 nF 去耦电容是成本最低的修复方案。对于希望构建现代兼容层的开发者,理解 iMate 的时序参数与电路拓扑,有助于避免重蹈其设计缺陷,构建更可靠的 ADB-USB 转换方案。
参考来源
- Project Gus: Mysteries of the Griffin iMate (2023)
- Deskthority Wiki: Griffin iMate 技术文档
- TMK Firmware: Apple Desktop Bus 协议实现指南
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。