Editing NRF24L01

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 44: Line 44:
 
==Comunicación con el chip==
 
==Comunicación con el chip==
  
La comunicación entre MCU y chip nrf24l01 funciona sobre [http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus SPI].
+
La comunicación entre MCU y chip nrf24l01 funciona sobre SPI.
* 0-8Mbps 4-wire SPI serial interface
+
0-8Mbps 4-wire SPI serial interface
* 8 bit command set
+
8 bit command set
* Easily configurable register map
+
Easily configurable register map
* Full three level FIFO for both TX and RX direction
+
Full three level FIFO for both TX and RX direction
  
  
Line 65: Line 65:
 
* las colas FIFO de transmisión y recepción
 
* las colas FIFO de transmisión y recepción
  
Los mensajes a enviar son de este tipo:<br/>
+
Los mensajes a enviar son de este tipo:
<code><Command word: MSBit to LSBit (one byte)><br/>
+
<Command word: MSBit to LSBit (one byte)>
<Data bytes: LSByte to MSByte, MSBit in each byte first></code>
+
<Data bytes: LSByte to MSByte, MSBit in each byte first>
  
 
Para detalles sobre los comandos ver [http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01 la documentación original].
 
Para detalles sobre los comandos ver [http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01 la documentación original].
 +
  
 
==Estados del chip==
 
==Estados del chip==
  
* Power on reset state: el por defecto cuando está alimentado
+
* Power on reset state, el por defecto cuando está alimentado
* Power Down mode: el chip queda controlable por SPI y Chip Enable (CE) pin
+
* 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-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
 
* Standby-II: consume mas corriente, es cuando no hay nada que transmitir pero está todo listo para ello
Line 93: Line 94:
 
Estructura del paquete:
 
Estructura del paquete:
  
<code>Preamble: 1byte - Address: 3-5 byte - Packet Control Field: 9bits - Payload: 0-32 byte - CRC: 1-2 byte</code>
+
Preamble: 1byte - Address: 35 byte - Packet Control Field: 9bits - Payload: 0-32 byte - CRC: 1-2 byte
  
 
El Packet Control Field contiene:
 
El Packet Control Field contiene:
  
<code>Payload length: 6bit - PID: 2bit - NO_ACK 1bit</code>
+
Payload length: 6bit - PID: 2bit - NO_ACK 1bit
  
 
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 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.
Line 103: Line 104:
  
  
En modo ShockBurst un nodo es transmisor (PTX), la hoja, y otro es receptor (PRX), el centro de la estrella.
+
En modo ShockBurst un nodo es transmisor (PTX), la hoja, y otro es receptor (PTRX), 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.
 
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).
 
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!
+
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.
 
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.
 
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.
 
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)===
+
===Shickburst (no Enhanced)===
  
 
El Enhanced puede ser apagado para usar el Shockburst mas antiguo. Cito:
 
El Enhanced puede ser apagado para usar el Shockburst mas antiguo. Cito:
  
<blockquote>The differences between the ShockBurst™ packet and the Enhanced ShockBurst™ packet are:
+
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 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.</blockquote>
+
  * 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=
+
 
+
Hay unas cuantas librerías hechas para Arduino para controlar un NRF24L01:
+
* [https://github.com/aaronds/arduino-nrf24l01 mirf], licencia tipo GPL, es la oficial de [http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01 Arduino playground]
+
* [http://maniacbug.github.io/RF24/ RF24] de [http://maniacbug.wordpress.com/find-me-on/ maniacbug], GPL V2
+
* [http://www.airspayce.com/mikem/arduino/NRF24/ NRF24 de Mike], GPL V2
+
* [https://github.com/gcopeland/RF24 fork de Greg Copeland de RF24], GPL V2, mas reciente que el original
+
* [https://github.com/stanleyseow/RF24 fork de Stanley Seow de RF24], GPL V2, que incluye soporte para RaspberryPi
+
* [https://github.com/gnulnulf/RF24 fork de Arco van Geest] que incluye soporte para RaspberryPi
+
 
+
 
+
También hay librerías de nivel red para redes de NRF24L01:
+
 
+
* [http://maniacbug.github.io/RF24Network/index.html algoritmo hecho para nrf24 de maniacbug] ver [http://maniacbug.wordpress.com/2012/03/30/rf24network/ esta entrada de blog]
+
* [http://forum.arduino.cc/index.php?topic=187692.0 esta mas prototipal]
+
* [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]
+

Please note that all contributions to Wiki Makespace Madrid may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Wiki Makespace Madrid:Copyrights for details). Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to type the two words you see in the box below:

Cancel | Editing help (opens in new window)