T527 EC20 4G 模块调试
·
文章目录
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
更多推荐



所有评论(0)