Travailler avec nRF51822 en utilisant ST-Link et Clion + OpenOCD

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.


yj-14015-nrf51822

yj-14015-nrf51822


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:


Planche soudée

Planche soudée


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 V2nrf51822
3,3 VVdd
GNDGND
SWDIOSWDIO
SWDCLKSCLK

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.

Source: https://habr.com/ru/post/fr439148/


All Articles