
1. 为什么是 CC1120从“项目要覆盖 3 公里”说起1.1 一个真实项目背后的需求拆解去年接了一个能源管控方向的改造项目厂区里有十来个数据采集点分布在半径大约 3 公里的范围内。最远的两个点位中间还隔着两排钢结构厂房和一片堆料区。采集内容说白了就是 RS485 仪表数据单包不到 300 字节每 5 分钟上传一次对带宽几乎没有要求。但这个项目有三条硬指标误码率低于 1%设备用电池供电至少跑两年以及尽可能减少现场维护。刚开始我也跟大多数人一样脑子里第一个蹦出来的是 LoRa。毕竟“LoRa 远距离”这个概念已经深入人心。但真正对着需求做选型对比时我发现问题没那么简单。LoRa 调制的优势是灵敏度高但它的带宽占用通常更宽在免许可频段里一旦遇到有其他系统占用邻近信道窄带接收机的抗邻道阻塞能力就变得格外重要。再加上 LoRa 的私有调制和解调 IP 绕不开授权项目方希望底层协议完全自主可控所以最终把方案定在了 TI 的 CC1120 上配合参考设计 BOM 里那颗 R7KA8D2KFLCAC 前端器件做一套窄带 Sub-1G 私有协议。1.2 CC1120 的技术底子低速率窄带方案的天花板CC1120 是 TI 旗下非常经典的一颗 Sub-1G 射频收发器覆盖 169/315/433/868/915MHz 等 ISM 频段支持 2-FSK、4-FSK、MSK、ASK/OOK 等调制方式。它最吸引我的地方是三个数字叠在一起最大发射功率 16dBm低速率接收灵敏度可以做到 -129dBm 左右同时接收滤波器带宽能配置到很窄。这三个数字意味着什么发射功率决定了你能“喊”多响接收灵敏度决定了你能“听”多轻而窄带接收带宽则决定了你在嘈杂的电磁环境里能不能听清。CC1120 恰好把这三件事都做到了。相比之下很多通用 Sub-1G 收发器要么发射功率不够要么灵敏度在窄带配置下没那么突出。另外一个容易被忽略的点是 CC1120 支持双频段配置同一颗料可以在多个频段之间切换。有些项目会用 868MHz 做主链路用 169MHz 做备用链路甚至有些参考设计直接给出双频段接收方案。虽然我这次用不到但这给后续产品迭代留了空间。1.3 链路预算手工推演比十篇评测都管用选型阶段我做了一张链路预算表这一步强烈建议所有做无线项目的人认真做一遍。公式其实很简单链路预算 发射功率 发射天线增益 - 发射端馈线损耗 - 空间传播损耗 - 接收端馈线损耗 接收天线增益 - 接收灵敏度 - 设计余量以 868MHz 为例发射功率 16dBm两端各用 3dBi 天线收发端接插件和馈线损耗合计约 1dB接收灵敏度 -129dBm。这样毛估可用的链路预算是可用预算 16 3 - 0.5 - 空间损耗 - 0.5 3 - (-129) ≈ 150dB - 空间损耗自由空间传播损耗在 868MHz 下1 公里大约 91.2dB3 公里大约 100.7dB10 公里大约 111.2dB。也就是说在完全无遮挡的视距环境下这颗芯片的极限能力远远超过 10 公里。但现实世界从来不是自由空间。厂房、树木、地面反射、雨衰、多径衰落这些都会在标称的自由空间损耗之上再叠加二十到四十多 dB 的损失。所以对长距离稳定连接来说芯片本身的收发能力是基础但真正的瓶颈往往在天线高度、前端插损和现场遮挡上。这也是为什么我在方案评审时反复强调 R7KA8D2KFLCAC 这类前端器件的插损不能随便妥协。每一 dB 的插损都会直接吃进链路预算最终表现为距离缩短或者重传率上升。2. 那颗前端器件R7KA8D2KFLCAC在链路里的地位2.1 它的角色滤波、匹配、抑镜像一个都不能少CC1120 的射频端口 RF_N 和 RF_P 是差分口而天线是单端 50Ω。从芯片到天线之间这段电路必须完成三件事第一把差分信号转成单端信号第二做阻抗匹配让芯片看到最优源阻抗第三带通滤波把镜像频率、谐波和带外干扰尽可能压下去。R7KA8D2KFLCAC 在参考设计的 BOM 里承担的就是这第二和第三件事具体到某颗料上可能是带通滤波器也可能是巴伦加匹配网络的组合器件需要以实际数据手册为准。但不管它具体是哪种我们都可以用同一套方法来验证它是否合格。很多人画原理图时看到这种小封装器件习惯性地当成普通电容电阻一样处理。实际上前端无源器件的插入损耗和带外抑制直接决定了整条链路的“听力”和“嗓门”。插入损耗每增加 1dB接收灵敏度就实际恶化 1dB发射端的有效辐射功率也降 1dB。换句话说前端插损每多 1dB你的覆盖距离就要按对数关系缩水一截重传率也会肉眼可见地上升。带外抑制的重要性在接收端体现得更明显。当附近有一个强干扰源落在镜像频点上混频器会把它搬移到中频轻则抬高底噪、降低灵敏度重则直接让解调器锁死永远收不到有效报文。发射端也一样868MHz 的二次谐波落在 1.7GHz 附近三次谐波落在 2.6GHz 附近前端滤波器指标不够这些谐波会顺着天线辐射出去影响其他设备。前端器件关键指标推荐范围影响插入损耗≤ 1.0dB直接进入链路预算回波损耗≤ -10dBVSWR 2反射功率过高影响发射效率带外抑制≥ 30dB目标频段外决定镜像和谐波抑制能力平均输入功率≥ 27dBm防止发射功率反射烧毁器件工作温度-40℃ ~ 85℃工业现场基本要求2.2 拿到料号我做的第一件事不是直接贴板是上网络分析仪射频前端器件最怕“看起来一样实际上差很多”。所以我的习惯是料号到手先做一轮独立验证尤其是滤波器这种无源器件不能只信数据手册。验证流程不太复杂但每个步骤都要做扎实先准备一块 50Ω 微带线测试板两端接 SMA 接头板子材质和厚度最好和自己实际产品接近。用矢量网络分析仪做 SOLT 校准校准平面要推到测试板的 SMA 端口。焊上待测器件后测 S21插入损耗和 S11回波损耗。重点看目标频段 868~928MHz 内 S21 是否平坦插损是否小于 1dBS11 是否低于 -10dB。有条件的话放进高低温箱从 -40℃ 到 85℃ 拉一遍记录中心频率漂移量。我吃过一次亏。有一批替代料在常温下测试曲线非常漂亮S21 几乎是一条平线但在低温测试时中心频率偏了接近四十多兆赫兹整条链路的灵敏度直接掉了十几个 dB。当时现象就是“低温环境下通信时断时续”排查了很久才发现是前端器件温漂导致的。从那以后前端物料上板前的高低温实测就写进了我的必做清单。2.3 换料可以但必须守住三条铁律量产阶段难免遇到器件缺货、交期拉长的情况替代料是常态。但射频前端换料真的不是“脚位一样就能上”的事。我给自己定了三条原则第一必须是同封装、同脚位、同类型的器件否则参考设计里的匹配网络数值全部作废需要重新调匹配。第二插损和带外抑制指标不能低于原器件插损哪怕只差 0.3dB也要老老实实把这 0.3dB 从链路预算里扣掉再判断覆盖距离是否还在规格内。第三温度特性必须经过实测确认不能只看 25℃ 的数据手册值。换料后的验证也不能省。最稳妥的做法是做一块 A/B 对比板把原器件和替代料分别焊在两块完全相同的板上放到同一位置用相同的发射功率和接收配置打流对比 RSSI 和丢包率。如果你手头有网络分析仪先测 S 参数再上环境测试这样能排除绝大部分问题。3. 从参考设计到自己的板子硬件细节与寄存器配置3.1 最小系统里容易翻车的几个引脚CC1120 的外围电路不算复杂但有几个引脚处理不好会让后面所有调试都变得痛苦。电源方面芯片工作电压范围是 2V 到 3.6V射频部分对电源噪声比较敏感。我的做法是给射频供电单独走一颗 LDO数字部分叠在一起供电并且在 VDD 引脚附近就近摆放 10nF、100nF、1uF 三颗退耦电容让高、中、低频纹波都有去处。实测下来这样做对接收灵敏度的稳定很有帮助尤其是在电池电压被 DC-DC 拉出一堆纹波的系统里。复位引脚 RESET_N 不能悬空必须上拉到 VDD否则上电时序稍微不对芯片就可能进入未知状态。时钟方面常用 26MHz 晶振晶振的负载电容要按晶振厂商标称的 CL 值计算不能随手从参考设计里抄一个值。CL 偏了频偏会直接超过接收端自动频率校正的容忍范围。RBIAS 引脚需要一颗高精度电阻接到地常见取值 20kΩ/1%这颗电阻的精度会影响芯片内部电流基准进而影响发射功率和接收性能不要用普通 5% 电阻随便顶。GPIO2 和 GPIO3 我习惯配成 TX FIFO 阈值中断和 RX FIFO 阈值中断配合 SPI 中断方式MCU 不用频繁轮询处理实时性也好很多。3.2 用 SmartRF Studio 生成配置但别当“无脑抄写员”TI 的 SmartRF Studio 7 是配置 CC1120 的最快捷途径。界面里选择 CC1120输入中心频率、调制方式、符号率、频偏、接收滤波器带宽、同步字、包格式软件会直接生成完整的寄存器数组和 C 代码示例。工具用起来很简单但有几个关键参数我建议你亲手理解而不是无脑抄。2FSK 信号占用的带宽大致可以用“两倍频偏加两倍数据率”来估算。比如数据率 1.2kbps、频偏 2.4kHz理论带宽至少 7.2kHz实际接收滤波器带宽还要再留余量一般设置成 10kHz 或更大一些。这个参数如果设得太小信号频谱会被切掉灵敏度反而下降设得太大噪声进来太多同样拉低灵敏度。中心频率由 FREQ0、FREQ1、FREQ2 和频率分频配置共同决定SmartRF Studio 会帮你算好写入值但你要确认最终写入的寄存器数值和你设定的频点一致尤其是改过晶振频率以后。同步字、前导码和 CRC 我也建议固定下来比如前导码 4 字节、同步字用自定义的 32 位值、CRC16这样可以在接收端直接过滤掉大部分噪声帧。生成完配置后写进产品固件时建议加一个回读校验步骤因为 SPI 线上的毛刺偶尔会导致寄存器写入失败读回比对一下能避免“看起来配置了实际没生效”的尴尬。void cc1120_apply_config(const uint8_t config[][2], uint16_t len) { for (uint16_t i 0; i len; i) { cc1120_write_reg(config[i][0], config[i][1]); } // 回读校验防止 SPI 异常导致寄存器未写入 for (uint16_t i 0; i len; i) { uint8_t val cc1120_read_reg(config[i][0]); if (val ! config[i][1]) { // 记录错误重新写入或触发软件复位 } } }3.3 PCB 布局天线净空和射频走线是重点长距离无线系统的 PCB 布局直接影响最终能不能跑出手册里的性能。天线区域对应位置的每一层都要做净空处理不能在天线正下方铺完整地平面否则天线的谐振频率会被拉偏效率下降。实际产品里如果外壳是金属件还要格外关注天线附近有没有金属结构形成遮挡。从 CC1120 差分口到前端器件走线尽量短并且两根差分线等长、等距、镜像对称。差分转单端之后用 50Ω 微带线走到天线座。微带线的宽度要按板厚和叠层计算不能靠“拍脑袋”定数值。射频走线周围包地包地间距建议大于或等于线宽并且沿两侧打满地过孔。特别要提醒的是不要在射频走线的正下方层穿高速数字信号线或电源线这种耦合会在射频信号上叠加噪声让接收底噪抬升好几个 dB。我在改板时吃过一次亏为了省空间把一根 SPI 时钟线从天线走线下方穿过结果天线阻抗特性明显恶化RSSI 被拖低了差不多 5dB。后来把走线挪走地包好、过孔打满问题立刻消失。这个案例后来被我写进了团队的设计规范。4. 实测、排错、稳定性调优把“稳定长距离”从口号变成数据4.1 现场实测记录视距与非视距的真实差距板子调通以后我们做了一轮比较完整的现场实测。两个测试点之间没有遮挡时4.8 公里外接收RSSI 大约在 -92dBm连续打流一小时丢包率接近零。同样的板子挪到厂区环境中间隔着仓库和钢结构建筑距离只有 2 公里左右RSSI 却掉到了 -105dBm偶尔出现个别丢包。后来把天线从 1.5 米的铁杆提到 6 米屋顶同样的路径和环境RSSI 回升了约 8~10dB通信立刻恢复了稳定。这个对比很直观对长距离稳定连接来说天线架设高度和视野开阔度的影响远大于我们花大力气去抠的那 1dB 插损或 1dB 功率差异。所以在项目里只要有条件优先把天线架高其次才是调射频参数。RSSI 是最便宜的无线网络仪表。现场测试时每到一个固定点位让设备进入接收模式读一次 RSSI 值记录成表格就能画出一张真实覆盖热力图。我建议所有做无线项目的同事都养成这个习惯比任何经验公式都准。4.2 三个典型故障的完整排查链路故障一两端都能初始化但收不到任何报文。这种问题首查收发配置是否完全对称。FSK 还是 MSK、符号率、频偏、同步字、前导码长度、包长格式、数据白化开关任何一位没有配对接收端就无法锁住报文。再用频谱仪看发射端频谱确认载波频率是否落在目标频点。如果中心频率偏了优先查晶振负载电容和 FREQ 寄存器的写入值。故障二距离比链路预算估算的结果近太多。按顺序排查天线馈点焊接是否可靠、天线 VSWR 是否正常、前端滤波器插损是否过大、射频走线周围有没有干扰源、天线下方净空是否足够、电源噪声有没有拉低灵敏度。有一个经常被忽略的坑很多“天线效率差”其实是天线没有参考地平面。吸盘天线需要金属底座做地橡皮天线需要板载地平面如果把这类天线装在塑料壳子里性能下降会非常明显。故障三工业现场频繁丢包、延迟大。这种多半是共信道干扰引起的。CC1120 支持 CCA信道空闲评估读取当前 RSSI超过阈值就认为信道忙自动退避。把这种机制用起来再配合简单的重传和随机退避实测对降低冲突非常有效。还有一种情况是多个设备同时抢信道可以在规约层面规划好信道列表各设备固定占用不同窄带信道或者做轻量跳频都能显著改善稳定性。提示排查问题时不要把“怀疑对象”局限在射频部分。MCU 端 SPI 速率太高、中断被长时间屏蔽、FIFO 溢出处理不及时都可能造成通信失败而且表现和射频问题非常像。我会习惯在固件里打印关键寄存器状态和 FIFO 计数先排除软件问题再动射频前端。4.3 固件细节那些容易在最后关头翻车的地方写寄存器之前先做软件复位确保芯片从上电开始就处于确定的寄存器状态。进入 TX 或 RX 要用命令 strobe比如 STX、SRX不能通过直接写寄存器来切换。上电后第一次进入某个频段工作时芯片会做自动校准校准完成前如果强行发数据很容易失败所以要等待状态寄存器确认校准结束。FIFO 管理也是重点。发送前把 payload 写入 TX FIFO然后根据 TX FIFO 阈值中断判断是否已经发完接收时如果 RX FIFO 溢出务必要把 FIFO 清掉否则后续报文会被错误的分帧逻辑搞乱。低功耗唤醒后的流程也要提前规划好CC1120 进入 SLEEP 后配置寄存器内容保持不变但重新唤醒进入 RX/TX 前还要再做校准。配合外部 RTC 定时唤醒 MCU再唤醒 CC1120实测休眠电流可以做到微安级电池撑两年以上完全可行。5. 关于这套方案我想再给你几条实在的建议第一不要把芯片宣传页上的参数当作产品指标。CC1120 在低速率下能做到 -129dBm 的灵敏度但那是理想测试条件下的结果。实际产品里前端插损、天线效率、电源噪声、结构遮挡每一项都会把它拉低。设计目标最好留出 10dB 以上的余量否则量产一致性稍微波动表现就会忽好忽坏。第二窄带信道值得好好利用。CC1120 擅长的事情就是窄带、低速率、高灵敏度、强抗干扰。如果项目本身没有高带宽需求就别为了追求“看起来快”而把速率提上去。我这次最终选用 1.2kbps、2.4kHz 频偏的组合单包 300 字节打满也只要几秒完全够用换来的是更多 dB 的灵敏度和更强的抗干扰能力。第三前端物料在量产前一定要做 A/B 验证和温度测试。我在前面提到的那颗 R7KA8D2KFLCAC虽然只是参考设计里一颗不起眼的前端器件但它直接关系到整条链路能不能在恶劣环境里稳定工作。缺货换料时宁可多花两天做验证也不要省这一道工序。后期返工的成本远不止是那几毛钱的物料价差。做完整套项目我最深的体会是稳定长距离连接不是某一颗芯片单独决定的而是链路预算、前端器件、PCB 布局、天线架设和固件策略一起合力的结果。CC1120 这颗料上限很高但能不能发挥出来取决于你把每一个细节做到什么程度。希望这篇文章的思路能帮你少走几步弯路。