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!




1 comentario:

Tucán (EA4AQM) dijo...

Hola Diego,
me costó también, encontré un docuemnto en inglés por Internet, creo que de tapr.org si mal no recuerdo. Mándame un correo si quieres e intento localizar el doc y te lo envío...
73. Víctor