Bonjour, communauté Habr!
Le temps est donc venu pour les étudiants des universités techniques. Il est donc temps pour les projets domestiques et de conquérir de nouveaux sommets de la technologie microélectronique. Aujourd'hui, je vais parler de mes recherches avec des cartes basées sur la puce NRF51822, qui est un module Bluetooth quelque peu dépassé de Nordic Semiconductor. Cette société est célÚbre pour ses modules radio à faible consommation de courant et la puce NRF51822 ne fait pas exception. Mais nous ne serons pas distraits du sujet. Parlons de fer.
Création d'un stand de débogage
En octobre, des cartes yj-14015-nrf51822 ont été commandées pour des expériences avec Bluetoth. C'était une mauvaise idée d'acheter des cartes sans cùblage aux connecteurs à broches pour les fils standard pour les amateurs d'électronique.
La distance entre les contacts infĂ©rieure Ă 1 mm a créé de grandes difficultĂ©s pour moi, une personne avec une expĂ©rience de soudage extrĂȘmement modeste. Les sorties sur la carte n'Ă©taient pas conçues pour ĂȘtre soudĂ©es aux fils et Ă©taient faciles Ă dĂ©tacher. Ce sort est arrivĂ© Ă la seule alimentation VDD. Mais avec lâaide des efforts du voisin, il a Ă©tĂ© possible de souder le fil Ă la sortie du condensateur de la carte. Ensemble, les sorties GND, SWDIO, SWCLK et certaines autres sorties GPIO ont Ă©tĂ© soudĂ©es. Le rĂ©sultat est quelque chose d'apparence similaire Ă Frankenstein:
Nous allons dĂ©boguer et flasher notre appareil en utilisant ST-Link V2. Le schĂ©ma de connexion est extrĂȘmement simple et logique:
ST-Link V2 | nrf51822 |
---|
3,3 V | Vdd |
GND | GND |
SWDIO | SWDIO |
SWDCLK | SCLK |
Contrairement Ă Frankenstein, une seule dĂ©charge de courant n'Ă©tait pas suffisante pour relancer ce module. Tout d'abord, j'ai essayĂ© de lire la mĂ©moire nrf51822 en utilisant l' utilitaire STM32 ST-LINK . Avec quelques mises en garde, cela fonctionnait avec les cartes STM32, mais pas avec nrf. Sur ce point, mon travail avec le conseil d'administration s'est temporairement arrĂȘtĂ©. Un peu plus tard, j'ai trouvĂ© l' article 1 et l' article 2 sur l'utilisation du nrf51822. Il contenait des liens vers le SDK et une description dĂ©taillĂ©e de l'organisation de la mĂ©moire nrf. L'auteur des articles a utilisĂ© le dĂ©bogueur JLink plus cher, contrairement Ă nous. Les solutions bon marchĂ© sont trĂšs importantes si vous ĂȘtes un Ă©tudiant pauvre :).
SDK d'apprentissage
Si vous souhaitez utiliser la fonctionnalité Bluetooth, ce qui est assez logique pour une puce bluetooth, vous devrez mettre le "softdevice" au début de la mémoire programmable nrf5. Il se présente sous la forme d'un firmware et contient des fonctionnalités Bluetooth. Le reste de la mémoire est écrit dans votre firmware. à partir de là , vous pouvez appeler les procédures du softdevice pour configurer le bluetooth.
Il existe plusieurs pĂ©riphĂ©riques logiciels diffĂ©rents. Pour nrf51, vous pouvez utiliser s110 (pour les applications serveur) et s130 (pour les applications serveur et client). Pour comprendre la compatibilitĂ© des versions du SDK et du softdevice, il existe une matrice de compatibilitĂ© . On peut voir que les SDK jusqu'Ă la version 12.3.0 conviennent Ă notre carte. Mais nous nous arrĂȘterons sur le SDK 10.0.0 depuis Il prend en charge s110 et s130.
Configurer OpenOCD
Dans les exemples du SDK et dans les articles, l'utilitaire nrfjprog est utilisé pour le firmware via JLink, et nous devons flasher via ST-Link V2. Au lieu de cela, nous utiliserons le programme OpenOCD , téléchargeable pour Windows . Il vous permet de flasher et de déboguer tuevu huchu un grand nombre de cartes et de microcircuits différents. Il existe une configuration pour la puce nrf51. Pour forcer OpenOCD à flasher notre carte, il est nécessaire d'exécuter la commande du format présenté ci-dessous (aprÚs avoir ajouté le dossier OpenOCD / bin à Path). Vous pouvez en savoir plus sur les commandes OpenOCD dans la documentation .
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
Le diable, comme toujours, est dans les détails:
- "reset halt" envoie une commande de rĂ©initialisation de la puce et arrĂȘte l'appareil. Dans cet Ă©tat, le firmware peut ĂȘtre effacĂ© / Ă©crit
- "nrf51 mass_erase 0" permet d'écrire dans la section bootloader et efface toute la mémoire programmable du microcircuit (cela aidera à éviter une erreur de téléchargement du firmware dans certains cas)
- au lieu de <PATH_TO_HEX>, vous devez remplacer le chemin d'accĂšs au fichier hex
- <OFFSET> définit le décalage de l'adresse d'écriture du firmware. Ce paramÚtre est utile si vous souhaitez flasher votre firmware séparément de softdevice. Si vous souhaitez écrire le firmware à partir du début de la mémoire (à partir de l'adresse 0x0), vous pouvez ignorer ce paramÚtre
- reset réinitialise la puce pour qu'elle fonctionne avec le nouveau firmware
Le SDK comprend des fichiers hexadécimaux pour le périphérique logiciel. Pour remplir s130 sur la carte, vous pouvez utiliser la séquence de commandes suivante:
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
Ensuite, vous pouvez tĂ©lĂ©charger notre firmware. Il est important que vous supprimiez le "nrf51 mass_erase 0" afin que le softdevice n'efface pas. Et n'oubliez pas non plus le dĂ©calage. Pour s130, le dĂ©calage est 0x1c000 et pour s110, il est 0x18000. Ces valeurs peuvent ĂȘtre trouvĂ©es dans les spĂ©cifications pour s130 et 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
Maintenant, dans la mémoire du programme nrf51822 devrait se trouver le firmware du softdevice et le nÎtre. Pour les tests, j'ai utilisé un exemple du dossier <nRF5_SDK> / examples / ble_peripheral / ble_app_beacon et une application Android appelée "nRF Connect". AprÚs avoir exécuté les commandes, j'ai commencé à voir un périphérique appelé nRF. C'est ce que nous recherchions.
Mise en place d'un projet CLion
Le SDK nrf51 contient des exemples basĂ©s sur des makefiles. Pour travailler avec CLion, il est nĂ©cessaire de dĂ©crire l'assembly du projet Ă l'aide des fichiers CMake. Google a montrĂ© que le projet CMake pour nrf51 est dĂ©jĂ sur le github. Il a Ă©tĂ© Ă©crit pour ĂȘtre utilisĂ© avec le SDK 12.XX. Pour cette raison, certains chemins de fichiers pour notre SDK 10.0.0 se sont rĂ©vĂ©lĂ©s incorrects. De plus, l'utilitaire nrfjprog est Ă©galement utilisĂ© dans le projet. Par consĂ©quent, j'ai dĂ» bricoler les paramĂštres du projet et réécrire les cibles du micrologiciel Ă l'aide d'OpenOCD. Le rĂ©sultat de mon travail se trouve sur le github . Le fichier Lisezmoi dĂ©crit les instructions de configuration d'un projet et de dĂ©bogage dans CLion.
PS
De nombreux détails techniques liés aux fonctionnalités du nrf51822 ont échappé à mon récit. J'espÚre qu'un jour je comblerai les lacunes en ajoutant un article ou en écrivant un nouveau.