4g模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一,随着4g的普及,许多新兴市场对4g通信模块的需求都在日益扩大,那么在arm平台的嵌入式设备上如何快速的应用4g模块呢?
4g通信模块把频率接收器和信号增幅器等部件全都整合在一起,实现了一体化。随着工业发展,嵌入式设备接入网络的需求日益增多,在没有有线或wifi等无线的环境下,直接通过4g通讯模块连接运营商网络来接入互联网不失为一个好方法。因此,本文就为读者介绍一下基于arm平台的嵌入式设备在linux下使用4g模块的方法。
一、开发环境
1) 开发主机环境:
ubuntu12.04(64位)、arm-fls-linux-guneabi-gcc系列交叉编译链。
2) 硬件清单:
iot-3960工控板、龙尚 4g模块u8300c或u8300w。
3) 软件资源:
光盘epc-280_283_287v1.04.iso中的内核源码包:linux-2.6.35.3-fec60fa.tar.bz2(光盘内容可在致远电子官网下载http://www.zlg.cn)。
二、硬件概述
iot-3960l 是广州致远电子股份有限公司以freescale i.mx287处理器为核心开发的工业iot网络控制器,集成多路通信接口,支持多种通信协议,具有性价比高、功能丰富、工作稳定、兼容性强等特点,产品实物如图1所示。
图1 iot-3960l工控板
通过自定义的 mini-pcie 接口,iot-3960l 可外扩3g、4g、gprs、zigbee、rfid 等无线通信模块。本文外扩的是龙尚4g 模块,所用的型号如图2所示。
图2 龙尚4g模块u8300c、u8300w
三、技术实现
1、解压内核源码
将 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
2、修改配置文件
在内核源码目录“drivers/gpio/”下的kconfig 文件中有设定了config_gpio_m28x 宏的默认配置,用vim编辑器打开这个kconfig 文件,搜索“gpio_m28x”,找到其配置设定,将其修改为可独立配置的选项,修改后的配置如下所示(红色标识的为修改部分):
config gpio_m28x
tristate “gpio support for minipci-e slot control”
#depends on iot_3960 || iot_3962
help
say yes here to enable the iot_396x board gpio driver.
3、修改内核编译脚本
linux 源码目录下的build-kernel 脚本文件主要用于切换内核默认配置,但因光盘中的该脚本文件设置不够灵活,建议直接将build-kernel文本内容整体替换为如图 3所示的代码:
图3 build-kernel 文件内容
4、配置内核源码
进入解压后的 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 ---》”选项,配置完内核后,保存并退出内核配置操作。
5、 修改&编译内核源码
对龙尚4g模块,我们需要在linux-2.6.35.3 目录下对三个数组中的内容进行修改:
l 使用vi 或者vim 命令打开drivers/gpio/gpio_m28x.c 文件,在all_gpios_info[ ]数组作中作修改;
l 使用vi 或者vim 命令打开arch/arm/mach-mx28/mx28evk_pins.c 文件,在mx28evk_fixed_pins []数组中作修改;
l 使用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 章的内容。
四、4g 模块测试
这里主要介绍龙尚4g模块的电话、网络等控制接口以及iot-3960l工控板对其操作的通信流程。用于测试的工控板必须烧写epc-280_283_287 v1.04.iso 光盘中v1.03的uboot 及文件系统,因为其中包含必要的拨号上网工具。
1、电话控制接口
电话接听和拨打命令如表1所示。通过向串口发送相应的命令就可以实现电话的接听和拨打。如:可以向串口发送“atd12345678901;\n\r”就可以向12345678901拨打电话。
表1 电话拨打和接听控制命令表
命令语法及作用
atd拨打电话:atd+电话+;\r\n”如atd10010;后面分号
不能少,返回ok 或error
at+cops?“at+cops?\r\n”检测运营商,返回ok 或error
at+cvhu=0和ath挂断电话:“at+cvhu=0\r\n”再发“ath\r\n”
ata接听电话:“ata\n\r”
电话拨打接听代码执行流程如图4所示。代码首先会显示可供使用的菜单,如电话拨打,短信接收等。等待用户输入参数,执行参数对应的流程。然后判断是否执行成功,如果执行成功就会返回显示菜单代码处继续执行下一下循环。
图4 电话拨打接听流程图
2、网络控制接口
4g 模块上网功能通过ppp 拨号提供的接口连接网络。在开发套件文件系统的“/etc/ppp”目录下预置了可以参考的拨号脚本。拨号成功后(执行ppp 拨号脚本),内核会生成ppp 网络设备。通过创建套接字就可以访问网络。
3、演示程序实操
l 使能4g 模块
默认内核启动时,把4g模块的复位引脚拉低,使模块处于非工作的状态。要想完全使能模块,运行/opt 目录下的upmodule.sh 脚本即可。
此时板子的wwan 这个led 会出现闪烁的现象,闪烁频率大概为800 毫秒,然后设备开始入网,入网成功后,板子的wwan 这个led 的闪烁频率变为3 秒左右。同时,大概10 秒之后,板子开始检测到usb 设备的插入,然后板子自动安装usb 转串口的驱动,驱动安装完成后,会在板子的/dev 目录下自动生成ttyusb0~ttyusb5 这6 个串口设备。
l 编译演示程序
将/works/mx28x/app/目录下的longsung-test文件夹拷贝到linux 开发主机,编译了longsung-test 下的代码,将生成的longsung-test 文件拷贝到板子即可进行后续的电话功能测试。
l 电话功能测试
使用u8300c,以中国联通4g卡为例进行电话功能测试,设备上电之前需要先插入sim 卡,且保证已经按前面介绍使能了4g模块,并能成功入网。进入 longsung-test 测试程序存放的目录,然后运行longsung-test 程序。
[root@m28x opt]# 。/longsung-test /dev/ttyusb1
longsung-test 测试程序运行结果及其中各数字代表功能如图5所示。需要注意,输入“1”拨打电话之后,必须需要输入“2”挂断电话之后方可继续拨打电话。
图5 代码启动运行结果
l 4.4.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/chatscript
pppd /dev/ttyusb3 persist connect “chat -v -f /tmp/chatscript”
保存退出后,修改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检查外网是否连接正常。如果没能成功拨号,可以参考下面的“拨号异常分析”来排除问题。
l 拨号异常分析
运行拨号脚本后,使用ps 命令能看到拨号进程的存在。只要拨号成功,拨号进程是一直存在的(与pppd 相关的进程),如果该进程不存在,那么生成的ppp0 网络设备也会随同消失。
如果使用 ifconfig 命令,无法看到ppp0 这个网络设备,只要使用ps 命令一直都能看到拨号进程的存在,那么只能耐心的等待拨号程序的反馈了。如果ps 命令无法看到拨号进程了,那么重新运行拨号脚本即可。拨号进程的退出,极有可能是因为信号弱或者sim 卡余额不足导致的。
传特斯拉砸2327亿收购比亚迪20%股份
路由器不知道该怎么选择?教你轻松选择无烦恼
雷曼为国家电网四川省电力公司打造超高清显示综合解决方案
CAN中继器常犯的错误设计
我国移动支付经历数年的发展现状、问题及未来趋势等已步入下半场
4G通信模块在ARM平台下的应用
工信部:我国3G用户突破一亿
腾讯发布公告,回应美商务部限制微信国际版事件
光谱共焦位移传感器适用于哪些领域
小米MIX2什么时候上市最新消息:小米MIX2曝光,屏占比达到95%,再次惊艳你的眼球!
RF Data Converter IP设计仿真测试激励文件原理
楞次定律最具代表性的作品:感应电机
移动网无线信号质量监测系统[图]
变压器的在线监测技术
机器学习和深度学习的区别
OPPO R11s最新信息:获入网许可证,全面屏已基本确认
品牌口碑的好坏决定扫地机器人好不好卖
嘉宾观点摘要 2019全球燃料电池产业论坛圆满落幕!
干货:史上最全汽车指示灯图解!
广和通携手伙伴制定5G通用模组标准,推动全球5G IoT产业蓬勃发展