4G通讯模块在ARM平台下的应用

4G模块是链接物与物的重要载体,是终端设备接入物联网的核心部件之一。随着4G的普及,许多新兴市场对4G通讯模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢?linux

4G通讯模块把频率接收器和信号增幅器等部件全都整合在一块儿,实现了一体化。随着工业发展,嵌入式设备接入网络的需求日益增多,在没有有线或WiFi等无线的环境下,直接经过4G通信模块链接运营商网络来接入互联网不失为一个好方法。所以,本文就为读者介绍一下基于ARM平台的嵌入式设备在Linux下使用4G模块的方法。ios

1、开发环境ubuntu

一、开发主机环境:vim

Ubuntu12.04(64位)、arm-fls-linux-guneabi-gcc系列交叉编译链。数组

二、硬件清单:网络

IoT-3960工控板、龙尚4G模块U8300C或U8300W。app

三、软件资源:编辑器

光盘EPC-280_283_287V1.04.iso中的内核源码包:linux-2.6.35.3-fec60fa.tar.bz2(光盘内容可在致远电子官网下载http://www.zlg.cn)。工具

2、硬件概述测试

IoT-3960L是广州致远电子股份有限公司以NXP i.MX287处理器为核心开发的工业IoT网络控制器,集成多路通讯接口,支持多种通讯协议,具备性价比高、功能丰富、工做稳定、兼容性强等特色,产品实物如图1所示。

图1 IoT-3960L工控板

经过自定义的Mini-PCIE接口,IoT-3960L可外扩3G、4G、GPRS、ZigBee、RFID等无线通讯模块。本文外扩的是龙尚4G模块,所用的型号如图2所示。

图2 龙尚4G模块U8300C、U8300W

3、技术实现

一、解压内核源码

将 EPC-280_283_287 V1.04.iso 光盘中的linux-2.6.35..3-fec60fa.tar.bz2 源码包复制到ubuntu系统的“~/”目录下,将其解压后可获得linux-2.6.35.3目录,参考命令以下:

vmuser@Linux-host:~$ tar -jxvf linux-2.6.35..3-fec60fa.tar.bz2

二、修改配置文件

在内核源码目录“drivers/gpio/”下的Kconfig文件中有设定了CONFIG_GPIO_M28X宏的默认配置,用vim编辑器打开这个Kconfig文件,搜索“GPIO_M28X”,找到其配置设定,将其修改成可独立配置的选项,修改后的配置以下所示(红色标识的为修改部分):

config GPIO_M28X

tristate"GPIO support for MiniPCI-E slot control"

#depends onIoT_3960 || IoT_3962

help

Say yes here to enable the IoT_396x boardgpio driver.

三、修改内核编译脚本

Linux源码目录下的build-kernel脚本文件主要用于切换内核默认配置,但因光盘中的该脚本文件设置不够灵活,建议直接将build-kernel文本内容总体替换为以下列表所示的代码:

#!/bin/sh

echo "build menu, please select your choice:"

echo " 1 make clean"

echo " 2 config for EPC_28xA"

echo " 3 config for EPC_283 or EasyARM-i.MX283A"

echo " 4 config for EPC_287 or EasyARM-i.MX287A"

echo " 5 config for EPC_280 or EasyARM-i.MX280A"

echo " 6 config for IoT_3960"

echo " 7 config for IoT_3962"

echo " 8 config for A287_W128LI"

echo " 9 config for A287_WB128LI"

echo " a make menuconfig"

echo " b make uImage"

echo " c make zImage"

echo " d make modules"

echo " q exit"

make_distclean() {

echo "make distclean"

make clean

}

config_EPC_28xA() {

echo "EPC_28xA"

cp .config .config.bk

cp arch/arm/configs/EPC_28xA_defconfig .config

}

config_EPC_283B() {

echo "EPC_283B"

cp .config .config.bk

cp arch/arm/configs/EPC_283B_defconfig .config

}

config_EPC_287B() {

echo "EPC_287B"

cp .config .config.bk

cp arch/arm/configs/EPC_287B_defconfig .config

}

config_EPC_280() {

echo "EPC_280"

cp .config .config.bk

cp arch/arm/configs/EPC_280_defconfig .config

}

config_IoT_3960() {

echo "IoT_3960"

cp .config .config.bk

cp arch/arm/configs/IoT_3960_defconfig .config

}

config_IoT_3962() {

echo "IoT_3962"

cp .config .config.bk

cp arch/arm/configs/IoT_3962_defconfig .config

}

config_A287_W128LI() {

echo "A287_W128LI"

cp .config .config.bk

cp arch/arm/configs/A287_W128LI_defconfig .config

}

config_A287_WB128LI() {

echo "A287_WB128LI"

cp .config .config.bk

cp arch/arm/configs/A287_WB128LI_defconfig .config

}

make_uImage() {

make uImage

}

make_zImage() {

make zImage

}

make_modules() {

make modules

}

make_menuconfig() {

make menuconfig

}

read sel

echo "select $sel"

case $sel in

[1]) make_distclean;;

[2]) config_EPC_28xA;;

[3]) config_EPC_283B;;

[4]) config_EPC_287B;;

[5]) config_EPC_280;;

[6]) config_IoT_3960;;

[7]) config_IoT_3962;;

[8]) config_A287_W128LI;;

[9]) config_A287_WB128LI;;

[a]) make_menuconfig;;

[b]) make_uImage;;

[c]) make_zImage;;

[d]) make_modules;;

[q] | [Q]) exit 0;;

*) echo "ONLY accept 1~9,a~d/q/Q"

esac

(下拉可显示更多代码)

四、配置内核源码

进入解压后的 Linux 源码根目录,使用IoT-3960L 的默认内核配置,参考命令以下:

vmuser@Linux_host:~/ linux-2.6.35.3$ ./build-kernel

而后输入6选择Iot3960,若是是其余工控板或开发套件,则选择对应的选项便可,若是对应的Linux源码根目录下没有.config文件,运行该步骤操做后会提示cp命令执行错误,直接忽略此错误便可。

工控板或开发套件使用USB接口来与龙尚4G模块通讯,须要配置内核以支持USB转串口功能。参考命令以下:

vmuser@Linux-host:~/ linux-2.6.35.3 $ make menuconfig

进入配置界面后,按回车键进入“Device Drivers --->”选项,配置完内核后,保存并退出内核配置操做。

五、修改&编译内核源码

对龙尚4G模块,咱们须要在linux-2.6.35.3 目录下对三个数组中的内容进行修改:

  • 使用vi 或者vim 命令打开drivers/gpio/gpio_m28x.c 文件,在all_gpios_info[ ]数组做中做修改;

  • 使用vi 或者vim 命令打开arch/arm/mach-mx28/mx28evk_pins.c 文件,在mx28evk_fixed_pins []数组中做修改;

  • 使用vi或者vim命令打开drivers/usb/serial/option.c 文件,在option_ids[]数组中做修改。

按上述操做修改完成以后,就能够编译内核了,内核编译参考命令以下:

vmuser@Linux-host:~/ linux-2.6.35.3 $ make uImage

待内核编译完成后,将生成的uImage 文件(可在arch/arm/boot 目录下找到)烧写到工控板或开发套件上,烧写方法请参考《IoT-3960 用户手册.pdf》第6章的内容。

4、4G模块测试

这里主要介绍龙尚4G模块的电话、网络等控制接口以及IoT-3960L工控板对其操做的通讯流程。用于测试的工控板必须烧写EPC-280_283_287 V1.04.iso 光盘中V1.03的uboot 及文件系统,由于其中包含必要的拨号上网工具。

一、电话控制接口

电话接听和拨打命令如表1所示。经过向串口发送相应的命令就能够实现电话的接听和拨打。如:能够向串口发送“ATD12345678901;nr”就能够向12345678901拨打电话。

表1 电话拨打和接听控制命令表

命令 语法及做用
ATD

拨打电话:ATD+电话+;rn”如ATD10010;后面分号

不能少,返回OK或ERROR

AT+COPS? “AT+COPS?rn”检测运营商,返回OK或ERROR
AT+CVHU=0和ATH 挂断电话:“AT+CVHU=0rn”再发“ATHrn”
ATA 接听电话:“ATAnr”

电话拨打接听代码执行流程如图3所示。代码首先会显示可供使用的菜单,如电话拨打,短信接收等。等待用户输入参数,执行参数对应的流程。而后判断是否执行成功,若是执行成功就会返回显示菜单代码处继续执行下一下循环。

图3 电话拨打接听流程图

二、网络控制接口

4G模块上网功能经过PPP拨号提供的接口链接网络。在开发套件文件系统的“/etc/ppp”目录下预置了能够参考的拨号脚本。拨号成功后(执行PPP 拨号脚本),内核会生成PPP网络设备。经过建立套接字就能够访问网络。

三、演示程序实操

  • 使能4G模块

默认内核启动时,把4G模块的复位引脚拉低,使模块处于非工做的状态。要想彻底使能模块,运行/opt 目录下的upmodule.sh 脚本便可。

此时板子的WWAN 这个LED 会出现闪烁的现象,闪烁频率大概为800 毫秒,而后设备开始入网,入网成功后,板子的WWAN 这个LED 的闪烁频率变为3 秒左右。同时,大概10 秒以后,板子开始检测到USB 设备的插入,而后板子自动安装USB 转串口的驱动,驱动安装完成后,会在板子的/dev 目录下自动生成ttyUSB0~ttyUSB5 这6 个串口设备。

  • 编译演示程序

将/works/mx28x/app/目录下的longsung-test文件夹拷贝到Linux 开发主机,编译了longsung-test 下的代码,将生成的longsung-test 文件拷贝到板子便可进行后续的电话功能测试。

  • 电话功能测试

使用U8300C,以中国联通4G卡为例进行电话功能测试,设备上电以前须要先插入SIM 卡,且保证已经按前面介绍使能了4G模块,并能成功入网。进入longsung-test 测试程序存放的目录,而后运行longsung-test 程序。

[root@M28x opt]# ./longsung-test /dev/ttyUSB1

longsung-test 测试程序运行结果及其中各数字表明功能如图4所示。须要注意,输入“1”拨打电话以后,必须须要输入“2”挂断电话以后方可继续拨打电话。

图4 代码启动运行结果

  • 上网功能测试

这里使用U8300C,以中国移动4G卡为例进行拨号上网,设备上电以前须要先插入SIM 卡,保证以使能4G模块并成功入网。

进入板子的/etc/ppp/目录,建立一个名字为ppp_dial_LTE.sh的脚本,写入以下程序:

echo "TIMEOUT 5 '' AT OK ATE0V1 OK AT OK ATS0=0 OK AT OK ATE0V1 OK AT OK ATDT*99*# CONNECT ''" > /tmp/chat

pppd /dev/ttyUSB3 persist connect "chat -v -f /tmp/chat"

保存退出后,修改ppp_dial_LTE.sh 的运行属性,而后直接运行该脚本,进行拨号操做,参考操做以下:

[root@M28x ppp]# wr chmod 755 ppp_dial_LTE.sh

[root@M28x ppp]# ./ppp_dial_LTE.sh

执行后,等待大概10~20s,使用ifconfig 命令查看网络设备,能看到系统生成了一个名为ppp0 的网络设备,该设备就是拨号成功后生成的网络设备。拨号成功后可经过ping 114.114.114.114.-I ppp0检查外网是否链接正常。若是没能成功拨号,能够参考下面的“拨号异常分析”来排除问题。

  • 拨号异常分析

运行拨号脚本后,使用ps 命令能看到拨号进程的存在。只要拨号成功,拨号进程是一直存在的(与pppd 相关的进程),若是该进程不存在,那么生成的ppp0 网络设备也会随同消失。

若是使用 ifconfig 命令,没法看到ppp0 这个网络设备,只要使用ps 命令一直都能看到拨号进程的存在,那么只能耐心的等待拨号程序的反馈了。若是ps 命令没法看到拨号进程了,那么从新运行拨号脚本便可。拨号进程的退出,极有多是由于信号弱或者SIM 卡余额不足致使的。

相关文章
相关标签/搜索