0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术嵌入式Linux中同时实现GPRS和SMS短信收发

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-14 11:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

随着移动通讯技术的发展普及,GPRS无线通讯和SMS短信收发越来越多地应用到工业领域的远程数据通讯中。GPSR主要是进行的数据通讯,SMS则是AT指令的操作模式,在不少的无线通讯模块,比如西门子的MC39i、华为的GTM900,模块一旦处于GPRS数据通讯状态,则无法再进行AT指令的操作,从而难以同时实现SMS短信数据收发的功能。解决这个问题方法之一是在软件上实现多路转换协议,这种方式通过软件协议的方式将一个物理口虚拟为多个口,从而将GPRS通讯和SMS通讯分开,这种模式程序往往比较复杂,在嵌入式的应用中比较难以实现。方法之二就是直接在硬件物理口上将GPRS和SMS通讯分开,西门子提供的MC37i无线模块本身就自带有两个物理串口,可以支持分别进行GPRS和SMS通讯的操作。本文将结合英利公司提供的ARM9 Linux主板EM9160和ETA300 GPRS扩展单元(GPRS无线模块为MC37i),着重介绍如何同时实现GPSR通讯和SMS短信收发的应用。

硬件组成

英利公司的嵌入式Linux主板EM9160共有6个异步串口,在Linux环境中为“/dev/ttyS1”-“/dev/ttyS6”。ETA300是包括MC37i模块的外挂式GPRS通讯单元,可直接通过带线与英利EM9160开发评估底板相连,如下图所示。其中GPRS通讯占用EM9160的 “/dev/ttyS1” (或称COM2) 口,SMS通讯占用EM9160的“/dev/ttyS4”( 或称COM5 ) 口,连接方式如下图所示。

MC37i电源管理

通过ETA300 GPRS扩展单元可实现对MC37i的电源管理,MC37i的电源管理是通过两路GPIO:GPIO8和GPIO9来实现,分别对应GPRS _STB、GPRS_AUX管脚信号。在程序上操作GPIO8、GPIO9实现对MC37i的上电、关电操作。以下为提供的对MC37i电源管理的操作函数:

// 功能描述:该函数通过对EM9160的GPRS_STB和GPRS_AUX两个管脚信号的操作,实现对GPRS模块的电源管理。
// 输入参数 OpMode: 电源管理功能索引号,有效索引号包括:
OpMode = 1: 对GPRS模块进行上电操作,并把执行该操作后电 源状态返回;
OpMode = 2: 对GPRS模块进行强制关电,并把执行该操作后电源状态返回;
OpMode = 3: 读取GPRS模块当前的电源状态。
// 输出参数 pResult: 用于存储读取的电源状态信息。
*pResult = 0: 表示GPRS模块的电源已关闭;
*pResult = 1: 表示GPRS模块的电源已加载成功;
int GPRS_PM( int fd, int OpMode, int* pResult )

嵌入式Linux中的GPRS拨号

嵌入式Linux ppp GPRS拨号程序pppd和相关的脚本文件,均已经缺省包含在EM9160板卡的根文件系统中。

嵌入式Linux主板EM9160环境下进行GPRS拨号时,首先调用函数GPRS_PM(…)使MC37i上电成功,然后再启动pppd进程进行GPRS拨号。

printf('GPRS Power On\n');
GPRS_PM(fd, 1, &GPRS_State);
// MC37i模块上电登录到移动网络等待时间
for( i1=0; i1<8; i1++ )
{
sleep( 1 );
printf( '.\n' );
}
system( 'pppd call pppd-connect-script' );

挂断直接可调用ppp-off脚本:

system( '/etc/ppp/ppp-off' );

嵌入式Linux中的SMS短信收发

SMS短信收发的核心通讯模式为串口通讯,应用程序上也是采用的C++编程方式,利用英利公司网站技术天地栏目中《嵌入式Linux串口通讯的C++设计》一文中介绍的CSerial类,在CSerial基础上派生了一个针对于SMS收发应用的class SMS,该派生类 class SMS 中重新实现了虚函数PackagePro(…) 接收数据处理函数,以满足SMS收发的应用需求。

在sms.h中定义了短信的数据结构:

struct SMS_DATA
{
unsigned char PhoneNum[16]; // 对端电话号码
struct Date d; // 日期:年月日
struct Time t; // 时间:时分秒
int DatLen; // 数据长度
unsigned char DBuf[168]; // 短信数据内容
};

对于SMS短信收发可调用的类函数包括有:

// 按照指定的参数打开短信Modem端口,并创建短信接收线程
int OpenPort( int PortNo, int baudrate, char databits, char stopbits, char parity );
// 关闭短信Modem端口并释放相关资源
int ClosePort( );
// 发送AT指令初始化短信Modem
int InitSMSModem( );
// 发送短信
int SendMessage( struct SMS_DATA* pSMS );

在该例程中短信接收的处理放在函数PackagePro(…)中实现的,用户可以根据实际情况加以调整。SMS短信收发的实现代码均在sms.cpp下,由于是CSerial的派生类,其接收的主要流程可参见英利公司网站技术天地栏目中《嵌入式Linux串口通讯的C++设计》一文中相关介绍,这里不再赘述。

在class SMS中实现了支持中文短信的发送,所以短信发送的模式均采用PDU模式。对于中文字符,在短信发送时还需要转换为unicode码,程序代码中已经实现了中文内码到unicode 码的自动转换,客户在测试该程序时,需要注意的是要将unicode 的相关转换文件表COPY到/mn/nandflash:gsm0338.bin gb2312.bin unicode.bin。

本文中所介绍的例程仅仅适用于英利EM9160嵌入式主板,均有源码提供。感兴趣的客户可以发邮件到公司技术支持邮箱 support@emlinix.com索取相关代码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11864

    浏览量

    219880
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    37209
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux 下开发嵌入式必备命令速查表

    嵌入式开发Linux系统几乎成为必备的开发环境。不管你是在做STM32、RaspberryPi、还是基于ARM的板子,熟练掌握Linux命令不仅能加快开发效率,还能让你在调试、交
    的头像 发表于 01-19 09:06 1124次阅读
    <b class='flag-5'>Linux</b> 下开发<b class='flag-5'>嵌入式</b>必备命令速查表

    如何在Zynq UltraScale+ MPSoC平台上通过JTAG启动嵌入式Linux镜像

    在之前文章,我们介绍了如何使用 XSCT 工具通过 JTAG 在 Zynq SoC 上启动嵌入式 Linux 镜像(从 JTAG 启动 Zynq-7000 嵌入式
    的头像 发表于 01-13 11:45 5324次阅读

    什么是嵌入式应用开发?

    实现和部署,还包括硬件选择、软件设计、测试、集成和维护等流程‌。 定义和背景 嵌入式应用开发是指将软件部署到嵌入式系统,这些系统广泛应用于消费电子和工业自动化
    发表于 01-12 16:13

    从小白到大牛:Linux嵌入式系统开发的完整指南

    )、单元测试(CUnit)。学会使用 Buildroot、Yocto Project 等嵌入式 Linux 构建工具,实现系统的自动化编译、定制与升级。同时,培养问题排查能力(如通过日
    发表于 12-16 10:42

    系统嵌入式的学习路线

    嵌入式技术是各种电子产品的核心技术,也是工业4.0、远程医疗、3D打印等新兴产业的核心技术,具有广阔的发展前景。很多计算机、电子信息类专业的
    发表于 12-16 07:49

    C语言在嵌入式开发的应用

    嵌入式设备能够与外部网络进行通信,实现数据传输和信息共享。 在智能家居、工业物联网、智能交通等领域,嵌入式网络编程的应用无处不在。在智能家居系统
    发表于 11-21 08:09

    嵌入式与FPGA的区别

    分为算法和控制,而算法的工资会比控制高,因为技术含量比控制高得多,但算法适合高数比较好的人学。 ⭕最后在了解下入行门槛? ✅1、嵌入式系统的门槛比较低,不管是嵌入式linux还是纯软,
    发表于 11-20 07:12

    嵌入式和FPGA的区别

    。 在当今智能化时代,嵌入式系统和FPGA技术都是电子系统设计的重要组成部分,但许多工程师和技术爱好者常常对两者的区别和应用场景感到困惑。本文将深入解析
    发表于 11-19 06:55

    物联网短信实战:SMS收发功能速成来啦!

    在物联网开发短信收发是常见需求。本文带来一场技术实战,借助SMS库,10分钟内即可实现物联网
    的头像 发表于 10-21 17:09 1012次阅读
    物联网<b class='flag-5'>短信</b>实战:<b class='flag-5'>SMS</b>库<b class='flag-5'>收发</b>功能速成来啦!

    嵌入式需要掌握哪些核心技能?

    嵌入式需要掌握哪些核心技能? 若想通过学习嵌入式技术提升就业竞争力,需重点掌握C语言、嵌入式硬件架构、RTOS/Linux开发、通信协议四
    发表于 10-21 16:25

    盘点嵌入式就业所需要的技能有哪些?

    在数字化和智能化的大潮嵌入式系统无疑是支撑现代科技发展的核心力量。从智能手机到智能汽车,再到智能家居,嵌入式技术无处不在,无时不刻不在影响着我们的生活和工作方式。因此,对于那些对科
    发表于 08-11 15:43

    LuatOS短信功能全解析:技术原理与运行逻辑

    想要了解短信如何在LuatOS上高效运行?本文将拆解其airsms.lua文件技术架构,从通信协议到代码实现,逐层揭示短信功能的完整运作流程与核心逻辑。   一、发送
    的头像 发表于 07-03 15:25 865次阅读
    LuatOS<b class='flag-5'>短信</b>功能全解析:<b class='flag-5'>技术</b>原理与运行逻辑

    怎么结合嵌入式Linux,和FPGA三个方向达到一个均衡发展?

    嵌入式领域,不少人都怀揣着让嵌入式Linux 和 FPGA 三个方向实现均衡发展的梦想,然而实践却面临诸多挑战。就像备受瞩目的全栈工程
    的头像 发表于 06-25 10:08 1104次阅读
    怎么结合<b class='flag-5'>嵌入式</b>,<b class='flag-5'>Linux</b>,和FPGA三个方向达到一个均衡发展?

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式在多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux嵌入式: 定义:将
    发表于 06-20 09:46

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安全、推动产业升级和
    的头像 发表于 06-13 10:06 9926次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略