Buenas tardes, comunidad Habr!
Así que ha llegado el momento de los estudiantes en las universidades técnicas. Entonces, es hora de proyectos en el hogar y conquistar nuevas alturas de tecnología microelectrónica. Hoy hablaré sobre mi investigación con placas basadas en el chip NRF51822, que es un módulo Bluetooth algo anticuado de Nordic Semiconductor. Esta compañía es famosa por sus módulos de radio de bajo consumo de corriente y el chip NRF51822 no es una excepción. Pero no nos distraeremos del tema. Hablemos de hierro.
Crear un soporte de depuración
En octubre, se ordenaron tableros yj-14015-nrf51822 para experimentos con Bluetoth. Fue una mala idea comprar placas sin cableado a los conectores de clavija para cables estándar para los amantes de la electrónica.
La distancia entre los contactos de menos de 1 mm creó grandes dificultades para mí, una persona con una experiencia de soldadura extremadamente modesta. Las salidas en el tablero no fueron diseñadas para soldar a cables y fueron fáciles de cortar. Este destino le ocurrió a la única fuente de alimentación VDD. Pero con la ayuda de los esfuerzos del vecino, fue posible soldar el cable a la salida del condensador en la placa. Juntos, se soldaron las salidas GND, SWDIO, SWCLK y algunas otras GPIO. El resultado es algo similar en apariencia a Frankenstein:
Vamos a depurar y flashear nuestro dispositivo usando ST-Link V2. El diagrama de conexión es extremadamente simple y lógico:
ST-Link V2 | nrf51822 |
---|
3.3V | Vdd |
GND | GND |
SWDIO | SWDIO |
SWDCLK | SCLK |
A diferencia de Frankenstein, una sola descarga de corriente no fue suficiente para revivir este módulo. En primer lugar, intenté leer la memoria nrf51822 utilizando la utilidad STM32 ST-LINK . Con algunas advertencias, esto funcionó con placas STM32, pero no con nrf. En esto, mi trabajo con el tablero se detuvo temporalmente. Un poco más tarde encontré el artículo 1 y el artículo 2 sobre trabajar con nrf51822. Contenía enlaces al SDK y una descripción detallada de cómo se organiza la memoria nrf. El autor de los artículos utilizó el depurador JLink más caro, a diferencia de nosotros. Las soluciones baratas son muy importantes si eres un estudiante pobre :).
SDK de aprendizaje
Si desea utilizar la funcionalidad bluetooth, lo cual es bastante lógico para un chip bluetooth, Tendrá que colocar el llamado "dispositivo suave" al comienzo de la memoria programable nrf5. Viene en forma de firmware y contiene funcionalidad bluetooth. El resto de la memoria se escribe en su firmware. Desde allí, puede llamar a procedimientos de dispositivo suave para configurar bluetooth.
Hay varios dispositivos blandos diferentes. Para nrf51, puede usar s110 (para aplicaciones de servidor) y s130 (para aplicaciones de servidor y cliente). Para comprender la compatibilidad de las versiones de SDK y el dispositivo virtual, hay una matriz de compatibilidad . Se puede ver que los SDK hasta la versión 12.3.0 son adecuados para nuestra placa. Pero nos detendremos en SDK 10.0.0 desde Es compatible con s110 y s130.
Configurar OpenOCD
En los ejemplos del SDK y en los artículos, la utilidad nrfjprog se utiliza para el firmware a través de JLink, y necesitamos actualizar a través de ST-Link V2. En su lugar, utilizaremos el genial programa OpenOCD , descarga para Windows . Te permite flashear y depurar tuyevu hoo Una gran cantidad de diferentes placas y microcircuitos. Hay una configuración para el chip nrf51. Para forzar a OpenOCD a flashear nuestra placa, es necesario ejecutar el comando del formato presentado a continuación (después de agregar la carpeta OpenOCD / bin a Path). Puede leer más sobre los comandos de OpenOCD en la documentación .
openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image <PATH_TO_HEX> <OFFSET>" ^ -c reset -c exit
El diablo, como siempre, está en los detalles:
- "reset halt" envía un comando de reinicio de chip y detiene el dispositivo. En este estado, el firmware se puede borrar / escribir
- "nrf51 mass_erase 0" permite escribir en la sección del gestor de arranque y borra toda la memoria programable del microcircuito (en algunos casos ayudará a evitar un error de descarga de firmware)
- en lugar de <PATH_TO_HEX> necesita sustituir la ruta al archivo hexadecimal
- <OFFSET> establece el desplazamiento de la dirección de escritura del firmware. Este parámetro es útil si desea actualizar su firmware por separado del dispositivo suave. Si desea escribir firmware comenzando desde el principio de la memoria (desde la dirección 0x0), puede descartar este parámetro
- reset restablece el chip para que funcione con el nuevo firmware
El SDK incluye archivos hexadecimales para software suave. Para llenar s130 en el tablero, puede usar la siguiente secuencia de comandos:
set file=<nRF5_SDK>/components/softdevice/s130/hex/s130_nrf51_1.0.0_softdevice.hex openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image %file%" -c reset -c exit
Entonces puedes subir nuestro firmware. Es importante que elimine el "nrf51 mass_erase 0" para que el dispositivo no se borre. Y tampoco te olvides del offset. Para s130, el desplazamiento es 0x1c000, y para s110 es 0x18000. Estos valores se pueden encontrar en las especificaciones para s130 y s110 .
set file=<PATH_TO_HEX> openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "flash write_image %file% 0x1c000" -c reset -c exit
Ahora en la memoria del programa nrf51822 debe estar el firmware del dispositivo y el nuestro. Para las pruebas, utilicé un ejemplo de la carpeta <nRF5_SDK> / examples / ble_peripheral / ble_app_beacon y una aplicación de Android llamada "nRF Connect". Después de ejecutar los comandos, comencé a ver un dispositivo llamado nRF. Esto es lo que buscamos.
Configurar un proyecto CLion
El SDK nrf51 contiene ejemplos basados en archivos MAKE. Para trabajar con CLion, es necesario describir el ensamblaje del proyecto utilizando archivos CMake. Google mostró que el proyecto CMake para nrf51 ya está en el github. Fue escrito para usar con el SDK 12.XX. Debido a esto, algunas rutas de archivo para nuestro SDK 10.0.0 resultaron ser incorrectas. Además, la utilidad nrfjprog también se usa en el proyecto. Por lo tanto, tuve que jugar con la configuración del proyecto y reescribir los objetivos del firmware usando OpenOCD. El resultado de mi trabajo se puede encontrar en el github . El archivo Léame describe instrucciones para configurar un proyecto y depurar en CLion.
PS
Muchos detalles técnicos relacionados con las características de nrf51822 eludieron mi narrativa. Espero que algún día llene los vacíos agregando un artículo o escribiendo uno nuevo.