
先交代个背景。我之前在一个sub-1GHz远距离数传项目里用S2-LP做主收发芯片样机做出来之后发现输出功率始终卡在14dBm左右空旷环境怎么测都只有六七百米的稳定距离。客户那边的要求是至少一公里起步最好能到两公里。压根没有犹豫方案直接改成外接PA。整个过程中踩了一堆时序、匹配、供电的坑调试时还烧过一颗前端模块。这篇笔记就是把从芯片引脚到PA使能、再到射频匹配和频谱调试的完整链路讲清楚给正准备做同样事的朋友省点弯路。1. 为什么要给S2-LP外接PA1.1 S2-LP的输出能力边界S2-LP这颗芯片在sub-1GHz收发器里综合素质不错待机功耗低、灵敏度高像Sigfox、wM-Bus和各类私有协议都有现成的参考代码。但它的最大射频输出功率标称大概在14dBm也就是25mW这个量级。这个功率做短距离的遥控开关、传感器数据上传完全没问题可一旦链路要求拉远比如农业物联网里的田间节点数据回传、水利遥测、城市里的远距离数传14dBm的余量就非常吃紧。无线通信里有一个大家都很熟的规律发射功率每增加3dB理论通信距离大概能增加40%。从14dBm做到27dBm相当于多了13dB的增益理想状况下接收端的信噪比会有非常明显的改善距离翻好几倍是正常操作。S2-LP内部没有集成大功率PA想要更高的发射功率只有两条路换更高功率的SOC方案或者在后级加外部PA。第一种成本高而且软件协议栈可能要重写第二种改动小、见效快这也是我最后选择的方向。1.2 外接PA的收益和代价外接PA最主流的做法是选一颗射频前端模块FEM把PA和LNA打包在一起外部只需控制两个使能脚。S2-LP输出个十几dBm的功率FEM内部增益通常是二十多dB最终送出去的功率做到27dBm甚至33dBm都没问题。如果只是纯粹把发射功率顶上去也可以选单独的PA芯片再接一个射频开关做收发射频链路切换这种方案成本更低一点但控制逻辑和匹配调试相对复杂。不过收益和代价永远成正比。加了PA之后首先面临的是功耗和供电问题一颗输出27dBm的PA推满时的电流经常在300到500mA之间这个量级对PCB供电走线和电源芯片都是一个不小的考验。其次是谐波问题PA是宽带放大器谐波抑制一般不如收发器内部做得干净后面必须加低通滤波器。再一个就是走线布局高功率输出和低功率输入信号之间如果没有足够的隔离自激、频率牵引、灵敏度下降各种问题都会冒出来。简单列个对比对比项S2-LP直发S2-LP 外部PA典型输出功率14dBm27dBm到33dBm发射链路工作电流30mA左右300到500mA谐波抑制内部处理相对干净必须外加低通滤波器接收路径内置LNA直接可用需要FEM或射频开关做切换系统复杂度低中等偏高BOM成本低增加十几到几十元1.3 什么场景真正需要外部PA我个人的判断标准比较简单点对点通信要求超过1公里基本就得考虑加PA如果链路要穿墙、穿楼、穿过厂房里的金属框架那更是必须加。433MHz频段在城市里做数传868/915MHz做无线抄表和农业传感这些项目里S2-LP直发模式很难稳定覆盖加上PA后整个链路预算会宽松很多。还有一种情况容易被忽略当工作频率做到920MHz甚至更高时S2-LP在高频段的输出功率本来就会往下掉这时候外接PA不只是为了“更远”更是为了把高频段的输出功率拉回到标称范围保证全频段的一致性。2. 硬件侧设计要点状态信号、PA控制与匹配2.1 S2-LP的状态信号从哪里来驱动外部PA的第一步是让S2-LP把“当前是发还是收”这个信息送给PA控制电路。S2-LP的GPIO0到GPIO3都可以被配置成不同功能其中最推荐使用的是“天线开关控制”功能。把GPIO0配置成控制发射路径的门信号GPIO1配置成控制接收路径的门信号这两个输出直接接到外部FEM的TX_EN和RX_EN上S2-LP会在内部状态机进入TX或RX时自动翻转这两个GPIO的电平。这里的关键点是用S2-LP内部自动的天线开关控制时序完全由射频芯片自己掌控你不用在MCU中断里去卡微秒级别的电平翻转。如果改用普通GPIO由软件手动控制也不是不行但收发切换瞬间正是主循环最容易被其他任务打扰的时候一个调度延迟就可能让PA使能晚了几个微秒导致帧头被切掉。实测下来这种问题最磨人因为不是每次都复现偶尔一帧丢个开头几个字节误码率会变得很难看。所以我的建议非常明确能用硬件自动控制就别用软件去抠时序。整体连接关系大致是这样的S2-LP的射频输出先经过一级匹配网络送到PA的输入端GPIO0接FEM的TX_ENGPIO1接FEM的RX_ENPA的输出再接一个低通滤波器到天线。如果采用的是纯PA加外置射频开关的做法那GPIO0负责控制PA使能GPIO1负责控制射频开关的收发方向接收时天线要从PA输出切换到S2-LP的接收通路。2.2 PA控制电路的设计原则PA控制电路设计核心就两件事使能信号的时序要稳PA的供电要扛得住。先说时序。S2-LP从STX命令到真正有射频能量输出之间存在一段PLL建立和TX启动时间这段时长随频率和参数配置变化几十到一百多微秒都有可能。使用内部自动切换时这个延时由芯片自己管理不额外占用MCU资源。如果是手动控制PA就得在代码里精确把握时序先把数据灌进FIFO发送STX等到PLL锁定稳定后再拉高PA_EN。如果PA先上电而S2-LP还没输出载波PA就处于无输入信号的空载状态很容易自激或产生大电流反复几次模块就会损坏。再说供电。一颗需要500mA峰值电流的PA不建议从S2-LP同一路LDO后面取电更不要用细走线串联过去。我给的建议是PA单独用一片低内阻的LDO或DC-DC供电数字地和PA地单点汇合PA供电走线尽量短而宽。去耦电容按10uF钽电容加100nF、10nF、1nF逐级组合摆放紧贴PA电源引脚。之前调试时遇到过PA输出频谱明显出现杂散查到最后就是PA电源纹波偏大换了大容量钽电容并把地割开之后频谱立刻干净很多。布局上还要注意高功率输出对前级射频信号的干扰。S2-LP的锁相环对电源噪声和外部辐射都比较敏感PA的输出走线如果绕了半个板子或者离锁相环太近频率牵引和杂散几乎是必然结果。PCB上PA输出到天线的走线按50欧微带线设计走线宽度根据板材和叠层算好过孔尽量少。低频时还好到了868MHz以上这些细节就能直接拉开频谱仪上的噪声底。2.3 PA芯片与滤波器选型思路选PA不外乎看四个参数目标输出功率、工作电压、增益、效率。做个27dBm的方案很多PA需要5V供电系统如果本身只有3.3V就得考虑带升压的FEM或者直接用5V电源轨。PA的小信号增益也得特别注意S2-LP能输出14dBm如果PA增益是20dB输出功率很容易冲到30dBm以上此时反而要小心发射链路对接收链路的泄露干扰。输出端的低通滤波器不是可选项而是必选项。PA本身是宽带的标称工作在868MHz的模块二次谐波往往也就抑制十几dBc这种杂散拿去过认证肯定过不了。常规做法是在PA输出后面加一级3到5阶的LC低通截止频率按工作频率的1.05到1.15倍设置。比如868MHz系统我习惯把截止频率放在930MHz到1GHz之间基频插入损耗控制在0.3dB以内二次谐波抑制做到40dB以上。电感选择上尽量用绕线高Q电感不要用叠层电感叠层电感在几百兆赫兹下Q值偏低插损和滤波效果都不理想。3. 软件配置从寄存器到收发流程3.1 初始化序列里的GPIO配置软件上电后第一件事就是把S2-LP的GPIO配置好放在初始化最前面因为它影响后续所有收发流程。配置的过程就是通过SPI往GPIO0_CONFIG、GPIO1_CONFIG这些寄存器写值。比如说把GPIO0配置成天线开关控制1用于控制PA的TX_ENGPIO1配置成天线开关控制2用于控制RX_ENGPIO2保持IRQ中断输出。每个GPIO寄存器具体要写什么值去看S2-LP数据手册的寄存器映射表不同版本固件可能略有差异。有个细节特别容易忽略配置完GPIO寄存器后一定要做一次S2-LP软复位让GPIO控制逻辑重新加载。我调试时有一次写完寄存器就直接发STXGPIO怎么都不翻转查了半天才发现是没复位。另外如果用的是外部PA方案要确认S2-LP内部的天线开关逻辑没有被错误地同时使能否则内部开关和外部PA可能打架TX/RX路径会变得混乱。代码层面我习惯用宏定义把GPIO配置值写清楚#define S2LP_GPIO0_ANT_SW1 0x1A #define S2LP_GPIO1_ANT_SW2 0x1B #define S2LP_GPIO2_IRQ 0x08 void s2lp_pa_init(void) { s2lp_spi_write(REG_GPIO0_CONFIG, S2LP_GPIO0_ANT_SW1); s2lp_spi_write(REG_GPIO1_CONFIG, S2LP_GPIO1_ANT_SW2); s2lp_spi_write(REG_GPIO2_CONFIG, S2LP_GPIO2_IRQ); s2lp_spi_strobe(CMD_SRES); // 后续再配置频率、调制、功率等参数 }3.2 收发切换的时序逻辑自动天线开关控制的好处是时序完全由S2-LP内部处理软件只需要发送STX和SRX命令。进入TX状态时GPIO0自动拉高、GPIO1自动拉低外部PA的TX_EN被激活进入RX状态时反过来。这套逻辑天然保证TX_EN和RX_EN不会同时为高对FEM来说安全性好很多。不过自动模式也有需要人工确认的参数S2-LP提供了天线开关控制相关的延迟配置用来调整GPIO状态翻转和射频链路启动之间的相对时间。不同PA对使能建立时间的要求不一样有的要求TX_EN比输入信号提前5us有的要求10us。所以初始化时要根据PA手册查好这个时间然后对照S2-LP手册的延迟配置说明设一个合适的值。如果设得太短PA还没完全进入工作状态就来了射频信号发射频谱会变差设得太长每次发送白白多耗一段时间的电流。如果非要手动控制PA流程上要注意放在关中断的临界区里执行。一个可靠的发送流程是这样先把数据写入TX FIFO发STX命令然后用短延时等待S2-LP载波稳定最后拉高PA_EN开始真正发射。接收时反过来先拉低PA_EN拉高RX_EN再发SRX命令。这个延时的数值最好实测。我手头测过一批S2-LP样片在868MHz、50kbps配置下从STX到载波稳定的时间大约是110到120us再加上PA手册要求的使能提前量实际延时设定在100us左右才合适。每颗芯片、每个配置组合都可能有差异不能照抄网上的数字。3.3 完整发送流程的伪代码示例把完整的发送流程放在一起看更直观。下面这个例子用的是自动天线开关控制代码逻辑比较简单void s2lp_send_frame(uint8_t *buf, uint16_t len) { s2lp_write_fifo(buf, len); s2lp_spi_strobe(CMD_STX); // 等TX完成中断 while (!s2lp_flag_tx_done()) {} // 发完自动切回接收 s2lp_spi_strobe(CMD_SRX); }这段代码的背后S2-LP在STX之后自动完成PLL锁定、天线开关切换、PA使能这一整套动作看起来只有几行实际硬件的时序是准的。反过来手动控制的版本就长很多需要在STX和PA_EN之间插入延时发完还要手动拉低PA_EN。两套方案对比下来自动控制对代码维护来说压力小很多也降低了在长期运行中因为逻辑分支出错导致PA损坏的概率。3.4 接收路径的配置要点外接PA的项目里大家往往只关注发射其实接收路径同样容易出问题。用FEM方案时接收状态下需要打开LNA让S2-LP内部的RX通路接到天线上。这个切换同样由GPIO1控制RX_EN来完成。使用自动天线开关控制时S2-LP会在进入RX状态时自动拉高RX_EN不用你额外操心。如果用手动控制就必须保证在SRX命令之前LNA就已经使能。否则S2-LP进入接收状态了LNA还没准备好进来的前几个帧就会被吞掉。这类问题在低速率通信中不太明显一旦数据率提高每帧时长缩短丢头的现象就非常频繁。还有一点安全逻辑要提醒大多数FEM都明确要求TX_EN和RX_EN不能同时为高否则内部会形成直通电流轻则信号路径互串重则烧坏模块。使用S2-LP自动天线开关控制时同一时刻只会有一个开关位有效天然安全。手动控制时必须在代码里加互锁切换前先把两个脚都拉低再拉高目标脚千万不要出现“先开后关”的操作顺序。4. 调试常见问题与排查实录4.1 一发射PA就出现大电流或异响这个是我遇到的第一个大坑。最初样机上电后每次发送数据都听到PA模块附近有轻微的“滋啦”声同时电源上的电流尖峰特别大。用示波器抓PA供电电流波形后发现PA_EN拉高的时间明显早于S2-LP载波稳定PA在完全没有输入信号的情况下先被打开了处于不确定工作状态自激振荡导致电流飙升。解决方法是重新调整PA使能时序。我用逻辑分析仪抓了GPIO0和STX命令的时间关系然后把代码中的使能延时逐步加大测试最终把延时拉长到载波稳定后再拉高PA_EN电流尖峰立刻消失。如果你的项目也遇到类似现象建议按这个顺序排查第一步看逻辑分析仪里PA使能和STX的相对时间第二步把天线端通过大功率衰减器接到频谱仪观察开关边沿有没有异常宽带噪声第三步把使能延时加长50%验证电流是否回落。PA宁可晚开一点点也不要开早了这是最核心的原则。4.2 谐波超标怎么处理外接PA之后谐波超标几乎是必然的。S2-LP直发时内部滤波还能把谐波压住加了PA后整个发射链路被推得比较猛谐波分量显著增加。我测试时遇到的情况是二次谐波相对基频只抑制了22dBc左右三次谐波大概能抑制到30dBc出头这么差的指标别说认证了在频谱上自己看着都不过关。处理方法就是加低通滤波器。我用了一个3阶切比雪夫低通截止频率设在950MHz先把滤波器装到PA输出和天线之间。装完后频谱仪上的二次谐波直接从22dBc压低到45dBc以上三次谐波也好看了很多。调整滤波器时要注意输入输出都要按50欧匹配电感用绕线高Q电感电容用C0G材质。每次只改一个元件用频谱仪对比前后变化别一次动好几个元件否则你根本不知道是哪颗料起的作用。4.3 加PA后接收灵敏度反而变差这个坑很有迷惑性。我第一版PA板子做出来后发射功率确实上去了但接收灵敏度从原本的-120dBm级别掉到了-115dBm左右整体链路预算反而亏了。刚开始以为是S2-LP灵敏度被干扰后来排查发现是接收路径的损耗增加导致。外接PA模块在关闭状态下它的输出端口并不是“完全消失”而是存在一定插损和反射。如果天线信号经过PA的路径再到S2-LP接收时PA那一截链路就是纯损耗。解决办法是按照接收路径重新选型。如果使用带LNA的FEM接收时信号走FEM内部的LNA到S2-LP绕开PA的高损耗通路问题就能大幅缓解。如果是纯PA方案必须用射频开关把天线在TX和RX路径之间真正切换开关隔离度至少30dB以上。还有一个小技巧如果实在没法改硬件可以把接收灵敏度要求放低一点同时靠增大发射功率来换取链路预算但这不是长久之计因为接收端底噪上去了远处弱信号还是收不到。4.4 测试PA输出时的安全提醒调试PA时最容易出现的现场事故是烧频谱仪。PA输出到30dBm已经接近很多频谱仪的最大输入安全功率一旦发送瞬间有尖峰衰减器瞬间就会坏掉。正确做法是PA输出先串一个不小于30dB、功率容量至少2W的衰减器再进频谱仪。我自己习惯用40dB的大功率衰减器读数出来后给结果加上40dB就是真实输出功率。衰减器的工作频率范围也要覆盖到被测频段别拿一个几GHz宽带衰减器以为一定安全功率容量不够照样烧。另外PA输出端不能空载悬空。测试时一定要接50欧负载或者真实天线否则PA输出失配驻波反射会让PA的输出级承受非常大的电压应力轻则频谱乱跳重则烧管。很多做射频的老手也偶尔在赶工时忘掉这一步所以我在项目里定了个规矩没有接负载就不允许上电发射甚至在外壳上写了“未接天线禁止发射”的警告标签。调完这一整套之后我把样机拿到户外做了一次实际对比。同样天线、同样频点S2-LP直发模式的稳定覆盖距离大约是700米加了PA并调好匹配和滤波之后的版本在1.8公里处仍能稳定收包整套方案才算真正满足项目需求。调试过程中踩过的那几个坑写出来其实都是很简单的原理但没实测过确实容易忽略。如果你也在给S2-LP加外部PA先把GPIO配置和时序调稳定再上功率测试这两步做扎实了后面量产基本不会出大问题。