>
首页 » 技术文章 » 用ARM控制CDMA无线Modem发送短消息

用ARM控制CDMA无线Modem发送短消息

作者:崔登志,戴学丰,刘树东,单乘刚  时间:2007-04-24 14:02  来源:

摘要:文中介绍了一种新的机器人通讯方式,即用ARM控制CDMA无线Modem发送短消息。文章对ARM中特殊寄存器的设置进行了示例介绍,同时详细介绍了CDMA无线Modem如何使用AT指令发送短消息。

关键词:ARM;CDMA无线Modem;短消息;AT指令;串口

机器人在人们生活中的应用日益广泛。我们以一种轮式移动机器人作为控制平台,主要应用于家庭安全监控领域,其机器人通过传感器一旦检测到水、火、危险气体或非法入侵,即向户主报告,以便采取应急措施。机器人如何与人交互成为一项新课题。

在通信方式的选择上,我们选择了无线通信。因为移动机器人具有广阔的运动空间,有线通信会约束限制其自由运动。CDMA网在全国范围内实现了联网和漫游,用户无需另外组网,在极大提高网络覆盖范围的同时为客户节省了昂贵建网费用和维护费用。并且现有的GSM是2G,CDMA则属于移动通讯2.5G,比GSM更先进,更能平滑进入3G,所以我们选择CDMA。在具体的通信手段上,我们选择了短消息。因为短消息具有快捷、方便、费用低、存储转发等优点,深受移动用户的青睐。

现有的文章多是介绍在PC机上实现无线Modem发送短消息,用ARM控制,鲜有提及。并且即使提到短消息发送,也多是关于GSM的,相比之下CDMA的就少了。3G时代即将到来,实验设备上我们选CDMA弃GSM。由于本实验是移动机器人的一个通讯子系统,机器人控制选用时下炙手可热的具有嵌入式概念的ARM。另外,笔者在实践中发现,用CDMA发送短信息,一些技术细节如果稍微不加注意,就很容易出现发送乱码。CDMA发送短信息和GSM有一些不同之处,本文都有详细介绍。

ARM程序设计

本实验采用法国WAVECOMQ2358C模块的CDMA无线Modem。ARM采用SamsangS3C44B0X。无线Modem与ARM采用串行异步通信接口。

S3C44B0自带两个异步串行口控制器,每个控制器有16字节的FIFO(先入先出寄存器),最大波特率115.2Kbps,每个UART有7种状态:溢出错误,校验错误,帧错误,暂停态,接收缓冲区准备好,发送缓冲区空,发送移位缓冲器空,这些状态可以由相应的UTRSTATn或UERSTATn寄存器表示,并且与发送接收缓冲区相对应的有错误缓冲区。

特殊寄存器的配置对ARM应用编程极为重要,ARM通过对相关特殊寄存器的参数进行设置,以实现控制。


与UART有关的寄存器有:线路控制寄存器ULCONn;控制寄存器UCONn;FIFO控制寄存器UFCONn;Modem控制寄存器UMCONn;状态寄存器UTRSTAT;错误状态寄存器UERSTAT;FIFO状态寄存器UFSTAT;发送寄存器UTXH和接收寄存器URXH;波特率因子寄存器UBRDIV。寄存器名称中的n表示0-1,例如,ULCONn对应串口0为ULCON0,对应串口1为ULCON1。

波特率的大小可以通过设置波特率寄存器
(UBRDIVn)控制,波特率一定要根据要求设置正确,否则会出现乱码。各特殊寄存器的具体详细设置参考用户手册。例如,串口初始化可进行如下设置:

voidInitUART(unsigned mclk,unsigned bps)
{
rPCONE=rPCONE&—0x3c|0x28;//设置PE1和
PE2分别为TxD0和RxD0模式
rULCON0=3;//正常模式,无奇偶位,1位停止位,8位数据位
rUCON0=5;/中断或轮询模式
rUFCON0=0;//禁止FIFO
rUMCON0=0;
rUBRDIV0=CALC_UBRDIV(mclk,bps);//计算并设置波特率
}

无线ModemAT命令

用ARM控制无线Modem,关键在于AT命令。AT命令集是由一个特定的“命令前缀”开始,由一个“命令结束标志”结束。命令前缀通常由AT两个字符组合,它是Attention的缩写,意思是“引起注意”。命令结束标志是一个单字符,通常为回车符

AT指令集是ETSI(欧洲通信技术委员会)发布的,其中包含了对短消息的控制。利用无线Modem的串行接口,ARM向无线Modem发送一系列的AT命令,就能达到控制无线Modem收发短消息的目的。AT命令非常丰富,这里简单列出几条与短消息操作相关的常用AT命令:

AT+CMGF选择短消息支持格式(TEXT or PDU)
AT+WSCL设置短消息组成的语言和编码方式
AT+CMGR读取短消息
AT+CMGS发送短消息
AT+CMGW写短消息并保存在存储器中
AT+CMGD删除保存的短消息

CDMA发送短消息和GSM有一些不同之处。GSM需要设置短消息中心号码,CDMA的则不用。发送中文短消息时,GSM的采用PDU模式,CDMA的则为TEXT模式。一些细节:区别于GSM模块,CDMA模块发送短信号码时,必须加引号。例如:AT+CMGS=“133########”。

Modem连接好后,首先要用AT命令,检查硬件连接是否成功。Modem刚开机时,和我们手机一样,也要先注册登录网络,这时可用AT+CSQ命令,查询信号质量。

CDMA发送英文数字短消息时,使用其相应ASCII码发送。

例如:发送英文短信息“Hello”,其相应AT命令过程为:

AT+WSCL=1,2//设置为发英文短信
AT+CMGS=“133########”
Hello

返回代码:

+CMGS:N表示成功发出,N为序号。
CDMA发送中文短消息时直接发送其Unicode代码。
例如:发送中文短消息“您好”其相应Unicode编码:0x60a80x597d

则其AT命令过程为:
AT+CMGF=1//设置为TEXT模式
AT+WSCL=6,4//设置短消息组成的语言及编码方式
AT+CMGS=“133########”,4//(“接收方号码”,短消息长度。)
60A8597D
返回代码:
+CMGS:N表示成功发出,N为序号。

实验中遇到的问题及解决方法

(1)硬件方面,正确的连接硬件是整个实验成功的基础。ARM和Modem应是交叉连接,直连不行。9针串口,第2针为RXD,数据输入线,第3针为TXD,数据输出线,应将这两针交叉。

(2)ARM在向Modem发送一段命令串之后,最好加点延时程序,因为有时持续地对Modem发送命令,有可能造成Modem死机。

(3)ARM控制Modem发送短信息,究其实质就是向Modem发送AT命令字符串,要确保程序的正确运行,可先在台式机上用串口程序调试,再向ARM移植。WINDOWS自带的超级终端就行,但在超级终端上无法成功发送汉字短信息,究其原因是因为CDMA无线Modem发送汉字是直接发送UNICODE码,而超级终端接收ASCII码,不支持十六进制发送命令,所以在超级终端上发送汉字出现乱码,是正常现象。在ARM上调试时,也最好先将串口连接PC机,在串口调试工具上实时监视串口所发送的数据。

(4)发送汉字时有两种控制方法,一是在接收方号码后面加信息长度。信息长度=发送汉字个数*2。二是不加信息长度,在信息输入完采用CTRL+Z作为结束控制符,但要注意,结束符也应该是UNICODE格式的,在程序中正确的结束符应该是0x000x1a。

(5)实验过程中,发现接收方偶尔会收到短信延迟。公网的网络拥塞具有临时性,突发性和随机性,这不是我们能控制的,但我们可以在函数里循环调用发送函数多次,可有效的降低短信收到延时的随机性。

结束语

随着手机普及率的提高,给手机发送短消息这一应用有着越来越广阔的市场前景。此实验已经在ARM开发板上成功调试通过,可作为移动机器人的一种全新通信方式。

相关推荐

ARM收购Geomerics 强化行动装置游戏视觉

ARM  游戏视觉  2013-12-18

ARM:2013年Mail芯片出货量将超三亿片

ARM  芯片  2013-12-06

ARM控制智能机及平板芯片市场趋势将持续

ARM  控制智能机  2013-11-28

推动连网与行动创新 ARM聚焦物联网商机

ARM  物联网  2013-11-26

全球75%企业高管关注物联网新机遇

ARM  物联网  2013-11-08

英特尔将代工ARM芯片 或引发芯片价格下跌

英特尔  ARM  2013-10-31
在线研讨会
焦点