转自:http://blog.csdn.net/feelinghappy/article/details/9344637

摘要:SMS短信息服务作为GSM网络的一种基本业务已得到越来越多的系统运营商和系统开发商的重视,以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的各类应用。本文给出一个小型的嵌入式SMS中/英文短信息接口的设计,并详细讨论PDU模式的短信息格式和中文短信息软件解码的设计。

关键词:GSM SMS UTF-8 GB-2312 无线通信 无线数传 遥控 中文编码

引 言:
  SMS(Short Message Service)短信息服务是GSM(Global System for Mobile Communication)系统中提供的一种GSM终端(手机)之间,通过服务中心(Service Center)进行文本信息收发的应用服务,其中服务中心完成信息的存储和转发功能。短信息服务作为GSM网络的一种基本业务,已得到越来越多的系统运营商和系统开发商的重视,基于这种业务的各种应用也蓬勃发展起来。以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的各类应用,如无线数据的双向传送、无线远程检测和控制等。典型的应用有:变电站、电表、水塔、水库或环保监测点等监测数据的无线传输和无线自动警报;远程无线控制高压线路断电器、加热系统、防洪拦阻系统或其它机电系统的启动和关闭;车队交通管理和控制指挥系统;控制和监测香烟、食品和饮料自动售货机的运行状态和存货水平等等。

  由于GSM网络在全国范围内实现了联网和漫游,具有网络能力强的特点,用户无需另外组网,在极大提高网络覆盖范围的同时为客户节省了昂贵建网费用和维护费用。同时,它对用户的数量也没有限制,克服了传统的专网通信系统投资成本大,维护费用高,且网络监控的覆盖范围和用户数量有限的缺陷。比起传统的集群系统在无线网络覆盖上具有无法比拟的优势,加上GSM的SMS本身具备的数据传送功能,都使得这些应用得到迅速的普及。利用GSM短信息系统进行无线通信还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供了一个强大的支持平台。

1 SMS短信息的无线数传监视和控制

  通常情况,基于SMS短信息服务的无线数传监视和控制系统为一个点到多点的远程无线双向数据通信和控制系统,如图1所示。系统的中心点为数据或监控指挥中心,由计算机网络、数据库、电子地图和GSM通信接口组成。监控中心主要完成各种信息和数据的收发和整理:一方面,接收各个监控点上传的信息和数据,并把它们放入相应的数据库和分发给相应的监控计算机,以实现对各个监控点的监控和管理;另一个方面,监控中心响应监控计算机发出的对各个监控点的控制信息,并且把这些信息下发到相应的监控点上,从而达到对监控点设备进行控制的目的。
    
2 GSM无线通信控制终端

  GSM无线通信控制终端为一个MC3的嵌入式系统,具有如图2所示的测量、数据采集、控制、无线通信功能。GSM无线通信控制终端通过GSM网络和监控中心进行双向的信息传输。它将测量和采集到的数据信息传送到监控中心,同时接收监控中心的控制数据,对设备实施相应的控制。
       
3 GSM通信接口的硬件实现

  GSM无线通信控制终端的通信接口一般采用目前在市场上提供的可供二次开发的标准的GSM模块,如TC35、FALCOM、WISMO3等。这些通信模块都具备GSM无线通信的全部功能,并提供标准的UART串行接口,支持GSM 07.05所定义的AT命令集的指令。因此,MCU能非常方便地通过UART接口与GSM模块连接,并直接使用AT命令就可以方便简洁地实现短信息的收发、查寻和管理。

  在我们设计的GSM无线通信控制终端中,采用的GSM通信模块为FALCOM A2D,MCU使用的是Atmel公司的高速8位微控制器ATmage128。ATmega128芯片为64个引脚,内部集成了4K字节的RAM、4K字节的EEPROM、128K字节的Flash以及2个UART串行接口等。由于采用了高性能的MCU,省掉了大量的外围器件,如外扩RAM、ROM存储器等,使硬件结构大大简化,提高了系统的可靠性。系统的硬件框图如图3所示。
        
4 基于GSM通信的软件接口

  市场上提供的可供二次开发的标准的GSM模块都支持GSM 07.05所定义的AT命令集的指令。因此,MCU通过UART串行接口直接向GSM模块下发AT命令,就可以方便简洁地实现基于GSM的短信息SMS的收发、查寻和管理。表1列出了与SMS相关的一些常用的GSM AT指令。
       
  根据GSM 07.05的定义,SMS短信息的发送和接收模式共有三种:Block模式、基于AT命令的Text模式和基于AT命令的PDU模式。使用Block模式需要模块生产厂家提供驱动支持;而用于中英文短信息传送应使用PDU模式,只传送英文短信息(纯文本格式)使用Text模式。Text模式的短信息发送和接收比较简单,如不需要传送中文则最好采用Text模式发送和接收短信息。

  采用Text模式发送接收短信息的步骤分为初始化GSM模块、发送文本短信息和接收短信息。下面一段简单的程序给出一个示例:
PRINT "AT+CSCA=";Chr(34);"+8613800210500";Chr(34) ‘设置短信息中心号码
PRINT "AT+CMGF=1" ‘设置为Text模式
PRINT "AT+CMGS=";Chr(34);"13500123456";Chr(34) ‘发送一条短信息 
PRINT "This is a test SMS";Chr(26)
PRINT "AT+CMGR=1" ‘读取收到的一条
‘短信息
.
.
.
  该程序使用BASCOM-AVR高级语言编写,其中PRINT语句的功能是通过URAT串行口发送字符串,Chr(34)代表ASCII字符(“),Chr(26) 代表ASCII字符(Ctrl-Z)。第一行语句设置短信息服务中心号码,即通过串口发送以下字符串: AT+CSCA= "+8613800210500",其中+8613800210500为上海地区中国移动的短信息服务中心号码。第二行语句设置短信息发送格式:AT+CMGF=1,其中1表示采用Text模式。第三和第四行语句发送一条短信息到控制中心,AT命令的格式为:AT+CMGS= "13500123456"<cr>This is a test SMS<^Z>,其中控制中心的号码为13500123456,短信息内容为“This is a test SMS”,确认控制字符为Ctrl-Z。第五行语句为读取一条收到的短信息内容:AT+CMGR=1,其中1表示收到的(在SIM卡中)第一条短信息。该指令发出后,如果GSM模块中有接收到的短信息,则从UART接口返回如下信息(具体AT命令格式请参考GSM 07.05):

  +CMGR: "REC UNREAD","+8613508485560",,"02/10/16,15:37:28+32"
xxxxxxxxxxxxxxxxxx (收到短信息的文本内容)

5 基于PDU模式的中文短信息接收

  发送和接收中文或中/英文混合的短信息必须采用PDU模式。根据GSM 07.05的定义,只要控制器通过UART接口向GSM模块下发AT命令,就可以直接读取收到的PDU模式的短信息:
  PRINT "AT+CMGF=0" ‘设置为PDU模式
  PRINT "AT+CMGR=1"‘读取接收的一条短信
‘息
在PDU模式下,GSM通信模块的回答格式为:
+CMGR: <stat>,,<length><CR><LF><pdu>

  其中: stat表示该条短信息的状态,通常为0(未读过,新的短信息)或1(已读过);
Length为十进制数,表示pdu数据长度减去短信息服务中心地址长度,单位为字节;
<CR><LF>为回车换行;
pdu为PDU模式的数据包。

  然后,要分析PDU数据包,根据PDU的数据格式将收到的中文信息和其它相关信息解析出来。

5.1 PDU数据包格式
  PDU数据包由两部分构成,短信息服务中心地址(SMSC address)和TPDU,表2为PDU数据包的格式,其中一个数据单元为一个字节。

  其中短信息服务中心号码、发送源号码、日期以及时间采用压缩BCD码表示,低位在前,高位在后。在本文的网络补充版(http://www.dpj.com.cn)中给出了通过读取短信息的AT命令(AT+CMGR=1)从GSM模块读到的一条PDU模式的短信息,并给出常见的数值与解释。

5.2 PDU模式的纯英文短信息解码
  PDU模式的纯英文短信息编码使用GSM字符集的7位编码,此时TP-DCS的值为00。如短信息内容为英文字符“Hi”,首先将各个字符转换为7位的标准二进制ASCII码,然后要将后面字符的低位逐位调整到前面,补齐前面的差别。例如:“H”的二进制ASCII码为1001000,“i” 二进制ASCII码为1101001;显然H的二进制编码不足八位,那么就将后面字符i的最后一位补足到H的前面,就成了11001000(C8),i剩下六位110100,前面再补两个0,变成00110100(34),于是“Hi”就变成了两个八进制数 C834。由于PDU模式的纯英文短信息采用7位编码,解码不方便,因此对于只需发送和接收纯英文字符和数字符号的应用,最好采用Text模式发送和接收短信息。

5.3 中文短信息的解码
  由于中文字的编码是采用2个字节的编码,因此发送和接收中文或中英文混合的短信息只能采用PDU模式。但在GSM标准中,中文编码采用UTF-8的编码,不是目前国内常用的GB-2312编码,故还需要进行中文编码的转换,才能与采用GB-2313汉字库相配合显示汉字字型。
由于UTF-8和GB-2312编码之间不存在一一对应的线性关系,因此只能采用查表的方式进行转换。下面给出一个由UTF-8到GB-2312编码转换的算法。

  ① 建立UTF-8和GB-2312两个中文编码表,表中数据项为2个字节长度的十六进制的数,代表一个中文编码。两个表的长度分别为14 890字节(2×7445)。UTF-8编码表按数据项值从小到大排序,而在GB-2312编码表中,与UTF-8相同位置处为相同汉字的GB-2312码字,如图4所示。
           
  ② 软件解码过程为:每次从PDU模式SMS数据包的TP-UD中取出两个字节,采用二分法快速数据查找算法,在UTF-8编码表中找到其所在位置,然后在GB-2312表的相同位置处读取相对应的GB-2312编码。解码流程如图5所示。
       
  ③ 二分法的最坏查找次数为lg2(n+1),UTF-8表的长度n为7445,固最坏查找次数为13次,就是说一个中文编码由UTF-8到GB-2312的转换最多经过13次比较查找就可完成。 这比采用简单的顺序查表要快的多,大大减少了查表所花费的时间,非常适合在一般的嵌入式系统中使用。

  ④ 尽管两个汉字编码表要占用近30 KB(如还需要GB-2312到UTF-8的转换,则还要增加两个表,共占60 KB),但由于采用了ATmega128单片机,其片内有128KB的程序存储器,因此可将程序与表格放在一起。去掉60 KB的表格,仍有近70 KB的容量用于系统程序,因此完全不用外部扩充存储器(汉字字库除外),大大简化了硬件的结构和设计。

结 语

  本文的设计方案已应用在我们研发的产品“车船载GPS-GSM卫星定位无线通信移动终端”上,经过多年的运行和使用,证明系统工作稳定可靠。2001年10月,在美国著名计算机应用杂志《CIRCUIT CELLAR》举办的世界性电子设计竞赛“Design Logic 2001 Contest”中,该产品获得三等奖。
                参考文献
1 European Telecommunications Standards Institute. ETSI GTS GSM 07.05. http://www.etsi.com
2 European Telecommunications Standards Institute. ETSI GTS GSM 07.07. http://www.etsi.com
3 Atmel Corp. Atmega128 Data Book. http://www.atmel.com
4 MCS Electronics. BASCOM-AVR USER MANUAL. http://www.mcselec.com

嵌入式GSM短信息接口的软硬件设计相关推荐

  1. 无线通信零基础学习记录(2)——GSM空中接口物理层的设计

    无线通信零基础学习记录(2)--GSM空中接口物理层的设计 本章解释清楚了之前未搞懂的名词,如时隙等,以及各种信道类型,在此一并总结. TDMA空中接口技术 时分多址(TDMA,Time Divisi ...

  2. linux端口带卡,基于嵌入式Linux的接口转换卡设计

    接口总线为一群互相连接的设备提供一种有效的通信方式,它是自动测试系统发展的标志,可以说接口总线技术发展的历史就是自动测试系统发展史,接口总线技术发展的水平标志着自动测试发展的水平.本文提出的接口转换方 ...

  3. 5-GSM空中接口物理层的设计

    GSM空中接口物理层的设计 本章解释清楚了之前未搞懂的名词,如时隙等,以及各种信道类型,在此一并总结. TDMA空中接口技术 时分多址(TDMA,Time Division Mutiple Acces ...

  4. FPGA学习之嵌入式硬件系统(SOPC)概述(软硬件设计)

    FPGA学习之嵌入式硬件系统(SOPC)概述(软硬件设计) 首先我们知道FPGA可以实现充当完整微处理器的逻辑,并且提供许多灵活性选项.下图体现出FPGA器件为何是现场可编辑门阵列器件. 为了使基于F ...

  5. 走嵌入式方向,一定要软硬件都懂吗?

    知乎上看到这么一个问题:走嵌入式方向,一定要软硬件都懂吗? 如下写点个人看法,全文约2432个字,阅读时间约10分钟,仅供参考-- 一  信息时代知识爆炸 从以瓦特发明蒸汽机为代表的第一次工业革命,到 ...

  6. linux算法设计,嵌入式Linux平台下随机序列算法设计.doc

    嵌入式Linux平台下随机序列算法设计 嵌入式Linux平台下随机序列算法设计 [摘 要]本文以多媒体播放器的随机不重复播放机能为切入点,针对嵌入式平台实时性要求高,处理速度不够快,但系统存储歌曲量大 ...

  7. 嵌入式:万字详解通信接口设计

    文章目录 UART接口 UART的工作原理 UART的功能和组成 S3C2410A的UART UART 操作 (1)数据发送 (2)数据接收 (3)自动流控制 (4)非自动流控制 (a)接收数据操作 ...

  8. 全志A40I方案 全志A40I方案定制 全志A40I软硬件设计定制 全志A40i性能如何

    全志A40I基于Cortex™-A7四核处理器,主频最高1.2GHz,内部集成Mali400 MP2 GPU图形处理器,接口丰富,性价比极高.主板集成多媒体解码.液晶驱动.千兆以太网.HDMI.WIF ...

  9. iTOP-4418嵌入式开发板接口基本介绍

    iTOP-4418嵌入式开发板是迅为电子设计研发的一款四核Cortex-A9开发板,可广泛适用于工控.智能家居.医疗.多媒体.安防.车载.金融.消费电子.手持设备.显示控制.教学.电力.通讯等领域. ...

最新文章

  1. 文本间加入任意字符的PHP函数
  2. php java memcached_php和java的memcached使用的兼容性问题解决过程
  3. Java XML解析工具 JDOM介绍及使用实例
  4. 编程之美-判断两个链表是否相交方法整理
  5. PowerShell删除Exchange 2010邮件的正确姿势
  6. 基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 系统架构
  7. MyBatis 源码解读-执行SQL
  8. 437. 路径总和 III
  9. MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)
  10. 十大经典排序算法(附代码、动画及改进方案)
  11. 2018蓝桥模拟赛(一) 数独(dfs)
  12. java面向对象--对象初始化
  13. UNIX环境高级编程之第8章:进程控制-习题
  14. 让Microsoft Office2010 新建 Microsoft Office 97-2003 文档
  15. MySQL卸载不干净-MySQL Connector Net xxx文件怎么也删除不了?一招解决它
  16. python 生意参谋操作
  17. OpenFOAM常用类
  18. Cisco路由器内部网关协议(IGP)实验:OSPF
  19. OffiSmart Summit智慧办公及空间管理上海线下峰会精彩亮点抢先看
  20. ByteDance字节跳动张一鸣:如何阅读、如何了解自己、如何与人沟通沟通、如何安排时间、如何正确的看待别人意见、如何激励自己、如何写作、如何坚持锻炼身体、如何耐心?...

热门文章

  1. 220V转5V供电ic用在小功率家用电器上
  2. linux命令查看出口ip公网ip
  3. css选择器设置标签样式
  4. 安科瑞基于节能减排理念的校园电气设计研究-Susie 周
  5. Oracle P6软件设计专业工作的特点
  6. c++实现词法分析器源代码(编译原理)
  7. 华电c语言程序设计教材,程序设计入门——C语言(王红)
  8. MSSQL Server 数据库可疑、置疑修复方法
  9. notepad++正则表达式表示汉字
  10. 面试宝典-Mysql篇