«

SM2259XT2 + Toshiba BiCS3 开卡记录

myluzh 发布于 阅读:17 NOTES


0x00 基本信息

这次开的是一块 SM2259XT2 + Toshiba BiCS3 SATA 盘。颗粒来自金士顿 SUV500M8/480G,最后贴满 4 颗,MPTool 自动识别 480GB。

项目
主控 SM2259XT2
原始开卡包 SM2259XT2_FBiCS3_PKGY0226A_FWY0225A0_MOD
固定后使用包 SM2259XT2_FBiCS3_98_3C_TH58TFT0T23BA8C_fixed
固定包路径 /Volumes/DataStore/Archive/量产软件/codex/SM2259XT2_FBiCS3_98_3C_TH58TFT0T23BA8C_fixed
原盘 Kingston SUV500M8/480G
最终贴片 4 颗
最终容量 480GB

FlashInfo 查到的颗粒信息:

项目
闪存型号 FB12808UCT1-61
闪存品牌 Toshiba / 东芝
闪存容量 128GB
CE 数量 4
Die 数量 4
闪存 ID 983C98B376F2
闪存单元 TLC
闪存制程 BiCS3
闪存类型 NAND
封装类型 BG132
工作电压 VCC: 3.3VVCCQ: 3.3V/1.8V
工作模式 同步模式

上板前检查:因为这个颗粒 VCCQ 可以走 1.8V,我焊颗粒前先空板测了 BGA 焊盘 VCCQ 对地,确认板子实际给的是 1.8V,再继续上电和贴颗粒。这个步骤不能省,VCCQ 走错很容易直接把颗粒或主控搞出问题。

这次主要踩坑:

  1. Flash Select 里找不到 98,3C,98,B3,76,F2,需要把默认配置固定到正确 NAND。
  2. 2 颗时容量要手动设 240GB,最终方案是贴满 4 颗自动 480GB。
  3. TOG 跳线拿掉会报 GPIO CHECK FAIL 18/(3C.01)
  4. EnBypassTranADJ=1 能绕过开卡,但插拔几次不认盘,稍微有点写入负载也会掉盘,最后还是要降 Flash Clock。
  5. Flash 频率太高后可能直接不认设备,需要短接 ROM 点重新进 ROM/ISP 模式,工具才能重新搜到盘。

0x01 固定 Flash ID

Flash Select 选不到 98,3C,98,B3,76,F2

现象:MPTool 的 Flash 选择列表里找不到 98,3C,98,B3,76,F2setting.set 也载入不了,只能载入 .ini

判断:不是包不支持,而是默认配置没选中。这个包的 FlashDB/2259/Flash.SET 里本来就有目标 ID。

strings -a "FlashDB/2259/Flash.SET" | rg -i "98,3C,98,B3,76,F2|TH58TFT0T23BA8C"

能看到:

Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)=98,3C,98,B3,76,F2,...

最后固定到这个条目:

Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)

这里要分清楚:Flash.SET 是数据库,数据库里有只代表支持;Config/Default.inidefault.iniLinux File/FlashID.binDriveSetting/MPINFO_Final.binLinux File/MPINFO.bin 才决定工具启动后默认选中哪颗 NAND。

ini 改了什么

Config/Default.ini

核心是把 FLASHNAMEFLASHDBINFO 都改成 TH58TFT0T23BA8C 那一行。不能只改名字,不改数据库参数。

[TEST]
FLASHNAME=Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)
FLASHDBINFO=98,3C,98,B3,76,F2,4,16,1952,012288,00768,02956,02732,01000,02,001,04,2,52,00,0,99,7F,01,0303,A2,00,00,00,00,25,10,00,03,00,09,11,8F,00,120,2,0,02,04,06,FF,01,05,3,05,0001,0001,7F,01,01,00,00,00,00,BC,BC,00,00,0000,00,00,00,00,00,00,00,
FLASHDBTAG=SM2259XT2-DataBase-X0805

FLASHDBINFO 直接从 Flash.SET 里复制完整行,别自己猜字段。

default.ini

这个包默认只看到一个 default.ini,所以根目录 default.ini 也要指向同一个 Flash:

FLASHNAME=Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)

另外留了一个可手动载入的配置:

Default_98_3C_TH58TFT0T23BA8C.ini

内容和 Config/Default.ini 保持同一套 NAND,避免以后再猜哪个 ini 是正确版本。

FlashID.bin 改了什么

路径:

Linux File/FlashID.bin

这个文件不是纯文本,是当前激活 Flash ID 的二进制表。我这里文件大小是 2048 字节,开头是 98 3C 98 B3 76 F2 08 0E 循环。

xxd -g 1 -l 64 "Linux File/FlashID.bin"

正确输出:

00000000: 98 3c 98 b3 76 f2 08 0e 98 3c 98 b3 76 f2 08 0e
00000010: 98 3c 98 b3 76 f2 08 0e 98 3c 98 b3 76 f2 08 0e
00000020: 98 3c 98 b3 76 f2 08 0e 98 3c 98 b3 76 f2 08 0e
00000030: 98 3c 98 b3 76 f2 08 0e 98 3c 98 b3 76 f2 08 0e

注意:不是只写 6 字节 98 3C 98 B3 76 F2。这个包里是一组 8 字节:

98 3C 98 B3 76 F2 08 0E

前 6 字节是 Flash ID,后面 08 0E 是这个表项里的跟随字节。只覆盖 6 字节会破坏表结构。

MPINFO 改了什么

DriveSetting/MPINFO_Final.bin

路径:

DriveSetting/MPINFO_Final.bin

这个文件是 8192 字节,里面存的是当前选中的 NAND 家族和 Flash 名称,不是 Flash ID。验证:

strings -a "DriveSetting/MPINFO_Final.bin" | rg "Toshiba|TH58|bics"

正确输出:

Toshiba Bics
Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)

当前文件里观察到的位置:

0x70  Toshiba Bics
0xC0  Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)

Linux File/MPINFO.bin

路径:

Linux File/MPINFO.bin

这个文件同样是 8192 字节,也要能看到:

Toshiba Bics
Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)

验证:

strings -a "Linux File/MPINFO.bin" | rg "Toshiba|TH58|bics"

Firmware/2259/MPINFO.bin

这个文件之前容易被我写混。当前这个包里它也是 8192 字节,但基本是 MPINFO 头加 0x00 填充,看不到 TH58TFT0T23BA8C 字符串。

xxd -g 1 -l 64 "Firmware/2259/MPINFO.bin"

输出类似:

00000000: 4d 50 49 4e 46 4f 00 00 00 00 00 00 00 00 00 00  MPINFO..........
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

结论:判断是否选中 Flash,不看这个文件;看 FlashID.binDriveSetting/MPINFO_Final.binLinux File/MPINFO.bin

一次性核验

改完后直接跑这几条:

# 数据库里必须有目标 Flash ID
strings -a "FlashDB/2259/Flash.SET" | rg -i "98,3C,98,B3,76,F2|TH58TFT0T23BA8C"

# 当前激活 FlashID.bin 必须指向目标 ID
xxd -g 1 -l 32 "Linux File/FlashID.bin"

# MPINFO 必须指向目标 NAND 名称
strings -a "DriveSetting/MPINFO_Final.bin" "Linux File/MPINFO.bin" | \
  rg "Toshiba|TH58TFT0T23BA8C|bics3"

# ini 里必须是同一颗 NAND
rg -n "^(FLASHNAME|FLASHDBINFO)=" "Config/Default.ini" "default.ini" "Default_98_3C_TH58TFT0T23BA8C.ini"

我这里最后是:

flash_set_exact: yes
active_flashid_exact: yes
active_flashid: Linux File/FlashID.bin: 98 3C 98 B3 76 F2
mpinfo: DriveSetting/MPINFO_Final.bin: Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)
mpinfo: Linux File/MPINFO.bin: Toshiba,256Gbit,TH58TFT0T23BA8C(bics3)(SM2258XT)
verdict: directly selected

这个状态才算不是“数据库支持但没选中”,而是“当前包默认已经选中”。

0x02 报错解决

it is not isp mode

现象:MPTool 提示:

it is not isp mode

原因:主控没进 ISP / ROM 模式。处理:断电 -> 短接 ISP/ROM/TEST 点 -> 上电 -> 重新 Scan。

补充:这次 Flash 频率设太高以后,盘会直接不认,开卡工具也搜不到设备。这个时候不要一直重开工具,直接短接 ROM 点位强制进 ROM 模式,再让 MPTool 搜设备。开卡优先直连 SATA,USB-SATA 桥接日常读写没问题,不代表能完整透传 ISP / ROM / 厂商命令。

Set Disk Capacity fail (42)/(0D.16)

现象:

Set Disk Capacity fail (42)/(0D.16)

0D.16 = Too much bad block !!,但这次不是先按真坏块处理,更像容量/CE/Die 拓扑和实际贴片不匹配。

2 颗单颗 128GB 时,理论目标是 240GB,需要手动指定容量:

Setting -> Parameter/Edit Config -> Identify -> Disk Capacity
Type: Manual IDEMA
Disk Size: 240GB

如果界面没有 240GB,再用 LBA:

Type: Manual LBA
Manual Capacity: 468862128 sectors

最后我贴满 4 颗,MPTool 自动识别 480GB,不需要再手动指定容量。最终方案就是 4 颗自动 480GB,2 颗 240GB 只是中途排查。

GPIO CHECK FAIL 18/(3C.01)

现象:

GPIO CHECK FAIL 18/(3C.01)

错误含义:

Toggle pin check fail

原因:我把 TOG 跳线拿掉了。Toshiba BiCS3 是 Toggle NAND,这个跳线要恢复。

处理:断电 -> 恢复 TOG 跳线到原来的短接状态 -> 上电 Scan / Start。这个不是软件包问题。

TranADJ fail 27/(0C.08)

现象:

TranADJ fail 27/(0C.08)

TranADJ 是闪存信号/时序训练,主控会在当前 Flash Clock 下找 DQS 和数据采样窗口。焊接、走线、供电、颗粒体质或频率有问题,都会训练失败。

一开始在 UFD_MP/Setting.set 里加了:

EnBypassTranADJ=1

这个参数确实可以让流程继续跑,但后面插拔几次出现不认盘,稍微有点写入负载也会掉盘。结论:EnBypassTranADJ=1 只是跳过检查,不会修复信号窗口,不能当最终方案;这块盘应该先降 Flash Clock。

BiCS3 / Toggle 2.0 常见标准档是 400MT/s,也就是 Flash Clock 200MHz DDR。但这是标准档,不等于这块重焊 DIY 盘应该直接跑 200MHz。

这个包里 MPTool 的频率字符串能推到下面这个关系:

FLASHCLOCK=11 ~= 100MHz  DDR-200
FLASHCLOCK=14 ~= 125MHz  DDR-250
FLASHCLOCK=16 ~= 150MHz  DDR-300
FLASHCLOCK=20 ~= 200MHz  DDR-400
FLASHCLOCK=22 ~= 225MHz  DDR-450

当前建议:先跑 150MHz;150MHz 不稳就降 125MHz;125MHz 还不稳就降 100MHz。只有不绕过 TranADJ、全盘写入校验 0 错误、冷热插拔不掉盘、SMART 关键项无异常增长,才考虑回试 175MHz 或 200MHz。

CPU Clock 不用机械按 Flash Clock 的两倍设置。CPU = Flash x 2 可以当经验值,但不是硬规则。我这块盘更应该先解决 Flash I/O 稳定性,不是先追 CPU 频率。

参考组合:

Flash 150MHz:CPU 350MHz 或 400MHz
Flash 175MHz:CPU 400MHz 更有余量
Flash 200MHz:CPU 400/425MHz 才合理,但这块盘不建议现在回 200MHz

0x03 后续拷机

MPTool 显示 Pass 不代表稳定。后面至少要跑:全盘写入 + 读回校验、冷热插拔、大文件连续写入、SMART 复查。

重点看:

校验必须 0 错误
跑的时候不能掉盘
重新上电不能变 ROM / ISP
容量不能变 0
05 / C7 / 坏块相关 SMART 项不能异常增长

如果 150MHz 还是插拔后不认盘,或者一写入就掉盘,就别继续纠结开卡参数,优先查颗粒虚焊、CE/CH 线、TOG 跳线、供电、主控散热、USB-SATA 桥接稳定性。

0x04 参考

0x05 总结

这次核心结论:Flash Select 找不到不代表包不支持,要看 Flash.SETFlashID.binMPINFO 当前到底指向谁。Linux File/FlashID.bin 不是只写 98 3C 98 B3 76 F2,而是 98 3C 98 B3 76 F2 08 0E 循环表;DriveSetting/MPINFO_Final.binLinux File/MPINFO.bin 要能看到 TH58TFT0T23BA8CFirmware/2259/MPINFO.bin 在这个包里只是 MPINFO 头加空数据,不拿它判断 Flash 是否选中。

最后贴满 4 颗自动 480GB。EnBypassTranADJ=1 只能临时绕过,实测插拔和写入负载都不稳,当前更合理的是先把 Flash Clock 降到 150MHz 跑完整拷机。

ssd 开卡 量产 smi sm2259xt2 nand bga152 BiCS3


正文到此结束
版权声明:若无特殊注明,本文皆为 Myluzh Blog 原创,转载请保留文章出处。
文章内容:https://itho.cn/notes/614.html
文章标题:《SM2259XT2 + Toshiba BiCS3 开卡记录