2023年11月28日发(作者:)

通信模块USB上网

1、背景介绍

目前物联网设备随处可见,很多设备都具备了移动物联网功能,这比传统的联网

方式有很大的优势(移动性)传统的物联网依赖网线或者WIFI对移动设备的

支持并不友好。蜂窝通信模块的出现改变了这一现象,再加上近几年运营商和模

组厂商的大力发展也促进了物联网的发展。

以下介绍一种方法来实现设备的上网功能。最终在ARM系统下,用手机卡和通

信模块实现上网功能ping 通百度。

开发环境

以某远EC600E为例,主控MCU采用的是三星的4412linux内核3.0版本。

2、硬件架构

硬件示意图

说明:

1、如果需要模块的低功耗休眠功能,需要MCU能够控制USB_VBUS开和关。

推荐使用控制USB_VBUS的方式来断开USB_VBUS使模块进入休眠。

2、进入特定的休眠模式(见下文休眠部分),通信模块可以通过短信唤醒。如

果此时MCU也进入休眠需要通过通信模块来唤醒MCU(远程唤醒),见上图。

3、软件调试

3.1USB驱动移植

1、获取通信模块USB ID信息,操作如下:

WIN下面查看USB口的属性信息

Linux主控上插入USB也会提示ID信息

2、编译内核添加ID信息

找到内核源码路径下的USB驱动源码,添加上面的USB ID信息到内核源码

中,主要是PIDVID信息,我这边的源码路径在/drivers/usb/serial/

option.c中,内核版本有所差异,具体会有所区别,以你们手上的实际代码为

准。修改方法见下图:

3添加完之后,重新编译内核,将编好的内核更新到MCU中,具体不在详述。

之后就能查到USB设备了。至此USB驱动移植完毕。

3.2、配置上网

1、上网之前需要做一些准备工作

首先要将手机卡插入到卡座中(确保能正常联网,可以用手机卡)

其次接好天线,通信模组开机后会自动联网,可以使用以下指令查询联网状态,

在确保通信模组联网成功后,才能拨号上网。具体指令查看可以用以下方式:

cat /dev/ttyUSB1 &

echo -ne AT+CEREG?r > /dev/ttyUSB1

2、主要的AT指令说明

2.1AT+CEREG?查询模块联网状态。

返回+CEREG:0,1 表示联网成功

返回+CEREG:0,2 表示正在联网,等待并继续查询,直到联网成功。

返回+CEREG:0,3 表示联网被拒绝,看看卡有没有欠费或者换个卡测试。

2.2AT+QCFG=USBNET 查询模块配置成网卡模式

返回+QCFG:usbnet,1 表示配置成ECM网卡

如果不是上述结果,可以用AT+QCFG=USBNET”,1指令配置成ECM网卡。

2.3AT+QNETDEVCTL=1,1,1配置成自动拨号上网。

返回OK或者+QNETDEVSTATUS: 1 表示成功

3、这个时候进入控制台,把usb0的网卡up起来

此时的网卡还没有IP地址,需要使用udhcpcusb0的网卡分配地址。

udhcpc -i usb0

3.3、上网成功

4、进入休眠

如果需要通信模组进入低功耗休眠模式(支持短信唤醒模组)硬件和软件处理

如下(这部分参考模组厂商的硬件设计手册)

唤醒方式主要有两种:

一种是发短信给模块,模块会唤醒,这种方式是通过远程唤醒。模块唤醒后,通

过模块的唤醒脚可以给MCU中断信号(唤醒MCU)。

另一种就是给USB_VBUS上电,这种唤醒方式是由MCU唤醒。