技术天地

英创Linux主板基于3G和4G的无线通讯方案作者:黄志超    发布时间:2018-9-10 14:00:23    被阅览数:

  随着3G和4G网络的普及,在嵌入式产品中越来越多的使用到他们,特别是在没有以太网的环境中,使用3G或者4G无线模块能够有效的解决网络通讯问题。英创公司也针对各种型号的主板,推出了通用的3G和4G的通讯方案,这篇文章主要总结了各种在主板上评估过的3G和4G模块,以及使用方法和常见的一些问题。


基础介绍


  英创公司支持的为MINI-PCIe接口的全长或者半长尺寸模块,3G和4G模块只使用了MINI-PCIe接口中的供电、复位和USB信号,所以这种接口的模块在英创公司所有型号的主板上都能够适用,并且为了方便客户评估,英创公司在ESMARC通用评估底板上已经增加了接口,可以直接和评估底板连接测试。MINI-PCIe接口的模块如下图:


ESM系列主板支持无线模块.gif

ESMARC系列主板和MINI-PCIe接口模块


  目前测试过的3G和4G模块整理如下:


型号厂商网络制式Vendor IDProduct IDModem口
MU709S-2华为3G,联通WCDMA0x12d10x1c25/dev/ttyUSB0
MC2716中兴3G,电信CDMA20000x19d20x5238/dev/ttyUSB0
ME909S-821华为4G,全网通0x12d10x15c1/dev/ttyUSB1
ME3630中兴4G,全网通0x19d20x1476/dev/ttyUSB1
EC20移远4G,全网通0x05c60x9215/dev/ttyUSB1


  无线模块和英创公司主板在物理上是通过USB虚拟串口进行通讯的,而软件上通过ppp协议转换提供给客户一个标准的网络设备。英创公司在主板中已经添加了3G和4G模块的驱动(USB虚拟串口驱动)和ppp协议的支持。板卡中的驱动是以模块(usbserial.ko)的形式提供,usbserial.ko是一个通用的驱动,已经集成了大部分常用模块的支持。驱动加载成功后系统会生成多个虚拟串口,他们分别有不同的用处,比如作为数据通讯口(即modem口)、响应AT指令的设备口以及传输GPS信息的设备口等,生成USB虚拟串口后通过ppp调用modem口拨号即可连接上网,需要注意的是3G模块的modem口一般都为/dev/ttyUSB0,而4G模块的modem口一般为/dev/ttyUSB1。


  拨号使用的文件在/etc/ppp/peers/目录下,英创公司已经编写好了3G和4G的拨号文件,客户只需要选用对应的拨号文件即可,本文使用的是4G模块MU909S-2作为例子,所以使用/etc/ppp/peers/目录下的lte-connect-script文件,对于4G来说,移动、联通和电信的SIM卡都可以使用这一个拨号文件。如果客户使用的是3G模块,就需要根据不同的网络制式选择脚本,如果是联通的3G,需要使用wcdma-connect-script这个拨号文件,如果是使用的电信3G,就需要使用cdma-connect-script这个拨号文件,若客户有其他特殊的要求,可以根据英创公司提供的这三个拨号文件进行修改,满足自己的需要,下表列出了网络制式和拨号文件的对应关系:


无线信道网络制式对应拨号文件
3G联通CDMA/etc/ppp/peers/wcdma-connect-script
3G电信CDMA 2000/etc/ppp/peers/cdma-connect-script
4G通用/etc/ppp/peers/lte-connect-script


使用步骤


  接下来以4G模块MU909S-2作为例,说明具体的使用步骤:


  1、插入无线模块,上电启动英创Linux主板。在没有加载驱动的时候,会被识别成CDROM或者USB移动存储设备。


  2、加载驱动模块,需要代入上面的vender id和product id,英创Linux主板的驱动模块都放在/lib/modules/<kernel-version>/下面,例如使用ESM6800加载驱动模块,因为ESM6800的内核版本为4.1.15,输入命令为:insmode /lib/modules/4.1.15/usbserial.ko vendor=0x12d1 product=0x15c1,注意如果使用的主板为ESM7000,ESM6802,ESM6800H或者ESM6800V系列的板卡,可以使用命令:modprobe usbserial vendor=0x12d1 product=0x15c1,不需要代入路径了,输入驱动后会自动生成usb虚拟串口,如下:


英创Linux主板基于3G和4G的无线通讯方案.png

转换成虚拟串口


  可以看到系统生成了多个USB虚拟串口。注意,如果客户使用的无线模块不在上面的表格之中,可以通过模块的手册来确定vendor id和product id,或者使用一台装有Linux系统的PC,将模块连接到PC上使用lsusb命令也可以查看到两个id号。


  3、接下来就可以拨号了,输入命令:pppd call lte-connect-script 使用4G网络的拨号文件lte -connect-script进行拨号,完成以后,可以使用ifconfig命令查询,如果成功联网,会有ppp0的网络信息。如图所示:


英创Linux主板基于3G和4G的无线通讯方案.png

ppp0节点信息


常见问题


  如果拨号后遇到无法生成ppp0节点的情况,客户可以通过修改拨号文件来查看调试信息,拨号文件中有一行为#nodetch,去掉前面的#,就可以输出调试信息了,如下图:


英创Linux主板基于3G和4G的无线通讯方案.png

拨号文件内容


  再调用ppp拨号,就能看见调试信息了。如果是发现调试信息出现模块没有回复指令的情况,可能是由于拨号文件使用的设备节点不是模块作为modem口的设备,可以通过模块的手册来确定作为modem口的设备节点,同时尝试更改拨号文件中使用的usb虚拟串口设备,比如上图中使用的是/dev/ttyUSB0,可以更换为/dev/ttyUSB1尝试。如果是遇到无法建立连接的情况,建议可以检查天线和SIM卡是否接好。


  在生成ppp0节点之后,如果要通过ppp0访问外网,那么默认网关就需要设置为ppp0节点,客户可以使用route命令查看当前的默认网关。在没有默认网关的情况下,ppp拨号成功之后会自动将ppp0设置为默认网关,英创主板可以通过把userinfo.txt中DefaultGateway这一项的值填为0,来取消设置默认网关。如果主板在拨号的时候已经有了默认网关,或者需要设置多个网关,可以参考文章:《Linux主板多网络的优先级设置》进行设置。

Go Top