搜索
您的当前位置:首页正文

如何使用TC35-TC35T

来源:独旅网
PUBLIC DOCUMENT

BROS. LAB. APPLICATION NOTE

AN02002

如何使用TC35-TC35T GSM MODEM进行数据通讯

作者:技术支持部 胡永健

一 介绍:

本文主要介绍如何编程实现TC35/TC35T GSM MODEM的数据通信功能。

TC35模块系SIEMENS公司为嵌入式设备设计的GSM双频通讯核心模块,TC35T内含TC35/SIM卡座/电源/天线/RS232接口,系可独立使用的通讯终端。本文中除特别说明外,所有关于TC35的说明也适用于TC35T。TC35不仅支持标准的AT命令集,SIEMENS公司还将AT命令进行了扩展,以便更有效的控制TC35。

MC2002可选GSM扩展板采用了-TC35模块,用户可以通过MC2002 Modem接口控制内置的TC35或通过上位机(如PC)RS232通讯口控制TC35T终端,使用AT命令,即可实现收发短信,以及语音以、数据拨号等相关操作。

GSM终端设备(包括TC35/TC35T)除了具有普通的语音通讯功能外,还有收发数据、短信息等功能。当终端设备(TE--Terminal Equipment)做为数据通信设备时,其功能相当于一台无线收发数据的调制解调器(Modem)。其实,九十年代主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP将原来用于普通调制解调器通信的AT命令集进行扩展,使得在应用中控制GSM终端进行数据通信与控制普通调制解调器通信的方法类似。所以,本文先介绍调制解调器进行通讯的工业标准—AT命令集,然后再介绍如何编程实现TC35-TC35T GSM Modem的数据通讯功能。

二 准备工作

使用TC35进行数据通信,用户必须准备一张已开通数据业务的SIM卡(需向电信运营

商申请),并将其插入MC2002之TC35扩展模块SIM卡座中或TC35T的SIM卡座中。 使用PC配合TC35T收发短信,用户需开启TC35T电源,通过串行数据线联接到PC, 并在PC端安装串口读写软件,如超级终端,Telix等。通过终端软件发送AT命令,察看返回数据。

使用MC2002GSM模块TC35时,用户需通过编程选用MODEM端口,TC35将自动上电,再通过编程发送AT命令和处理返回数据。MC2002在关闭TC35电源前,首先要向其发送”AT^SMSO\\r”命令,并确认返回为“OK”或0 (即中断与TC35网络连接)后,才可关闭MODEM端口。

三 调制解调器通信规则

前面已经介绍过TC35 GSM MODEM是一种特殊的调制解调器,对其控制操作与普通调制解调器类似。下面就对调制解调器通信规则,尤其是对AT命令进行介绍。

1相关AT命令

控制调制解调器可以使用Hayes标准AT命令集,该命令集是工业界广泛采用的标准。AT命令定义了如何配置调制解调器、如何连接以及如何测试调制解调器等相关命令。除”A/”和”+++”命令外,所有的AT命令都以”AT”或”at”打头, 在TC35应用中与数据通信应用相关的AT命令有:

󰂾 A/ 重新执行前面的指令; 󰂾 ATZ 软复位; 󰂾 ATE0 关闭字符回显; 󰂾 ATE1 打开字符回显; 󰂾 ATV0 设置返回结果码为数字形式; 󰂾 ATV1 设置返回结果码为字符形式(缺省); 󰂾 ATDn; 拨出电话号码n(语音拨号); 󰂾 ATDn 拨出电话号码n(数据拨号); 󰂾 ATH 挂机; 󰂾 +++ 从数据状态切换至在线命令状态; 󰂾 ATO 从在线命令状态切换至数据状态; 󰂾 ATA 人工应答; 󰂾 ATSn=X 写S寄存器;ATS0=2自动应答 响铃2 󰂾 ATSn? 读S寄存器; 󰂾 AT^SMSO 中断网络连接。

注:这里只列出与一些常用AT命令及TC35数据通讯相关AT命令,更详细内容请查阅相关资料。

2 AT命令返回形式及部分结果码

特别要注意TC35/TC35T的命令的返回形式为:Response。切记TC35命令响应结果码中含有这些字符,这对于编写程序来处理TC35结果码以确定TC35工作是否正常非常重要。 在本文中:

代表ASCII中回车字符,值为0x0D;”\\r” 代表ASCII中换行字符,值为0x0A;”\\n”

此外,还可以通过ATVn设置结果码(Response)返回字符串形式或数字形式。部分结果码如下:

代码 字符串 󰂾 0 OK

󰂾 1 CONNECT 󰂾 2 RING 󰂾 3 NO CARRIER 󰂾 4 ERROR 󰂾 5 CONNECT 1200 󰂾 6 NO DIAL TONE 󰂾 7 BUSY 󰂾 10 CONNECT 2400 󰂾 11 CONNECT 4800 󰂾 12 CONNECT 9600 󰂾 14 CONNECT 19200 含义

调制解调器接收命令正确; 连接建立;

检测到振铃信号;

没有检测到载波或载波丢失; 无效命令;

在1200Bit/S速率下建立连接; 没有检测到拨号音; 检测到忙音;

在2400Bit/S速率下建立连接; 在4800Bit/S速率下建立连接; 在9600Bit/S速率下建立连接; 在19200Bit/S速率下建立连接;

注:这里的连接速率指数据终端设备(DTE)的串口速率,而不是数据通讯设备(DCE)速率。

在编程控制TC35进行数据通信时建议将返回结果码设置为数字形式,这样便于处理返回结果码。

3 调制解调器的状态转换

调制解调器的状态可分为离线命令状态、在线状态命令状态和数据状态。除了拨号占短暂的时间外,调制解调器总是处于其中一种状态。当调制解调器启动之后,首先处于离线命令状态,连接后进入数据状态,此时若调制解调器接收到换码序列(+++)就会进入在线命令状态,当处于在线命令状态时执行挂机命令(ATH)就会进入离线命令状态。在命令状态下,调制解调器不是和远端通讯,而是接收并解释AT命令;在数据状态下调制解调器就可以发送和接收数据。状态转换关系如图: 建立连接 离线命令状 载波丢失 数据状态 ATH命令 ATO命令 在线命令状 换码序列+++

四 编程实现TC35 数据通信功能步骤及注意事项

编程实现TC35数据通信功能与编程实现普通调制解调器通信功能方法完全相同,都是通过串口向其发送AT命令,并比对其返回结果码,以便进行正确的控制和操作。 但在对TC35编程时要更加注意命令响应延时,以及TC35是否处于网络连接状态。此外,如无特别说明,此部分所列举程序代码是在MC2002上调试通过,用户可根据实际情况进行修改。

1编程步骤

了解了TC35的命令接口后就可以进一步设计程序流程。编程实现TC35数据通信可分为以下六步: (1) TC35初始化

首先编程选用MODEM端口,使TC35上电,代码如下:

UART_init(UART_MODEM_ON|UART_ON|UART_8_DATA_BITS|UART_BAUD_115200); UART_fcntl(UART_fcntl(UART_F_INQ)|UART_F_NO_CTS);

注:TC35具有自动识别串行接口速率的能力,但要求速率范围在1200Bps至115200Bps之间,并且设置为8Bit数据,无校验,1位停止位。

TC35 GSM模块上电后有一秒左右的初始化延迟,在此过程中TC35无法响应AT命令;另外,TC35上点后进入搜索网络状态,时间决定于信号质量,此时TC35不能正确执行拨号连接命令(ATDn)。 接下来要根据实际需要对TC35进行初始化设置,如:

要将TC35进行软复位的需执行”ATZ\\r”命令; 禁止命令回显需执行”ATE0\\r”命令;

要使返回结果码为数字形式则要执行”ATV0\\r”; 需要设置S寄存器的需执行”ATSn=X\\r”等等。

(2) TC35拨号连接

TC35拨号连接分语音拨号连接和数据拨好连接。语音拨号命令为”ATDn;\\r”(注意带分号);数据拨号命令为”ATDn\\r”(注意不带分号)。连接成功返回”\\r\\nCONNECT XXXX/RLP\\r\\n”,其中XXXX表示连接速率。在这里我们只讨论数据拨号连接。

要注意的是拨号连接需要一定的时间,编程时要根据实际情况进行适当的延时等待。

(3) 数据传输及处理

在建立起连接后用户就可通过TC35进行数据发送、接收及数据处理操作。这时发送数据就是简单的写串口,收数据是读串口,即使数据中含有AT命令字符串TC35也不会对其进行处理。在此部分可以建立TC35无线数据传输功能之上的高层应用,需要用户根据实际需要编程解决。

(4) 从数据状态切换至在线命令状态

数据收发结束后,就要使TC35从数据状态切换至在线命令状态。向TC35发送换码序列命令”+++”,并且前后各有至少一秒的延迟(不向TC35发数据),可使TC35从数据状态切换至在线命令状态,否则TC35会将”+++”当作数据发送出去。在离线命令状态时发送”ATO\\r”可回到数据状态。

(5) 挂断连接

挂断连接(即挂机)是向TC35发送”ATH\\r”命令,这时TC35将从在线命令状态切换至离线命令状态

(6) 断开TC35网络连接和关闭串口

若要断开TC35网络连接,则要向其发送”AT^SMSO\\r”命令。执行此命令,TC35将在断开网络连接后自动断电,只有在重新选通串口给TC35加以跳变电平后才能使其重新上电。另外,要注意的是只有在TC35处于网络连接状态才能正确执行”AT^SMSO\\r”命令,而当TC35处于搜索网络状态将无法正确执行此命令。

在使TC35断电后,必须及时关闭串行接口电路。代码如下:

UART_init(UART_OFF);

2注意事项

编写TC35数据通信程序难点在于调试,下面就编程及调试时几点事项进行讨论。 (1) 在编程发送的每条AT命令(除”+++”及”A/”命令外)字符串后一定要加回车符(‘\\r’),否则TC35认为此命令行没有结束,将不会执行相关操作;

(2) 由于信道干扰及TC35状态对TC35命令执行情况都会产生影响,所以非常有必要比对命令返回码,以确定命令是否正确执行,然后做出相应的处理。再次强调AT命令返回形式为Response;

(3) 注意命令响应延时。在MC2002中只能通过查询方式得到串口数据,而不同的AT命令执行后其命令响应延时可能有所不同,即使同一条命令在TC35处于不同的状态下执行后命令响应延时也会不同;另外,我们还要保护程序能继续运行,在等待应一段合理时间时间后能使程序退出等待状态。 在这里有两种等待方式来解决此问题:

第一种是在向TC35发送AT命令后就处于响应等待状态,在合理的时间范围内接收到响应立即退出;若超出此时间范围就必须强行退出。下面一段代码可供参考:

int read_comm_data(unsigned int delayunit) {

typ_UART_stat_word Ustat; SPT_set(delayunit); do {

Ustat.l_word = UART_stat();

if (Ustat.bits.buff_data_available) return UART_get_char(); } while(SPT_read()); return -1; }

void get_responce(char * pbuff, unsigned int delayunit, unsigned

int maxnum){ int ti;

while ((ti = read_comm_data(delayunit)) != -1) { *pbuff++ = ti;

if (--maxnum == 0) break; }

*pbuff = 0; } 这里要注意函数get_responce(char * pbuff, unsigned int delayunit, unsigned int maxnum),它是在delayunit所规定的时间范围内得到最大maxnum个返回字符,并将返回字符串放入pbuff所指向的存储空间内。 第二种方法是在发送完AT命令延迟一段时间后再去读命令响应:

void delay_n_ms(int mscnt) {

for (;mscnt > 0; mscnt--)

delay_1ms(); }

当然,这种方法有其局限性,因为无法知道命令响应到达的准确时间,但在某些需要较长延迟时间的场合 (如:拨号连接)配合前一种方法会更易调试程序。

至于命令响应的延迟时间则需要用户根据实际情况进行调试。

(4)为了节电,必须及时关断TC35和MODEM接口电路的电源。要注意的是TC35有其独立的电源供电,关闭MODEM接口电路并不等同于关闭TC35 GSM模块,所以在关闭MODEM接口电路前一定要先关闭TC35.

关闭TC35是向其发送”AT^SMSO\\r”命令;关闭MODEM接口电路则是执行代码:UART_init(UART_OFF);

(5) 要注意TC35只有在网络连接状态才能正确执行”ATDn\\r”和”AT^SMSO\\r”等命令,所以在调试程序时要注意TC35状态指示灯所显示的状态。

五 参考资料

1. <>-------电子工业出版社;

2. <>-------人民邮电出版社; 3. <>。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top