×
嵌入式 > 嵌入式开发 > 详情

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

发布时间:2020-09-24 发布时间:
|

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

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

一、开发环境

1)xa0开发主机环境:

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

2)xa0硬件清单:

IoT-3960工控板、龙尚xa04G模块U8300C或U8300W。

3)xa0软件资源:

光盘EPC-280_283_287V1.04.iso中的内核源码包:linux-2.6.35.3-fec60fa.tar.bz2。

二、硬件概述

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

图1xa0IoT-3960L工控板

通过自定义的xa0Mini-PCIExa0接口,IoT-3960Lxa0可外扩3G、4G、GPRS、ZigBee、RFIDxa0等无线通信模块。本文外扩的是龙尚4Gxa0模块,所用的型号如图2所示。

图2xa0龙尚4G模块U8300C、U8300W

三、技术实现

1、解压内核源码

将xa0EPC-280_283_287xa0V1.04.isoxa0光盘中的linux-2.6.35..3-fec60fa.tar.bz2xa0源码包复制到ubuntuxa0系统的“~/”目录下,将其解压后可得到linux-2.6.35.3xa0目录,参考命令如下:

vmuser@Linux-host:~$xa0tarxa0-jxvfxa0linux-2.6.35..3-fec60fa.tar.bz2

2、修改配置文件

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

configxa0GPIO_M28X

tristatexa0"GPIOxa0supportxa0forxa0MiniPCI-Exa0slotxa0control"

#dependsxa0onxa0IoT_3960xa0||xa0IoT_3962

help

Sayxa0yesxa0herexa0toxa0enablexa0thexa0IoT_396xxa0boardxa0gpioxa0driver.

3、修改内核编译脚本

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

xa0

图3xa0build-kernelxa0文件内容

4、配置内核源码

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

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

然后输入6xa0选择Iot3960,如果是其他工控板或开发套件,则选择对应的选项即可,如果对应的Linuxxa0源码根目录下没有.configxa0文件,运行该步骤操作后会提示cpxa0命令执行错误,直接忽略此错误即可。

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

vmuser@Linux-host:~/xa0linux-2.6.35.3xa0$xa0makexa0menuconfig

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

5、xa0修改&编译内核源码

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

lxa0使用vixa0或者vimxa0命令打开drivers/gpio/gpio_m28x.cxa0文件,在all_gpios_info[xa0]数组作中作修改;

lxa0使用vixa0或者vimxa0命令打开arch/arm/mach-mx28/mx28evk_pins.cxa0文件,在mx28evk_fixed_pinsxa0[]数组中作修改;

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

按上述操作修改完成之后,就可以编译内核了,内核编译参考命令如下:

vmuser@Linux-host:~/xa0linux-2.6.35.3xa0$xa0makexa0uImage

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

四、4Gxa0模块测试

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

1、电话控制接口

电话接听和拨打命令如表1所示。通过向串口发送相应的命令就可以实现电话的接听和拨打。如:可以向串口发送“ATD12345678901;\n\r”就可以向12345678901拨打电话。

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

命令语法及作用

ATD拨打电话:ATD+电话+;\r\n”如ATD10010;后面分号

不能少,返回OKxa0或ERROR

AT+COPS?“AT+COPS?\r\n”检测运营商,返回OKxa0或ERROR

AT+CVHU=0和ATH挂断电话:“AT+CVHU=0\r\n”再发“ATH\r\n”

ATA接听电话:“ATA\n\r”

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

xa0

图4xa0电话拨打接听流程图

2、网络控制接口

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

3、演示程序实操

lxa0使能4Gxa0模块

默认内核启动时,把4G模块的复位引脚拉低,使模块处于非工作的状态。要想完全使能模块,运行/optxa0目录下的upmodule.shxa0脚本即可。

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

lxa0编译演示程序

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

lxa0电话功能测试

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

[root@M28xxa0opt]#xa0./longsung-testxa0/dev/ttyUSB1

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

图5xa0代码启动运行结果

lxa04.4.4xa0上网功能测试

这里使用U8300C,以中国移动4G卡为例进行拨号上网,设备上电之前需要先插入SIMxa0卡,保证以使能4G

模块并成功入网。

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

echoxa0"TIMEOUTxa05xa0''xa0ATxa0OKxa0ATE0V1xa0OKxa0ATxa0OKxa0ATS0=0xa0OKxa0ATxa0OKxa0ATE0V1xa0OKxa0ATxa0OKxa0ATDT*99*#xa0CONNECTxa0''"xa0>xa0/tmp/chatscript

pppdxa0/dev/ttyUSB3xa0persistxa0connectxa0"chatxa0-vxa0-fxa0/tmp/chatscript"

保存退出后,修改ppp_dial_LTE.shxa0的运行属性,然后直接运行该脚本,进行拨号操作,参考操作如下:

[root@M28xxa0ppp]#xa0wrxa0chmodxa0755xa0ppp_dial_LTE.sh

[root@M28xxa0ppp]#xa0./ppp_dial_LTE.sh

执行后,等待大概10~20s,使用ifco

nfigxa0命令查看网络设备,能看到系统生成了一个名为ppp0xa0的网络设备,该设备就是拨号成功后生成的网络设备。拨号成功后可通过pingxa0114.114.114.114.-Ixa0ppp0检查外网是否连接正常。如果没能成功拨号,可以参考下面的“拨号异常分析”来排除问题。

lxa0拨号异常分析

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

如果使用xa0ifconfigxa0命令,无法看到ppp0xa0这个网络设备,只要使用psxa0命令一直都能看到拨号进程的存在,那么只能耐心的等待拨号程序的反馈了。如果psxa0命令无法看到拨号进程了,那么重新运行拨号脚本即可。拨号进程的退出,极有可能是因为信号弱或者SIMxa0卡余额不足导致的。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM入门篇之(一)概念