这几天寒假快结束了,把存货的SSD都拿出来折腾了一下,发现有一块SM2258XT+BGA316的H27Q2TDLQM3R-BCF盘迟迟开不出来,恰巧前几天找到2258XT参数定义,于是就拿它先开个刀,试试操作一下Flash.set的参数吧。
实物图
读出的CE表
直接进入开卡工具,工具自动识别闪存失败,提示“请连接设备(Warning!Please Connect Your Device or Check The Setting)”,如下图所示。原因是flashDB/2258/flash.set中读不到该闪存的ID。
提示找不到设备,实际上连接状态是正常的,只是工具不支持这颗闪存罢了。
通过FlashMaster查询,得知该闪存的各项参数。制程为HY16,4CE, 4CH, 内部封装16Die。于是决定使用版本号为SM2258XT_HY16_Q0630A_FWQ0630A的开卡工具的HY16固件,通过修改相同制程颗粒参数的方法添加支持。
以文本方式打开flashDB/2258/flash.set,发现其中有5颗海力士的颗粒,逐个查询比对,发现H27Q1T8QEM6R-BCF,容量为1Tbit的颗粒数据与我们手头的H27Q2TDLQM3R-BCF最为接近,区别只在于Die数量、每CE所对应Die的数量与ID。
现有的颗粒参数与需要适配的参数对比
flash.set中有若干组10进制与16进制的数据,每一组数据都对应着一个型号的闪存颗粒。一组中不同的数据对应着该闪存芯片的不同参数。对于SM2258XT而言,已经有一套固定的定义可供查询了。稍后我会将定义附在文后。
通过查询定义,我们可以得知我们需要修改的为第0~6位(Flash ID(H)--闪存ID,十六进制)、第16位(Internal Chip Number(D)--每CE包含的Die数量,十进制)与第17位(CE Number(D)--片内CE总数量,十进制)。
首先修改Flash ID,将开卡工具读出的前6字节闪存ID一对一替换前6位即可。
我们的颗粒共4CE,16Die,意思即为共4个片选脚位,这4个片选控制总的16片核心(Die),因此不难推断出,每个CE包含4个Die。于是我们将第16位由原来的"2"改为计算出的"4".
第17位为单颗芯片内CE总数,这里我们直接将查询到的"4"填入,或者直接算一下,主控读到了4CE,再把4填进去,二者都是一样的。
这一步我们已经把flash.set修改完成了,再把容量与芯片型号修改一下,即可在flash.set的最后添加我们修改好的参数了。
修改好的参数
A41=Hynix,2Tbit,H27Q2TDLQM3R-BCF
Hynix,2Tbit,H27Q2TDLQM3R-BCF=AD,3E,1A,A3,63,25,2,16,2048,04096,0258,04216,04012,02000,02,04,04,4,42,16,0,99,7E,09,0000,A2,00,00,25,10,25,10,00,34,00,09,01,8F,00,60,1,0,02,04,06,08,03,00,2,05,10,20,7E,09,01,00,00,00,00,AA,AA,00,00,00DC,
flash.set修改完成,保存后,在开卡工具内就能自动识别到我们添加的芯片型号了,但现在仍然不能开卡,需要为它指定闪存配置。如果此时扫描闪存或尝试开卡,将会出现下图中的错误:
未添加FW Tag的报错(Can't find corresponding FW TAG,maybe FW doesn't support this flash now)
指定闪存配置需要在Firmware\2258\FWTag.SET中修改。
以文本方式打开FWTag.SET,仿照现有的配置,按照如下格式添加新配置:
Vender,Capacity,Chip Model=Process
制造商,容量,芯片型号=制程
此处制造商、容量与芯片型号均与在flash.set中加入的一致,例如前文中我添加的芯片,这里就为
Hynix,2Tbit,H27Q2TDLQM3R-BCF=HY16
添加位置任意,我的建议是写在其他相同制造商的芯片最后,这样可以更方便将来阅读。修改完请保存
修改前与修改后的FWTag.SET
在修改完这些文件后,即可在工具中填入自己需要的开卡设置进行开卡了。一开始我没有修改CE数,导致只能开出120G,各位读者如果遇到类似情况请再次检查自己的参数是否有不正确的情况。
成功开卡并分区,Smart全新。Pass! Firmware:Q0630A
附录:SM2258XT闪存参数定义
Manufacturer,Capacity,Part Number=ID0(H),ID1(H),ID2(H),ID3(H),ID4(H),ID5(H),Flash Type(D),Page Size(D),Spare Byte(D),Block Size(D),Page Number(D),Block Number(D),Minimum Block Number(D),Die Address(H),Plane Number(D),Internal Chip Number(D),CE Number(D),Channel(D),Flash Interface(H),Process(D),Sub-Process(H),Strong Weak Table Select(D),Flash CMD Option1(H),Flash CMD Option2(H),Table Setting(H),SLC CMD Ptn1(H),SLC CMD Ptn2(H),Reliable SLC Mode Option(H),SDR tWC(D),SDR tRC(D),DDR tWC(D),DDR tRC(D),CMD Set Table(D),Read Retry Table(D),SLC Read Retry Table(D),Initial Invalid Block Page(H),Initial Invalid Block Column(H),Initial Invalid Block Pattern(H),Initial Invalid Extend Option(H),ECC Bit(D),VccQ(D),Vcc(D),IO Driving 1(H),IO Driving 2(H),IO Driving 3(H),IO Driving 4(H),Endurance 1(D),Endurance 2(D),Endurance 3(D),Setting Status(H),Flash Status 1(H),Flash Status 2(H),SM2258XT Flash CMD Option 1(H),SM2258XT Flash CMD Option 2(H),SM2258XT Flash CMD Option 3(H),SM2258XT 25inch_Driving1_33V(H),SM2258XT 25inch_Driving2_33V(H),SM2258XT mSATA_Driving1_33V(H),SM2258XT mSATA_Driving2_33V(H),SM2258XT 25inch_Driving1_18V(H),SM2258XT 25inch_Driving2_18V(H),SM2258XT mSATA_Driving1_18V(H),SM2258XT mSATA_Driving2_18V(H),SM2258XT SLC_Block(H),SM2258XT ODT Option(H),SM2258XT Flash CMD Option 4(H),SM2258XT Flash Interface Speed(H),SM2258XT SLC Endurance 1(H),SM2258XT SLC Endurance 2(H),SM2258XT SLC Endurance 3(H),SM2258XT Flash Output Driving(H),