LG 27UL650-W 误刷后的 SPI Flash 救砖记录

本文记录一次 LG 27UL650-W 显示器被误写 SPI Flash 后的恢复过程。
为避免泄露个人信息,文中的设备序列号和来源固件中的原序列号均已脱敏,分别写作 <DEVICE_SN_REDACTED><SOURCE_SN_REDACTED>。本文不附带原始固件文件,也不提供绕过下载限制的方法,仅记录维修思路、校验方法和本地修改工具的使用方式。

1. 故障起因

最初的目标是调试另一块 Realtek 显示器板,通过 RTD Customer Tool 使用 GFXI2C 方式下载固件。这个方式并不是普通串口或 USB 烧录,而是通过显卡输出口的 DDC/I²C 通道访问显示器里的 Realtek scaler,再由 scaler 操作外部 SPI Flash。

问题出在操作电脑同时连接了主显示器。GFXI2C 可能枚举并命中了主显示器的 DDC/I²C 通道,结果烧录操作没有写到目标板,而是写到了主显示器 LG 27UL650-W。

随后主显示器黑屏,OSD 无法显示,表现为固件损坏或 SPI Flash 被擦空。

2. 目标硬件确认

拆机后确认硬件如下:

Model: LG 27UL650-W
Main Board: EAX68943801 (1.1) / LM9DB
CPU / Scaler: RTD2595LT
Panel: LM270WR3(SS)(B1)
SPI Flash: GD25Q32, IC202

这一步非常关键。LG 同系列外观相近,27UL500、27UL550、27UL600、27UL650、27UL850 等型号可能共用相似平台,但主板版本、面板型号、背光参数、EDID、HDCP 和 NVRAM 配置并不一定相同。恢复固件时不能只看尺寸或外观,至少要匹配主板、scaler、panel 和 SPI Flash 容量。

3. 初步读取与判断

使用 H7-TOOL 连接 IC202 的 GD25Q32 后,先读取 JEDEC ID:

core_id = 0x00C84016

该 ID 可拆解为:

C8 = GigaDevice
40 = SPI NOR 系列
16 = 32Mbit 容量代码

因此目标芯片确认为 32Mbit,也就是 4MB 的 GD25Q32。

随后从 0x00000000 读取完整 4096KB,结果整个文件都是 FF。由于 JEDEC ID 正常,说明接线、供电和 SPI 通信基本有效;全 FF 更像是 Flash 已经被擦除,而不是单纯读不到芯片。

SPI NOR Flash 被擦除后的状态就是全 FF。这也符合 ISP 流程中“先擦除,再写入或校验”的特点。如果烧录流程中途因固件不匹配、目标型号错误、通信中断或配置错误而失败,就可能留下全空 Flash。

4. 固件来源与匹配

可用恢复固件来自维修资料库中的 LG 27UL650-W 条目,条目描述与本机硬件一致:

LG 27UL650-W
Main Board: EAX68943801 (1.1) / LM9DB
CPU: RTD2595LT
Panel: LM270WR3(SS)(B1)
Flash: GD25Q32_IC202

下载包中包含:

GD25Q32_IC202.BIN
состав.txt

其中 GD25Q32_IC202.BIN 解压后大小为:

4,194,304 bytes
0x400000
4096KB

这正好对应 GD25Q32 的完整容量。文件内部不是全空,包含主程序区、EDID 区、配置区和尾部 NVRAM 镜像区。静态检查中也能看到 LG 显示器相关 EDID 名称,例如 LG HDR 4KLG Ultra HD,厂商码为 GSM

需要特别说明:EEVblog 上有 LG 27UL500-W 的相关修复帖和附件,但该帖中的 27UL500-W dump 不应直接写入本机。已有案例显示,相近型号固件写入后可能出现背光、蜂鸣或供电恢复但无画面的状态。对 27UL650-W 来说,panel 参数必须匹配 LM270WR3(SS)(B1)

4.1 参考资料与源地址

以下链接只作为维修过程中的信息来源和交叉验证入口,不包含本文修复后的固件,也不提供绕过站点权限、积分或下载限制的方法。

用途源地址备注
27UL650-W 匹配固件条目https://remont-aud.net/dump/mnt/lg_27ul650_w_shassi_main_board_eax68943801_1_1_lm9db/130-1-0-157114条目描述匹配 EAX68943801 (1.1) / LM9DBRTD2595LTLM270WR3(SS)(B1)GD25Q32_IC202。实际下载需遵守站点规则。
LG 官方支持页https://www.lg.com/us/support/product/lg-27UL650-W.AUS用于确认产品型号、官方手册和驱动入口;该页面不提供 SPI Flash dump。
EEVblog 相关维修讨论https://www.eevblog.com/forum/repair/lg-27ul500w-lcd-monitor-spi-flash-corruppted/用于参考 Realtek/LG 显示器 SPI Flash 损坏、DDC/I²C 访问和相近型号不宜混刷等讨论。该帖主要是 27UL500W,不是本文固件来源。
RTD266xFlash 工具仓库https://github.com/floppes/RTD266xFlash用于参考 Realtek 系列经 DDC/I²C 读写外部 SPI Flash 的脚本思路。本文最终实际烧录使用 H7-TOOL。
H7-TOOL 相关说明https://www.cnblogs.com/armfly/p/14821021.html用于参考 H7-TOOL 脱机烧录、配置文件和 SPI Flash 烧录流程。具体芯片接线仍以目标 Flash datasheet 和实测为准。

5. H7-TOOL 烧录注意事项

首次制作 H7-TOOL 烧录配置时出现过一个典型错误:软件脚本显示目标为 BY25Q05,而实际读到的 ID 是 0x00C84016。由于 BY25Q05 容量远小于 4MB,烧录时会报:

数据文件过大
编程失败

正确做法是重新生成烧录配置,目标器件选择 32Mbit / 4MB 的 SPI NOR,例如:

GigaDevice GD25Q32
或兼容 25Q32

不要选择:

25Q05
25Q10
25Q20
25Q40
25Q80

推荐流程:

1. 读 ID,确认 C8 40 16
2. 擦除 Flash
3. 空片检查
4. 写入完整 4MB BIN
5. Verify 校验
6. 再读回完整 4MB
7. 与写入 BIN 做二进制比较

6. 序列号与运行时间修复

来源固件来自另一台设备,因此尾部 NVRAM 中包含来源设备的序列号和运行时间。为了恢复为本机信息,需要修改两份镜像配置块。

本次定位到的关键区域如下:

配置块 1:0x003FC800 - 0x003FC88F
配置块 2:0x003FF800 - 0x003FF88F

运行时间字段:

0x003FC838 - 0x003FC839
0x003FF838 - 0x003FF839

字段格式为 16 位大端整数,单位为小时。比如 0 小时写作:

00 00

序列号字段:

0x003FC85B - 0x003FC866
0x003FF85B - 0x003FF866

字段格式为 12 字节 ASCII 字符串。本文不显示实际序列号,修复时将 <SOURCE_SN_REDACTED> 替换为 <DEVICE_SN_REDACTED>

每个配置块末尾有 XOR 校验:

checksum offset: block_base + 0x8E
marker offset:   block_base + 0x8F
marker value:    0x74

校验算法:

checksum = data[base] ^ data[base + 1] ^ ... ^ data[base + 0x8D]
data[base + 0x8E] = checksum
data[base + 0x8F] = 0x74

其中:

base = 0x003FC800
base = 0x003FF800

只改序列号或运行时间而不重算校验,可能导致显示器忽略该配置块,或启动后被固件用备份块覆盖。

7. 开机后的配置变化

刷入修复后的固件后,显示器可以正常开机。进入 OSD 修改语言和用户配置,再读回完整 4MB 文件进行对比,发现主程序区、EDID 区、序列号和运行时间没有异常变化,变化集中在尾部配置区:

0x003FC000 - 0x003FC0FF
0x003FF000 - 0x003FF0FF
0x003FF100 - 0x003FF4FF
0x003FC800 - 0x003FC88F
0x003FF800 - 0x003FF88F
0x003FF890 - 0x003FF91F

这些区域应属于用户设置、NVRAM 镜像、历史记录或 wear-leveling 轮换块。显示器运行后自动写入这些区域是正常现象。

最终读回文件建议作为当前机器的工作备份保存,文件名中不要包含真实序列号。

8. 本地网页修改工具

为了后续安全修改序列号和运行时间,我制作了一个离线 HTML 工具。它不会内置任何固件,也不会显示来源固件中的原序列号。使用时需要本地选择合法获得的 4MB GD25Q32_IC202.BIN,输入新的 12 位序列号和运行时间,然后在浏览器内完成修改、校验重算和 MD5 计算。

工具会修改:

0x003FC838 - 0x003FC839:运行时间
0x003FF838 - 0x003FF839:运行时间镜像
0x003FC85B - 0x003FC866:序列号
0x003FF85B - 0x003FF866:序列号镜像
0x003FC88E:配置块校验
0x003FF88E:配置块校验镜像

工具不会上传文件到服务器,所有处理都在本地浏览器完成。

工具链接

9. 经验总结

这次事故最核心的教训是:使用 GFXI2C 或任何通过显卡 DDC/I²C 的 ISP 工具时,电脑上不要同时连接无关显示器。GFXI2C 的目标不是“当前看起来正在调试的板子”,而是显卡输出链路上能响应 DDC/I²C 的设备。

后续操作建议:

1. 使用 GFXI2C 前断开所有无关显示器
2. 尽量使用笔记本内屏、远程桌面或 USB 显示器作为操作界面
3. 烧录前先读 ID 和读取原始 Flash 备份
4. 不确认型号时不要点击 Erase / Run / Auto
5. 对显示器 SPI Flash,优先保存完整 4MB dump
6. 恢复后再读回一次,作为最终工作备份

这次 27UL650-W 能恢复,关键在于确认了硬件版本,找到了匹配的 GD25Q32 完整 dump,并正确修复了尾部 NVRAM 中的序列号、运行时间和校验字节。