4G通信模块在ARM平台下的应用
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是广州致远电子股份有限公司以NXP 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 onIoT_3960 || IoT_3962
help
Say yes here to enable the IoT_396x boardgpio driver.
3、修改内核编译脚本
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
(下拉可显示更多代码)
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 目录下对三个数组中的内容进行修改:
使用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章的内容。
四、4G模块测试
这里主要介绍龙尚4G模块的电话、网络等控制接口以及IoT-3960L工控板对其操作的通信流程。用于测试的工控板必须烧写EPC-280_283_287 V1.04.iso 光盘中V1.03的uboot 及文件系统,因为其中包含必要的拨号上网工具。
1、电话控制接口
电话接听和拨打命令如表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 电话拨打接听流程图
2、网络控制接口
4G模块上网功能通过PPP拨号提供的接口连接网络。在开发套件文件系统的“/etc/ppp”目录下预置了可以参考的拨号脚本。拨号成功后(执行PPP 拨号脚本),内核会生成PPP网络设备。通过创建套接字就可以访问网络。
3、演示程序实操
使能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 卡余额不足导致的。
转载于:https://www.cnblogs.com/wei-chen-linux/p/10832556.html
4G通信模块在ARM平台下的应用相关推荐
- 4G 通信模块在ARM 平台下的应用
收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一,随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在A ...
- 4g通信模块怎么连接sim卡_4G通信模块在ARM平台下的应用
4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...
- 将Linux系统下交叉编译的依赖库推到ARM平台下无法建立以来关系解决
问题:平常把opencv库使用源码交叉编译好之后,从windows推到飞机里发现,该库的依赖关系都没有了,导致程序运行的时候报该库大小有问题 解决办法: 1.将linux下的库推到ARM平台中的一个文 ...
- ARM平台下无线网卡的配置
ARM平台下无线网卡的配置 前言 看了下上次博客时间,大概是毕业后到目前两个多月了没有更新博客,突然发现自己正在变得越来越懒,这可不是一个好的征兆.除过找工作一个礼拜的时间,算起来已经工作了快2个月了 ...
- ARM平台下独占访问指令LDREX和STREX的原理与使用详解
为了实现线程间同步,一般都要在执行关键代码段之前加互斥(Mutex)锁,且在执行完关键代码段之后解锁.为了实现所谓的互斥锁的概念,一般都需要所在平台提供支持. 在计算机领域里,如果要在多线程的情况下要 ...
- X86与ARM平台下的参数传递机制
X86与ARM平台区别参考:一文看懂arm架构和x86架构有什么区别_bleauchat的博客-CSDN博客_arm x86 1. X86下的参数传递 参数传递: (1)32位程序使用栈传递. (2) ...
- linux xen 管理,ARM平台上运行Xen 可同时管理linux和VxWorks
Xen项目管理程序从上个世纪90年代就已经在剑桥大学里开始进行,到了2002年项目开源.如今它是最流行的开源管理程序之一,可以在云计算上使用,Xilinx和DornerWorks将这种虚拟化平台应用在 ...
- STM32平台下官方DMP库6.12超详细移植教程
前记 Motion Driver官方库:Motion_Driver_6.12 STM32工程源码:STM32F103C8-软件MPU6050(DMP) MPU6050软件I2C驱动,带OLED显示,移 ...
- 一种linux平台下算法库二进制文件加密方法探讨
最近做项目遇到一个需求,需要把我们的图像算法库提供给客户使用,为防止算法库被对方滥用和逆向破解,需要对算法库二进制文件做加密处理以及加密狗绑定,同时防止库文件被反调试跟踪.算法库加密可以借助开源软件 ...
最新文章
- bootstrap-wysiwyg: 迷你的Bootstrap的所见即所得的HTML富文本编辑器
- hive与hbase整合
- C 库函数 - atoi()
- java类中serialversionuid 作用 是什么?举个例子说明
- action mutation 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
- scheduledexecutorservice 只执行一次_一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考...
- 旅程落幕!网易相册将停止运营 这里有你的回忆吗?
- 采用Spring实现AOP功能
- [iCustomer] 项目技术简介
- FPN网络结构及Pytorch实现
- 电脑有英伟达独显,有了英伟达显卡驱动还要英特尔显卡驱动吗?
- 个人最喜爱产品分析:大众点评app
- Sping Cloud专栏:路由Gateway有效避免 Only one connection receive subscriber allowed问题
- HTML中注解的写法正确的是,css注释的写法(单行和多行)
- MAC 删除自带 ABC 输入法的方法
- flex中dataGrid的编辑功能
- insert into... where not exists插入避免重复的使用
- Hadoop_day07学习笔记
- 二叉树的先序、中序、后序遍历C++
- 绿地深蓝机器人_绿地控股布局科创产业 发展人工智能建筑和机器人
热门文章
- 通过自定义资源扩展Kubernetes
- 《大西洋月刊》:在线能影响中国高等教育吗?
- 【转】在SQL Server中创建用户角色及授权(使用SQL语句)
- 【原创】Quartz代码详解
- 第二十一章流 14临时文件
- SSAS : 使用.NET为SSAS编写自定义程序集(四)
- 四 s5p4418 Android 对can总线的支持 支持波特率修改
- accessdeniedexception: 不允许访问_一招解决JDK9以上非法反射访问警告
- 如何用计算机辅助语言学习英语,计算机辅助下语言学习教学模式研究
- OpenKruise v0.10.0 版本发布:新增应用弹性拓扑管理、应用防护等能力