苗 雨
摘要:短信的发送需要GSM模块和处理器协作完成,GSM模块与ARM处理器通过串口连接,处理器向串口发送接收AT命令与GSM模块形成通信回路。中文短信的发送采用PDU模式,根据PDU模式标准形成PDU发送包,实现短信发送。本文根据无线电话项目的短信发送模块的实际开发流程编写,本文内容通过测试。
关键词:GSM;SMS;AT命令;PDU
中图分类号:TN929文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c
Design of Message Sending with GSM Module
MIAO Yu
(Zhuhai College of Jilin University,Zhuhai 519041,China)
Abstract:Sending a message needs GSM module and processor to work together. GSM module and ARM processor are connected through the series. AT order set is the communication protocol between the module and controller. Processor receives and sends AT order through series and forms the loop with the GSM module, then realizes the message sending and receiving. Sending message uses PDU mode. This article introduces the flow of actual research on message sending module.
Key words:GSM;SMS;AT order;PDU
1 引言
2007年全国手机短信发送量达到5921亿条,日均发送量超过16亿条。短信的应用也扩展到各个领域,本文介绍了多媒体电话短消息发送模块的实现原理和具体的实现方法。由短消息发送流程可以了解短信息发送过程的每一个环节,对短信息安全,屏蔽垃圾短信有一定的作用。
2 GSM模块及GSM模块的短信功能
GSM(Global System for Mobile communication)系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的一种系统。目前已建成的覆盖全国的GSM数字蜂窝移动通信网,是我国公众移动通信网的主要方式,主要提供话音、短信息、数据等多种业务。基于GSM短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,能广泛用于远程监控、定位导航、个人通信终端等。由于公众GSM网络在全球范围内实现了联网和漫游,建立上述系统不须再组建专用通信网络,所以具有实时传输数据功能的短消息应用将得到迅速普及。
SMS是由Etsi所制定的一个规范(GSM 03.40 和 GSM 03.38)。它可以发送最多160个字符,当使用7-bits编码的时候,8-bit编码(最多140个字符)通常无法直接通过手机显示,通常被用来作为数据消息。16-bit信息(最多70个字符)被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。一个以class 0 开头的16-bit的文本信息将在某些手机上作为Flash SMS显示。
有两种方式来发送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit) 模式。
3 实现中文短信发送
GSM模块支持两种方式来发送和接收SMS短信息,文本模式和PDU(protocol description unit)模式,文本模式只能发送普通的Ascill字符,要发送图片,铃声,其他编码的字符(如中文)就必须采用PDU模式。
PDU模式中,可以采用三种编码方式来编码要发送的内容,分别是7bit编码,8bit编码,16bit编码,7bit编码用于发送普通的Ascill字符,8bit编码通常用于发送数据信息,如图片和铃声,而16bit编码用于发送Unicode字符。三种编码可以发送的最大字符分别是160,140,70。
发送中文短信要采用PDU模式的Unicode编码方式,具体步骤描述如下:
(1)GB2321编码到Unicode编码的转换
操作系统提供函数(有些系统不提供,如deltaos)
手动查表
(2)Unicode编码到16bit编码的转换
得到的Unicode编码后,还需要转换成PDU的16bit编码才可以正确的发送,这个转换过程中
Unicode编码最开始的0xffff标志要去掉,在0xffff之后的内容才是真正的Unicode字符。
Unicode是双字节,根据系统如果是小端字节序(little-endian),也就是说,存储的时候,先存低位再存高位,例如:“中”的Unicode编码是0x4E2D,储存的时候是2D4E,在转换到16bit编码的时候要转换顺序,如果是大端字节序(big-endian)如本系统,就不需要转换了。
正确计算16bit编码的消息体长度,PDU规范中,包括消息体本身;
正确设置First-Octet,TP-MR,TP-PID,TP-VP在PDU格式中,依次设置为:11,00,00,08,A7(以上都为16进制数)。
(3)形成标准的发送包。
3.1 短信发送过程分析
处理器通过向串口发送接收AT命令与GSM模块形成通信回路,通过AT命令实现对GSM模块的基本操作,用于发送短信的AT命令如表1所示:
表1 发送短信的AT命令
发送短信可用文本模式和协议数据单元模式(PDU,protocol data unit)。大多手机不支持文本模式,只支持PDU模式。PDU模式是把短信正文经十六进制编码后被传送,其编码总体上分为三个部分:服务中心号、接收方手机号、短信内容,如“你好”短信PDU编码是这样的(其中xyz是手机号具体数字):0891683110200005F011000B8131208698yxFz0008FF044F605970,其意义如表2所示:
表2 发送数据分析
3.2 发送短信程序流程及主要函数
(1)接口函数_SendMessage()
当调用接口函数_SentMessage(unsigned char *message, unsigned char *telephone, unsigned char telephonetype)时,程序开始进入短信发送模块,流程如图1所示。
图1SendMessage()函数流程图
(2)发送短信主体函数Send_SMS();
完成 _SMS_appUnit结构填写以后,短信发送的内容及所需信息提取到结构_SMS_appUnit中,为下面对数据的处理提供了原始数据,接下来就调用Send_SMS函数,函数中的结构_SMS_SUBMIT按照发送格式定义的结构体,把转换后的标准数据存在结构_SMS_SUBMIT中,形成发送包。程序流程如图2所示:
图2 Send_SMS()函数流程图
(3)数据处理函数MakeSSP()
函数MakeSSP是短信发送部分重要函数,把struct _SMS_appUnit结构中的数据转换成struct _SMS_SUBMIT_PDU结构,形成发送包。
4总结
以上详述了短信发送模块实现的步骤,本文内容通过测试。可以实现短信的发送,响应时间等参数符合要求。但如果要连续发送短信,或短信发送量要求比较高的情况还需要设计数据库实现数据的管理。
参考文献:
[1]北京科银京成.Delta System用户使用手册[M].北京:北京科银京成,2003.
[2]爱赛德无线小组.GSM模块使用文档(短信部分)[M].杭州:爱赛德无线小组,2002.
[3]Wavecom公司.AT Commands Interface[S].2000.
[4]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
收稿日期:2008-04-14
作者简介:苗雨,男,硕士,研究方向:嵌入式系统、数据库。