Miele 家电作为高端家用设备,其内部诊断系统高度集成,但专有的串行协议限制了用户自主维修和监控。FreeMDU 项目通过逆向工程,提供开源工具来解码这些协议,实现实时诊断、故障日志记录以及固件提取。这种方法不仅降低了维修门槛,还为智能家居集成打开了新路径,尤其适用于 USB 接口的低成本实现。
FreeMDU 的核心在于对 Miele 光学红外诊断接口的逆向。该接口隐藏在前面板指示灯后,使用 IrDA 标准进行半双工通信。初始波特率为 2400 baud(8 数据位、偶校验、1 停止位),握手后切换至 9600 baud。协议基于请求 - 响应模式,所有消息为 5 字节或 1 字节,包含命令字节、两个参数字节、响应长度字节和 8 位校验和(前字节和模 255 取反)。例如,命令 11 用于初始握手,响应包含软件 ID(如 419 表示 EDPW 206 板)。解锁诊断模式需特定序列:先发 11 命令确认连接,然后发 20 ee b4 00 c2 解锁,之后才能访问命令 30(读内存)、31(读 EEPROM)和 32(写操作)。这些细节源于对 Mitsubishi M37451 微控制器的分析,该 MCU 运行在单芯片模式下,固件嵌入 mask ROM 中。通过逻辑分析仪捕获 SYNC 信号,逆向者泄露了解锁密钥,避免了暴力破解。
证据显示,这种协议解码高度可靠。在实际测试中,连接 USB-UART 适配器至 MCU UART 引脚(TX/RX),模拟光学接口,即可读取设备状态。博客中记录的 EDPW 206 板实验证明,命令 31 可直接 dump EEPROM 数据,用于恢复洗涤程序配置和运行小时日志。例如,EEPROM 前 42 字节存储程序阶段、运行小时和校验和,清洗后可用于故障诊断。同样,命令 30 读取 RAM 和 SFR 区域,揭示传感器状态如水位压力(通过 SPX3078D 传感器)和电机 RPM。项目支持的设备包括软件 ID 605 的 G 651 I PLUS-3 洗碗机和 629 的 W 2446 洗衣机,这些通过光学接口位置(如盐指示灯或进水检查灯)确认兼容性。FreeMDU 的 Rust 协议库实现了这些命令的封装,确保跨设备一致性。
要落地实现,首先构建硬件适配器。推荐使用 ESP32 或 STM32 开发板,集成 OSRAM SFH 7250 红外发射 / 接收对,模拟 Miele 光学头。固件需桥接模式:将 IR UART 映射至 USB 串口,波特率动态切换。参数设置:IR 发射电流 20mA,接收增益 10x 以抗干扰;距离控制在 1-2cm,使用吸盘固定对准 PC 接口。风险控制:添加超时机制(握手 5s 内无响应重试),并监控电压(5V MCU 供电,20V UC 继电器)。软件侧,安装 Rust 工具链,克隆 FreeMDU 仓库,编译 TUI 工具:cargo run --bin tui -- --device /dev/ttyUSB0。TUI 界面支持实时监控:显示传感器值(如温度 >90°C 报警)、执行器状态(泵继电器 on/off)和故障码日志(e.g., F21 表示水位异常)。对于故障日志,启用 --log 模式,输出 JSON 格式:{"timestamp": "2025-11-17T10:00:00", "fault": "E21", "sensor": {"pressure": 0.5}},便于集成 ELK 栈分析。
进一步扩展到固件提取,使用命令 32 写解锁后,结合 30 读 ROM 区域(地址 0xa000-0xffff),可 dump 24KB mask ROM。参数:分块读取(每次 256 字节,间隔 100ms 避免过热),校验 ROM 数据完整性(CRC32)。在 Home Assistant 集成中,闪写 Home 固件至适配器(standalone 模式),启用 MQTT:broker 地址 localhost:1883,主题 miele/washer/status。监控点包括:运行小时 >5000h 提醒维护;故障发生率 >5% 触发警报;日志轮转(每日备份至 SD 卡)。回滚策略:若解锁失败,重置 EEPROM 至默认(全 FF),或断电 10s 恢复单芯片模式。
这种开源方法强调安全:项目警告实验性,使用前备份 EEPROM,避免在运行中操作高压部分。相比专有 MDU(需昂贵适配器 EZI 820/821),FreeMDU 成本 <50 USD,支持自定义工具开发,如 Python 脚本自动化诊断:import serial; ser = serial.Serial ('/dev/ttyUSB0', 2400, parity='E'); ser.write (b'\x11\x00\x00\x02\x13')。实际案例中,清洗 20 年老机后,通过清除故障内存(命令 10 锁定后重启),恢复正常运转。
总之,FreeMDU 桥接了专有协议与开源生态,提供可操作的诊断路径。参数如波特率切换和解锁序列是关键落地点,确保实时性和可靠性。
资料来源:
- GitHub 项目:https://github.com/medusalix/FreeMDU
- 逆向博客:https://medusalix.github.io/posts/miele-interface
(正文字数约 950)