
1. 项目缘起与整体设计思路1.1 为什么要做一张PEX8748扩展卡手里有一台退役的塔式服务器主板上的PCIe插槽倒是不少但真正能同时挂多块硬盘的接口却捉襟见肘。SATA口只有六个NVMe盘位更是想都别想。市面上的成品HBA卡和扩展背板要么价格离谱要么接口组合不合心意——要么全是SlimSAS要么全是M.2想混着用就得买好几张卡机箱里塞得跟蜘蛛网似的。于是就有了这张卡的设计目标用一颗PEX8748 PCIe Switch芯片把一条PCIe 3.0 x8上行链路扩展成两路SlimSAS各x4和四路NGFF M.2各x2或x1同时保持GEN3速率让存储和网络设备能在一张卡上共存。说白了就是给老平台续命用最低的成本把PCIe通道数“变”出来。PEX8748这颗芯片在二手市场上流通量不小48 lane的容量对于这种扩展场景绰绰有余。它的上行端口可以配置为x8或x16下行端口灵活拆分支持Spread Spectrum时钟对老主板的兼容性也比较好。选它而不是选PLX87系列其他型号核心原因就一个lane数够多、价格够低、资料相对好找。1.2 接口组合背后的取舍逻辑两路SlimSASSFF-8654 4i和四路NGFFM.2 M-Key这个组合不是拍脑袋定的。SlimSAS接口的物理尺寸小支持x4链路一根线就能引出四路PCIe通道非常适合连接背板或者直连U.2盘。而NGFF M.2插槽则是消费级NVMe盘的标准接口四路x2的配置意味着每块盘能跑到接近2GB/s的顺序读写对于NAS场景下的缓存盘或者系统盘来说完全够用。这里有个关键取舍为什么NGFF只给x2而不是x4因为PEX8748总共48 lane上行x8占掉8 lane剩下40 lane。两路SlimSAS各x4占8 lane四路NGFF如果各给x4就是16 lane加起来24 lane看起来还有余量。但问题是PEX8748的端口分配有 granularity 限制不是想怎么切就怎么切。实际配置中NGFF端口往往只能以x2或x1的粒度分配强行凑x4会导致端口映射混乱甚至有些端口无法识别。所以最终方案是SlimSAS给足x4保证带宽NGFF给x2保证兼容性这样整体lane利用率最高也不会浪费Switch的端口资源。1.3 低成本是怎么实现的这张卡的成本控制主要体现在三个方面。第一PCB层数控制在6层而不是动辄8层10层的高多层板。6层板在PCIe 3.0速率下只要叠层设计合理、阻抗控制到位信号完整性完全能满足要求。第二电源方案从简PEX8748的核心电压和IO电压由主板PCIe插槽的3.3V和12V直接供给通过LDO和DC-DC转换出需要的1.0V和1.8V省去了复杂的电源时序控制芯片。第三时钟方案用无源晶振加时钟缓冲器而不是昂贵的差分时钟发生器进一步压低BOM成本。当然低成本不等于偷工减料。PCIe 3.0的8Gbps速率对信号质量还是有要求的差分对的阻抗必须控制在85欧姆±10%走线长度要尽量等长过孔要尽量减少。这些在PCB设计阶段就得严格把关否则后期调试会非常痛苦。2. 核心硬件细节与实操要点2.1 PEX8748的配置方式与关键引脚PEX8748支持两种配置方式通过I2C总线加载外部EEPROM或者通过Strapping引脚在复位时采样配置。这张卡用的是Strapping方式因为不需要额外的EEPROM芯片成本更低配置也更直观。Strapping引脚主要在复位释放的那一刻被采样决定芯片的端口宽度、链路速率、上行端口位置等关键参数。具体到这张卡上行端口选择通过STRAP_UPSTREAM引脚拉高指定Port 0为上行端口。链路宽度STRAP_WIDTH[1:0]设置为0b10对应x8上行。下行端口配置Port 1和Port 2配置为x4分别对应两路SlimSASPort 3到Port 6配置为x2对应四路NGFF。参考时钟STRAP_REFCLK设置为0b01选择外部100MHz差分时钟输入。这些Strapping电阻的精度要求不高普通1%精度的电阻就够用但上拉和下拉的阻值必须匹配一般用4.7kΩ到10kΩ之间。阻值太小会增加功耗太大则容易受干扰导致采样错误。注意Strapping引脚在复位期间的电平必须稳定不能有毛刺。如果PCB走线过长或者靠近高频信号建议加一颗100nF的滤波电容到地。2.2 电源树设计与去耦电容布局PEX8748的电源需求主要有四路1.0V核心电压、1.8V IO电压、3.3V辅助电压、以及1.0V的SerDes模拟电压。这四路电源的上电时序有严格要求核心电压必须先于IO电压建立否则可能导致芯片内部逻辑锁死。这张卡的电源树是这样的主板PCIe插槽的12V经过一颗MP2145 DC-DC降压到1.0V给核心和SerDes供电3.3V经过一颗TLV1117 LDO降到1.8V给IO供电3.3V直接给辅助电路。上电时序通过RC延时电路实现12V先到经过约10ms延时后3.3V才建立确保核心电压先于IO电压。去耦电容的布局是另一个关键点。PEX8748底部有大量电源焊盘每个电源引脚旁边都必须放一颗0.1μF的陶瓷电容距离越近越好最好在同一个焊盘区域内。另外在芯片四周还要放几颗10μF的钽电容或MLCC用于滤除低频纹波。实测下来如果去耦电容离芯片超过5mmSerDes的误码率会明显上升所以布局时一定要优先保证电容的位置。2.3 PCIe差分走线的阻抗控制与等长要求PCIe 3.0的差分信号速率是8Gbps对应基频4GHz波长在PCB介质中大约是37mm。这个频率下走线不再是简单的连通问题而是传输线问题。差分阻抗必须控制在85Ω±10%否则信号反射会导致眼图闭合。具体到这张卡的叠层设计用的是6层板Top-GND-SIG-GND-PWR-Bottom的结构。差分线走在Top层和Bottom层参考平面分别是第二层的GND和第五层的PWR。走线宽度0.15mm间距0.2mm通过阻抗计算工具可以算出差分阻抗约85Ω。等长要求方面同一对差分线内的两条线长度差不能超过0.1mm不同对之间的长度差可以放宽到2mm以内。过孔是阻抗不连续的主要来源所以每对差分线尽量少换层如果必须换层要在过孔旁边加回流地过孔减少回流路径的阻抗。实操心得走线时先用阻抗计算工具确定线宽和间距然后在PCB软件里设置好差分对规则让软件自动检查。手工调整时优先保证差分对内等长对间等长可以稍微放宽。2.4 SlimSAS和NGFF连接器的选型与焊接SlimSAS连接器选的是SFF-8654 4i规格支持x4链路带金属屏蔽壳插拔寿命在500次以上。NGFF连接器则是标准的M.2 M-Key插座支持PCIe x2模式高度选的是4.2mm的矮版方便在紧凑机箱里安装。焊接方面SlimSAS连接器的引脚间距是0.5mmNGFF是0.5mm都属于细间距器件手工焊接难度较大。建议用热风枪配合焊膏回流焊温度曲线设置到峰值245°C回流时间控制在60秒以内。焊完后用放大镜检查引脚是否有连锡或虚焊特别是SlimSAS的屏蔽壳接地脚必须全部焊牢否则会影响信号质量。3. 完整实操流程与关键环节实现3.1 原理图设计要点与检查清单原理图设计用的是KiCad 7.0整个工程分三个层次顶层是PEX8748和电源部分第二层是SlimSAS和NGFF的连接器第三层是时钟和配置电路。设计时重点检查了以下几个地方PEX8748的每个电源引脚是否都有去耦电容且电容值是否正确。Strapping电阻的阻值和连接方向确保复位时采样到正确的配置。差分对的极性是否接反PCIe的TX和RX必须交叉连接即主机的TX接设备的RX。时钟信号的匹配100MHz差分时钟的终端电阻是否放置正确。I2C总线的上拉电阻虽然这张卡不用I2C配置但预留了调试接口上拉电阻不能少。原理图完成后用ERC电气规则检查跑了一遍确认没有悬空引脚和电源冲突。然后导出网表准备PCB布局。3.2 PCB布局与叠层设计实录PCB布局的核心原则是先放芯片再放连接器最后放电源和阻容。PEX8748放在板子中央偏上的位置这样到各个连接器的走线长度比较均衡。两路SlimSAS放在板子左侧四路NGFF放在右侧上行PCIe金手指放在底部整体布局比较紧凑板子尺寸控制在120mm x 80mm。叠层设计前面提过是6层板。具体参数如下表层序功能介质厚度铜厚Top信号层0.1mm1ozL2GND平面0.2mm1ozL3信号层0.1mm1ozL4GND平面0.2mm1ozL5PWR平面0.1mm1ozBottom信号层-1oz这个叠层的好处是每个信号层都有相邻的参考平面阻抗容易控制EMI也比较好。缺点是只有两个信号层走线密度受限所以布局时要尽量优化走线路径避免交叉过多。3.3 关键信号走线策略与仿真验证差分走线全部走在Top层和Bottom层避免换层。如果必须换层比如从Top层换到Bottom层就在过孔旁边加两颗回流地过孔间距不超过1mm。走线时先用KiCad的差分对工具拉出大致路径然后手工调整确保差分对内等长。时钟信号走的是L3层因为L3层夹在两个GND平面之间屏蔽效果最好。100MHz差分时钟的走线长度控制在50mm以内终端电阻放在接收端附近阻值100Ω。走线完成后用KiCad自带的信号完整性分析工具跑了一遍主要看差分对的阻抗是否连续、过孔处的阻抗突变是否在可接受范围内。仿真结果显示在8Gbps速率下眼图张开度大约0.6UI满足PCIe 3.0的要求。3.4 打样、焊接与上电测试流程PCB打样找的是嘉立创6层板沉金工艺阻抗控制公差±10%。打样回来后先目检确认没有明显的划伤或蚀刻不良。然后开始焊接顺序是先焊PEX8748再焊电源芯片最后焊连接器和阻容。PEX8748是BGA封装引脚间距0.8mm焊接难度中等。用的是热风枪加焊膏温度设置到260°C风量调到最小避免吹飞周边的小元件。焊完后用X光检查了一遍确认没有虚焊和连锡。上电测试分三步先测各路电源电压是否正常再测时钟信号是否有输出最后插到主板上看能否识别。第一次上电时1.0V核心电压正常1.8V IO电压正常但时钟信号没有输出。检查后发现是晶振的负载电容选错了换成12pF后时钟正常。插到主板上后系统识别到了PEX8748但下行端口只认出了两路SlimSAS四路NGFF都没识别。3.5 端口识别问题的排查与修复NGFF端口不识别首先怀疑是Strapping配置有问题。用示波器测了STRAP_WIDTH引脚的电平发现Port 3到Port 6的配置引脚电平不对应该是0b01x2模式实际测到的是0b00x1模式。检查电阻后发现有两个下拉电阻焊错了位置导致配置错误。重新焊接后四路NGFF全部识别。但新的问题又来了NGFF端口虽然识别了但速率只有2.5GT/sGEN1不是预期的8GT/sGEN3。排查后发现是NGFF连接器的参考时钟没有接对PEX8748的每个下行端口都需要独立的参考时钟而NGFF连接器上没有时钟输出需要从PEX8748的时钟输出引脚引过来。重新飞线后速率恢复到GEN3。避坑技巧PEX8748的每个下行端口都需要参考时钟如果连接器本身不带时钟输出一定要从Switch的时钟输出引脚引过去否则链路速率会被限制在GEN1。4. 常见问题与排查技巧实录4.1 链路速率不达标的问题排查链路速率不达标是PCIe扩展卡最常见的故障之一。表现是设备能识别但速率只有GEN1或GEN2达不到预期的GEN3。排查思路如下现象可能原因排查方法速率只有GEN1参考时钟缺失或频率不对用示波器测时钟引脚确认100MHz差分信号正常速率只有GEN2差分走线阻抗不连续用TDR测阻抗检查过孔和连接器处是否有突变速率不稳定电源纹波过大用示波器测电源纹波确认在50mV以内部分端口速率低Strapping配置错误检查对应端口的STRAP引脚电平实测中遇到过一次速率不稳定的情况后来发现是1.0V核心电压的纹波太大达到了120mV。在核心电压输出端加了一颗220μF的钽电容后纹波降到30mV速率稳定在GEN3。4.2 设备无法识别的几种典型情况设备完全无法识别通常有以下几种原因电源时序不对核心电压和IO电压的上电顺序反了导致芯片内部逻辑锁死。解决方法是调整RC延时电路的参数确保核心电压先建立。Strapping配置错误上行端口选错了或者链路宽度配置不对。用示波器逐个检查Strapping引脚的电平。差分对极性接反TX和RX接反了导致链路无法建链。检查原理图和PCB确认交叉连接正确。金手指接触不良PCIe金手指有氧化或污渍用橡皮擦清理后重新插入。有一次遇到设备完全不识别排查了半天发现是金手指上有一层助焊剂残留用酒精清洗后正常。这个坑很隐蔽因为肉眼几乎看不出来但确实会影响接触。4.3 信号完整性问题的定位与解决信号完整性问题通常表现为误码率高、链路不稳定、或者在高负载下掉盘。定位方法是用示波器测眼图或者用误码仪测误码率。如果没有专业设备可以通过以下方法初步判断降速测试把链路速率降到GEN2或GEN1如果问题消失说明是信号完整性问题。换槽测试把卡插到主板的另一个PCIe插槽如果问题消失说明是主板插槽或走线的问题。加电容测试在差分线上串联一颗0.1μF的电容如果问题改善说明是直流偏置问题。解决信号完整性问题的方法主要有优化走线阻抗、减少过孔、增加去耦电容、调整预加重和均衡参数。PEX8748支持通过Strapping引脚调整发送端的预加重和接收端的均衡具体参数需要根据实测眼图来调。4.4 散热与长期稳定性注意事项PEX8748的功耗在满载时大约5W左右不加散热片的话芯片表面温度会到70°C以上。虽然芯片本身能耐受125°C的结温但长期高温会加速老化影响稳定性。这张卡在芯片上方贴了一块20mm x 20mm x 10mm的铝散热片用导热胶固定。实测满载时芯片表面温度在55°C左右比较理想。另外SlimSAS和NGFF连接器在插拔时要注意力度不要硬拽否则容易损坏连接器或PCB焊盘。特别是NGFF连接器M.2盘的固定螺丝一定要拧紧否则振动会导致接触不良。实操心得如果机箱风道不好建议在扩展卡附近加一个4cm的小风扇主动散热。实测下来加风扇后芯片温度能降15°C左右长期运行的稳定性明显提升。4.5 成本清单与BOM优化建议这张卡的整体成本控制在300元以内主要BOM如下元件型号单价元数量PEX8748PEX8748-BA50BC1201DC-DCMP214531LDOTLV111711SlimSAS连接器SFF-8654 4i152NGFF连接器M.2 M-Key54晶振100MHz差分81PCB6层沉金501其他阻容-20-优化建议如果批量做PEX8748可以从二手市场淘价格能压到80元左右PCB打样可以拼板分摊下来每张板子只要30元连接器可以选国产替代价格能再降30%。5. 实际使用体验与扩展思路这张卡在手里的NAS上跑了三个月挂了两块U.2盘和四块NVMe盘日常读写稳定没有出现过掉盘或速率下降的情况。温度控制得也不错夏天室温30°C时芯片表面55°C硬盘温度在45°C左右。后续的扩展思路有几个方向。一是把上行链路改成x16这样能支持更多的下行端口或者给NGFF端口分配x4的带宽。二是增加I2C配置接口通过EEPROM灵活调整端口配置不用再焊Strapping电阻。三是加一颗PCIe时钟发生器给每个下行端口提供独立的参考时钟进一步提升信号质量。最后分享一个小技巧如果手头没有X光机检查BGA焊接可以用万用表测BGA焊盘的对地阻值如果某个焊盘的阻值明显偏大或偏小说明可能虚焊或连锡。这个方法虽然不能完全替代X光但能排查出大部分明显的焊接问题。