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 4K 和 LG 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) / LM9DB、RTD2595LT、LM270WR3(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 中的序列号、运行时间和校验字节。

参与讨论
(Participate in the discussion)
参与讨论