ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PCIe转SATA扩展卡硬件设计:88SE9215与ASM1061方案对比与调试

PCIe转SATA扩展卡硬件设计:88SE9215与ASM1061方案对比与调试 1. 项目缘起与方案选型思考1.1 为什么还要折腾PCIe转SATA手头有一块闲置的ITX主板CPU性能还够用但SATA口只有两个接了一块系统盘之后就没位置了。想加硬盘做存储M.2插槽已经被系统盘占用剩下一条PCIe x1的槽空着。这种场景下PCIe转SATA扩展卡就是最直接的解法。市面上这类卡从十几块到上百块不等核心差异就在主控芯片上。常见的方案有Marvell 88SE9215、ASMedia ASM1061、JMicron JMB582、以及一些国产主控。我前后用过好几张踩过不少坑这次把88SE9215和ASM1061这两个最典型的方案拿出来做一次完整的硬件实现分析。这篇文章适合谁看如果你正在选一张PCIe转SATA卡或者你是硬件工程师需要做类似的多路SATA扩展设计又或者你只是好奇一块几十块钱的卡里面到底有什么门道那这篇内容应该能给你一些参考。我会从芯片选型、电路设计、PCB布局、实际调试几个维度展开尽量把每个设计决策背后的逻辑讲清楚。1.2 两颗主控的定位差异88SE9215是Marvell家的四口SATA控制器走PCIe 2.0 x2通道理论带宽10Gbps四个SATA口共享这个带宽。它支持端口倍增器可以挂更多盘但共享带宽的问题在高负载下会暴露出来。这颗芯片在早期的主板和扩展卡上非常常见驱动支持成熟Linux下用ahci驱动直接就能认。ASM1061是ASMedia的方案PCIe 2.0 x1通道5Gbps带宽通常做两个SATA口。它的优势在于功耗低、发热小、价格便宜而且ASMedia的PCIe兼容性做得不错各种平台上翻车的概率低。缺点是只有x1的带宽两个SATA口共享5Gbps接机械盘够用接SATA SSD跑满速就有点勉强。选哪个看你的需求。如果要接四块以上的盘做存储池88SE9215更合适如果只是补两个SATA口接机械盘ASM1061性价比更高。下面我分别拆解这两套方案的硬件实现。2. 88SE9215方案的核心电路设计2.1 芯片外围电路的整体框架88SE9215是一颗BGA封装的芯片引脚密度不低外围电路主要包括几个部分PCIe接口电路、SATA接口电路、电源电路、时钟电路、以及配置电路。PCIe接口部分88SE9215支持PCIe 2.0 x2但很多扩展卡只做了x1的金手指。这里有个设计取舍做x2需要主板插槽也支持x2以上而大多数ITX主板的x1槽是物理x1的插不进去x2的卡。所以市面上大部分88SE9215的卡都是x1的金手指芯片实际跑在x1模式下。如果你自己设计建议直接做x1兼容性最好。SATA接口部分每路SATA需要一对差分发送和一对差分接收加上地线屏蔽。88SE9215的SATA信号是1.5V差分走线需要做100欧姆的差分阻抗控制。四路SATA就是八对差分线布线密度不小。电源部分88SE9215需要1.0V核心电压、1.8V和3.3V的IO电压。通常用一颗DC-DC把PCIe插槽的12V或3.3V降下来。这里要注意PCIe插槽的3.3V供电能力有限x1槽通常只有3A左右如果四块硬盘同时启动电流需求会很大所以最好从12V取电做降压。2.2 PCIe接口的差分走线与耦合电容PCIe的差分信号走线是整个设计里最讲究的部分。88SE9215的PCIe 2.0信号速率是5GT/s差分阻抗要求100欧姆走线长度要尽量短一般控制在5厘米以内。如果走线太长信号衰减会导致链路训练失败表现为设备识别不到或者频繁掉线。耦合电容是必须的PCIe规范要求发送端加AC耦合电容通常用0.1uF的0402或0201封装。电容要放在靠近发送端的位置两颗电容的走线要严格等长偏差控制在5mil以内。我见过一些廉价卡为了省成本耦合电容用了0.22uF虽然也能工作但眼图质量会差一些。金手指的设计也有讲究。PCIe x1的金手指有36个引脚其中差分信号对在特定的位置。PCB叠层建议用四层板信号层-地层-电源层-信号层这样差分线可以参考完整的地平面阻抗控制更稳定。两层板也能做但阻抗控制难度大不建议新手尝试。2.3 SATA差分信号的布线要点SATA信号速率是3GbpsSATA II或6GbpsSATA III88SE9215支持SATA III。每路SATA的差分对要走100欧姆阻抗走线长度尽量等长偏差控制在10mil以内。SATA信号对之间的间距要足够避免串扰一般建议间距大于3倍线宽。SATA接口的ESD保护也很重要。热插拔的时候静电可能会打坏芯片。通常会在SATA差分线上加TVS二极管选低电容的型号结电容要小于1pF否则会影响信号完整性。我实测过不加ESD保护的卡在干燥环境下插拔几次硬盘芯片的SATA口就可能挂掉。SATA连接器的选型也有讲究。板上贴片的SATA座子比直插的贵一些但焊接良率高信号路径短。如果做批量产品建议用贴片座子。手工焊接的话直插座子更容易操作但要注意引脚不要连锡。2.4 电源树设计与降压电路88SE9215的电源需求比较杂需要1.0V、1.8V、3.3V三路。通常的做法是用一颗DC-DC把12V降到1.0V再用LDO从3.3V降到1.8V。3.3V可以直接从PCIe插槽取但要注意电流限制。降压电路的设计我用过两种方案。一种是MP1584便宜好用但开关频率只有500kHz输出纹波稍大。另一种是TPS54331开关频率570kHz效率高一些但外围元件多。如果对成本敏感MP1584够用如果对电源质量要求高建议用TPS54331或者更高级的方案。电感的选择很关键。MP1584的典型应用是12V转5V但我们要转1.0V占空比很小电感值要相应减小。我一般用4.7uH到10uH的电感饱和电流要大于3A。输出电容用22uF的陶瓷电容再加一个0.1uF的高频旁路。注意1.0V核心电压的走线要尽量宽至少20mil因为电流可能达到1A以上。如果走线太细压降会导致芯片工作不稳定。2.5 时钟电路与配置引脚88SE9215需要一颗25MHz的晶振精度要求±50ppm以内。晶振的负载电容要根据晶振规格书来选通常是12pF到18pF。走线要尽量短远离高频信号线否则时钟抖动会影响PCIe链路稳定性。配置引脚决定了芯片的工作模式。88SE9215支持从SPI Flash加载固件也支持引脚配置模式。如果只是做简单的SATA扩展引脚配置就够了不需要外挂Flash。但如果你想用端口倍增器或者RAID功能就需要外挂SPI Flash烧录对应的固件。配置引脚的上下拉电阻不能省。我见过一张卡配置引脚悬空结果芯片工作在错误的模式下四个SATA口只认出来两个。后来查了半天才发现是配置电阻没焊。这种低级错误在设计阶段就要避免每个配置引脚都要明确上下拉。3. ASM1061方案的硬件实现细节3.1 更精简的外围电路ASM1061的外围电路比88SE9215简单不少。它只需要1.2V和3.3V两路电源PCIe 2.0 x1接口两个SATA口。芯片封装也小一些QFN封装引脚间距0.5mm手工焊接难度中等。PCIe接口部分ASM1061只支持x1所以金手指设计更简单。差分走线的要求和88SE9215一样100欧姆阻抗等长控制。耦合电容同样是0.1uF放在靠近芯片的一侧。SATA部分只有两路布线压力小很多。但ASM1061的SATA信号驱动能力稍弱走线长度建议控制在10厘米以内。如果走线太长需要在中间加Redriver或者Retimer但那样成本就上去了。电源部分1.2V可以用LDO从3.3V降下来因为电流不大LDO的发热可以接受。3.3V直接从PCIe插槽取但要注意插槽的供电能力。如果两个SATA口都接SSD启动电流可能超过1A建议在3.3V输入端加一个100uF的电解电容做储能。3.2 PCIe金手指的兼容性设计ASM1061的卡通常做半高或者全高挡板金手指是标准的PCIe x1。这里有个细节金手指的厚度和镀金质量直接影响插拔寿命和接触电阻。便宜的卡金手指镀金很薄插拔几次就氧化了接触不良导致掉盘。如果你自己打样建议金手指做30u英寸以上的镀金插拔寿命能到1000次以上。PCB板厂的工艺能力也要考虑有些小厂做的金手指倒角不规范插进插槽很紧拔出来的时候容易损伤插槽。还有一点PCIe x1的金手指虽然只有36个引脚但后面的引脚位置是空的。有些主板插槽是开放式尾端可以插更长的卡有些是封闭的只能插x1的卡。设计的时候要确认目标主板的插槽类型避免做出来的卡插不进去。3.3 SATA接口的ESD与滤波ASM1061的SATA口同样需要ESD保护。我一般用SRV05-4这种四路TVS阵列一颗就能保护两路SATA的差分线。结电容要小于1pF否则6Gbps的信号会被衰减。滤波方面SATA差分线上可以串接共模电感抑制共模噪声。但共模电感的选型要注意差模阻抗要低否则会影响信号幅度。我试过用DLW21HN系列效果不错但价格比普通电感贵不少。如果成本敏感可以省略共模电感但ESD保护不能省。SATA连接器的地线要处理好。每个SATA座子周围要有完整的地平面地引脚要就近打过孔到地平面。如果地回路不好信号回流路径长眼图会变差。我实测过地平面不完整的卡SATA误码率明显偏高。3.4 固件与驱动兼容性ASM1061的固件是内置在芯片里的不需要外挂SPI Flash。但不同批次的芯片固件版本可能不同有些老版本固件在特定主板上会有兼容性问题。我遇到过一张ASM1061的卡在Intel平台上正常在AMD平台上就认不到盘。后来查出来是固件版本太老更新固件后解决。驱动方面ASM1061在Windows下需要安装ASMedia的驱动Linux下用ahci驱动就能认。Windows 10和11自带驱动也能用但性能可能不如官方驱动。如果你遇到掉盘或者速度慢的问题先去ASMedia官网下最新驱动试试。提示ASM1061的固件更新需要专用的工具一般用户不建议自己刷。如果卡有问题先换驱动和换插槽试试实在不行再考虑刷固件。4. 两块方案的对比与选型建议4.1 性能与功耗对比对比项88SE9215ASM1061PCIe通道2.0 x2常见x12.0 x1SATA口数42最大带宽10Gbpsx25Gbps典型功耗1.5W-2W0.8W-1.2W发热中等需散热片低无需散热驱动支持成熟成熟价格中等低从表格能看出来88SE9215的优势在于口多、带宽大适合做多盘存储。ASM1061的优势在于功耗低、发热小、价格便宜适合补口。4.2 实际使用场景的取舍如果你要接四块机械硬盘做NAS88SE9215是更好的选择。四块盘共享10Gbps实际x1模式下是5Gbps机械盘的顺序读写也就150MB/s左右四块盘同时跑也就600MB/s5Gbps的带宽够用。如果你只是接两块SATA SSD做系统盘或者缓存盘ASM1061的5Gbps带宽就有点紧张了。两块SSD同时跑满速每块只能分到2.5Gbps也就是300MB/s左右跑不满SATA III的550MB/s。这种情况下建议直接上PCIe转M.2的卡带宽更大。还有一个场景是接光驱或者老式硬盘。这种低速设备对带宽没要求ASM1061完全够用而且功耗低适合长期开机。4.3 散热与长期稳定性88SE9215的功耗比ASM1061高发热也更明显。我实测过四块盘同时读写的时候88SE9215的芯片表面温度能到60度以上。如果不加散热片长期高温工作会缩短芯片寿命。建议在芯片上贴一个小铝散热片成本几毛钱效果很明显。ASM1061的发热小很多不加散热片也能稳定工作。但如果你把它塞在闷罐机箱里环境温度高还是建议加个散热片图个安心。长期稳定性方面两块芯片的MTBF都在百万小时级别正常使用几年没问题。但要注意电源质量如果PCIe插槽的3.3V纹波大芯片可能会不稳定。建议在电源输入端加LC滤波成本不高效果明显。5. 实操调试与常见问题排查5.1 上电前的检查清单焊接完PCB之后不要急着上电。先做几项检查用万用表测各路电源对地阻抗确认没有短路。1.0V对地阻抗应该在几十欧姆到几百欧姆之间如果接近0欧姆说明有短路。检查芯片的每个电源引脚是否都有电压用示波器看纹波峰峰值应该在50mV以内。检查晶振是否起振用示波器看波形频率应该是25MHz幅度在1V以上。检查PCIe金手指的差分对是否短路用万用表测相邻引脚不应该导通。这些检查做完再插到主板上。第一次上电建议用带限流的电源万一有短路不会烧主板。5.2 设备识别不到怎么办设备识别不到是最常见的问题。排查思路如下先换一个PCIe插槽试试。有些主板的x1槽和M.2槽共享通道插了M.2之后x1槽就失效了。进BIOS看PCIe设备列表如果BIOS里都看不到说明硬件层面有问题。检查耦合电容是否焊好用万用表测电容两端是否导通。如果电容虚焊信号传不过去。检查配置电阻是否正确。88SE9215的配置引脚如果悬空芯片可能不工作。检查晶振是否起振。晶振不起振芯片没有时钟PCIe链路训练无法完成。我遇到过一张卡BIOS里能看到设备但进系统后认不到盘。后来查出来是SATA差分线的一对走反了TX和RX接反了。调换之后正常。这种错误在设计阶段就要避免画原理图的时候要仔细核对。5.3 掉盘与速度慢的排查掉盘问题通常和电源或者信号完整性有关。先测电源纹波如果纹波超过100mV加电容滤波。再检查SATA线的质量换一根好点的线试试。如果还是掉盘可能是芯片过热加散热片。速度慢的问题先确认硬盘本身的速度。机械盘跑100MB/s是正常的SSD跑500MB/s才正常。如果SSD只能跑200MB/s检查PCIe链路速率。用lspci命令看链路速率如果是2.5GT/s而不是5GT/s说明链路训练到了Gen1模式。这种情况通常是信号完整性问题检查差分走线和耦合电容。还有一个坑是SATA线的问题。有些便宜的SATA线屏蔽不好跑6Gbps的时候误码率高速度上不去。换一根带屏蔽的线速度就正常了。5.4 常见问题速查表现象可能原因排查方法设备识别不到供电异常、晶振不起振、配置错误测电压、看晶振波形、查配置电阻掉盘电源纹波大、芯片过热、SATA线差测纹波、加散热片、换线速度慢链路速率低、SATA线质量差查lspci链路速率、换线只认部分盘配置引脚错误、固件问题查配置电阻、更新固件系统蓝屏驱动冲突、电源不稳换驱动、换插槽注意调试的时候一定要用已知良好的硬盘和线材排除外围因素。我见过有人折腾半天最后发现是硬盘本身有问题。6. 设计扩展与进阶玩法6.1 从x1做到x2甚至x488SE9215本身支持x2如果你主板有x4的插槽可以做x2的金手指。但要注意x2的金手指比x1长插槽要兼容。做x2的好处是带宽翻倍四块SSD同时跑的时候瓶颈小一些。如果想做x4那就不是88SE9215能搞定的了需要上PCIe Switch芯片比如ASM2812或者PEX8605。这种方案成本高很多适合做高端存储扩展卡。6.2 端口倍增器的使用88SE9215支持端口倍增器一个SATA口可以挂多块盘。但倍增器会共享带宽而且不是所有硬盘都兼容。我用过JMB575做倍增挂五块盘实际速度只有单盘的60%左右。如果对性能有要求不建议用倍增器。6.3 固件定制与LED指示灯88SE9215支持外挂SPI Flash可以烧录定制固件。有些固件支持RAID 0/1/10但性能一般不如用系统的软RAID。LED指示灯可以通过配置引脚控制每个SATA口对应一个LED显示活动状态。这个功能在调试的时候很有用能直观看到哪个口在工作。ASM1061的固件是内置的不能定制。但LED指示灯可以通过GPIO控制需要改电路。如果不需要LED可以省略。6.4 电源管理的优化PCIe设备支持ASPM电源管理可以在空闲的时候降低功耗。但ASPM有时候会导致掉盘特别是用廉价电源的时候。如果遇到掉盘可以在BIOS里关闭ASPM试试。另外硬盘的启动电流很大四块盘同时启动可能拉低12V电压。建议在12V输入端加一个大电容或者用带缓启动的电源方案。我一般加一个470uF的电解电容效果很明显。7. 个人实操体会与建议折腾了这么多张PCIe转SATA卡我最大的体会是电源和信号完整性是决定成败的关键。很多廉价卡为了省成本电源滤波能省就省差分走线也不讲究结果就是各种不稳定。如果你自己设计电源部分不要省钱多花几毛钱加电容和电感稳定性提升很明显。另一个体会是不要迷信芯片品牌。88SE9215和ASM1061都是成熟方案只要设计得当都能稳定工作。关键看外围电路和PCB布局。我见过用ASM1061做的卡比88SE9215还稳的也见过88SE9215的卡天天掉盘的。设计功底比芯片选型更重要。最后分享一个小技巧调试的时候先用一块便宜的机械盘做测试不要直接上SSD。机械盘对信号完整性的容忍度更高如果机械盘都认不到那肯定是硬件问题。等机械盘稳定了再换SSD测速度。这样能快速定位问题少走弯路。如果你也在做类似的设计或者遇到了什么奇怪的问题欢迎一起交流。硬件设计这条路踩坑是常态但每解决一个问题经验就多一分。
返回列表