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

    文章

    11628

    浏览量

    217967
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    嵌入式和FPGA的区别

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

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

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

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

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

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

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

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

    嵌入式领域,不少人都怀揣着让嵌入式Linux 和 FPGA 三个方向实现均衡发展的梦想,然而实践却面临诸多挑战。就像备受瞩目的全栈工程
    的头像 发表于 06-25 10:08 652次阅读
    怎么结合<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 6297次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    Linux的作用

    。 2、嵌入式系统:Linux可以被嵌入到各种嵌入式设备,如智能路由器、智能电视等。它提供了一个灵活的平台,可以根据设备的需求进行定制和优
    发表于 04-04 01:57

    硬核升级!华清远见STM32MP157驱动开发课程助力嵌入式Linux底层开发入门进阶

    嵌入式Linux系统开发,驱动程序开发是一项关键技术,它作为硬件与软件之间的桥梁,实现了操作系统对硬件设备的控制。相较于
    的头像 发表于 04-03 16:40 706次阅读
    硬核升级!华清远见STM32MP157驱动开发课程助力<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>底层开发入门进阶

    嵌入式教育科普|GPIO接口全面解析

    在现代科技领域,嵌入式系统接口作为信息交互的核心载体,发挥着至关重要的作用,各类接口通过预定义的通信协议与标准化规范,可以实现设备间的精准数据传输与智能控制。 作为嵌入式开发的
    的头像 发表于 03-05 11:11 2739次阅读
    <b class='flag-5'>嵌入式</b>教育科普|GPIO接口全面解析

    怎么嵌入式linux下控制dlp?

    请问怎么嵌入式linux 下控制dlp,有没有支持
    发表于 03-03 07:02

    嵌入式系统的代码优化与压缩技术

    在当今数字化时代,嵌入式系统广泛应用于各个领域,从智能家居设备到工业控制系统,从汽车电子到可穿戴设备,它们无处不在。而在嵌入式系统开发,代码优化与压缩技术至关重要,直接影响着系统的性
    发表于 02-26 15:00

    新手怎么学嵌入式?

    基本的概念。嵌入式系统是一种将计算机技术嵌入到特定设备的系统,它通常具有特定的功能和有限的资源。你需要学习一些计算机基础知识,如数据结构、操作系统、计算机组成原理等。这些知识将帮助你
    发表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统的一种技术嵌入式系统是
    的头像 发表于 12-11 09:23 1519次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能