PCIe转SATA扩展卡硬件设计:88SE9215与ASM1061实战 1. 项目缘起与方案选型逻辑手里攒了几块闲置的SATA硬盘机箱里的SATA口早就插满了主板上的M.2插槽还空着——这种场景估计不少折腾硬件的朋友都遇到过。把M.2插槽利用起来转出几个SATA口最直接的路径就是找一颗PCIe转SATA的桥接芯片。市面上能买到的方案里88SE9215和ASM1061这两颗出镜率最高前者常见于各种四口扩展卡后者则大量出现在主板板载和廉价双口卡上。我前后用这两颗芯片各做了几版板子踩了不少坑这里把整个硬件实现过程完整梳理一遍。先说清楚这个项目到底在做什么。简单讲就是设计一块PCB一头插在主板的PCIe插槽上物理形态可以是标准PCIe x1卡或者M.2 2280另一头引出若干个标准SATA接口让系统能像识别原生SATA控制器一样识别挂上去的硬盘。核心工作围绕三块展开PCIe接口的物理层与协议层对接、SATA PHY的走线与信号完整性、整板的电源树设计。适合有一定硬件基础、想自己画一版扩展卡或者想搞明白这类桥接芯片内部逻辑的读者。如果你只是想把硬盘插上能用直接买成品卡更省事但如果你想搞清楚为什么有的卡跑得稳有的卡老掉盘那自己走一遍设计流程是最快的理解方式。选型上88SE9215和ASM1061的定位差异很明显。88SE9215是Marvell家的四口方案PCIe 2.0 x2上行四个SATA口都能跑到6Gbps内部带一个ARM核做协议转换需要外挂SPI Flash存放固件。ASM1061是ASMedia的双口方案PCIe 2.0 x1上行两个SATA口也是6Gbps但它不需要外挂固件配置信息通过strapping电阻在复位时采样。从硬件设计难度看ASM1061外围更干净适合做小尺寸的M.2转双SATA88SE9215通道多但布线和电源复杂度上一个台阶。我两个方案都做了板子下面分别拆解。注意这两颗芯片的datasheet在官方渠道都不容易拿到完整版网上流传的版本有些关键章节缺失。建议先找FAE或者代理渠道确认引脚定义和参考设计不要完全依赖来路不明的PDF。2. PCIe接口硬件设计的关键细节2.1 金手指与差分对走线PCIe x1的物理接口有36个引脚A面18个B面18个其中真正跑高速信号的只有TX和RX两对差分线。以标准PCIe CEM连接器为例A面第14、15脚是PETp0/PETn0发送对第16、17脚是PERp0/PERn0接收对。M.2接口的引脚定义不同但差分对的位置和阻抗要求是一致的。差分阻抗要求100Ω±10%这个不是随便说说的。我第一版板子用嘉立创的默认四层板叠层信号-地-电源-信号差分线宽6mil、间距6mil用Polar SI9000算出来是98Ω实测眼图勉强能看但裕量不大。后来改成线宽5.5mil、间距7mil算出来101Ω眼图明显干净了。这里的关键是叠层参数必须和板厂确认不同板厂的半固化片厚度和介电常数有差异同样的线宽间距算出来的阻抗可能差5Ω以上。走线长度方面PCIe Gen2的差分对长度匹配要求是对内±5mil对间±10mil。这个精度手工布线很难保证必须用EDA工具的差分对布线功能。我用的KiCad 7在布线前先设置好差分对规则走线时按快捷键就能自动保持等长。如果是Allegro或者Altium规则设置更细但核心逻辑一样先定阻抗再定线宽间距最后约束长度。2.2 参考时钟与复位信号PCIe接口需要外部提供100MHz参考时钟。标准PCIe卡从金手指的A13/A14脚取时钟但M.2接口的时钟引脚位置不同。这里有个容易翻车的点参考时钟的抖动要求。PCIe Gen2对时钟抖动的容忍度比Gen1低不少如果直接从主板取时钟走线过长或者经过连接器多次转接抖动可能超标。我的做法是在靠近芯片端加一颗零延迟缓冲器比如PI6C557把时钟重新整形后再送给芯片。复位信号PERST#是另一个关键。这个信号从金手指A11脚进来低电平有效。芯片内部有上电复位电路但外部还是建议加一个RC延时确保电源稳定后再释放复位。我用的参数是10kΩ上拉加100nF到地时间常数1ms实测下来比直接连复位引脚稳定得多。ASM1061的复位引脚内部有施密特触发器对边沿要求不高88SE9215则要求复位低电平至少保持100μs这个在时序设计时要留够裕量。2.3 耦合电容与ESD保护PCIe的TX和RX差分对上必须串联交流耦合电容典型值100nF。这个电容的位置有讲究TX端的电容应该靠近发送端芯片RX端的电容靠近接收端芯片。我见过有人把电容放在连接器中间结果信号反射严重链路训练都过不了。电容封装用0201或者0402X7R材质耐压16V以上。注意不要用Y5V温漂太大会导致容值变化影响信号。ESD保护方面PCIe接口是热插拔场景静电风险不低。我一般在差分对靠近连接器端加超低电容TVS阵列比如SRV05-4结电容0.5pF左右对信号影响很小。但要注意TVS的钳位电压不能太低否则可能影响正常信号摆幅。实测下来加了TVS之后眼图高度会掉10%左右如果链路裕量本来就不大可以考虑省掉或者换更低电容的型号。3. SATA PHY与电源树设计3.1 SATA差分信号走线要点SATA的物理层和PCIe类似也是差分信号但阻抗要求是100Ω速率6Gbps。从芯片出来的SATA TX/RX对到SATA连接器之间走线要尽量短。我一般控制在5cm以内超过这个长度眼图就开始闭合。如果实在要走长线中间不能有过孔必须换层的话要在过孔旁边加回流地过孔。SATA连接器有7个引脚3个地、2对差分、1个5V。差分对在连接器上的位置是固定的布线时注意不要交叉。我见过有人把TX和RX接反了结果硬盘识别不到查了半天才发现是连接器引脚定义看错了。这里提醒一句SATA连接器的引脚编号从板边往里数不同厂家的封装可能镜像画封装时一定要对着实物确认。3.2 电源树设计与LDO选型整板电源需求分三档3.3VPCIe接口供电和芯片IO、1.2V芯片内核、1.0V部分芯片的PHY供电。88SE9215还需要1.8V给DDR2内存接口对它内部有DDR2控制器做数据缓冲。ASM1061简单一些只要3.3V和1.2V。从PCIe插槽取电的话3.3V最大能拿到3Ax1插槽的3.3V供电能力但实际芯片功耗不高。88SE9215满载大概2W左右ASM1061不到1W。我一般用两级降压先从3.3V用LDO降到1.2V给内核再用LDO降到1.0V给PHY。LDO选型看两个参数压差和噪声。压差要小于输入输出电压差的一半比如3.3V转1.2V压差2.1V选压差300mV以内的LDO就很充裕。噪声方面PHY供电对电源纹波敏感建议选PSRR在100kHz处大于40dB的型号比如TPS7A系列。如果是从M.2接口取电3.3V的电流能力通常只有1A左右M.2 Key M的3.3V引脚限流这时候要算一下总功耗。88SE9215加四块硬盘的PHY功耗1A可能不够需要从其他地方取电或者换ASM1061方案。3.3 晶振与配置电阻ASM1061需要一颗25MHz晶振精度±50ppm以内。晶振的负载电容要匹配一般选12pF或者15pF具体看晶振规格书。我试过用陶瓷谐振器省钱结果SATA链路训练偶尔失败换回石英晶振就稳了。88SE9215用25MHz晶振或者外部时钟输入内部PLL倍频到所需频率。配置电阻方面ASM1061的strapping引脚在复位时采样决定PCIe lane宽度、SATA端口映射等。这些电阻的阻值不能随便选必须按datasheet的表格来。我一般用1%精度的电阻布局时尽量靠近芯片引脚走线短而直。有个坑是strapping引脚在复位后可能变成其他功能如果外部电路有冲突会导致芯片工作异常。画原理图时一定要看清楚引脚复用表。4. PCB布局与信号完整性实战4.1 叠层选择与阻抗控制四层板是这类设计的最低配置叠层建议信号-地-电源-信号。顶层走高速差分对和关键信号底层走低速控制和电源。中间的地平面要完整不能有跨分割。我试过用两层板做ASM1061方案结果SATA眼图一塌糊涂换成四层板后立刻改善。如果预算允许六层板更好信号-地-信号-电源-地-信号这样高速信号两边都有参考平面回流路径更短。阻抗控制方面除了前面说的差分100Ω单端信号线一般控制50Ω。PCIe的参考时钟是单端100MHz走线阻抗50Ω包地处理。SATA的差分对阻抗100Ω和PCIe一样。板厂做阻抗控制时一般会提供阻抗计算报告收到板子后最好用TDR实测一下确认和设计值偏差在10%以内。4.2 电源分割与去耦电容布局电源平面的分割要按电压域来3.3V、1.2V、1.0V各自一块不要交叉。如果空间紧张可以用星型连接从主电源点分别拉线到各芯片引脚中间加磁珠隔离。去耦电容的布局是另一个重点每个电源引脚旁边放一个100nF容值小的靠近引脚容值大的10μF放在芯片外围。我一般还会在整板电源入口放一个220μF的钽电容做储能应对硬盘启动时的浪涌电流。有个细节容易被忽略去耦电容的接地过孔。每个电容的接地端至少要有一个过孔直接打到地平面过孔尽量靠近焊盘。我见过有人电容放得很整齐但接地过孔离得远结果高频去耦效果大打折扣。实测下来接地过孔距离焊盘超过2mm100MHz以上的噪声抑制就明显变差。4.3 时钟与复位信号的隔离25MHz晶振的走线要包地两边加地过孔屏蔽。晶振下方不要走其他信号尤其是高速差分对。复位信号走线要远离时钟和差分对如果实在避不开中间加地线隔离。我一般把复位信号走在底层和顶层的高速信号隔一个地平面耦合很小。PCIe的参考时钟差分对如果从金手指取要走紧耦合线间距尽量小包地处理。如果用了外部时钟缓冲器缓冲器到芯片的时钟走线也要按差分规则走长度尽量短。实测下来参考时钟的抖动每增加1psPCIe链路的误码率就上升一个数量级所以时钟这部分值得多花时间优化。5. 固件与配置要点5.1 88SE9215的SPI Flash烧录88SE9215需要外挂一颗SPI Flash存放固件容量一般用2Mbit或者4Mbit型号比如W25Q16。固件从Marvell的FAE渠道获取或者从成品卡上读出来。烧录方式有两种在线烧录通过PCIe接口和离线烧录用编程器。在线烧录需要主板能识别到芯片如果固件是空的芯片可能不枚举这时候只能用离线烧录。离线烧录时注意Flash的扇区大小和写保护。有些Flash出厂时带了写保护需要先发命令解除。我用的CH341A编程器加SOP8夹子直接夹在Flash引脚上烧录不用拆焊。烧录完成后最好校验一遍确认没有坏块。固件版本方面不同版本的固件对硬盘兼容性有差异我试过某个老版本固件接某品牌SSD会掉盘换新版本就好了。5.2 ASM1061的配置电阻计算ASM1061不需要固件但配置电阻的阻值决定了它的工作模式。以PCIe lane宽度配置为例datasheet里会有一个表格比如配置引脚电阻值功能CFG04.7kΩ到地PCIe x1模式CFG010kΩ到地PCIe x2模式CFG1悬空SATA端口0/1使能CFG14.7kΩ到地仅端口0使能这些电阻的精度要求一般是5%但为了保险我用1%的。布局时电阻要靠近芯片引脚走线不要超过5mm。有个坑是配置引脚在复位后可能被复用为GPIO如果外部电路有上拉或者下拉可能影响芯片正常工作。画原理图时要在配置电阻和复用功能之间做取舍必要时加跳线或者0Ω电阻做隔离。5.3 PCIe链路训练与枚举芯片上电后PCIe链路会进行LTSSM链路训练。这个过程分多个阶段Detect、Polling、Configuration、Recovery、L0。如果链路训练失败系统就枚举不到设备。常见原因有参考时钟缺失或抖动超标、差分对极性接反、耦合电容容值不对、电源时序不对。排查时可以用PCIe协议分析仪抓LTSSM状态机跳转但设备贵个人玩家一般没有。替代方法是看芯片的状态引脚或者LED指示。ASM1061有个引脚可以指示链路状态88SE9215可以通过SPI Flash里的日志看训练结果。我遇到过一次链路训练失败查了半天发现是参考时钟的耦合电容焊反了0402封装看不出来极性但实际有极性要求换过来就好了。6. 常见问题与排查技巧实录6.1 硬盘识别不到或频繁掉盘这是最常见的问题原因可能出在多个环节。先查电源用示波器看SATA连接器的5V和12V如果是3.5寸硬盘是否稳定纹波是否超标。我遇到过一块板子硬盘转起来之后5V掉到4.5V原因是LDO的电流能力不够换了个大电流的就好了。再查信号用示波器看SATA差分对的眼图如果眼高眼宽不够检查走线阻抗和长度匹配。最后查固件/配置88SE9215的固件版本、ASM1061的配置电阻都可能影响硬盘兼容性。实操心得准备一块已知良好的成品卡做对照出问题时把硬盘插到成品卡上如果正常说明硬盘没问题问题在自制板上如果不正常先换硬盘再排查。6.2 PCIe设备枚举失败系统启动后lspci看不到设备或者设备显示但带感叹号。先确认BIOS里PCIe插槽是否使能有些主板默认关闭某些插槽。再确认金手指是否插到位PCIe插槽有卡扣没插到底的话接触不良。然后查参考时钟用示波器测时钟引脚应该有100MHz差分信号幅度在400mV到1.2V之间。最后查复位信号PERST#应该在电源稳定后释放如果一直拉低芯片不工作。有个隐蔽的坑PCIe插槽的3.3V供电能力。有些主板给x1插槽的3.3V限流在1A以内如果板子功耗超过这个值电压会被拉低导致枚举失败。我遇到过一块板子空载时枚举正常插上硬盘就掉最后发现是3.3V电流不够改成从外部取电就好了。6.3 SATA链路速率跑不到6Gbps链路建立但速率只有3Gbps或者1.5Gbps说明信号质量不够。先查差分对走线长度是否匹配、阻抗是否连续、有没有跨分割。再查连接器SATA连接器的引脚是否氧化、焊接是否虚焊。最后查芯片配置有些芯片可以通过寄存器强制速率但一般不建议还是从信号质量入手。我试过一版板子SATA走线长度差了8mil结果速率只能跑到3Gbps。重新布线做到等长后6Gbps稳定。所以长度匹配不是可选项是必选项。6.4 常见问题速查表现象可能原因排查方法解决措施硬盘不识别电源不足测5V/12V电压和纹波换大电流LDO或外部供电硬盘掉盘信号质量差测SATA眼图优化走线阻抗和长度PCIe枚举失败参考时钟异常测时钟频率和幅度换晶振或加时钟缓冲器速率跑不满差分对失配测走线长度重新布线做到等长芯片发热严重电源短路或过压测各电源域电流检查焊接和电源时序固件加载失败SPI Flash坏块读Flash内容校验换Flash重新烧录6.5 独家避坑技巧第一电源时序要控制。88SE9215要求1.2V先上电然后3.3V最后1.0V。如果时序不对芯片可能闩锁。我一般用电源时序控制器比如TPS3808来管理或者用RC延时加MOS管做简单时序。第二SATA连接器的金属外壳要接地。有些封装的外壳引脚在原理图里没标但实际需要接地。不接地的话插拔硬盘时静电可能打坏芯片。我一般把外壳引脚连到板子的地平面用多个过孔。第三PCIe金手指的斜边要倒角。标准PCIe卡的金手指前端有斜边方便插入插槽。如果自己画封装忘了倒角插拔会很费劲甚至损坏插槽。画封装时对着CEM规范确认尺寸。第四测试点要留够。关键信号比如参考时钟、复位、SATA差分对都要留测试点。测试点不要放在差分对中间会破坏阻抗。我一般在差分对旁边留一对地信号测试点用差分探头测。第五板子做完先目检再上电。尤其是BGA封装的芯片焊接不良很难发现。我一般用放大镜看一遍引脚确认没有连锡和虚焊。上电时用限流电源电流设小一点如果短路电流会立刻上去能保护芯片。7. 实测数据与性能对比7.1 88SE9215四口卡实测用CrystalDiskMark测连续读写接一块SATA SSD读520MB/s写480MB/s基本跑满了SATA 6Gbps的带宽。四块硬盘同时读写时总带宽受限于PCIe 2.0 x2的1GB/s每块盘大概250MB/s。功耗方面空载1.2W满载2.1W芯片表面温度45度左右室温25度不需要额外散热。7.2 ASM1061双口卡实测单盘读写和88SE9215差不多读510MB/s写470MB/s。双盘同时读写时PCIe 2.0 x1的500MB/s带宽成为瓶颈每块盘大概250MB/s。功耗空载0.8W满载1.3W芯片温度40度左右。7.3 对比总结项目88SE9215ASM1061PCIe上行2.0 x22.0 x1SATA端口42固件需求需要SPI Flash无需固件配置方式固件配置电阻strapping功耗1.2W-2.1W0.8W-1.3W设计难度较高较低适用场景多盘扩展小尺寸双口从实际使用看如果只需要两个SATA口ASM1061方案更简单可靠BOM成本也低。如果需要四个口88SE9215是更合理的选择但固件和电源设计要花更多心思。两颗芯片的SATA性能都能跑满6Gbps关键还是看PCB设计和电源质量。8. 后续扩展与个人体会这套设计做完之后我还试过把ASM1061方案做成M.2 2280形态直接插在主板的M.2插槽上引出两个SATA口。M.2接口的3.3V供电能力有限所以选了低功耗的ASM1061实测带两块2.5寸SSD没问题。如果是3.5寸机械硬盘启动电流大需要从外部取电或者加储能电容。另外PCIe转SATA只是桥接芯片的一个应用方向。同样的设计思路可以扩展到PCIe转USB、PCIe转网口等场景核心都是PCIe物理层对接加协议转换。把PCIe的LTSSM和电源时序搞明白之后换其他桥接芯片上手会快很多。我个人在实际操作中的体会是电源和时钟是这类高速桥接设计的命门。信号走线只要按规则来一般不会有大问题但电源纹波和时钟抖动是隐形的杀手出问题时很难定位。建议在画板之前先把电源树和时钟树在纸上画清楚每个电源域的电流、纹波要求、时序关系都列出来再开始布局。这样能避免很多后期调试的麻烦。