BLE bajo el microscopio (enlace 24-52)

imagen


BLE bajo el microscopio (enlace 24-52)



NORDIC lleva varios años produciendo nuevos cristales de la serie nRF52. Sin embargo, muchos todavía usan la familia nRF24 más antigua. Hoy les mostraré cómo organizar la comunicación bidireccional entre ellos en los canales publicitarios. Además, utilizando la capacidad del cristal nRF52 para medir el nivel de RSSI, lo trazaremos en un gráfico.



Opciones de conexión



Al leer el foro nórdico sobre las capacidades inalámbricas entre las familias antiguas y nuevas, vi que hay dos posibilidades. Este es el protocolo ESB (Enhanced Shock Burst) y un complemento sobre él: el protocolo Gazell. Sin duda, esto es bueno, pero existen varias dificultades. En el lado de nRF24, estas son las fuentes en nRFgo_SDK_2.3.0 solo para los módulos nrf24le1 y nrf24lu1 (paquete nRF24L01 + microcontrolador). Sin embargo, entre los radioaficionados, este módulo sin controlador está más extendido.



Fig.1

imagenDesde el lado del nRF52 tampoco todo es fluido. En el SDK, los protocolos ESB y Gazell se dan en forma de módulos compilados listos para usar, que no son hielo. Los enlazaremos al nivel más bajo, trabajando directamente con los registros. En su tercer artículoYa he descrito cómo hacer una baliza usando nRF51822. También será interesante leer esta publicación .



Primero, unas palabras sobre el sistema que construiremos. Recibiremos y transmitiremos en canales publicitarios en formato de paquetes BLE. Esto permitirá usar un teléfono celular y el programa NRF Connect ( Android e iOS) vea nuestros paquetes en el aire. Esto nos ayudará mucho y nos permitirá dividir la tarea original en etapas. Tendremos un Host con un canal de radio en nRF24L01 y un Dispositivo en m / c nRF52832. Además, dado que nRF24L01 es solo un canal de radio, necesitará un controlador. Crearemos dos proyectos a la vez en diferentes m / c de la empresa ST. El anfitrión transmitirá un paquete de radio varias veces por segundo. El dispositivo lo recibirá, medirá el nivel de RSSI y enviará un paquete de respuesta, que contendrá su valor. Después de recibir el mensaje de respuesta, el Host enviará un byte con el nivel RSSI al puerto COM. Para rastrear visualmente el cambio en el nivel de recepción, escribí un pequeño programa gráfico .



Anfitrión Nrf24L01 + Stm8L152



Entonces, comencemos con el Host en el enlace Nrf24L01 + Stm8L152. Para esta tarea, tomé el módulo Nrf24L01, cuya foto se dio arriba, y STM8L-DISCOVERY, una placa de depuración basada en STM8L152C6T6. A continuación se muestra la distribución de pines del módulo nRF24L01.



Figura 2

imagen



Pinout de STM8L-DISCOVERY
#define LED_PORT GPIOC

#define LED_PIN GPIO_Pin_7

#define IRQ_PORT GPIOE

#define IRQ_PIN GPIO_Pin_0

#define CE_PORT GPIOD

#define CE_PIN GPIO_Pin_1

#define SPI_CLK_PORT GPIOE

#define SPI_CLK_PIN GPIO_Pin_4

#define SPI_MISO_PORT GPIOE

#define SPI_MISO_PIN GPIO_Pin_2

#define SPI_MOSI_PORT GPIOE

#define SPI_MOSI_PIN GPIO_Pin_5

#define SPI_CSN_PORT GPIOD

#define SPI_CSN_PIN GPIO_Pin_0



Fig. 3

imagen

Para enviar datos al puerto COM, se utilizó un adaptador USB am / s cp2102 conectado a las patas PC2 y PC3. Puede obtener su controlador aquí. Al final, esto es lo que pasó.



Fig.4

imagen



En el módulo nRF24L01 puede ver un condensador electrolítico soldado entre los pines de alimentación. Se recomienda configurarlo para un funcionamiento estable del módulo. El proyecto completo y el firmware se pueden encontrar aquí y aquí... Puede abrirlo utilizando el entorno de desarrollo IAR para Stm8. Destellamos el m / cy lo lanzamos. El LED azul de la placa STM8L-DISCOVERY parpadeará 2 veces por segundo, indicando el envío de paquetes. Ahora es el momento de iniciar el programa NRF Connect y ver algo como la imagen que se muestra en la Figura 5a. Si tiene éxito, felicitaciones, se completa la primera mitad de las tareas.



Figura 5a ________________________________ Figura 5b _______________________________ Figura 5c ______________________________

imagen



Anfitrión Nrf24L01 + stm32F103



Para no alejarnos del trabajo del Host, repetimos de todos modos para el stm32F103 m / c. Para hacer esto, tomé una "pastilla azul" con un conector USB instalado. Esto hizo posible no usar un adaptador, sino enviar datos directamente al puerto USB usando estos controladores . Reuní un proyecto para stm32F103 en STM32CubeMx.



Pinout desde el lado de la pastilla azul
#define SPI_CE_PORT GPIOB

#define SPI_CE_PIN GPIO_PIN_4

#define SPI_IRQ_PORT GPIOB

#define SPI_IRQ_PIN GPIO_PIN_5

#define SPI_MISO_PORT GPIOB

#define SPI_MISO_PIN GPIO_PIN_6

#define SPI_CLK_PORT GPIOB

#define SPI_CLK_PIN GPIO_PIN_7

#define SPI_MOSI_PORT GPIOB

#define SPI_MOSI_PIN GPIO_PIN_8

#define SPI_CSN_PORT GPIOB

#define SPI_CSN_PIN GPIO_PIN_9



Fig.6

imagen



El proyecto en sí y el firmware se pueden tomar aquí y aquí . Puede abrirlo utilizando el entorno de desarrollo IAR para Stm32. Se puede utilizar cualquier programador para programar el STM32F103. Usé este.



Fig. 7

imagen



Conectamos la fuente de alimentación e intentamos ver los paquetes en los canales publicitarios. La imagen será la misma que en la Fig5a. Nada parpadea en esta placa, ambos LED están encendidos continuamente. No pude reactivar el LED verde en la pierna PC13. La frecuencia de envío es más alta que en la placa con stm8L152 y es de 10 Hz. Todos estos parámetros se pueden cambiar fácilmente dentro de los proyectos.



Dispositivo Nrf52832



Entonces, asumiremos que la primera parte del sistema con el Host nos está funcionando. Ahora lanzaremos Device. Esto se puede hacer en un KIT adecuado de NORDIC PCA10040



Fig.8

imagen



También puede usar cualquier placa con m / k nRF52832. Usaré una tabla de un diseño antiguo. Pero en el kit PCA10040, lo comprobé, también se inicia. El proyecto y el firmware están aquí y aquí . Está construido en el entorno Keil uVision4 utilizando el antiguo SDK12.3.0, que se puede tomar aquí... Para que el proyecto se construya sin problemas, su carpeta debe estar ubicada en el directorio nrf52832_workspace_SDK12 \ examples \ periférico \. El hecho es que cualquier proyecto de NORDIC contiene una gran cantidad de enlaces relacionados, por lo que no se recopilará en un lugar arbitrario. Para flashear nRF52832 puede usar el programa nRFgoStudio o nRF Connect for Desktop .



Al lanzar un proyecto de dispositivo, recomendaría hacer esto primero. Porque El dispositivo funciona en el modo de escucha, no envía paquetes de radio al aire. Esto ocurrirá solo como respuesta, después de recibir un paquete del Host. Por lo tanto, primero debe verificar que el dispositivo esté vivo. Para hacer esto, necesita comentar la función BleListen () en el proyecto y, por el contrario, descomentar BleRadioTransaction (). Como se muestra abajo.



imagen



En este caso, el dispositivo mismo comenzará a transmitir paquetes de radio. Se pueden ver en el teléfono. En la figura 5b se muestra una imagen de ejemplo. Si todo está bien, devolvemos todo y encendemos los dispositivos Host y Device. En el teléfono, deberíamos verlos a ambos, como en la figura 5c. Esto significa que el dispositivo vio el mensaje del host y envió el suyo en respuesta. Si el Host, a su vez, ha recibido un mensaje de respuesta con el nivel RSSI, entonces establece este valor en el puerto COM. Ahora bien, si ejecutamos el programa LevelRssi en Windows y seleccionamos el puerto correcto, veremos cómo cambia el nivel RSSI con una posición relativa diferente de los dispositivos.



Conclusión



Casi había terminado de preparar el artículo cuando se me ocurrió otro pensamiento. Decidí usar un dispositivo más común como dispositivo, a saber, el dongle pca10059 , basado en el nRF52840 m / c. Aquí está su foto.



Fig. 9

imagen

Afortunadamente, tenía dos de estos tableros. Habiendo reconstruido el proyecto, me encontré con el problema de cargar el firmware en él. Sabía que necesitaba hacer esto usando nRF Connect for Desktop, pero no descubrió de inmediato cómo ingresar el dongle en modo DFU (actualización de firmware). He aquí cómo hacerlo. Entramos en modo DFU inmediatamente después del reinicio. Primero debe enchufar el dongle en el conector USB y luego presionar el botón de reinicio (más alejado del procesador), con un empujador horizontal. El LED rojo del dongle comienza a parpadear. Abra el programa nRF Connect y presione el botón "Instalar" en la sección Programador. Cuando se descargue el software requerido, haga clic en el botón "Abrir".



Fig. 10 La

imagen



ventana del programador se abrirá frente a usted.



Fig. 11

imagen



En la parte superior izquierda, seleccione el puerto COM deseado. Verá algo como la siguiente imagen.



Figura 12

imagen



En el lado izquierdo veremos lo que hay en la memoria del controlador. Al hacer clic en el botón "Agregar archivo HEX", puede agregar un archivo para llenar en el lado derecho. También hubo algunos problemas aquí. Los botones "Borrar todo" y "Borrar y escribir" no están disponibles para nosotros. El hecho es que el dongle no tiene programador, por lo que el programa se carga usando el gestor de arranque. Y nos adentramos en él a través de la sección MBR. Si borramos estas secciones, entonces el firmware a través del modo DFU será imposible. En teoría, solo necesita agregar firmware a la mitad derecha de la pantalla y presionar el botón "Escribir". Todo parece estar correcto, pero no funcionará. Nuestro programa comienza en la dirección cero en la memoria FLASH, y esta dirección ya está ocupada por la partición MBR. Cómo lidiar con esto se puede leer en este tutorial.... Si lees durante mucho tiempo o no, te lo explicaré en imágenes usando el ejemplo de Keil. Aquí hay una imagen de un proyecto con asignación de memoria de microcontrolador para proyectos que no son de pila.



Fig. 13

imagen



Es necesario cambiar el puntero FLASH-a a 0x1000 y la RAM a 0x20000008 y volver a compilar el proyecto.



Figura 14

imagen



Después de eso, ya puede usar el programa nRF Connect for Desktop. Probablemente eso es todo. Puedes ver lo que hice en el video a continuación.



yadi.sk/i/BGQQnga1HeN50A

yadi.sk/i/d8A9pU82kBcTMw

yadi.sk/i/XGac8xwpksVX7g



Empleado de Caesar Satellite Group of Companies

Vladimir Pecherskikh



All Articles