2 votos

El nRF24L01+ no recibe paquetes

Estoy intentando enviar datos desde un MSP430 a otro MSP430 utilizando radios nRF24L01+ de Nordic Semiconductor, pero no puedo recibir los paquetes transmitidos. Puedo leer y escribir en los registros de la radio usando SPI y recibo interrupciones de la radio transmisora cuando alcanza el número máximo de retransmisiones, así que supongo que el problema tiene que ver con cómo tengo configuradas las radios. Actualmente tengo la radio transmisora enviando un paquete una vez por segundo. Si sondeo el registro RPD de la radio receptora, normalmente es 0 pero ocasionalmente es 1, lo que tiene sentido con el número de retransmisiones que se están produciendo. Abajo están las configuraciones de registro para ambas radios en el orden en que las escribo:

Transmitiendo MSP430 main():

  1. Borrar banderas de estado de radio
  2. Habilitar el acuse de recibo automático para la tubería de datos 0
  3. Habilita la recepción de datos 0
  4. Fijar el ancho de la dirección en 5 bytes
  5. Configura el registro de retransmisión para esperar 250 us entre retransmisiones y retransmitir hasta 15 veces.
  6. Cambia el canal RF a 50
  7. Cambie el registro de configuración de RF a una velocidad de datos de 1 Mbps y 0 dBm.
  8. Cambia el ancho de la carga útil de la tubería de recepción 0 a 5
  9. Retraso de 4,5 ms
  10. Cambie el registro de configuración para que no haya interrupciones enmascaradas, el CRC esté activado, el CRC sea de 2 bytes, la radio esté encendida y en modo de transmisión.
  11. Retraso de 4,5 ms de nuevo
  12. Activar las interrupciones globalmente, pasar a LPM0 y esperar una interrupción del temporizador una vez por segundo.

Transmitir cada segundo transcurrido:

  1. Borrar las banderas de estado
  2. Vacía la FIFO de transmisión de cualquier paquete anterior no enviado.
  3. Escriba la dirección del receptor en el registro 0 de la dirección de recepción (porque el reconocimiento automático está activado).
  4. Escribe la dirección del receptor en el registro de dirección de transmisión
  5. Escribir la carga útil de transmisión
  6. Poner CE alto, retardo de 12.5 us, luego poner CE bajo otra vez

Cada interrupción que recibo es porque se ha alcanzado el número máximo de retransmisiones y el paquete nunca sale del FIFO de transmisión.

Recibiendo MSP430 main():

  1. Borrar banderas de estado de radio
  2. Vacía el Tx FIFO en caso de que haya algo en él
  3. Habilitar el reconocimiento automático para la tubería de datos 0
  4. Habilitar tubo de datos de recepción 0
  5. Fijar el ancho de la dirección en 5 bytes
  6. Configura el registro de retransmisión para esperar 250 us entre retransmisiones y retransmitir hasta 15 veces.
  7. Cambia el canal RF a 50
  8. Cambie el registro de configuración de RF a una velocidad de datos de 1 Mbps y 0 dBm.
  9. Cambia el ancho de la carga útil de la tubería de recepción 0 a 5
  10. Escribe la dirección de recepción para el tubo de datos 0
  11. Establecer el registro de dirección de transmisión en la misma dirección que la tubería de recepción 0 (he intentado hacer esto en caso de que la dirección de transmisión debe establecerse para el reconocimiento automático para trabajar)
  12. Purgar el FIFO de recepción en caso de que contenga paquetes antiguos.
  13. Retraso de 4,5 ms
  14. Cambie el registro de configuración para que no haya interrupciones enmascaradas, el CRC esté activado, el CRC sea de 2 bytes, la radio esté encendida y en modo de recepción.
  15. Retraso de 4,5 ms de nuevo
  16. Poner el pin CE alto

No importa si sondeo el registro de estado cada segundo o pongo el MSP430 en reposo y espero a que el pin IRQ se ponga alto, nunca recibo un paquete, ninguna de las banderas del registro de estado cambia, y los FIFO de recepción y transmisión permanecen vacíos.

Cualquier consejo sería muy apreciado porque me estoy tirando de los pelos tratando de depurar estas radios.

0voto

DroidMonkey Puntos 1

El problema se resolvió asegurándose de que el encendido de las radios fuera el último paso antes de empezar a transmitir o recibir, insertando un retardo de al menos Tpd2stby (especificado en la hoja de datos como 4,5 ms) después de cambiar el registro de configuración para encender las radios, y después de iniciar una transmisión esperando a que la transmisión finalizara antes de cambiar el registro de configuración de nuevo para apagar la radio (tardará al menos Tstby2a, especificado en la hoja de datos como 130 us).

Aquí está la hoja de datos: https://www.sparkfun.com/datasheets/Wireless/Nordic/nRF24L01P_Product_Specification_1_0.pdf

Los valores de tiempo proceden de la tabla 6.1.7 Información de temporización y hay un diagrama de transición de estados en la página 22.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X