viernes, 4 de junio de 2010

Estructura...

La estructura de la trama que he implementado en mi tracker (AQM_TRK) es la siguiente:



En ella, están todos los campos obligatorios y aunque la trama puede tener un tamaño mayor dependiendo de los datos que se envíen el el campo Information Field he dejado los campos mínimos por cuestions de recursos del microcontrolador que he utilizado y que sólo tiene un 1K de memoría de programa.
El Flag como ya sabemos es un byte "01111110" que se envía en la práctica unas 32 veces por motivo de sincronización del receptor y además porque al transmitirlo se perderan los primeros bits o bytes. En mi diseño lo envío 32 veces, son un total de 32 x 8 = 256 bits. Como cada bit a 1200 baud tiene una duración aproximada de 833 microsegundos, la duranción total del Flag de inicio es de unos 213 milisegundos.
El Destination Address (7 bytes), que en el caso de otro tipo de paquete APRS iría el indicativo de la estación destinataria del paquete, en MIC-E se codifican datos de la posición.
En el primer byte se codifica el primer dígito de la Latitud más el primer bit del mensaje de estado (bit A), el mensaje de estado son tres bits que definen 8 posibles estados, el que yo envío es el mensaje "En Route", existen otros mensajes de estado como: In Service, Off Duty, Priority, etc...
La latitud debemos manejarla en formato ggmm,mm (grados, minutos y centésimas de minuto). Ejemplo: 40º 23,51" N. El mensaje "En Route" que es el M1, corresponde al valor binario 110 (bit A, bit B y bit C)
La codificación es en ASCII y tenemos varias tablas con valores del 0 al 9 para la codificación de la Latitud y con distintos valores para la codificación de otras informaciones que veremos a continuación:
El primer byte codifica las decenas de grado, en este caso el 4 y según las tablas, el 4 pude representarse con dos caracteres: el 4 (bit A=0) y la T (bit A=1), dependiendo el valor del bit A, que en este caso vale 1 y por tanto, el primer byte será la T. El segundo byte será codificado con la letra P que representa el 0 con bit B=1. El tercer byte será codifcado con el 2 que representa 2 decenas de minuto y el bit C =0.
Así seguimos codificando, según la especificación de APRS y obtendremos al final:
TP2SUQ
Nos faltaría el séptimo byte que explicaré al final...
La codificación de los bytes(4-6) codifican los datos restantes de la latitud (3,51), pero además utilizando los valores de las distintas tablas se añaden otros datos.
En el byte 4 el indicador Norte/Sur de la latitud. El byte 5 además codifica el llamado offset de la longitud, esta última codificada en el Information Field. El Offset sirve para determinar el valor de la longitud ya que ésta se codifica utilizando 3 bytes y utiliza tablas que se solapan de forma que un valor puede atender a dos valores ASCII de longitud sólo distinguibles por el Offset. El Offset puede tomar valores de +0 ó de +100, el Offset será de +100 siempre que la longitud no esté comprendida entre 10 y 99 grados ya que el Offset tomará entonces valor +0.
En definitiva el Offset es un mecanismo que permite reducir el número de bytes en la codificación de la longitud, pensad que los caractertes ASCII que se manejan sólo llegan al 127 y la longitud tiene el formato: gggmm,mm. Es decir manejamos de 0º a 179º. Con el Offset podemos representar con los mismos caracteres ASCII de 10º a 99º con offset +0) y de 110º a 199º (realmente hasta 179º) con offset +100.
El byte 6 se aprovecha para codificar el indicador West/East (Este/Oeste) de la Lonfigtud.
El byte 7 indica el CRRSSID0 (7 bits), está descrito en la Especificación de AX.25, es un campo de la trama y en nuestro caso MIC-E siempre será: 01100000.

Intentando explicarlo:
CRRSSID0 (bit7-0)
C (bit7) indica Comando/Respuesta, aunque también se utiliza para determinar el protocolo de la TNC, sabiendo si es antiguo porque C=0 tanto en Source Address como Destination Address.
Las versiones (V.2.X) envían valores alternos en Source y Address, cuando el valor es 1 en Source se interpreta Respuesta y cuando es 0 en Source, es comando.

R (bit6-5) son bits reservados y se ponen siempre a 1.
SSID (bit4-1) representa el tipo de estación, el 0 (0000) representa la estación principal. Para más información consultar APRS Protocol Reference.
El Source Address (7 bytes), bastante sencillo ya que corresponde al indicativo de la estación. Se codifica el indicativo hasta de 6 letras y números, en caso de indicativos más cortos, se dejan espacios en blanco, el byte 7 sería de nuevo el CRRSSID0, en este caso "01110010" ya que indicamos EA4AQM-9, este "-9" indica el SSID que corresponderá a la estación móvil y se representará en el mapa con un icono de un vehículo. se pueden utilizar otros, para motocicleta, peatón, bicicleta, etc...
Dejo los siguientes bloques para la siguiente entrada.
Recordar que estamos en fase de obtención de todos los bytes que vamos a manejar y necesitar para en envío de nuestro paquete, algunos datos los vamos a obtener del GPS por lo que necesitaremos implementar dicha comunicación en nuestro micro. Otros tipo de datos serán programados por el usuario, en mi caso he hecho un programa sencillo que dialoga con el Tracker por el puerto serie para leer o grabar internamente (EEPROM) los datos de usuario: Indicativo, SSID, frecuencia de escucha, tiempo de envío, etc.
Una vez tengamos vistos todos ls campos veremos como se forma el HDLC, comentaré sobre el bit stuffing, el FCS y los códigos de línea para luego pasar al módem AFSK...