自制SSD折腾记录
事情要从今年5月份说起了,其实本想买个SSD来装游戏,但是听说SSD市场水很深,便宜的好多都会用白片,而且现在是TLC,QLC盛行的时代,MLC已经成了稀缺资源,除了三星的pro系列仍然在使用MLC之外,其他厂商的主流产品基本都已经使用TLC了,由于对TLC并没有好感,也为了防止买到白片的产品,再加上我爱折腾的天性,于是打算自己DIY一个SSD,这样主控和芯片都可以自己选择,自由度会比较高,于是,故事就开始了。
一、选主控
其实主控能够选择的范围不多,对于大厂intel,三星来说,都会使用自己设计的主控,主控芯片以及量产工具都只用于自己的产品,并不会对外销售。所以,能选择的主控就只有一些专门做主控的小厂,比如惠荣(SMI),银灿,Marvell(很难买到),SandForce。经过调研发现,SF和Marvell已经基本不做主控了,所以不用想,银灿主要做U盘主控,SSD的不多见。那么,就只剩下SMI了,经过某宝搜索,目前常见的主控就只有2246系列和2258系列。所以,没得挑了。 我只是想弄个仓库盘,SATA3的速度足够使用,而且我已经有一个nvme的970pro来做系统盘了, 然后由于2246的4K性能比较挫,2258相对有更多的改进,所以最终我选2258H。
2258H在某宝可以很方便买到套料,只需要焊上flash颗粒即可。


这样看来就比较简单了,不过我想做一个1TB的SSD,SLC单颗容量比较低,很难有主控支持那么多的SLC芯片使得总容量能达到1TB,所以最终还是选择中规中矩的MLC,另外由于2258H的缓存字典是1:1000的,所以至少需要1G的DRAM,板子上只自带了256M DRAM,所以我还需要另外配2颗512M的DDR3。
二、选flash芯片
惠荣的开卡工具是使用flash参数来完成对固件的配置的,所以在开卡时,需要从flash.set文件里面选择正确的flash型号,经过查阅了一些资料发现,2246系列支持的芯片型号是最多的,2258相对来说虽然号称支持MLC,但更大程度上,flash.set文件里大多是TLC。由于一开始没经验,以为只要是MLC都能支持,flash.set里面虽然没有,但是也许有办法自己添加参数,所以,就瞎买,买了代号是L95B的MT29F1T08CUCCB,单颗4Die封装,4CE,总容量128GB的芯片,这是美光第二代的MLC,不支持DDR,ONFI接口标准:

这里科普一下,其实SSD的flash接口有两种不同的标准,分别是美光和intel阵营的ONFI标准,另一种是东芝、三星为了对抗Intel美光成立的ToggleDDR阵营,这是两种不同的接口时序,SMI的主控是同时支持这两种时序的颗粒的,一般是提供了一个电阻来设置nand flash的接口模式,可以通过焊上或者卸下这一颗电阻来设定所使用的nand flash接口标准。公版的2258H PCB默认是ONFI模式,若要使用ToggleDDR模式,需要焊上R23的电阻。
三、选DRAM芯片
由于需要更换DRAM芯片的容量,所以这里也一并说一下吧,2258H使用的是DDR3内存,最大支持到1066,所以其实1066以上的DDR3内存都可以,电压是标准的1.5V,LPDDR3就不用考虑了。板子上用的DDR3芯片封装是BGA96,但是同样的引脚封装,有不同的body大小,一时也看不出来是哪一个厂商的合适,所以我这里买了3种不同厂商的内存颗粒,到时候看哪种封装体积合适,以及有条件可以分别用这三种芯片测试下不同缓存芯片是否对SSD性能有影响,最后买的3种分别是Nanya,SK,和Samsung:


四、开始折腾
本来以为很简单的,焊上芯片开卡就可以,当然为了防止PCB套料本身是坏的,一般还是先焊上1片试试粒,开卡通过了再全部贴满。因为2258H主控的开卡工具默认是没有L95B的支持的,所以我从2246EN的开卡工具里面直接把参数给复制了过来,想当然觉得应该能用,焊上之后尝试开卡:

然而,悲剧发生了,第一个坑,开卡失败:

看错误是说Flash CE not balance,查了一下资料是说,L06B最少需要4通道才能开卡,所以焊1片显然不够,还需要贴满4个通道才行,好吧,焊上4颗试试。然后,还是不行,通道不满。难道是跳线的问题?于是我把所有CE跳线电阻全都给焊上了0欧姆电阻,这样,前4个通道就都满了,然后开卡。结果开卡一直卡在Pretest。网查了一圈,说会卡pretest各种原因都有,有说flash没全部擦除的,有说主控坏的,有说主控不支持的,有说开卡软件版本问题的。然而没有一个说到点子上,我把所有可能原因都尝试了,还是卡在pretest,难道真是主控坏了?于是我还真的就去买了几全新的2258H主控。

然而似乎并没有什么卵用。依旧卡pretest。那么,难道是Flash不支持吗?所以,没办法的我,只好再去买了4片Intel的L06B,Flash.set文件里明确支持的型号PF29F01T2ANCMG3:

然而,这次有经验了,就不一次买太多了,先买4片试试看,板子上先贴2片看看。发现还是卡Pretest,这真TM奇葩了,简直不可思议。 由于网上玩DIY的玩家圈子里都不懂硬件和原理,似乎网友也基本那都是瞎猜。但是当我找了一块新的2258H套料贴上2片intel颗粒以后,结果竟然开卡成功了!比较了一下两块板子的区别,只是因为我前面自己瞎改过CE跳线,所以,把原来那块板子的CE跳线改回默认跳线,开卡成功!好吧,看来卡在pretest应该就是跳线的问题。
看来intel芯片是可以支持的,所以,手实在太快了,直接又来了16片:

最终,8片全部贴满:


第一块我使用了两片Nanya的512M DDR3内存芯片,总共1G,正好足够开出1TB的容量,但是,似乎默认跳线CE通道填不满32个通道,由于一直对CE跳线不理解,所以我专门找了一下2258H的原理图,然而找不到,猜想2246EN的应该原理类似。看过之后才明白,原来CE跳线不是乱设的,颗粒焊接的位置也不是乱贴的,是厂商给定了一个设置规则,并不是说一个电阻就是一个CE贴上,是根据不同的flash配置方式,有不同的设置方法(下图可以右键新窗口打开看大图):

通过跳线图可以看出来,我是用的flash颗粒是单颗4CE,总共8颗,对应的跳线应该是RCE1,RCE3,RCE5,RCE7贴上0欧姆电阻,RCE2,RCE4,RCE6,RCE8断开,剩下的RCE电阻可以随意,如果贴4片的话,就只能贴F1,F2,F9,F10,而不是随便选4个位置。不过,这个图对应到我的PCB还是有一些差别,参照卖家提供的料表。

我的PCB上面的标注是RCE1,RCE3,RCE7,RCE13,RCE15,RCE19,RCE20,RCE22和RCE2,RCE4,RCE8,RCE14,RCE16,RCE17,RCE18,RCE21。可以说真的是很奇葩了,通过我的观察发现,似乎RCE1在RCE2的背面,RCE18在RCE20的背面,RCE3,RCE7在RCE4,RCE6的背面。猜测只需要将对应电阻换到背面即可,也就是说,和2246EN原理图相对应的话,RCE1,RCE3,RCE5,RCE7应该对应RCE1,RCE3,RCE7,RCE18,而RCE2,RCE4,RCE6,RCE8对应RCE2,RCE4,RCE6,RCE20。所以只需要把RCE18移到RCE1位置,把RCE2移到RCE20位置,把RCE4,RCE6分别移到RCE3,RCE7位置即可,见下图红圈 :


跳线设置完成后,开卡软件中可以看到,所有通道都正确识别了:

现在,就可以进行开卡测试了。开卡设置我这里也附上吧,为了开卡稳定,可以先把do RDT勾上,先做读写测试,设置可以参考我的,Pretest那里先选Don’t Reference:

按照这样设置进行第一遍开卡操作,提示Pass之后,RDT就测试完成了,现在就可以正式开卡了,去掉Do RDT,Pretest这时候就可以参考前面RDT的坏块测试结果,即Pretest那里选Reference Runtime bad。

这里再补充几点,DRAM Setting的大小指单颗DRAM的大小,所以这里应该选512M大小,类型选Nanya,如果焊接了两块DRAM芯片,则要勾上Dual DRAM,时钟选最大525MHz即可,因为我用的这颗南亚内存是DDR3-1600,最大支持时钟到800M的。DRAM ECC不勾,因为一般使用的DDR3都是不带ECC的,勾了会开卡失败。然后Flash interface Speed根据Flash芯片的速度选择即可,如果选的太大开卡失败就选小一点,我这里可以选到DDR-400,其他大家可以参考我的,也可以默认。
最终,开卡成功:

好了,现在就可以上机测试了,先用AS SSD跑个分吧:


受SATA3限制,这个跑分已经不错,4K性能也还可以了,CrystalDiskInfo的信息如下,终于有了第一张以自己名字命名的SSD,感觉瞬间逼格高了不少。

然后urwtest测试存取稳定性,顺利通过:

最后进行掉速测试,稳得很:

接下来就可以装上外壳了:

这里还有一点要注意,就是2258H全速跑的时候发热量很大,会瞬间飙到70多度,导致过热降频,这个时候就会掉速,所以还是有必要考虑散热的,我这里是用了一个散热硅垫把2258H和SSD外壳之间垫上,当然硅脂也是可以的,这样就可以使用外壳来当作主控的散热片,温度就能稳定在40度左右了。不过空空如也的外壳似乎也不好看,所以干脆设计一个标签吧,贴上之后,完美:


以下附上使用SK内存和Samsung内存的另两块硬盘照片:


由上面两图也可以看书,这个PCB DRAM的外框实际上是按照Nanya内存的尺寸设计的,使用SK的话外框大了一圈,而用Samsung外框又太小了。
五、后记
因为一开始美光的L95B的flash颗粒实在买太多了,而且折腾时间太久了店家也不让退了,所以,实在没办法,就买了一堆IS903的主控板,干脆全部做成U盘了,当然一如既往,标签还是要设计一个的,毕竟这是传递信仰:
后来,我又仔细分析了一下DIY的过程和得失,感觉其实2258H虽然没有直接说支持L95B,但实际上参数复制过去应该还是可以支持的,之前一直卡pretest应该只是跳线的问题。后来查了美光代号的含义,L95B应该只是美光中期的MLC,类似代号还有L74,L84,M84C,L95B,L06B,其中第二位数字7代表3xnm,8代表2xnm,9代表1xnm,0代表1ynm,所以L06B的制程和工艺是最新的性能也是最好的。我换成intel L06B也是正确的选择,第一次买美光的颗粒是手太快了。
另外,资料显示intel的MLC和TLC其实制造上是一样的,我使用的这颗L06B其实也可以按照TLC的BOKB来开卡,得到1.5TB的容量。不过速度和寿命也会相应打折扣了,对我来说1TB也够用,所以没必要在意那0.5TB的容量了。
到此,这次折腾前前后后都快搞了1个月了,也算是结束了,信息量比较大,在这里特别记录一下吧。
FLANKER
跑RDT是要出现PASS之后再重新接通电源,等SSD的灯闪了之后又不闪了才算完成RDT。
jie
大佬,u盘卖么?
Jarvis
已经被抢完了
foxwallop
贴上标签之后很魔性啊哈哈哈 然后一看就会,一搞就废。
EER0
国内贴吧,论坛基本都是小白居多,想问技术性问题,几乎不可能
harrisoguan
路过,你那个背景玩了半天。哈哈。您这个可以弄个完整教程出来了。等您教程
饭团
看完博主的说明,总算看明白了那张跳线的图。
wangyitu
大佬~开群联啊~比慧荣的好玩的多~