尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

M.2 E Key载板设计实战:WiFi6模块接口、PCIe走线与电源滤波要点

M.2 E Key载板设计实战:WiFi6模块接口、PCIe走线与电源滤波要点 1. 从一块转接板说起M.2 E Key到底承载了什么很多人第一次接触M.2 E Key是在给迷你主机或者工控板加装无线网卡的时候。市面上能买到的WiFi6模块比如Intel AX210、AX200或者Realtek RTL8852BE绝大多数都是M.2 E Key的形态。买回来往板子上一插装个驱动就能用看起来非常简单。但如果你需要自己设计一块载板把这类模块集成到自己的硬件方案里事情就完全不一样了。M.2 E Key这个接口物理尺寸是22mm宽、30mm长标准叫法是M.2 2230。它的金手指有75个引脚单面但实际定义的信号远不止USB两根线供电那么简单。E Key这个key位决定了它主要面向的是无线通信模块——WiFi、蓝牙、甚至部分蜂窝模组。它同时引出了PCIe x1、USB 2.0、SDIO、UART、I2S等多种总线具体用哪一组取决于模块本身的设计。这就带来一个很现实的问题你拿到一个WiFi6模块它的PCIe接口和USB接口可能同时存在蓝牙部分走USB还是走UART不同厂家做法不一样。如果你只是照抄某个参考设计很可能出现WiFi能用但蓝牙找不到或者模块识别了但速率跑不满的情况。我在实际项目中就遇到过RTL8852BE在网页版测速时频繁断流的问题排查了很久才发现是PCIe链路的电源纹波和参考时钟抖动导致的。这篇文章面向的是需要自己设计M.2 E Key载板的硬件工程师或者想深入理解WiFi6模块接口原理的嵌入式开发者。我会从接口定义、电源设计、PCIe走线、蓝牙共存、天线布局几个维度把这块板子的设计要点拆开讲清楚。不是简单的照着参考设计抄而是告诉你每个设计决策背后的原因以及实测中容易踩的坑。2. 拆解M.2 E Key的引脚定义哪些信号真正被用到2.1 引脚功能分组与模块实际占用情况M.2 E Key的75个引脚按照功能可以分成几大类电源与地、PCIe通道、USB 2.0、SDIO、UART/I2S、控制信号、以及一些保留或厂商自定义引脚。但具体到一个WiFi6模块它实际用到的可能只有其中一部分。以Intel AX210为例它的WiFi部分走PCIe x1蓝牙部分走USB 2.0。而有些模块比如某些基于Qualcomm芯片的方案WiFi走PCIe蓝牙走UART。还有更省事的方案WiFi和蓝牙都走USB但这样WiFi速率会受限于USB 2.0的带宽跑不满WiFi6的理论速率。这里有一个很容易被忽略的点M.2 E Key的PCIe通道是x1还是x2标准E Key定义的是PCIe x2但很多模块只实现了x1。如果你设计的载板只连了x1的TX/RX对而模块需要x2那要么不识别要么降速。我在选型阶段一般会先拿到模块的硬件设计手册Hardware Design Guide确认它到底用了哪些引脚再决定载板的走线。下面这张表是我根据几个常见模块整理的引脚使用对比可以作为设计前的快速参考信号类型Intel AX210RTL8852BE某Qualcomm方案WiFi总线PCIe x1PCIe x1PCIe x1蓝牙总线USB 2.0USB 2.0UART参考时钟需要外部提供需要外部提供内置晶振供电电压3.3V3.3V3.3V天线接口IPEX MHF4 x2IPEX MHF4 x2IPEX MHF4 x2控制信号W_DISABLE、LEDW_DISABLE部分保留注意上表中的参考时钟一栏非常关键。PCIe协议要求收发端共享一个参考时钟如果模块本身不带晶振载板就必须提供100MHz的差分时钟。这个时钟的质量直接影响PCIe链路的稳定性。2.2 那些容易接错的非核心引脚除了PCIe和USB这些高速信号还有几个引脚看起来不起眼但接错了模块直接不工作。第一个是W_DISABLE无线禁用引脚。这个信号一般是低电平有效拉低时模块会关闭射频功能。有些设计者忘了处理这个引脚悬空状态下模块可能处于不确定状态表现为时好时坏。我的做法是加一个上拉电阻到3.3V确保默认不禁用同时留一个测试点方便调试。第二个是LED控制引脚。很多模块会输出一个WiFi状态指示信号但这个信号的驱动能力很弱直接驱动LED会烧掉或者亮度极低。正确做法是加一个NPN三极管或者MOS管做缓冲LED的限流电阻根据模块手册推荐的电流来选一般是2mA到5mA。第三个是复位信号。部分模块有一个复位输入引脚低电平复位。如果你不控制它最好也加上拉避免模块在上电过程中被意外复位。我见过一个案例模块的复位引脚和电源使能引脚接在一起结果上电时序不对模块一直处于复位状态查了两天才发现。2.3 电源引脚的数量与电流承载能力M.2 E Key的3.3V电源引脚有好几个分布在金手指的不同位置。这不是冗余设计而是为了分散电流、降低接触电阻。WiFi6模块在发射时的峰值电流可能达到1.5A甚至更高如果只靠一两个引脚供电接触电阻上的压降会导致模块端电压不足轻则降功率重则断连。我在设计载板时会把所有3.3V引脚都连到电源平面上并且在靠近金手指的位置放至少两个22uF的陶瓷电容和几个0.1uF的高频去耦电容。这里有个经验大电容负责储能小电容负责高频去耦两者缺一不可。只放0.1uF瞬态响应不够只放22uF高频阻抗又太高。另外电源的走线宽度也要注意。1A电流下1oz铜厚、10mil宽的走线温升大约10°C但如果走线太长压降会很明显。我一般会用20mil以上的宽度或者直接铺铜。如果载板空间允许在电源入口处加一个负载开关或者PMOS做限流保护防止模块短路时把主电源拉死。3. PCIe链路设计从参考时钟到差分走线的完整考量3.1 参考时钟PCIe稳定性的隐形杀手PCIe参考时钟是100MHz的差分信号标准要求频率偏差在±300ppm以内抖动Jitter要尽可能低。很多WiFi6模块本身不带晶振需要载板提供这个时钟。如果你随便用一个普通的晶振或者时钟发生器很可能出现链路能建立但速率不稳定、或者频繁掉线的问题。我之前遇到RTL8852BE在测速时断流最后定位到就是参考时钟的抖动太大。当时用的是某国产时钟缓冲器输出抖动在2ps RMS左右看起来不高但PCIe Gen2对抖动的容忍度比想象中低。换成专用的PCIe时钟发生器比如带展频功能的之后问题就消失了。这里有一个设计要点参考时钟的差分对要走等长、靠近模块引脚并且远离电源和高速数据线。如果载板上还有其他的PCIe设备最好用时钟缓冲器做点对点分发而不是简单并联。并联会导致阻抗不匹配和反射进一步恶化信号质量。3.2 差分走线的阻抗控制与长度匹配PCIe Gen2的差分阻抗要求是85Ω有些标准写100Ω但M.2接口通常按85Ω设计。这个阻抗不是随便画两根线就能满足的需要根据PCB叠层来计算线宽和间距。以常见的四层板为例如果介质厚度是0.2mm介电常数4.3那么差分线宽大约0.2mm、间距0.2mm可以接近85Ω。但具体数值一定要用阻抗计算工具算过不能凭感觉。长度匹配方面PCIe的TX和RX对内部要求等长误差一般控制在5mil以内。TX对和RX对之间倒没有严格的等长要求但最好也不要差太多。走线尽量走直线避免过孔。如果必须换层要在过孔附近加回流地过孔保证返回电流有低阻抗路径。还有一个容易被忽视的点差分线下面的参考平面必须完整。如果参考平面被分割返回电流会绕路导致阻抗突变和EMI问题。我在Layout review时会专门检查PCIe走线下方的地平面有没有被其他信号线割裂。3.3 耦合电容与ESD保护的位置PCIe的TX端需要加交流耦合电容一般是0.1uF的0201或0402封装。这个电容要尽量靠近发送端而不是接收端。很多人放反了导致信号反射增加。对于M.2模块来说如果模块是发送端电容应该放在载板靠近金手指的位置如果模块是接收端电容可以放在载板靠近主控的位置。ESD保护器件也是必须的尤其是M.2接口经常需要插拔。但ESD器件的寄生电容会影响高速信号所以要选超低电容的型号一般小于0.5pF。我通常会在PCIe差分线上并一颗TVS二极管阵列位置放在金手指和耦合电容之间这样ESD电流不会流过耦合电容。提示如果你设计的载板PCIe链路始终无法建立先用示波器看参考时钟有没有输出再看差分线上有没有信号。如果参考时钟正常但链路不通检查耦合电容是否虚焊或者容值不对。4. 蓝牙与WiFi共存USB走线、天线隔离与滤波设计4.1 蓝牙走USB还是UART选型阶段的权衡蓝牙部分走USB还是UART直接决定了载板的接口设计和驱动方案。走USB的好处是带宽高、兼容性好Windows和Linux下驱动都比较成熟走UART的好处是引脚少、不需要额外的USB Hub但速率受限一般只能支持到蓝牙5.0的基础速率。如果你的WiFi已经占用了PCIe蓝牙走USB是比较常见的选择。但这里有一个坑USB 2.0的差分线也是90Ω阻抗而且对走线长度和匹配有要求。如果载板上还有其他的USB设备最好用独立的USB通道不要和蓝牙共用。我见过一个设计蓝牙和摄像头共用一组USB结果摄像头一开蓝牙音频就卡顿。如果选择UART要注意电平匹配。模块的UART一般是1.8V或3.3V电平如果你的主控是5V必须加电平转换。另外UART的流控引脚RTS/CTS最好也接上否则高速传输时容易丢数据。4.2 天线布局WiFi和蓝牙如何互不干扰WiFi6和蓝牙5.2都工作在2.4GHz频段WiFi6也支持5GHz如果天线靠得太近必然会产生干扰。模块一般有两个天线接口一个主天线一个辅助天线。蓝牙通常和WiFi共用主天线通过内部的共存机制来分时复用。在载板设计上天线接口到模块的走线要尽可能短并且做50Ω阻抗控制。如果载板上有金属外壳或者电池要确保天线区域净空不要铺铜。我一般会在天线接口周围留出至少5mm的禁布区并且把天线走线走在板边减少介质损耗。如果WiFi和蓝牙同时工作比如在传输文件的同时听蓝牙耳机共存机制就很重要。模块内部一般有硬件共存接口但载板上不需要额外处理。不过如果载板上有其他2.4GHz的干扰源比如无线鼠标接收器最好远离天线区域。4.3 电源滤波对射频性能的影响射频电路对电源噪声非常敏感。WiFi6模块在发射时电源上的纹波会直接调制到射频信号上导致EVM误差矢量幅度恶化速率下降。我在测试RTL8852BE时发现网页版测速断流用频谱仪看电源纹波发现开关电源的开关频率谐波正好落在WiFi信道内。解决方法是多级滤波。第一级用LC滤波截止频率设在开关频率以下第二级用LDO做线性稳压把纹波压到1mV以下。LDO的选型要注意PSRR电源抑制比在1MHz以上至少要40dB。如果空间允许可以在LDO输出再并一个10uF的钽电容或者聚合物电容进一步降低低频噪声。另外模块的电源引脚旁边一定要放小容值电容比如100pF和1nF用来滤除射频段的高频噪声。这些电容要尽量靠近引脚回路面积越小越好。5. 从原理图到实测调试过程中最常见的五类问题5.1 模块完全不识别先查供电和复位模块插上后系统完全找不到设备这是最常见的问题。排查顺序应该是先量3.3V电源是否正常再量参考时钟有没有输出最后检查复位和W_DISABLE引脚的电平。我遇到过一种情况电源电压正常但模块的3.3V引脚上只有2.8V原因是载板的电源走线太细压降太大。模块在启动瞬间需要较大的电流走线电阻上的压降导致模块欠压复位。把走线加宽到30mil后问题解决。还有一种情况是复位引脚被外部电路拉低。有些载板设计会把复位引脚接到一个RC电路上但RC时间常数太大模块上电后复位信号还没释放导致模块一直处于复位状态。正确做法是用一个简单的上拉电阻或者用主控的GPIO来控制复位。5.2 链路能建立但速率跑不满检查PCIe协商速率如果模块识别了但WiFi速率远低于预期先看PCIe链路协商到了什么速率。在Linux下可以用lspci -vv查看LnkCap和LnkSta字段。如果LnkSta显示2.5GT/s而不是5GT/s说明链路降速了。降速的原因可能是参考时钟抖动太大、差分线阻抗不匹配、或者走线太长。我一般会先用示波器测参考时钟的相位噪声如果抖动超过1ps RMS就要换时钟源。如果时钟没问题再检查差分线的TDR测试结果看阻抗是否在85Ω±10%以内。还有一种可能是模块本身的PCIe控制器只支持Gen1但这种情况在WiFi6模块上比较少见。买模块之前一定要确认它的PCIe版本。5.3 蓝牙时断时续USB走线和电源噪声排查蓝牙断连的问题很多时候不是模块本身的问题而是USB走线或者电源噪声导致的。USB 2.0虽然速率不高但对信号质量也有要求。如果D和D-没有走差分线或者走线太长眼图会闭合导致数据包重传。我通常会用USB协议分析仪抓包看是否有大量的NAK或者CRC错误。如果有先检查USB走线的阻抗和长度匹配。另外蓝牙的电源和WiFi的电源最好分开滤波避免WiFi发射时的电流波动影响蓝牙。5.4 网页测速断流一个典型的电源纹波案例前面提到的RTL8852BE网页测速断流我花了很长时间才定位到。现象是Speedtest跑到一半就卡住然后重新连接。用iperf3跑本地测试却正常说明问题出在互联网测速时的高负载场景。后来用示波器交流耦合看3.3V电源发现当WiFi发射功率增大时电源上出现了周期性的跌落幅度大约100mV。这个跌落触发了模块内部的欠压保护导致断流。根本原因是载板的LDO响应速度不够瞬态电流需求增加时输出电压来不及调整。解决方案是在LDO输出端并联一个220uF的聚合物电容并且在模块电源引脚附近再加一个10uF的陶瓷电容。这样瞬态电流可以由电容就近提供LDO只需要补充平均电流。改完之后网页测速再也没有断过。5.5 天线匹配与EVM恶化射频调试的最后一公里如果以上问题都排除了但WiFi速率还是不理想就要看射频指标了。EVM是衡量WiFi信号质量的关键指标WiFi6在MCS11下要求EVM小于-35dB。如果EVM恶化速率会自动降档。EVM恶化的原因可能是天线匹配不好、电源噪声、或者参考时钟相噪。我一般会先用矢量网络分析仪测天线的S11确保在2.4GHz和5GHz频段都小于-10dB。如果S11没问题再检查电源纹波和时钟抖动。天线匹配网络的元件要选高Q值的比如村田的GJM系列。电感和电容的精度也很重要一般用±0.1pF和±2%的规格。如果匹配网络用的是低精度元件批量生产时一致性会很差。6. 载板设计检查清单与个人经验总结6.1 投板前的自查清单在把PCB发给板厂之前我一般会对照下面这个清单过一遍。这个清单是根据多个项目的踩坑经验总结出来的能避免80%以上的低级错误。检查项具体要求常见错误电源引脚所有3.3V引脚都连接走线宽度≥20mil只连部分引脚走线过细去耦电容每个电源引脚附近有0.1uF全局有22uF以上电容离引脚太远参考时钟100MHz差分抖动1ps RMS走线等长用普通晶振走线不等长PCIe差分线85Ω阻抗对内等长5mil参考平面完整阻抗不匹配跨分割耦合电容0.1uF靠近发送端放反位置容值错误USB差分线90Ω阻抗走线尽量短未走差分长度不匹配天线走线50Ω阻抗周围净空铺铜太近走线过长复位引脚上拉或GPIO控制默认高电平悬空或RC时间常数过大W_DISABLE上拉到3.3V默认不禁用悬空或拉低ESD保护超低电容TVS靠近金手指普通TVS寄生电容过大6.2 几个让我印象深刻的教训第一个教训是关于电源的。早期设计时我觉得3.3V电源随便滤一下就行结果模块在高温环境下频繁掉线。后来用热成像仪看发现LDO的温度到了90°C原因是压差太大、散热不足。换成开关电源加LDO的二级架构后效率上去了温度也降下来了。第二个教训是关于参考时钟的。有一次为了省成本用了一个便宜的时钟缓冲器结果PCIe链路在低温下无法建立。查了手册才发现那个缓冲器的工作温度范围只有0°C到70°C而我们的产品要求-20°C到70°C。换工业级器件后问题解决。第三个教训是关于天线布局的。有一版载板把天线走线走在了电池上方结果WiFi信号被电池吸收速率只有预期的一半。后来把天线移到板边并且把电池挪开速率立刻恢复正常。射频设计真的是一寸长一寸强不能有侥幸心理。6.3 后续可以扩展的方向如果你已经跑通了基本的WiFi6和蓝牙5.2功能下一步可以考虑几个方向。一是做双频并发同时使用2.4GHz和5GHz频段需要模块支持双频同时工作。二是加装外置PA和LNA提升发射功率和接收灵敏度但要注意符合当地的射频法规。三是把载板做成M.2转PCIe的标准卡方便在台式机上使用。我个人在实际操作中的体会是M.2 E Key载板的设计难点不在原理图而在Layout和电源完整性。很多问题在原理图阶段看不出来只有板子回来实测才会暴露。所以投板前多花时间检查走线和电源比事后飞线要划算得多。另外一定要留足够的测试点尤其是电源、时钟和关键控制信号调试时会省很多事。
返回列表