嵌入式系统中短消息实时处理的实现

2007-03-09 19:03:27来源: 互联网
摘 要:提出一种在嵌入式系统中实现短消息实时处理的方法,用ATmegal28单片机控制GSM模块,通过设置发送端和接收端的参数配置,使短消息不经过SIM卡而直接发送至单片机。短消息格式为PDU方式,增加了通用性。利用ATmegal28快速处理能力,结合状态机的程序设计方法,在接收程序中解析出必要的信息,从而实现短消息的快速处理。 关键词:ATmegal28 短消息 实时处理 引 言 GSM数字蜂窝移动通信技术已得到成熟而广泛的应用,目前已建成的覆盖全国的GSM数字蜂窝移动通信网,是我国公众移动通信网的重要方式。它能提供话音、短消息、数据等多种业务。短消息服务是GSM网络的一项重要业务,在远距离监控、数据采集、GPS定位、无线报警、缴费通知、车辆调度等领域有着广泛的应用。 GSM模块通常都提供UART串行接口,因此很容易和单片机在物理层上互联。使用符合GSM07.05和GSM07.07标准的AT指令集,可以使GSM模块方便地完成短消息接收/发送等各种操作。其通信框图如图1所示。 移动设备ME主要负责与GSM网络进行无线通信,终端适配器TA负责ME与外部终端设备TE的信息交换,AT指令就是在TA与TE之间传送的。TE可以是PC,或者是单片机系统,通过AT指令与ME进行信息交互。现在市场上的GSM模块,如TC35、FALCOM等,都把ME和TA集成在一起,这样整个通信就变成了TE与GSM模块之间的通信了。 一般地,GSM模块在处理短消息时,采用一问一答的信息交互方式,这比较符合AT指令集的精神。但在实际应用中,发现这种方法存在一定的缺点:模块接收到短消息并存储起来,用户再用查询方式,发送指令“AT+CMGL”或“AT+CMGR”,使短信传送到TE,这中间会有一定的延时。另外,由于SIM卡容量有限,要保证短消息及时准确地接收,还要经常删除SIM卡中的短消息,这样多次的读写操作,势必会影响SIM卡的寿命。因此,有必要进行一些软件设置,使短消息不通过SIM卡,而直接发送至终端设备。本文给出一种在嵌入式系统中实时处理短消息的实现方法,当移动设备GSM模块接收到短消息时,直接将消息转发到终端设备,提高系统的响应速度和处理效率。 1 硬件接口实现 一般,GSM无线通信控制终端采用标准的GSM模块进行二次开发,目前市场上很多,如TC35、FALCOM、WISM03等。它们都具备GSM无线通信的全部功能,支持GSM07.05,GSM07.07所定义的AT指令集。在本设计中,采用的GSM通信模块为FALCOMC2D,单片机使用的是Atmel公司的高速8位处理器AT-megal28。ATmegal28内集成有4 KB的RAM,4 KB的EEPROM,128 KB的Flash,以及2个UART串行接口等。其高速和大容量RAM的特性,为处理短消息这样的大数据包提供了便利;同时,节省了外围器件,使得硬件结构简化,提高系统可靠性。中文液晶屏用来显示接收到的中英文短信。系统的硬件接口框图如图2所示。 2 系统参数设置 短消息的发送和接收控制模式有三种:Block模式、PDU模式和Text模式。使用Block模式需要手机生产厂家提供驱动支持。目前,PDU模式已取代Block模式,而 Text模式不支持中文。因此,为了系统的通用性,兼容中英文短消息的发送接收,本系统使用PDU模式来处理短消息。 在进行系统设置前,先简要说明一下短消息类(class)的概念:根据指定存储的位置,短消息分为classO~3四个类,也可以不指定类别(no class),由移动设备按默认设置进行处理,存储到内存或者SIM卡中。在TPDU的TP-DCS字节中,当bit7~bit4为00xl、1111时,bit1~bit0指示消息所属类。 00——ctass O,可直接显示。 01——class 1,默认储存在ME内存中。 02——class 2,储存在SIM卡中。 03——class 3,可直接传输到终端设备TE。 默认的短消息存在SIM卡中,无类别的短消息通常也存在SIM卡中。 GSM Modem一般都支持一条“AT+CNMI”指令,用于设定当有某类短消息到达时,如何处理它——只储存在指定的内存(易失的/非易失的)中;先储存后通知TE;直接转发到TE,等等。 “AT+CNMI"’指令语法为: AT+CNMI=控制通知TE的方式。 O——先将通知缓存起来,再按照的值进行发送。 l——在数据线空闲的情况下,通知TE,否则,不通知TE。 2——数据线空闲时,直接通知TE;否则先将通知缓存起来,待数据线空闲时再行发送。 3——直接通知TE。在数据线被占用的情况下,通知TE的消息将混合在数据中一起传输。 ②设置短消息存储和通知TE的内容。 O——接收的短消息储存到默认的内存位置(包括class 3),不通知TE。 1——接收的短消息储存到默认的内存位置,并且向TE发出通知(包括class3)。通知的形式为: +CMTI:”SM”, 2——对于class 2短消息,储存到SIM卡,并且向TE发出通知;对于其他class,直接将短消息转发到TE: +CMT:[],(PDU模式)或者+CMT:,[,][,](text模式) 3——对于class 3短消息,直接转发到TE,同=2;对于其他class,同=l。 ③bm、ds、bfr的含义,请参考相关标准文档。一般不需要去关心它们,设置为0即可。 综合以上分析,若使短消息不经过SIM卡,直接发送至TE,可以设置: AT+CNMI=2,2,0,0,0 但是这样还有一个问题,对于class 2的短信,还是会存入SIM卡中,并发送+CMTI:”SM”,。那么,接收程序需要处理短信通知和内容两种情况,增加了复杂性。如果发送方也由程序控制,可以只发no class和class1的短信。这里选用no class的配置。PDU模式下,令TP—DCS的bit7~bit4为00x0,即可设置发送的短信为no class。通常用手机发送的短信,也是无类别的。 通信时,发送接收双方要统一短信格式。在发送方设置AT+CMGF=0,确定短信发送格式为PDU方式。在接收方设置: AT+CMGF=O //短信接收格式为PDU方式 AT+CSMS=0 如果AT+CSMS=1,接收到短信时,TE需在一定的时间内发送反馈消息至模块;若超时,的值会强制复位到0。那么,再有新的短信将不能被正确处理,需要用“AT+CNMI"’指令重新设置参数才行。这增加了程序处理的复杂性。AT+CSMS=O时,省去了这些麻烦。 3 PDU模式下的中英文短信接收实现 系统参数设置好以后,当接收到新的短信时,GSM模块直接转发至TE的格式如下所示: +CMT:,230891683108200105F0040BAl31193887421:F5000850802251739120044F60597D “+CMT:”为短消息指示标识,由AT+CNMI的值确定。“23”指明该短信息PDU数据包长度为23字节。第2行为十六进制数据,总长度为32字节,其中SMSC地址占用9字节,其余23字节为TPDU数据。 需要指出的是,和AT指令中的指令符号、数字一样,PDU数据都是以ASCII编码的形式传送的,比如“A”的ASCIl编码为41H,“O”的ASCII编码为30H等。PDU数据包的内容是以十六进制表示的数据,但并不是直接向单片机传递十六进制数据,而是把每一位十六进制数以ASCII编码来发送。例如:08H会以30H(“0”),38H(“8”)的形式发送。这样,1个字节的十六进制数就变成2个字节的ASCIl码。但是,PDU数据包中的数据字节长度部分仍然是原始十六进制字节的长度。而不是变成ASCII码的字节长度,这在编程时应特别注意,否则,接收和处理数据就会不完整。单片机接收到P D U数据包数据后,必须将其恢复成十六进制数据,其算法如下: 设a为接收的ASCII码,b为转换后的十六进制数。如果a<39H,则b=a-30H;如果a>39H,则b=a-30H-07H,最后把前后2个数合并为1个字节。 PDU数据包有着严格的定义,现简单介绍如下: PDU的这种格式,层次清楚,结构清晰,方便接收。在本系统中,采用LISART中断方式接收短信,充分利用了AVR系列单片机指令执行速度快的特点,并在接收过程中运用状态机的思想,解析出短信中的发送源号码、日期时间、数据编码方案和用户短信数据。接收到一个完整的PDU数据包后,中断程序中设置接收完成标志为1。在主程序中,检测到接收完成标志为1时,就根据数据编码方案,对接收到的短信解码并保存,并准备下一条短信的接收。如果短信到来时TA与TE的数据线忙,则短信会暂时保存在TA的缓存中,等数据线空闲时再转发至TE。 在PDU模式中,发送普通的ASCII字符用7-bit编码方式,将一串7-bit字符编码为8-bit数据,每8个字符可压缩成7个。如果发送中文字符,则采用USC2编码方式,每个中文字符用16位的Unicode字符表示;如果是中英文混合的短信,由于英文字符只占1字节,需要补O,成为16位的编码。例如,“你好!”的unicode编码为4F60597D0021,其中“!”的ASCII码为21H,编码后为0021H。PDU的用户数据段最大容量是140字节,GSM模块发送给单片机的是280个ASCII编码。除此之外,还要接收保存发送源号码、日期和时间等信息。由于ATmegal28有4 KB内部SRAM,为短信的接收和解码提供了足够的空间。这是它的一大优势。PDU串的用户信息长度TP-UDL,在7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数;在UCS2编码时,指编码后的十六进制字节数,因为1个字符用2个字节表示,所以经UCS2编码后,字节数等于原始短消息字符数的2倍。 PDU模式下可以发送中英文短信,但是对英文字符和数字的7-bit编码/解码比较复杂,如果只需要发送和接收纯英文字符和数字字符,最好采用Text方式。 3.1 7-bit用户数据解码 7-bit数据解码时,将源数据每7个字节分为一组,解码成8个字符。基本思想是:将第n个字节左移n位,再加上前一字节的剩余数据,即第(n-1)个字节右移(8-n)位的数值,屏蔽最高位,即得到一目标字符数据,n=0…6。第7个字节右移1位就得到解码后的第8个字符数据。 3.2 中文字符解码 短消息的中文字符采用Unicode编码,占用2字节,不是目前国内常用的 GB-2312编码。巍峨了能够在GB-2312汉字库的液晶上显示,还需要进行中文编码的转换。 基本思想就是建立Unicode和gb-2312两个中文编码表,通过查找实现相互转换。具体过程这里不再叙述。   结 语 上述介绍的在嵌入式系统中,实时接受处理短消息的设计方案,已在车载GSM-GPS系统上应用。经过长时间的操作使用,系统工作稳定,拥护反映良好。

关键字:嵌入式  系统  短消息  消息

编辑: 引用地址:http://www.eeworld.com.cn/wltx/RFID/200703/2184.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
嵌入式
系统
短消息
消息

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved