GSMSMS模块通信协议详解

◆帧格式:
帧格式:
$ LN FX DA XX XX XX
帧头 长度 命令 数据(数据可选)

◆常用指令:
GSMSMS指令系统定义符合半双工异步串口应用环境。该指令系统分三部分:通讯界面指令,管理界面指令,加密调试指令(不提供给用户使用)。通讯界面常用指令:

F0:链接查询 [24][01][F0]

F1:链接应答+接收到新信息 [24][02][F1][00]
说明:第4个字定义:[00]表示没有接收到新SMS,[0X]表示接收到新SMS及条数,最多3条。

F2:复位命令 [24][01][F2]
说明:该指令用于复位GSMSMS模块,如果此时手机处于关闭状态则会自动开机!

F3:复位应答 [24][01][F3]

F4:发一条短信息[24][XX][F4][XX][XX][XX][XX][XX]
说明:例子:[24][06][F4][41][42][43][44][45],帧长度=要发送的SMS长度+1。

F5:发送应答 [24][01][F5]

F6:设置目标号码(中心模式)[24][07][F6][XX][XX][XX][XX][XX][XX]
说明:例子:[24][07][F6][31][56][90][41][18][F8],目标手机号码为:13650914818。

F7:设置目标号码应答 [24][07][F7][XX][XX][XX][XX][XX][XX]
说明:例子:[24][07][F7][31][56][90][41][18][F8]。返回的目标号码提供校验使用,可以不予处理,该指令只需要客户单元板启动后设置一次即可。

F8:接收状态查询[24][01][F8]

F9:接收状态应答[24][04][F9][XX][XX][XX]
说明:数据3个字分别对应GSMSMS内部3个缓冲区的新短信息长度,[00]表示无短信息或是旧短信息,该指令建议使用频率在1次/3-10秒,频率过高将会增加GSMSMS模块的数据处理效率,频率过低可能会引起GSMSMS模块内部短信息积压。如果某个缓冲区的新短信息已经被读过一次,则该位置的应答自动变为[00],提示您这个缓冲区的信息是旧信息,当然您还可以重新读旧信息,但不保证它在某时刻可能会被新信息覆盖。

FA:接收请求 [24][02][FA][XX]
说明:[XX]表示GSMSMS内部3个缓冲区的序号:1,2,3。这3个缓冲区的优先级依次按照1最高,3最低的顺序,如果有新的短信息到来依次填充到这3个缓冲区。如果填充满后客户板仍然没有实时读取这3个缓冲区的内容,那么后到的新短信息将会保留到手机的SIM卡上的缓冲区。这种双缓冲设计的目的在于提高短信息的实时性并适当避免大量短信息在短信中心的积压,在实际应用中13个缓冲区完全可以满足客户的需要。

FB:接收数据 [24][XX][FB][XX][XX][XX][XX][XX]
说明:帧长度=返回数据长度+1。数据定义如下:
[31][56][90][41][18][F9]
13 65 09 14 81 9 信息来源手机号码,注意手机号码的转换方法:依次高低4位交换位置,不足12位的手机号码末尾空白处填“F”。 
[00][00]
保留数据
[00][40][20][32][70][82]
00  04  02  23  07  28 SMS发送时间:年月日时分秒,转换方法同手机号码
[00]
保留数据
[03][31][32][33]
长度 短信息数据

FC:关机请求 [24][01][FC]
说明:该指令将手机关闭,使用于省电方案,还可以用于一定程度上激活短信息中心的积压信息。关机不影响短信息接收

FD:关机应答 [24][01][FD]
说明:当手机关闭时模块返回的关机完成信息。
注释:以上为常用指令,特殊型号有特殊的指令

关于通信接口的说明

◆串行接口采用异步半双工通信,默认设置:2400,N,8,1
◆并行接口采用8位数据总线与2条挂钩线实现,时序如图所示。其中时间t=12uS左右。

51汇编发送例子:
以11.0592MHz晶振为例
SEND: MOV P1,A        ;A为待发送数据,P1为数据总线
       CLR P3.3        ;P3.3定义为EN
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       SETB P3.3
       MOV P1,#0FFH
       RET
51汇编接收例子:
在外部中断处理程序中接收数据
INT:   CLR EX0
       PUSH ACC
       PUSH PSW
       MOV A,P1        ;把数据接收并放到A中
       ......          ;对数据进行处理
       POP PSW
       POP ACC
       SETB EX0
       RETI

对GSMSMS模块编程的建议

    以51串口编程为例,应该启动一定时器,产生N秒的时间中断作为流量控制的控制时隙。假如N=5秒,每次时隙都检测是否“发送允许”,如果不允许发送,则返回重新计时;如果发送允许,则检测有何种类型的数据帧发送,如果有“用户命令数据”发送,则发送一条短信息,如果没有,则发送“接收状态查询”命令,则返回重新计时。关于N的取值根据客户实际应用环境设定,建议3-10秒。
    另外要启动串口中断,建议收发都采用中断方式。发数据帧受定时器控制,发完数据后清除发送“允许标记”;发送程序运行必须在收到“复位应答”之后,“关机应答”之前。收数据帧是关键环节,根据接收数据帧的类型决定整个程序的运行状态:在接收到“复位应答”之后置位“活动状态”,在接收到“关机应答”之后置位“休眠状态”。在“活动状态”中采用查询应答相对应的半双工方式进行数据交换:如发送短信息,然后等待发送应答;发送“接收状态查询”,然后等待“接收状态应答”,由应答信息判断是否有收到新的短信息,如果有,依次用“接收请求”得到“接收数据”应答。总之就是典型的半双工工作方式。
    如果您对通过短信息交换信息的方式不很熟悉,可以通过中电网提供的《GSMSMS模块调试软件》来熟悉这种工作模式。在使用过程中注意收发短信息过程的时间间隔,短信息系统运行状况等经验知识,同时观察串口数据的交换过程来了解GSMSMS模块的工作流程。