1、环境介绍

硬件:t527板卡

软件:原厂t527-tina5.0-aiot-v1.4 sdk(buildroot,Linux 5.15)

2、EC20 4G 模块介绍

EC20 是移远通信(Quectel)推出的一款高性能 LTE Cat 4 无线通信模块。支持全球主流运营商的 4G LTE、3G 和 2G 网络,具备全球漫游能力。下行速率可达 150 Mbps,上行速率 50 Mbps。物理接口为 Mini PCI-E,但实际数据传输基于 USB 协议。集成多模式卫星定位(GPS/GLONASS/BeiDou/Galileo等),支持精准导航。

3、原理图查看

如下是t527板卡的mini pcie部分的原理图,mini pcie接口包含usb接口,EC20实际使用usb接口通信:

4、内核配置

CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_SERIAL_QT2=y

5、驱动文件修改

drivers/usb/serial/option.c 中的 option_ids[] 数组添加 EC20 的 VID、PID,如果有就不用加了:

不知道 vid pid 的可以先将 4G 模块插到板卡,在系统下执行 lsusb 查看。

6、验证

将sim卡,4G模块插入板卡,4G模块要接天线。

查看4g模块的usb枚举log:

root@t527:/ # dmesg | grep usb

4g模块驱动加载成功:

root@t527:/ # lsusb
root@t527:/ # ls /dev/ttyUSB*

7、拨号介绍

4G模块有多种拨号方式,这些方式决定了模块如何与主机建立网络连接。以下是主要的几种拨号方式:

7.1、PPP(Point-to-Point Protocol)

最传统的方式,特点:

  • 串行线路上的经典拨号协议
  • 通过AT命令端口发送拨号指令
  • 建立点对点连接
/* 内核配置 */
CONFIG_PPP=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_PPP_DEFLATE=y

7.2、NCM (Network Control Model)

推荐的标准方式,特点:

  • USB-IF 标准协议
  • 将IP数据包封装在以太网帧中传输
  • 高效,开销小
/* 内核配置 */
CONFIG_USB_USBNET=y
CONFIG_USB_NET_CDC_NCM=y

7.3、ECM (Ethernet Control Model)

类似NCM的以太网方式,特点:

  • 将模块模拟成USB以太网设备
  • 主机看到标准的以太网接口
/* 内核配置 */
CONFIG_USB_USBNET=y
CONFIG_USB_NET_CDCETHER=y

7.4、RNDIS

微软主导的协议,特点:

  • 主要在Windows环境中使用
  • Linux通过rndis_host驱动支持
  • 将模块模拟成远程网卡
/* 内核配置 */
CONFIG_USB_USBNET=y
CONFIG_USB_NET_RNDIS_HOST=y

8、ECM 拨号测试

这里推荐使用ECM拨号方式上网。

8.1、手动拨号测试

root@t527:/ # cat /dev/ttyUSB2 &

// 1、检查sim卡的状态
root@t527:/ # echo -e "AT+CPIN?\r\n" >  /dev/ttyUSB2
+CPIN: READY
OK

// 2、查询当前网卡模式
// +QCFG: "usbnet",3 : RNDIS模式
// +QCFG: "usbnet",2 : MBIM模式
// +QCFG: "usbnet",1 : ECM模式
// +QCFG: "usbnet",0 : rmnet模式
root@t527:/ # echo -e "AT+QCFG=\"usbnet\"\r\n" >  /dev/ttyUSB2
+QCFG: "usbnet",3
OK

// 3、配置为ECM模式
root@t527:/ # echo -e "AT+QCFG=\"usbnet\",1\r\n" >  /dev/ttyUSB2
OK

// 4、重启模块
root@t527:/ # cat /dev/ttyUSB2 &
root@t527:/ # echo -e "AT+CFUN=1,1\r\n" >  /dev/ttyUSB2

// 5、重新查询网卡模式
root@t527:/ # echo -e "AT+QCFG=\"usbnet\"\r\n" >  /dev/ttyUSB2
+QCFG: "usbnet",1
OK

// 6、查看usb虚拟网卡节点
root@t527:~ # ifconfig
usb0  Link encap:Ethernet  HWaddr CE:48:6F:14:22:62
      inet addr:192.168.225.32  Bcast:192.168.225.255  Mask:255.255.255.0
      inet6 addr: fe80::7647:f077:eb4b:ac80/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:16 errors:0 dropped:0 overruns:0 frame:0
      TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:1469 (1.4 KiB)  TX bytes:1364 (1.3 KiB)

// 7、动态获取IP
root@t527:~ # udhcpc -i usb0
udhcpc: broadcasting discover
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.225.24, server 192.168.225.1
udhcpc: lease of 192.168.225.24 obtained from 192.168.225.1, lease time 43200
deleting routers
adding dns 192.168.225.1

// 8、联网测试
root@t527:~ # ping www.baidu.com -i usb0
64 bytes from 157.148.69.186: seq=0 ttl=51 time=48.593 ms
64 bytes from 157.148.69.186: seq=1 ttl=51 time=22.154 ms
64 bytes from 157.148.69.186: seq=2 ttl=51 time=40.145 ms
64 bytes from 157.148.69.186: seq=3 ttl=51 time=47.555 ms
64 bytes from 157.148.69.186: seq=4 ttl=51 time=39.257 ms
64 bytes from 157.148.69.186: seq=5 ttl=51 time=25.598 ms

// 9、至此,ECM拨号上网测试成功

8.2、脚本拨号测试

#!/bin/sh
# EC20/EC25 Auto Dial Script for ECM Mode

LOG_FILE="/var/log/ec20_dial.log"
TTY_DEV="/dev/ttyUSB2"
APN="cmnet"		# 中国联通和中国移动:cmnet,中国电信:ctnet

# Log function
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
    echo "$1"
}

log "=== Starting EC20 Auto Dial ==="

# Wait for AT command port
log "Waiting for AT command port..."
for i in $(seq 1 20); do
    if [ -e "$TTY_DEV" ]; then
        log "AT port found: $TTY_DEV"
        break
    fi
    sleep 1
done

if [ ! -e "$TTY_DEV" ]; then
    log "Error: AT command port not found"
    exit 1
fi

# Set ECM mode
log "Setting ECM mode..."
echo -e "AT+QCFG=\"usbnet\",1\r" > "$TTY_DEV"
sleep 1

# Set APN
log "Setting APN: $APN"
echo -e "AT+CGDCONT=1,\"IP\",\"$APN\"\r" > "$TTY_DEV"
sleep 1

# Reboot module
log "Rebooting module..."
echo -e "AT+CFUN=1,1\r" > "$TTY_DEV"
sleep 10

# Wait for usb0 interface
log "Waiting for usb0 interface..."
for i in $(seq 1 30); do
    if ip link show usb0 >/dev/null 2>&1; then
        log "usb0 interface found"
        break
    fi
    sleep 1
done

if ! ip link show usb0 >/dev/null 2>&1; then
    log "Error: usb0 interface not found"
    exit 1
fi

# Bring up interface and get IP
log "Bringing up usb0 and getting IP..."
ip link set usb0 up
sleep 3
udhcpc -i usb0 -q

# Show result
log "Network configuration:"
ip addr show usb0 >> "$LOG_FILE" 2>&1

log "=== EC20 Auto Dial Completed ==="

9、参考文章

8. 4G通信 - LubanCat-RV06板卡快速使用手册

10、总结

本文主要记录了在 T527 下 EC20 4G 模块的调试。
嵌入式Linux学习交流群:424571391

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐