Difference between revisions of "NRF24L01"
Dario Salvi (Talk | contribs) (añadidas librerías para manejo con Arduino) |
Dario Salvi (Talk | contribs) (añadido simulador para Mixim) |
||
(One intermediate revision by the same user not shown) | |||
Line 93: | Line 93: | ||
Estructura del paquete: | Estructura del paquete: | ||
− | <code>Preamble: 1byte - Address: | + | <code>Preamble: 1byte - Address: 3-5 byte - Packet Control Field: 9bits - Payload: 0-32 byte - CRC: 1-2 byte</code> |
El Packet Control Field contiene: | El Packet Control Field contiene: | ||
Line 103: | Line 103: | ||
− | En modo ShockBurst un nodo es transmisor (PTX), la hoja, y otro es receptor ( | + | En modo ShockBurst un nodo es transmisor (PTX), la hoja, y otro es receptor (PRX), el centro de la estrella. |
SOLO el PTX puede empezar la comunicación. El PRX, al recibir un paquete envía un ACK y puede añadir un mensaje de vuelta (así hay comunicación bi-direccional). | SOLO el PTX puede empezar la comunicación. El PRX, al recibir un paquete envía un ACK y puede añadir un mensaje de vuelta (así hay comunicación bi-direccional). | ||
Si el ACK no es recibido, el PTX re-envia el paquete hasta un numero maximo de tentativos. | Si el ACK no es recibido, el PTX re-envia el paquete hasta un numero maximo de tentativos. | ||
Line 111: | Line 111: | ||
El chip se encarga de empaquetar y desempaquetar los payloads. Cada vez que se recibe o se envía un paquete los IRQs avisarán a la MCU para que interaccione. | El chip se encarga de empaquetar y desempaquetar los payloads. Cada vez que se recibe o se envía un paquete los IRQs avisarán a la MCU para que interaccione. | ||
+ | |||
+ | |||
+ | La direccion es siempre la del receptor (PRX). El nodo receptor mira si la direccion es valida, y si no descarta el paquete. | ||
+ | Si la direccion es valida comprueba tambien el CRC. La direccion puede ser de 3,4, o 5 bytes (configurable en el registro AW). | ||
+ | |||
===Multiceiver=== | ===Multiceiver=== | ||
+ | |||
El nodo receptor PRX puede ver los nodos conectados (hasta 6) como si fueran unos canales cada uno con su dirección. | El nodo receptor PRX puede ver los nodos conectados (hasta 6) como si fueran unos canales cada uno con su dirección. | ||
Las direciones pueden ser de hasta 5 bytes, la dirección 0 puede ser distinta, pero las direcciones de 1 a 5 tienen que tener los primero 4 bytes en común. | Las direciones pueden ser de hasta 5 bytes, la dirección 0 puede ser distinta, pero las direcciones de 1 a 5 tienen que tener los primero 4 bytes en común. | ||
Line 141: | Line 147: | ||
* [http://forum.arduino.cc/index.php?topic=187692.0 esta mas prototipal] | * [http://forum.arduino.cc/index.php?topic=187692.0 esta mas prototipal] | ||
* [https://github.com/mattibal/meshnet esta que parece tener muchas funcionalidades] | * [https://github.com/mattibal/meshnet esta que parece tener muchas funcionalidades] | ||
+ | |||
+ | =Posibilidades de simulación= | ||
+ | |||
+ | Hay [http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=5614722&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D5614722 una implementacion] de un simulador de nrf24l01 para [http://sourceforge.net/apps/trac/mixim/ Mixim] |
Latest revision as of 15:19, 16 October 2013
Es un chip low cost y low power para comunicaciones digitales. Lo produce Nordic y la pagina web con toda la información está aquí.
Contents
Caracteristicas[edit]
- Worldwide 2.4GHz ISM band operation
- Up to 2Mbps on air data rate
- Ultra low power operation
- 11.3mA TX at 0dBm output power
- 12.3mA RX at 2Mbps air data rate
- 900nA in power down
- 22µA in standby-I
- On chip voltage regulator
- 1.9 to 3.6V supply range (NO sobrepasar: Minimum -0.3V Maximum 3.6V)
- Enhanced ShockBurst™
- Automatic packet handling
- Auto packet transaction handling
- 6 data pipe MultiCeiver™
- Air compatible with nRF2401A, 02, E1 and E2
- Low cost BOM
- ±60ppm 16MHz crystal
- 5V tolerant inputs
- Compact 20-pin 4x4mm QFN package
- Temperature: -40 +85 °C
Aplicaciones tipicas[edit]
- Wireless PC Peripherals
- Mouse, keyboards and remotes
- 3-in-one desktop bundles
- Advanced Media center remote controls
- VoIP headsets
- Game controllers
- Sports watches and sensors
- RF remote controls for consumer electronics
- Home and commercial automation
- Ultra low power sensor networks
- Active RFID
- Asset tracing systems
- Toys
These products are not designed for use in life support appliances
Comunicación con el chip[edit]
La comunicación entre MCU y chip nrf24l01 funciona sobre SPI.
- 0-8Mbps 4-wire SPI serial interface
- 8 bit command set
- Easily configurable register map
- Full three level FIFO for both TX and RX direction
Los pines de acceso al SPI son 6, y van con 5V:
- IRQ (this signal is active low and is controlled by three maskable interrupt sources)
- CE (this signal is active high and is used to activate the chip in RX or TX mode)
- CSN (SPI signal)
- SCK (SPI signal)
- MOSI (SPI signal)
- MISO (SPI signal)
a través de SPI se puede acceder a los registros y modificar todos los parametros.
- data rate
- canal
- comunicación con el protocolo Enhanced ShockBurst
- las colas FIFO de transmisión y recepción
Los mensajes a enviar son de este tipo:
<Command word: MSBit to LSBit (one byte)>
</code>
Para detalles sobre los comandos ver la documentación original.
Estados del chip[edit]
- Power on reset state: el por defecto cuando está alimentado
- Power Down mode: el chip queda controlable por SPI y Chip Enable (CE) pin
- Standby-I: el chip consume poca corriente y puede pasar a estar activo rapidamente, el oscilador queda activo
- Standby-II: consume mas corriente, es cuando no hay nada que transmitir pero está todo listo para ello
- RX mode: el chip está recibiendo, si el paquete es valido (pasa el CRC) se pasa a la cola FIFO. Si la cola está llena, el paquete se pierde. Cuando una señal en la frecuencia y con modulación compatible se presenta el Carrier Detect (CD) es peusto alto.
- TX mode: el chip envía los paquetes que hay en la cola para luego volver a Standby-II.
Funciones Radio[edit]
- Data rate: 1Mbs, por defecto y que tiene mejor rendimiento, o 2Mbs, si lo necesitas, pues puedes activarlo, pero en ambos transmisor y receptor
- Canal: se setea en un registro, cada valor es 1 MHz F0= 2400 + RF_CH [MHz], transmisor y receptor tiene que tener el mismo!
- power amplifier: es la amplificación en el envío: 0dBm, -6dBm, -12dBm, -18dBm
- LNA gain: es la ganancia en recepción, se puede bajar de 1.5dB para consumir menos
Enhanced ShockBurst[edit]
Es un protocolo de nivel data link. Incluye direcciones, ACKs, re-envío automatico y topologías a estrella con nodos conectados a uno central. El payload es de 1 a 32 bytes.
Estructura del paquete:
<code>Preamble: 1byte - Address: 3-5 byte - Packet Control Field: 9bits - Payload: 0-32 byte - CRC: 1-2 byte</code>
El Packet Control Field contiene:
<code>Payload length: 6bit - PID: 2bit - NO_ACK 1bit</code>
El payload length dice cuantos bytes hay en el payload, entre 0 y 32. También puede haber payload automatico, en el cual caso el chip adivina el solo cuantos bytes hay. EL PID es usado, junto con el CRC para ver si el paquete es una re-transmisión, el NO_ACK se usa para no utilizar el ACK automatico.
En modo ShockBurst un nodo es transmisor (PTX), la hoja, y otro es receptor (PRX), el centro de la estrella.
SOLO el PTX puede empezar la comunicación. El PRX, al recibir un paquete envía un ACK y puede añadir un mensaje de vuelta (así hay comunicación bi-direccional).
Si el ACK no es recibido, el PTX re-envia el paquete hasta un numero maximo de tentativos.
Se puede saber cuantas retransmisiones han ocurrido accediendo a los registros ARC_CNT (retransmisiones de la singula transación) y PLOS_CNT (retransmisiones desde el ultimo cambio de canal). Si hay problemas es posible hacer que el tiempo de espera del ACK (normalmente 250 micros) sea mayo (500 es mas que suficiente).
Para enviar datos en los ACKs hay que usar el modo de payload automatico, y meter datos en la cola de transmisión del nodo PRX. Se pueden meter hasta tres respuestas, pero cuidado! esas respuestas serán comunes a todos los nodos que hayan enviado el paquete!
El chip se encarga de empaquetar y desempaquetar los payloads. Cada vez que se recibe o se envía un paquete los IRQs avisarán a la MCU para que interaccione.
La direccion es siempre la del receptor (PRX). El nodo receptor mira si la direccion es valida, y si no descarta el paquete.
Si la direccion es valida comprueba tambien el CRC. La direccion puede ser de 3,4, o 5 bytes (configurable en el registro AW).
Multiceiver[edit]
El nodo receptor PRX puede ver los nodos conectados (hasta 6) como si fueran unos canales cada uno con su dirección. Las direciones pueden ser de hasta 5 bytes, la dirección 0 puede ser distinta, pero las direcciones de 1 a 5 tienen que tener los primero 4 bytes en común. En esta modalidad es posible mandare respuestas distintas a nodos distintos, a través de la dirección de canal, en cuanto el chip se encargará de comprobar las direcciones.
Shockburst (no Enhanced)[edit]
El Enhanced puede ser apagado para usar el Shockburst mas antiguo. Cito:
The differences between the ShockBurst™ packet and the Enhanced ShockBurst™ packet are:* The 9 bit Packet Control Field is not present in the ShockBurst™ packet format.
* The CRC is optional in the ShockBurst™ packet format and is controled by the EN_CRC bit in the CONFIG register.
Librerías para Arduino[edit]
Hay unas cuantas librerías hechas para Arduino para controlar un NRF24L01:
- mirf, licencia tipo GPL, es la oficial de Arduino playground
- RF24 de maniacbug, GPL V2
- NRF24 de Mike, GPL V2
- fork de Greg Copeland de RF24, GPL V2, mas reciente que el original
- fork de Stanley Seow de RF24, GPL V2, que incluye soporte para RaspberryPi
- fork de Arco van Geest que incluye soporte para RaspberryPi
También hay librerías de nivel red para redes de NRF24L01:
- algoritmo hecho para nrf24 de maniacbug ver esta entrada de blog
- esta mas prototipal
- esta que parece tener muchas funcionalidades
Posibilidades de simulación[edit]
Hay una implementacion de un simulador de nrf24l01 para Mixim