三星 PM9A1 固态硬盘固件翻车拯救记
一次「专业人士都说没救了」的 NVMe SSD 起死回生实录
前情提要:一个悲伤的故事
事情是这样的。
某天,我决定给我的 1TB 三星 PM9A1 升级一下固件,毕竟官方说新固件修复了0E问题,防止固态报废。
然后我就手贱选错了固件包。
1TB 的盘,刷了 2TB 的固件。
结果可想而知——硬盘当场去世,BIOS 里都看不到了。整个人直接傻掉。
于是我找到了「专业数据恢复人士」,对方研究了半天,给出了专业意见:
"这盘没救了,只能搬颗粒。"
搬颗粒的意思就是把 NAND 闪存芯片从原来的 PCB 上拆下来,焊接到 SATA 转接板上,然后用开卡工具重新初始化成一块 SATA 盘来读取数据。这操作不仅丢失所有数据,而且相当于彻底放弃原来的 NVMe 主控,属于「破釜沉舟」级别的掉价方案。
但是!作为一个不到黄河心不死的技术人员,我决定死马当活马医,试试能不能通过硬件方式让这块砖头复活。
关键突破:进入工厂 ROM 模式
经过一番研究(疯狂 Google + 翻各种数据恢复论坛),我发现三星 NVMe SSD 有一个隐藏的 ROM 恢复模式。通过短接 PCB 上的特定测试点,可以让主控芯片跳过正常启动流程,进入一个最小化的工厂模式。
测试点位置
PM9A1 使用的是三星 Elpis (S4LV003) 主控。测试点通常位于主控芯片附近,是两个很小的焊盘。
⚠️ 警告:具体测试点位置需要根据你的 PCB 版本确定。建议先找高清拆解图对照,用万用表确认连通性。短接错误的点可能造成永久性损坏!
操作步骤
- 将 SSD 直接插在主板的 M.2 槽上(不要用 USB 转接盒,很多转接盒不支持固件更新等底层 NVMe 命令)
- 断电状态下,用镊子短接测试点
- 保持短接,接通电源
- 等待约 2-3 秒后松开镊子
- 此时系统应该能识别到一个特殊的设备
成功进入 ROM 模式后,用 nvme list 查看:
user@debian:~$ sudo nvme list
Node Generic SN Model Namespace Usage Format FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 /dev/ng0n1 SEC00000000000000001 SAMSUNG_NVMe_ROM 1 0.00 B / 1.07 GB 4 KiB + 0 B AELROM03
看到没?关键信息:
- Model:
SAMSUNG_NVMe_ROM— 这就是工厂 ROM 模式的标志! - FW Rev:
AELROM03— ROM 引导程序版本 - 容量: 只显示 1.07 GB — 这是正常的,ROM 模式下不会加载完整固件
这说明主控芯片本身没坏,只是固件区被我搞坏了。有救!
固件恢复:用 NVMe 标准命令重写固件
第一步:确认设备支持固件更新
先看看控制器信息,确认支持固件下载功能:
user@debian:~$ sudo nvme id-ctrl /dev/nvme0 -H | grep -A5 -B5 "Firmware"
关键输出:
oacs : 0x4
[2:2] : 0x1 FW Commit and Download Supported
frmw : 0x16
[4:4] : 0x1 Firmware Activate Without Reset Supported
[3:1] : 0x3 Number of Firmware Slots
[0:0] : 0 Firmware Slot 1 Read/Write
好消息:
FW Commit and Download Supported— 支持固件更新Number of Firmware Slots: 3— 有 3 个固件槽位Firmware Slot 1 Read/Write— 槽位 1 可读写
第二步:查看当前固件状态
user@debian:~$ sudo nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi : 0x1
frs1 : 0x33304d4f524c4541 (AELROM03)
目前只有 ROM 引导固件在运行。
第三步:下载正确的固件
这次一定要选对固件!我下载了 1TB PM9A1 对应的 GXA7801Q 版本固件:
user@debian:~$ sudo nvme fw-download /dev/nvme0 --fw=/home/user/Desktop/GXA7801Q_Noformat.bin
Firmware download success
成功!固件已经传输到设备缓冲区。
第四步:提交固件到槽位
这里有个坑。我一开始尝试直接激活:
user@debian:~$ sudo nvme fw-commit /dev/nvme0 --slot=0 --action=1
fw-commit: Interrupted system call
失败了。换个姿势,先把固件写入槽位 2,不立即激活:
user@debian:~$ sudo nvme fw-commit /dev/nvme0 --slot=2 --action=0
Success committing firmware action:0 slot:2
Multiple Update Detected (MUD) Value: 0
参数说明:
--slot=2:写入固件槽位 2--action=0:仅下载固件到指定槽位,不激活
第五步:验证固件写入
user@debian:~$ sudo nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi : 0x1
frs1 : 0x5131303837415847 (GXA7801Q)
漂亮!固件已经变成 GXA7801Q 了!
再看看硬盘状态:
user@debian:~$ sudo nvme list
Node Generic SN Model Namespace Usage Format FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 /dev/ng0n1 SEC00000000000000001 SAMSUNG_NVMe_ROM 1 76.38 GB / 1.02 TB 512 B + 0 B AELROM03
虽然 Model 还显示 ROM 模式,但容量已经恢复正常 1.02 TB 了!这说明新固件已经在工作。
第六步:激活新固件(可选)
理论上应该用 --action=1 激活固件,但是:
user@debian:~$ sudo nvme fw-commit /dev/nvme0 --slot=2 --action=1
NVMe status: Invalid Firmware Image: The firmware image specified for activation is invalid and not loaded by the controller(0x107)
报错了。但没关系!重启电脑后,BIOS 已经能正常识别硬盘了,固件版本显示正确。数据完好无损!
总结:从砖到正常只需要几条命令
整个恢复过程的核心命令其实就三条:
# 1. 下载固件到设备
sudo nvme fw-download /dev/nvme0 --fw=/path/to/correct_firmware.bin
# 2. 提交固件到槽位(不激活)
sudo nvme fw-commit /dev/nvme0 --slot=2 --action=0
# 3. 重启让新固件生效
reboot
经验教训
- 固件升级前一定要核对型号和容量,不要像我一样手贱
- 三星 NVMe SSD 的 ROM 模式是救命稻草,短接测试点可以进入
- Linux 的 nvme-cli 工具包非常强大,可以做很多底层操作
- 专业人士说没救的时候,不妨自己试试(当然要做好心理准备)
致谢
- 感谢 nvme-cli 项目的开发者们
- 感谢各种数据恢复论坛的大神们分享的技术资料
- 感谢这块 PM9A1 没有真的变成一块砖
本文记录于 2025 年 6 月,希望能帮到遇到类似问题的朋友。如果你的 PM9A1 也翻车了,不要急着放弃,说不定也能救回来!
版权属于:一名宅。
本文链接:https://zhaiyiming.com/archives/pm9a1-firmware-fix.html
转载时须注明出处及本声明