domingo, 23 de mayo de 2010

...continuando.

Los datos de la trama AX.25, que están delimitados por los Flag 0x7E (bin 01111110) de start y stop, son los siguientes:

1- Destination Address, 7 bytes que continen el indicativo destino o los datos APRS como veremos en detalle más adelante. Tenemos 6 bytes correspondientes al indicativo y el último byte al SSID.

2- Source Address, indicativo de la estación que transmite el paquete, son 7 bytes, el último byte indica el SSID (distintos identificativos que puede tomar nuestra estación)

3- Digipeater Address, hasta 8 indicativos de Digipeater (repetidores digitales o Digis), tamaño máximo 56 bytes. En este campo se indica el número de repeticiones de Digipeater. Los Digis reciben los paquetes y los reenvían descontando 1 unidad al SSID, en el momento que llegan a cero son descartados, son el tiempo de vida (TTL) del paquete. Además cada Digi que repite el paquete lo modifica y añade su indicativo de forma que se puede ver el camino seguido por el paquete APRS hasta llegar a un i-Gate (punto de acceso a Internet).
Existen recomendaciones a la hora de configurar este campo ya que valores muy altos ocasionan repeticiones innecesarias y por tanto QRM (ruido).

4- Control Field, campo de control de 1 byte que en APRS es 0x03 (hexadecimal) e indica que se trata de un paquete UI-frame, especificado dentro del protocolo AX.25. Se trata de unnumbered information (UI), o paquetes no numerados y por tanto en modo no orientado a conexión, similar al UDP de TCP/IP. En APRS el orden de los paquetes se establece por el orden de llegada a no ser que sean fechados, es decir que lleven un Timestump.

5- Protocol ID (PID), en nuestro caso es siempre F0, en AX.25 se especifica el tipo de protocolo de nivel 3, en el caso de APRS es nivel 2 por lo que se indica con 0xF0.

6- Information Field, entre 1-256 bytes. Aquí se envían los datos de usuario que pueden ser de cualquier tipo, en caso de APRS con datos MIC-E Encoded Data se codifican datos en este campo como veremos. El AQM Tracker como lo he bautizado utiliza la codificación MIC-E para enviar la posición, la velocidad, el rumbo y la altitud de la estación móvil.

7- Frame Check Sequence (FCS), son dos bytes que se utilizan para garantizar la integridad de los datos, ya comenté algo al respecto anteriormente. Se aplica el cálculo CRC-16 CCITT a los datos a enviar, de forma que el receptor una vez recibida la trama realiza su cálculo y comprueba que coincide con el FCS de la trama, si está todo correcto la trama se ha recibido sin errores, en caso contrario será descartada. El FCS también es utilizado por los Digis para identificar paquetes repetidos y así evitar reenviarlos de nuevo.

Hasta aquí el final de los diferentes campos, un ejemplo real de trama MIC-E es la siguiente:

1:Fm EA4AQM-9 To TP2UWV Via WIDE2-2 [17:07:09]
`y@:m >/"<+}*QRV:145,300MHz 73*

Se puede observar el indicativo de las estación, en este caso el mío con SSID -9 y el alias del Digi genérico APRS "WIDE2-2", en concreto el -2 establece el número de saltos ya que los Digis iran descontando dicho valor hasta llegar a cero. Se observa la trama tipo UI y el pid o protocol ID que es F0. El resto que aparece de longitud 33 bytes corresponde al Informatión Field, aparecen datos MIC-E codificados (
`y@:m >/"<+}) y una parte de información de usuario: *QRV:145,300MHz 73*, indicando la frecuencia de escucha.
En el campo Information pueden aparecer caracteres no imprimibles.

En la próxima entrada analizaré la codificación MIC-E para seguir avanzando cada vez a más bajo nivel, pondré algunas señales y ejemplos para que sea más ilustrativo...





martes, 18 de mayo de 2010

APRS en detalle... AX.25

Después de 4 meses trabajando en realizar mi propio Tracker APRS, ya terminado, he aprendido bastante a bajo nivel sobre el protocolo APRS, primero inicié un estudio en profundidad de la Especificación, luego me dediqué a analizar señales para terminar de entender correctamente el funcionamiento, sobretodo a nivel de trama HDLC ya que me surgían un montón de dudas, la especificación en algunos puntos no es muy aclaratoria que digamos...

Lo primero que aprendí es a identificar los campos que puede llevar un paquete APRS, en concreto me centré en el Mic Encoder, que era la parte APRS dedicada al tracking principalmente y que codifica diferentes datos sobre la estructura del AX.25 utilizada ahora para transportar el nuevo protocolo.

El AX.25 es similar al X.25 y tiene una serie de campos sobre los que APRS se apoya, algunos fundamentales y que se mantienen, por ejemplo el Source Address, donde se especifica el Indicativo de quien origina el radiopaquete o el campo data donde van los datos de la aplicación o de usuario...

Una paquete AX.25 tiene los siguientes campos, que en definitiva son chorros de bits cogidos en grupos de 8 bits (bytes) y que tienen un significado dependiendo de la posición e incluso del contenido de dicho byte.

El principio del paquete, me refiero lo primero que se envía hacia el receptor remoto, es un byte de Star llamado Flag y que es una cadena única y que no se repite hasta el final del paquete, ya que al volver a recibirlo se entenderá que es el final del paquete. Esa cadena está formada por 1 byte y los bits son: "01111110", si se recibe antes del final del paquete el receptor interpretará el final del paquete (Stop) y descartará el resto, el paquete se descartará por ser erroneo y simplemente es porque cada paquete lleva un FCS, es decir un Frame Check Secuence que no son más que dos bytes resultantes de la codificación del paquete y que se calcula antes de ser enviado, una vez recibido por el receptor, éste recalcula de nuevo dicho FCS y comprueba si coinciden, de no ser así descartaría el paquete ya que entonces se ha producido un error.

Este método es un CRC y no permite corrección de errores pero sí poder detectarlos, en concreto se utiliza un CRC-16 CCITT cuyo polinomio es X16 + X12 + X5 + 1.
-->
Volviendo a los Flag, comentar que el Flag Start se envía al principio varias veces, es decir de forma seguida en torno a 32 veces, esto se hace para que el receptor del paquete se sincronice. En concreto, se enviaría 01111110011111101111110... ...01111110
De hecho, si se escucha un paquete, el inicio es siempre idéntico y dura unos cuantos milisegundos, en concreto unos 213 milisegundos para un paquete a 1200 baudios, o lo que es lo mismo 1200 bits por segundo (bps).

Aclarar para quién no tenga claro el concepto que en el caso de radiopaquete por estar modulado en AFSK y en el que un símbolo puede ser sólo "1" ó "0" el número de bits por segundo coincide con los baudios (número de símbolos enviados por segundo).
La transmisión en APRS es a 1200 bps, es decir que en el chorro de bits cada bit tiene una duracción de unos 833 microsegundos.

Bueno, poco a poco...
...dejo para la próxima ocasión el análisis de la trama AX.25 para poder entender la codificación APRS. Ya sabemos que los datos útiles de la trama se encuentran entre los Flags y que dichos flag "01111110" no pueden aparecer dentro de la trama, existe un método que comentaré para evitar ésto, llamado bit stuffing...

saludos o como decimos los radioaficionados 73!