GSM/GPRS之三-短信格式及编码
2016-09-21 15:08阅读:
目录:
概述
短信传输
一、短信猫操作分为三种模式:
Block、PDU
和
Text
二、短信传送有三种编码: 7
位, 8 位,
UniCode
三、地址编码
四、编码示例
1、发送信息的 PDU 串
2、接收信息的PDU串
五、接收短消息
附录
附录一:关于PDU模式发送短信
------------------------------------------------------------------------------------------------
概述
短信开发指通过串口 at
命令驱动短信猫进行短信发送和接收操作。

AT 命令
:驱动短信设备的标准工业命令,除了业界的标准之外,每个厂商可能会对其进行扩展,不过一般来说,标准命令应该够用,我在这里用的是西门子
MC39i ,有专门的 AT
命令文档。
------------------------------------------------------------------------------------------------
短信传输
一、短信猫操作分为三种模式:
Block、PDU
和
Text
1、Block
模式基本已经被 PDU 模式取代,没有具体研究。
------------------------
2、Text
模式比较简单,但是支持的设备不是很全,而且不能实现中文。
AT +
CGMF=1
AT +
CGMS= “ 13612344321 ” ,129
>Hello World!<^Z>
------------------------
3、PDU
模式
PDU 编码主要包括两个主要的部分,一是
PDU 串的整体数据格式,分别因为发送信息串和接收信息串而有区别,二是
PDU 中文本部分的编码,分别因为字符集而不同。
我们也可以这样来理解这个
PDU 编码的格式, SMS
相当于一个协议栈,最简单的协议栈。
------------------------
4、根据 GSM03.40
规范, SMS 协议包括以下几层:
1)SM-AL
:应用层。这个部分就是数据部分。
2)SM-TL
:传输层。我们可以清楚的看到这里描述了主要的短信内容,包括发送号码,接收号码,信息类型,编码,数据报长度等等,这也是我们编程主要要面对的问题。
3) SM-RL
:中继层。这个指的是短信在网关之间中继需要的协议。
4)
SM-LL:链路层。
从上述描述中我们可以清楚的看到,我们编程主要集中于传输层。
------------------------------------------------
二、短信传送有三种编码:
7 位, 8
位, UniCode
1、英文 7
位编码
这是
GSM
的默认编码方式
由于这样的移位,我们可以看到我们能发的最多英文字符等于:
140*8/7 = 160
。
------------------------
2、数据 8
位编码
8-bit
编码通常用于发送数据消息,比如图片和铃声等;
------------------------
3、中文 PDU
编码
发送中文时,必须用
UCS2 ( utf-16 )进行编码,最多可以发 140/2
= 70 个汉字。
UniCode
编码转换也比较简单,以中文为例,一个中文字符是两个字节,直接对高位字节和低位字节进行十六进制转换就可以了。如“欢迎”,
UniCode 编码是 6B22 8FCE
,这同时也就是转换的结果,如果发送的串中有英文字符,那么在前面补全
00
,以保证一个字符对应两个字节。
------------------------
4、PDU 串的用户信息 (TP-UD)
段最大容量是 140 字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是 160 、 140 和 70
。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
------------------------------------------------
三、地址编码
短信发送中都会涉及到短信地址的问题,他们的编码规则是一致的
, 简单来说就是
BCD8421码编码。
如: 08 91
6808501505F0
,
08
:地址长度,(号码类型
+
号码长度)/2
的十六进制表示
91
:号码类型
683108501505F0
:号码,实际号码应为:
+8613805515500
,号码处理方法为
,
如果为
+86
开始
,
将
+
号去掉
,
然后判断是否为偶数
,
不是在末尾补
F,
然后将奇数位和偶数位互换。
------------------------------------------------
四、编码示例
1、发送信息的 PDU
串
用手机写一条短信息,发送手机号码为
13605696031
,信息内容为“
Hello World!
”。通过执行
AT
+CMGL=2
可以读出此条信息。
AT+CMGL=2 {读未发短信息}
+CMGL: 1,2,,24
{1表示信息个数,2表示未发信息,24表示信息总容量}
08 91
683108501505F0
11 00 0B
81 3106656930F1
0000FF
0B
E8329BFD06DDDF723619
OK
下面分析这条信息:
08
|
短信息中心地址长度。(短信息中心号码类型 + 短信息中心号码长度
/2 的十六进制表示)
|
91
|
短信息中心号码类型, 91 是 TON/NPI
。 TON/NP |