4、LTE网络接入:4G/5G模块选型与拨号实战

好,咱们进入第四章。这一章要解决一个很实际的问题——设备怎么通过蜂窝网络连上互联网。

你想想看,WiFi虽然方便,但出了门就没了。而LTE(4G/5G)覆盖广、移动性强,是物联网设备在户外场景下的主力通信手段。我这些年做过的项目,从共享单车到远程监控,几乎都离不开这个环节。

这一章,咱们就聊聊4G/5G模块怎么选、怎么配、怎么拨号上网。

4.1 模块选型:EC20 vs SIM7600

市面上主流的4G模块,我个人用得最多的就是移远的EC20和芯讯通的SIM7600系列。这两款都是经典款,但侧重点不太一样。

对比项 EC20(移远) SIM7600(芯讯通)
网络制式 LTE Cat 4,向下兼容3G/2G LTE Cat 4/Cat 1,部分型号支持5G
接口 Mini PCIe / LCC封装 Mini PCIe / LGA封装
拨号方式 PPP / ECM / RNDIS PPP / ECM / RNDIS
AT指令兼容性 标准3GPP + 移远扩展 标准3GPP + 芯讯通扩展
功耗 较低(适合电池供电) 中等(适合车载/固定设备)
价格 中等 略低
生态成熟度 极高,文档丰富 高,社区活跃
我的建议: 如果是低功耗电池设备,优先选EC20;如果对成本敏感或者需要5G能力,SIM7600系列更合适。我在一个共享充电宝项目里用过EC20,待机功耗控制得确实不错。

4.2 AT指令集:与模块对话的基础

模块选好了,怎么跟它沟通?靠AT指令。说白了,AT指令就是一套文本命令,你通过串口发过去,模块给你回响应。

我刚开始接触时也觉得指令多,但其实常用的就那么几条。咱们先看最核心的:

AT                          // 测试连接,返回OK
AT+CPIN?                    // 查询SIM卡状态
AT+CSQ                      // 查询信号强度
AT+CREG?                    // 查询网络注册状态
AT+CGATT?                   // 查询GPRS附着状态
AT+CGPADDR=1                // 查询PDP地址(IP)
AT+CGDCONT=1,"IP","CMNET"  // 设置APN(中国移动)
避坑指南: 我曾经在一个项目里卡了两天,就是因为SIM卡没插好,AT+CPIN?一直返回ERROR。后来才发现是卡座接触不良。所以,第一步先确认SIM卡物理连接,再查指令。

这里有个小技巧:很多模块支持用AT+QCFG或AT+CGDCONT来配置PDP上下文。不同运营商的APN不一样,移动是CMNET,联通是3GNET,电信是CTNET。记得提前确认好。

4.3 PPP拨号:传统但可靠的方式

PPP(点对点协议)是早期物联网设备最常用的拨号方式。它的原理很简单:模块通过串口和主机通信,PPP协议在串口上建立网络连接。

在Linux系统上,PPP拨号通常用pppd守护进程。我习惯写一个脚本,把AT指令和pppd参数封装好:

#!/bin/bash
# ppp拨号脚本示例(EC20模块)

# 第一步:初始化模块
echo "AT+CFUN=1" > /dev/ttyUSB2
sleep 1

# 第二步:设置APN
echo "AT+CGDCONT=1,\"IP\",\"CMNET\"" > /dev/ttyUSB2
sleep 1

# 第三步:启动pppd
pppd call ec20-ppp &

# pppd配置文件 /etc/ppp/peers/ec20-ppp
# /dev/ttyUSB2 115200
# connect "chat -v -f /etc/ppp/chatscripts/ec20.chat"
# noauth
# defaultroute
# usepeerdns
注意: PPP拨号依赖串口稳定性。如果串口丢数据,PPP连接会频繁断开。我建议在硬件上做好串口流控(RTS/CTS),软件上增加重连机制。

PPP拨号的优点是兼容性好,几乎任何Linux系统都支持。但缺点也很明显——速度慢(受限于串口波特率),而且CPU开销大。所以现在越来越多的方案转向了RNDIS/ECM。

4.4 RNDIS/ECM模式:现代高速方案

RNDIS(Remote Network Driver Interface Specification)和ECM(Ethernet Control Model)都是把4G模块模拟成网卡。模块通过USB连接到主机,主机识别为一个虚拟网卡,直接获得IP地址。

说白了,就是模块变成了一个USB上网卡。你不需要PPP协议栈,不需要串口拨号,直接ifconfig就能看到网络接口。

模式 适用平台 特点
RNDIS Windows / Linux(需驱动) 微软定义,Windows原生支持
ECM Linux / macOS USB-IF标准,Linux内核原生支持
NCM Linux / Android ECM的改进版,更高吞吐

我个人的经验是:在Linux嵌入式设备上,优先用ECM模式。因为Linux内核自带cdc_ether驱动,插上就能识别。RNDIS在Linux上需要额外安装驱动(比如usbnet),稍微麻烦一点。

切换模式的AT指令也很简单:

// EC20切换到ECM模式
AT+QCFG="usbnet",1

// SIM7600切换到RNDIS模式
AT+CUSBPIDSWITCH=1,1,1,1

// 重启模块生效
AT+CFUN=1,1
小技巧: 切换模式后,模块会重新枚举USB设备。你可以在主机上执行dmesg | tail查看新设备是否被识别。如果出现"cdc_ether"或"rndis_host"字样,说明成功了。

4.5 知识体系总览

为了让你更直观地理解整个LTE接入流程,我画了一张图:

LTE网络接入知识体系 4G/5G模块选型 EC20(移远) SIM7600(芯讯通) AT指令集(配置与调试) PPP拨号(串口) RNDIS/ECM(USB网卡) LTE网络接入成功 选型 → AT配置 → 拨号方式选择 → 网络接入,每一步都有坑,但走通了就一劳永逸

4.6 实战要点总结

最后,我把这一章的核心要点列出来,方便你以后回顾:

  • 模块选型: EC20适合低功耗场景,SIM7600适合成本敏感或5G需求场景。
  • AT指令: 先查SIM卡状态(AT+CPIN?),再查信号(AT+CSQ),最后配置APN(AT+CGDCONT)。
  • PPP拨号: 兼容性好但速度慢,适合串口通信的老设备。
  • RNDIS/ECM: 现代方案,速度快,Linux推荐ECM模式。
  • 调试技巧: 用dmesg看USB枚举,用ifconfig看网络接口,用ping测试连通性。
我的经验: 不管用哪种方式,第一步永远是确认模块和SIM卡能正常注册到网络。AT+CREG?返回0,1或0,5才算成功。如果一直返回0,0或0,2,先检查天线和SIM卡,别急着调拨号。

嗯,这一章的内容就到这里。LTE接入是物联网设备联网的基石,选对模块、配好AT指令、选对拨号方式,后面的事情就顺了。