Acoustic couplerCon este artículo comenzamos el desarrollo de un sistema de envío de mensajes SMS desde un microcontrolador. Los comandos AT o comandos Hayes, fueron desarrollados por la empresa Hayes Microcomputer Products Inc. hacia el año 1978 para poder comunicarse con su modem “Smartmodem”, introduciendo la capacidad de controlar el modem a través de la línea de datos. En esta época, los módems requerían que el usuario marcase el número del destinatario manualmente y el uso de un acoplador acústico, ya que no estaba permitido hacer conexiones eléctricas a la red telefónica, además el destinatario de la llamada debía descolgar el teléfono.

El modem desarrollado por Hayes era externo, lo que le permitía comunicarse con todos los ordenadores de entonces por medio del puerto RS232, un modem interno requeriría un diseño hardware cada fabricante de ordenadores además de un driver software diferente. Los comandos permitían inicializar el modem, marcar un número de teléfono y establecer la conexión con el destino, pero surgió un problema: como indicarle al modem que debía colgar .

La solución adoptada consistió en definir dos modos de funcionamiento para el modem: modo comando y modo datos. En el modo datos, todos los datos enviados por el ordenador son modulados y enviados sobre la línea telefónica al otro modem, en el modo comando los datos enviados son interpretados como comandos y no se envían al otro modem. El modem normalmente arranca en modo comando.

Pero surgió otro problema, como conmutar entre los dos modos. Una de las soluciones podría ser usar uno de los pins del puerto serie, sin embargo, mientras que en el conector del modem de 25 pines había pines de sobra para este propósito, en el conector del ordenador, normalmente de 9 pines, a menudo algunos de estos pines no están conectados o no son accesibles por software. Aunque hubiera sido posible usar algunos de estos pines, como por ejemplo el pin de listo, se adopto otra solución que consistía en enviar una secuencia que raramente se pudiese producir, dado que los caracteres se enviarían al modem usando el pin de transmisión, la solución funcionaría en cualquier modem.

La secuencia elegida fueron tres signos de suma +++, debido a que esta secuencia se podría dar en cualquier transmisión, el modem cambia a modo comando después de recibir esta secuencia seguida por una pausa de un segundo que se definió como tiempo de guarda, en el cual no se envía ningún dato.

Casi todos los comandos comienzan con la secuencia “AT”, que significa atención, con este prefijo se consiguió que el modem fuese capaz de determinar la velocidad de transmisión de datos del ordenador ya que “conoce” como comienzan todos los comandos.

Años mas tarde, los comandos AT se convirtieron en un estándar y la TIA/EIA (Telecommunications Industry Association/Electronic Industries Alliance) lo publico bajo el título “Data Transmission Systems and Equipment - Serial Asynchronous Automatic Dialing and Control”, también conocido como TIA/EIA-602.

A medida que los  módems aumentaron sus prestaciones fue necesario añadir mas comandos, estos nuevos comandos se denominaron “extendidos”, comienzan por AT&. Para hacer las cosas un poco mas complejas, los fabricantes añadieron sus propios comandos, que además de no convertirse en estándar son incompatibles con los de otro.

Tras esta introducción al origen de los comandos AT, es necesario explicar los modos de funcionamiento de los modems para poder entender el uso de los comandos AT. Todo lo que se explique referente a los modems, se puede aplicar  a los teléfonos móviles ya que no dejan de ser modems inalámbricos.

Generalmente los modem pueden funcionar en tres modos:

  1. Modo comando offline: es el estado tras encender el modem, el modem está preparado para recibir los datos como comandos.
  2. Modo datos online: el modem está listo para intercambiar datos con el modem remoto.
  3. Modo comando online: se pueden enviar comandos al modem cuando todavía está conectado al modem remoto.

El siguiente gráfico muestra los diferentes modos de funcionamiento y como se puede pasar de un modo a otro.

modosmodem

TIPOS DE COMANDOS

Existen cuatro grupos de comandos:

  1. Comandos básicos: AT
  2. Comandos extendidos: AT&
  3. Comandos propietarios: AT%, AT\
  4. Comandos de registro: Sn=

En modo comando existen cuatro modos de funcionamiento para cada comando:

  1. Modo ajuste, para ajustar los parámetros de funcionamiento del modem, por ejemplo AT+CBST=0,0,1.
  2. Modo de ejecución,no necesita ningún parámetro, por ejemplo AT+CBC, respuesta +CBC: 0,60. Los valores de los parámetros están separados por comas.
  3. Modo lectura, para ver los ajustes actuales del comando, por ejemplo AT+CBST?, respuesta +CBST: 0,0,1. Los valores de los parámetros están separados por comas.
  4. Modo test, para comprobar los parámetros validos para el comando, por ejemplo AT+CBST=?, respuesta +CBST: (0,4,6,7,68,70,71),(0),(1), los valores válidos para cada parámetro se muestran entre paréntesis.

No todos los comandos soportan estos cuatro modos.

Algunos comandos tienen parámetros por defecto, los cuales son asumidos cuando no se incluye ningún valor en la línea de comando:

AT+CBST=0,0,1

AT+CBST=,,1

AT&Z es lo mismo que AT&Z=0

Cuando un parámetro es una cadena de texto, esta debe ir entre comillas, por ejemplo “Pedro”.

FORMATO DE LOS COMANDOS

Peticiones:

AT =

Casi todas la peticiones comienzan por AT. En una misma petición pueden ir varios comandos, en este caso sólo comienza por AT el primer comando, los demás comandos se separan con “;”.

ATCMD1 CMD2=12; +CMD1; +CMD2=,,15; +CMD2?; +CMD2=?

Respuesta correcta:

Respuesta al comando

OK

Repuesta errónea:

ERROR

: Carriage return (Retorno de carro)

: Line feed (Avance de línea)

Comenzamos con la descripción de algunos de los comandos:

Comando

Descripción

Opciones

Ejemplo

AT Sirve para comprobar la comunicación con el modem.   AT
* Lista todos los comandos soportados por el modem.   AT*
? Ver parámetros/Ayuda sobre comandos, no esta disponible para todos los comandos. AT? : Valor actual de los parámetros del comando.

AT=? :Parámetros soportados por el comando.
ATL?


ATL=?
/A Repite el último comando.   /A
A> Repite el último comando constantemente.    
A Responder llamada entrante e inicia conexión.   ATA
B Establece las opciones de negociación. B0= Secuencia de respuesta de modo V32/CCITT.
B1= Secuencia de respuesta de Bell 212A.
ATB, ATB0
ATB1
C Activa o desactiva el transmisor.    
D Llamar a un número de teléfono. Debe finalizar con ; para indicar que es una llamada de voz en vez de fax o datos.
D=ME = Llama al número almacenado en la posición i de la memoria.
D=SIM = Llama al número almacenado en la posición i del SIM.
DL= Llamada al último número marcado.
ATD1234456;


ATD=ME7


ATD=SIM5


ATDL
E Activa /desactiva (E0) el eco de los comandos.

E0= Eco desactivado

E1= Eco activado

ATE, ATE0

ATE1
F Eco local en línea. Si se encuentra activado, el módem muestra en pantalla los datos que se transmiten a otro módem.

F0=Activa el eco en línea. Llamado semidúplex.

F1= Desactiva el eco en línea. Llamado dúplex completo.

ATF0
H Cuelga /descuelga. H0= Cuelga.
H1= Descuelga.
ATH1
I Información de identificación.    
K Controla el reloj del modem.

K0=Si se está en línea, muestra la duración de la llamada actual. Si no se está en línea, muestra la duración de la última llamada.

K1=Muestra la hora real.

 
L Volumen del altavoz. L0= Nivel mínimo
L4= Nivel 4
ATL2, ATL=3
ATL=? ATL?
M Define el funcionamiento del altavoz M0= Desactiva el altavoz durante toda la llamada.
M1= El altavoz permanece activado hasta que se detecta la portadora del otro modo.
M2= El altavoz permanece activado siempre.
ATM=0
N Velocidad de conexión. N0= Conectar sólo a la velocidad indicada en S37.
N1= Conectar a la máxima velocidad.
 
O Cambia al modo datos online.   ATO
P Selecciona marcado por pulsos. La próxima llamada usará marcado por pulsos. ATP
Q Activa o desactiva los códigos de resultado. Q0= Activa los códigos.
Q1= Desactiva los códigos.
ATQ=0
ATQ?
S      
T Selecciona marcado por tonos. La próxima llamada usará marcado por tonos. ATT
V Formato de los códigos de resultado. V0= Muestra códigos numéricos.
V1= Muestra detalles
ATV=1
ATV=?
W Controla el formato y el contenido del mensaje CONNECT.    
X Controla la cantidad de información que se muestra en los códigos de resultado.    
Z Reset por software a la configuración definida por el usuario en el perfil por defecto, termina todas las operaciones y restaura la configuración por defecto almacenada en la memoria.   ATZ
ATZ=?
       
&C Detección de portadora.    
&D

Determina la acción a realizar cuando la señal DTR es puesta a nivel bajo mientras se está en modo datos online.

&D1= El Modem cambia a modo comando online.

&D2 = El Modem cambia a modo comando offline.

AT&D1
AT&D=1
&F Reset a configuración de fábrica. Siempre devuelve 0 AT&F , AT&F0
AT&F=?
&W Almacena el valor actual de todos los registros “S” en el perfil x, x puede ser, en general, 0 ó 1.   AT&W0
&Y Perfil por defecto al inicializar el modem. &Y1= Perfil 1 por defecto. AT&Y1
&Zx Carga los valores almacenados en el perfil x.   AT&Z0