Beruflich Dokumente
Kultur Dokumente
NRF24L01+
Con una corriente máxima, en los picos de Transmisión/Recepción, inferior a 14mA, modo “Stand"By”,
administración avanzada de potencia y rango de alimentación entre 1,9 y 3,6V, el NRF24L01+ es capaz de
funcionar durante meses o incluso años alimentado con pilas de botón o de tipo AA/AAA, algo que nos
viene muy bien teniendo en cuenta el uso que vamos a darle en este proyecto.
Además, el NRF incluye un protocolo hardware que se encarga del manejo de las tramas que se envían y se
reciben por radio frecuencia, haciéndonos la vida más fácil a la hora de tener que retrasmitir tramas por culpa
de errores o interferencias, así como del uso de códigos de redundancia cíclicos (CRC), resultando una
comunicación por enlace de radio muy robusta, a prueba de fallos.
Transceptor de radio-frecuencia de un solo chip, de bajo coste y que funciona a 2,4GHz con
modulación GFSK y 126 canales disponibles.
El protocolo de capa de enlace “Enhanced ShockBurst” nos proporciona las siguientes automatizaciones y
recursos:
Ensamblaje automático de paquetes (preámbulo, dirección y CRC).
Retransmisión automática.
En la siguiente imagen se observa un dibujo esquemático de los pines de los que dispone la placa del NRF
para comunicarse por SPI con el DSP o con el MSP:
La comunicación entre el DSP o el MSP430 y el NRF24L01+ se realiza mediante el protocolo SPI (Serial
Peripheral Interface). Este protocolo funciona en modo “Maestro"Esclavo” (Master"Slave), como se observa en
la siguiente figura:
El SPI es un protocolo síncrono. La sincronización y la transmisión de datos se realiza por medio de 4 señales:
• SCLK (Clock): Es el pulso que marca la sincronización. Con cada pulso de este reloj, se lee o se envía
un bit.
• MOSI (Master Output Slave Input): Salida de datos del dispositivo maestro (Master) y entrada de datos
al equipo esclavo (Slave).
• MISO (Master Input Slave Output): Salida de datos del dispositivo esclavo (Slave) y entrada al equipo
maestro (Master).
• SS/CS (Slave Select/Chip Select): Línea para que el equipo maestro le comunique al esclavo que
comienza la comunicación.
La ventaja de un bus serie como el SPI es que se minimiza el número de pines, pistas y, por consiguiente, el
tamaño del circuito integrado. Esto reduce el coste de su fabricación y montaje.
Los buses series dan mucha flexibilidad a la hora de conectar diferentes periféricos, ya que casi todos los
dispositivos digitales pueden ser controlados por esta combinación de señales (CLK, MISO, MOSI, CS).
A continuación se muestra el funcionamiento de la lectura y escritura de datos en el NRF24L01+:
Siendo Cn bits de comandos de SPI, Sn bits del registro STATUS y Dn bits de datos. Se observa que el NRF
devuelve el valor del registro STATUS al comenzar cualquier comunicación con él.
Los registros más utilizados en la configuración del NRF son el registro de configuración (CONFIG) y el de
estado (STATUS). A continuación se muestran sus bits con sus correspondientes funciones:
El transceptor NRF24L01+ tiene dos modos de funcionamiento, cuando no está apagado o en Stand"By:
transmisor y receptor. Para seleccionar cada uno de ellos, se requiere de una escritura en el registro CONFIG,
concretamente en el bit 0. Se escribirá un 1 si se quiere activar el modo de RX ó un 0 si se desea el modo TX.
Para escribir en un registro determinado, el NRF nos proporciona un comando y una dirección de escritura.
El comando de escritura en un registro cualquiera es el valor 0x20 en hexadecimal, llamado
NRF_CMD_WREG en el código, y el comando de lectura es el valor 0x00 o NRF_CMD_RREG. Para “activar”
dicho comando, lo que se hace es usar la función de envío de bytes a través de SPI, enviando el byte
resultante de hacer un “OR” lógico entre el comando de “escritura en un registro” (o de lectura, si lo que se
quiere es leer dicho registro), y el número correspondiente a la dirección del registro deseado.
2. Se envía por SPI el byte resultante de hacer un “OR” lógico entre el comando NRF_CMD_WREG y
la
dirección del registro CONFIG que es la 0x00.
3. Se envía por SPI el byte correspondiente a la configuración que deseamos: 0x0A si queremos activar el
NRF en modo transmisor, ó 0x0B si lo que queremos es que éste funcione como receptor.
Antes de configurar el NRF en modo receptor o transmisor, es común apagar el mismo para después
encenderlo en el modo deseado. Para ello, utilizando la misma función de escribir en un registro, lo que se
hace es mandar el byte 0x80 al registro CONFIG.
Figura 3.8 (Izq.) – Diagrama de flujo del procedimiento de configuración del modo
RX.
Figura 3.9 (Der.) – Diagrama de flujo del procedimiento de configuración del modo
TX.
En el caso de que queramos usar el NRF en modo receptor, también hay que configurar el tamaño de la
trama que se va a recibir. Para ello volvemos a hacer uso de la función de escritura en un registro,
esta vez, escribiendo el byte TAM_PAYLOAD, o tamaño del dato en bytes, en el registro RX_PW_P0, cuya
dirección es la 0x11.
Estos registros (RX_PW_P0, RX_PW_P1, RX_PW_P2, RX_PW_P3, RX_PW_P4 y RX_PW_P5), definen el uso
que se hace de los 6 pipes, o “tuberías”, de recepción de bytes de los que dispone el NRF24L01+. Se puede
elegir el número de bytes de recepción, entre 1 y 32 bytes. En nuestro caso, para la recepción del dato del
botón pulsado, o para el número de efecto seleccionado en el DSP, sólo nos hace falta transmitir un byte. Es
por ello que aquí escribimos un 1 en el registro RX_PW_P0. Además, como no se utilizan más pipes, los
demás se dejan sin configurar, ya que por defecto el valor que tienen es 0x00 (pipe no utilizado).
Cuando se desea transmitir un dato por radio"frecuencia, lo que se hace es parecido a la escritura de un byte
en un registro, tal como hemos visto hace un momento. En esta ocasión, y tras haber configurado el NRF en
modo transmisor, en lugar de indicar un registro donde escribir, el byte que se le manda al NRF por SPI es el
comando W_TX_PAYLOAD, cuyo valor es 0xA0. A continuación, se le manda el byte con el dato que se
quiere transmitir por radio.
A continuación se muestra un diagrama de flujo del funcionamiento del procedimiento de envío de un dato
por radio"frecuencia:
Figura 3.10 – Diagrama de flujo de la operación de envío de un dato por radio.
Para la recepción de un dato por radio"frecuencia, el procedimiento es similar, salvo por el hecho de que hay
que estar comprobando periódicamente el registro STATUS. Para ello, y gracias a que el NRF siempre nos
devuelve el estado de dicho registro al escribir cualquier byte en él, se le manda el comando de “no
operación” NRF_CMD_NOP, ó 0xFF. Tras recibir por SPI el valor del registro STATUS, comprobamos su bit
número 6. Si está a 1 significa que se ha recibido algo por radio, así que procederemos a leer qué es lo que
nos ha llegado.
2. Enviar por SPI el byte del comando de lectura del dato recibido: NRF_RX ó 0x61.
3. Copiar, en una variable libre, el byte que se recibe del NRF cuando se le escribe el comando de “no
operación”, citado anteriormente: NRF_CMD_NOP, ó 0xFF.
5. Cuando no queden más bytes por recibir, volver a poner el pin de CS a nivel alto.
Para terminar con la operación de lectura, se debe bajar la bandera que nos informó de que se había recibido
un dato por radio"frecuencia. Para hacerlo, simplemente escribimos un 1 en el bit 6 del registro STATUS. De
otra forma, si no bajáramos dicha bandera, estaríamos siempre entrando en la función de lectura.
A continuación se muestra un diagrama de flujo del funcionamiento del procedimiento de lectura de un dato
que se ha recibido por radio"frecuencia: