Comunicación: El protocolo

Para la comunicación inalámbrica, el objetivo principal es el bajo consumo por lo que el protocolo se debe adaptar a él además las interferencias del canal hacen necesario incluir elementos de varificación de datos.

Configuración de la comunicación

El transceptor permite configurar diversos aspectos de la comunicación.

Se trabajará en modo ShockBurst dadas sus ventajas (ver la entrada del transceptor). En este modo, la velocidad de la comunicación se puede configurar de 1Mbps o de 250Kbps. Puesto que la velocidad no es crítica en la aplicación, se ha decidido establecerla a 250Kbps dado que su consumo en transmisión y en recepción es algo menor y la sensibilidad es -10dBm mayor.

Protocolo de comunicación

El protocolo se puede dividir en dos partes, el inicio de conexión y la comunicación.

El inicio de conexión es la parte del protocolo que define el mecanismo de la unión de un sensor a la red. Se parte de que cada nodo sensor dispone de una dirección única establecida durante la programación. Este mecanismo se inicia cuando el sensor envía un paquete de inicio de conexión al nodo de adquisición. Una vez el paquete es enviado, el sensor entra en modo de recepción, escucha del canal, esperando un paquete de confirmación de la conexión por parte del nodo de adquisición. Una vez el nodo sensor ha recibido este paquete, se considera que está conectado.

Puesto que los nodos sensores son autónomos y requieren un bajo consumo son los que fijan el protocolo de comunicación. El transceptor es el componente que supone un mayor consumo, es por esto que se debe intentar que esté activo el menor tiempo posible.

Tal y como se ha descrito en entradas anteriores, la comunicación la fija el funcionamiento del nodo sensor; el nodo de adquisición se encuentra siempre a la escucha y es tras una medida del nodo sensor cuando el nodo de adquisición tiene un breve espacio de tiempo para enviarle un comando al sensor. Este funcionamiento supone que el nodo de adquisición no podrá enviar un comando al nodo sensor hasta que este le envíe una medida. Hay que tener en cuenta que el tiempo entre medidas es configurable entre 5 segundos y 21 minutos.

Topología de los paquetes o tramas

Tal y como se ha comentado, el paquete en el modo Shockburst se puede dividir en tres partes; la dirección, los datos y el CRC. En total el tamaño del paquete no debe superar los 256 bits (32 bytes) puediendo tener la dirección un tamaño de hasta 40 bits (5 bytes) y el CRC un tamaño de 8 o 16 bits (1 o 2 bytes).

Actualmente la banda ISM es muy utilizada, es por esto que el sistema se encontrará con multitud de interferencias. Para hacer más robusta la comunicación y evitar la recepción de paquetes erróneos, se ha tomado una dirección y un CRC de 2 bytes, 65536 combinaciones posibles.

Para definir la longitud de los datos se debe tener en cuenta los elementos que forman la trama de datos. Estos elementos son la identificación, los comandos y los argumentos.

  • La identificación

    Cuando el sensor se comunica con el nodo de adquisición, el sensor debe indicar su dirección o algún dato que lo identifique ya que el paquete no incluye ninguna información acerca del origen del mismo. Se podría pensar en incluir la totalidad de la dirección del enviante pero esto supondría incluir 2 bytes a los datos con el consiguiente aumento del tiempo en el aire, y por tanto consumo, que esto supone. Por ello se emplea el siguiente modo que reduce la información de la dirección a un único byte al que he nombrado identificación o ID.

    Básicamente lo que se hace es repetir la información; se divide la dirección en dos, obteniéndose un byte de mayor peso (MSB, most significative byte) y un byte menor peso (LSB, least significative byte). Se establece que el byte de mayor peso es el byte de menor peso negado, la figura siguiente muestra un ejemplo.

    De este modo, con un solo byte se puede obtener la dirección completa negándolo bit a bit. Al haber un solo byte único, el de menor peso, el sistema permitiría introducir hasta 256 sensores lo cual es excesivo para el propósito del proyecto.Por ello, este byte de menor peso a su vez se divide en dos, teniéndose por un lado los 4 bits más significativos (MSb) y los 4 bits menos significativos (LSb). De este modo son los cuatro bits menos significativos los que realmente contienen un número único que identifica cada sensor. Los 4 bits más significativos pueden contener cualquier valor y se utilizan para evitar direcciones poco robustas como por ejemplo 0xFF00. Se deduce entonces que la red podrá disponer de hasta 16 sensores (24), valor óptimo para el propósito del proyecto.

    Se concluye entonces que el tamaño de la identificación es de un byte.

  • Los comandos y los argumentos

    Los comandos son identificadores únicos que indican una acción a realizar al nodo destino. Algunos comandos pueden necesitar de argumentos que son datos que lo complementan.

    Los comandos se han diseñado de modo que se pueda realizar una verificación del mismo rápida. De este modo al recibir un comando incorrecto se detendrá el procesado y se continuará con el funcionamiento normal.

    Dado que las necesidades de comunicación no son extensas, se ha decidido que se puedan definir hasta 16 comandos. Esto es debido a que el mecanismo de verificación empleado consiste en que los comandos son de un byte y que los cuatro bits más significativos son los cuatro bits menos significativos negados. Por lo tanto, para comprobar el comando se ha implementado la función siguiente.

       
    unsigned char verify_cmd(unsigned char command)
    {
            return((command&0x0F)==((~command)&0xF0)>>4);
    }

Los comandos y los argumentos establecen en gran medida la trama de los datos, se pueden distinguir las siguientes tramas.

  • Trama de envío de medidas.

    Esta trama la utilizan únicamente los nodos sensores. Es la trama más importante al ser la más utilizada. Es por esto que es la que fija la longitud máxima de la trama de datos. A máxima resolución, las medidas suponen 12 bits para la HR y 14 bits para la temperatura que, para simplificar el procesado, se envían en 16 bits de modo que ambas medidas suponen 4 bytes.

  • Trama de inicio de conexión.

    Esta trama la utilizan únicamente los nodos sensores. Se puede observar que la trama incluye toda la información posible acerca del sensor para que el nodo de adquisición conozca el estado del sensor. Es decir, se incluye la dirección completa del nodo sensor (de este modo se verifica la trama), los dos bytes de configuración del transceptor (uno contiene el canal y el otro la potencia de transmisión) y el byte de configuración del sensor (contiene la resolución a la que opera, el estado del calentador y el estado de la batería). Esta trama no contiene identificación ya que esta la fija el nodo de adquisición.

  • Trama de confirmación de la conexión.

    Esta trama la utiliza únicamente el nodo de adquisición. Mediante esta trama se confirma la conexión a la red y se establece la identificación.

  • Trama de configuración

    Esta trama puede ser utilizada por ambos tipos de nodos y permite el envío de dos comandos a la vez. Se observa que la longitud máxima de cada argumento es de un byte. Esto es así debido a que los argumentos de la mayoría de los comandos, que precisan de argumentos, son de este tamaño.

Las necesidades de comunicación entre el nodo sensor y el nodo de adquisición no son las mismas que entre el nodo de adquisición y el sensor, es por esto que se definen dos listados de comandos.

  • Nodo sensor → nodo de adquisición

    • CMD_MEAS_DATA 0xF0. Indica que los argumentos son las medidas realizadas.
    • CMD_MY_NAME_IS 0xE1. Pide la
  • Nodo de adquisición → nodo sensor

No hay comentarios: