Ehko blog

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, novembre 17 2017

Une étagère à épice à base de cagettes

Je viens de me fabriquer une petite étagère à épices. J'en avais marre de ne pas trouver le bon pot dans le placard où elles étaient rangées en vrac. Et je ne parle même pas de tous les pots qui encombraient le plan de travail et qui grignotaient progressivement sur la place disponible.

Alors voici le résultat :

etagere-epice_remplie.jpg

Pour la réalisée, voici ce que j'ai utilisé :

  • 2 cagettes
  • de la colle à bois
  • des clous
  • du vernis

Et pour les outils, voici ce qui m'a été nécessaire :

  • une tenaille ou une pince pour enlever les agrafes des cagettes
  • un tournevis plat, très pratique pour commencer à soulever les agrafes
  • une scie à bois
  • une lime pour peaufiner les découpes
  • un marteau

Et pour terminer, je vous mets quelques photos de l'étagère seule pour servir d'inspiration à tous les motivés. etagere-epice_face.jpgetagere-epice_arriere.jpg

lundi, novembre 13 2017

Réparation d'une Gameboy Advance

Un amis m'a passé son ancienne Gameboy Advance qui ne fonctionne plus afin que je la répare. Symptôme clair et simple : la console ne s'allume plus. Voici une photo de la bête : gba.jpg

J'ai commencé par mettre des piles dans la console avec pour objectif de vérifier par moi même le problème. Bien m'en a pris car en poussant le bouton on/off, rien ne s'est passé... mais j'ai pu voir la LED d'indication d'alimentation s'allumer durant un très bref instant. Suffisamment pour supposer la source de la panne : un faux-contact de l'interrupteur d'alimentation.

Tournevis en main, j'ai démonté la Gameboy pour vérifier mon hypothèse.

La console est fermée par six vis étoiles à trois branches et une vis cruciforme. Je savais bien que ce kit d'embouts de sécurité me servirait un jour !

gba_ouverte.jpg

J'ai commencé par reprendre les soudures du connecteur (en bas à droite sur la photo) et refaire un essai. Et le résultat : pas de grand changement. J'arrive maintenant à trouver une position de l'interrupteur où la console reste allumée mais ce n'est absolument pas pratique.

Ce genre d'interrupteur "glissant" est composé de deux lamelles de métal horizontales qui font contact lorsque l'interrupteur est en position "ON". J'ai cherché à augmenter ce contact qui semblait ne pas se faire correctement en insérant un élément dessous le cadre métallique de l'interrupteur. N'ayant rien de très fin sous la main (et non conducteur !), j'ai pris un bout de papier. Je l'ai découpé à la bonne taille et inséré en m'aidant d'un tournevis plat.

Voilà le résultat : gba_interrupteur.jpg

Résultat : ça fonctionne à peu près. Il est facile d'allumer la console maintenant mais il existe encore une position où le contact ne se fait pas correctement. Et je ne sais pas combien de temps cette réparation de fortune va tenir.

J'ai donc préféré commander la pièce pour faire le changement. J'en profiterai pour changer les boutons au passage car il faut appuyer comme un forcené pour pouvoir encore jouer. Je vous détaillerai la suite quand j'aurai reçu les pièces ;)

vendredi, novembre 3 2017

Programmer un STM32

Je fais un petit retour d'expérience sur la programmation des microcontrôleurs STM32 de STMicroelectronics. Sait-on jamais, cela serra peut être utile à quelqu'un.

J'ai réalisé toutes les manipulations sur une carte intégrant un STM32F103C8T6. La carte est communément appelée Bluepill sur internet et coûte environ 2$. Pour connaitre les détails de cette carte, vous pouvez jeter un œil sur le wiki de STM32Duino.

Je n'ai utilisé que deux debugger différents :

Pour chaque nouvel environnement de développement, j'ai vérifier le fonctionnement de ces deux debugger.


System Workbench for STM32

ac6_logo.png

J'ai d'abord commencé par utiliser l'environnement System Worbench for STM32 parce qu'il est gratuit et donné comme étant simple et rapide à mettre en œuvre. Ce dernier est basé sur eclipse (ceci est important pour la suite).

Sous windows, je n'ai eu aucun problème pour l'utiliser. Le logiciel STM32CubeMX est directement compatible avec cet environnement. L'utilisation d'un ST-Link (clone ou non) avec est immédiate et vous pouvez commencer à programmer rapidement.

Pour faire fonctionner un debugger J-Link, il faudra installer GNU MCU Eclipse. Pour ma part, l'installation depuis le Marketplace Eclipse ne fonctionnait pas et j'ai du effectué une installation manuelle en suivant les instructions de la page d'installation.

Mon système d'exploitation principal étant ArchLinux, j'ai essayer d'y installer cet environnement. Il existe un paquet AUR nommé SW4STM32 mais son mainteneur ne semble pas le mettre à jour souvent. Cependant le principal problème que j'ai eu sous ArchLinux est la mauvaise compatibilité du logiciel avec l'OpenJDK 8, la dernière implémentation Open Source de Java SE. Le logiciel est lent et il devient impossible de s'en servir correctement.

Je n'ai pas trouvé de solution pour résoudre ce problème et j'ai donc abandonné cette solution.


Eclipse + GNU MCU Eclipse plug-ins

eclipse-oxygen-september-2017+gnu-mcu-eclipse_logos.png

System Workbench for STM32 est basé sur Eclipse et il est nécessaire d'installer le plug-in GNU MCU Eclipse pour faire fonctionner le debugger J-Link, alors pourquoi ne pas partir sur un Eclipse non modifié ? C'est que j'ai essayer ensuite.

Après avoir installé Eclipse et les plug-ins GNU MCU Eclipse depuis le marketplace (ça a fonctionné cette fois), j'ai pu programmer et debugger ma carte. Pour faire fonctionner le ST-LINK il faut juste faire un fichier de configuration OpenOCD, ce qui m'a pris pas mal de temps. Mais pour le J-Link tout fonctionne directement.

Dans le cas de cet environnement de programmation, il faut choisir l'option Makefile lors de la génération du code avec STM32CubeMX. Et le projet peut ensuite être importé dans Eclipse en tant que projet Makefile.

J'ai utilisé cet environnement pendant un bon moment avant qu'une mise à jour d'Eclipse casse la compatibilité avec GNU MCU Eclipse. J'avais également beaucoup de mal avec Eclipse notamment sur le fait que toutes les configurations se font dans des menus disséminés un peu partout. Ce qui me semblait difficilement compatible avec l'utilisation d'un Makefile et me rendait fou au moindre problème de compilation non dépendant de mon code.


QT Creator + Bare Metal Plug-in

Qt_Creator_Icon.png

Après un petit temps de recherche sur internet, j'ai vu qu'il était possible d'utiliser QT Creator pour programmer des microcontrôleur ARM. Ayant déjà utiliser cet environnement pour écrire des programmes et ayant été conquis par sa simplicité, je partais plutôt confiant. Et je n'ai pas été déçu.

Pour l'installation et la configuration du logiciel, il suffit de suivre les instructions données sur cette page Github (en anglais). Le debug des microcontroleurs se fait au travers de OpenOCD, quel que soit le debugger et de même que pour Eclipse, la compilation se fait au moyen des fichiers Makefiles.

Ce que j'aime avec cette solution, c'est sa simplicité et sa clarté. Toute la configuration se fait dans le fichier .config du projet QTCreator et dans le Makefile. Il faut juste un peu d’entraînement pour savoir lire et modifier les Makefiles mais une fois assimilé quelques bases tout est clair et regroupé au même endroit. Et pas besoin de cases à cocher, de menus et d'onglets dans tous les sens.

J'utilise maintenant QTCreator pour programmer mes cartes STM32 et j'en suis satisfait. Je ne compte pas revenir à Eclipse mais je ne suis jamais contre essayer un autre environnement si vous en avez un à proposer. Alors qu'est ce que vous utilisez de votre côté ?

Edit du 07/05/2018 : Avec QTCreator, il n'est pour le moment pas possible d'avoir une vue des registres des périphériques. Je suis cependant tombé sur ce logiciel qui se connecte à l'instance d'OpenOCD en cours et affiche l'état des registres, pour peu d'avoir le bon fichier de description .svd. A tester !

Ajouter une trace SWO/ITM sur un STM32

J'ai acquis il y a quelques temps une carte de développement STM32 "BluePill" intégrant un STM32F103C8T6. Elle coûte environ 2$ et embarque un microcontrôleur tournant à 72MHz. Vous trouverez plus de détail sur cette carte sur le wiki de STM32Duino.

Pour le développement embarqué, il est pratique d'avoir une sortie série sur sa carte pour debugger plus facilement. On peut utiliser pour cela un port série du microcontrôleur et dialoguer avec l'ordinateur au travers d'un convertisseur USB-Série. Mais il est également possible d'utiliser directement le debugger comme interface pour obtenir cette trace. J'utilise personnellement cette dernière solution quand elle est disponible car cela ne nécessite pas de matériel supplémentaire.

La trace que j'ai implémenté possède les caractéristiques suivantes :

  • trace ITM utilisant la pin SWO
  • support de commandes type printf()

Une trace ITM ne nécessite pas d'intervention du debugger, au contraire d'un trace Semihosting qui est très intrusive. Elle est cependant plus lente.

Software embarqué

La partie logiciel permettant de faire fonctionner la trace vient du projet µOS++. Je n'ai fait que récupérer les sources pour les utiliser. Vous trouverez les trois fichiers sources nécessaires en annexe de ce billet (trace_impl.c, Trace.h et Trace.c).

Les préambule de compilation suivants sont nécessaires pour faire fonctionner la trace et la configurer pour le bon mode :

#define TRACE
#define OS_USE_TRACE_ITM
#define \\__ARM_ARCH_7M\\__

Il vous suffit ensuite d'utiliser les fonctions qui sont définies dans le fichier Trace.h :

  • trace_printf(const char* format, ...) dont le fonctionnement est analogue à la fonction printf() standard
  • trace_puts(const char *s) pour afficher une chaîne de caractère seule
  • trace_putchar(int c) pour afficher un caractère seul


Debugger

Pour tous les debugger, il est nécessaire de connecter la pin SWO du microcontrôleur à celle du debugger. Pour le STM32F103C8T6, il s'agit de la pin PB3.

J-Link

Sous Eclipse ou sous System Workbench pour STM32, la trace est facilement utilisable. Il suffit d'installer et d'utiliser le plug-in J-Link de ARM MCU Eclipse, puis de cocher la case "Enable SWO" dans les options du debugger. N'oubliez pas de renseigner la fréquence de fonctionnement du CPU et de la trace (2MHz pour la BluePill). Dans le cas contraire, la trace fonctionnera seulement lors d'un debug avec flash du programme et non lors d'un "attach to runing target".

Vous vous retrouvez ainsi avec une trace intégrée à Eclipse avec une console dédiée.

Je n'ai pas essayer de faire fonctionner la trace avec le J-Link et avec OpenOCD. Mais je présume que les informations indiquées dans la section "Trace avec OpenOCD" sont valables.

ST-Link

La trace avec le ST-Link peut être visualisée à l'aide du logiciel ST-Link Utility. L'inconvénient est qu'il n'est pas possible de debugger la carte tout en utilisant ce logiciel.

Tous les environnements de développement que j'ai utilisé pour le STM32 repose sur l'utilisation de OpenOCD pour faire fonctionner le debugger ST-Link. Vous pouvez donc suivre les indications de la section "Trace avec OpenOCD" pour avoir une trace tout en debuggant.

ST-Link Clone

Les clones du ST-Link n'ont pas de pin SWO par defaut. Il convient donc de modifier le clone pour ajouter cette fonctionnalité. Les indications peuvent être trouvées sur le billet suivante : Ajouter une fonctionnalité de trace aux clones du ST-Link.

Pour l'utilisation de la trace, toutes les indications données dans la sous-section ST-Link s'appliquent aux clones du ST-Link.


Trace avec OpenOCD

OpenOCD permet d'utiliser la trace sur les STM32 au moyen de la commande tpiu config. Il suffit donc de l'ajouter avec les bons paramètres dans votre fichier de configuration OpenOCD. Dans mon cas, voici le résultat :

tpiu config internal /home/user/Documents/traceswo.log uart off 72000000 2000000

Et l'explication de cette commande :

  • internal /home/user/Documents/traceswo.log : la trace est enregistrée dans le fichier local traceswo.log.
  • uart : utilisation de l'encodage UART 8N1.
  • off : désactivation du formatteur. J'avoue ne pas savoir de quoi il retourne mais la documentation indique de l'activer seulement si la trace est utilisé à la fois en ITM et ETM. Ce qui n'est pas mon cas.
  • 72000000 : fréquence d'horloge du microcontrôleur embarqué sur ma carte.
  • 2000000 : fréquence de la trace.

Pour plus d'information sur l'utilisation de cette commande OpenOCD, vous pouvez vous référer à la documentation. J'ai également ajouter à ce billet de blog mon fichier de configuration OpenOCD sous le nom de sparkcore.cfg.

Si vous essayer de lire le contenu du fichier généré par la trace OpenOCD, vous allez vite vous rendre compte que le contenu est illisible à cause des codes ASCII de fin de transmission ajoutés après chaque caractère. Heureusement j'ai trouvé un petit logiciel qui a été écrit pour filtrer tout ça et avoir une trace lisible :ARM SWO trace data listener/parser (linux et OSX seulement). Une fois compilé, vous avez plus qu'à lancer le programme depuis une console avec comme paramètre le fichier dans lequel OpenOCD enregistre la trace. Et l'option -t permet de voir seulement les nouvelles données avec un mode suivit, parfait pour debugger en direct !

lundi, septembre 11 2017

Ajouter une fonctionnalité de trace aux clones du ST-Link

Ce billet reprends une bonne part du contenu du billet anglophone suivant : Adding Trace support to ST-Link clones.


The ST-Link Clone

Pour environ 2$ vous pouvez obtenir un clone du ST-Link v2 dans un boitier aluminium et quelques fils de connexion. Cependant ces clones ne possèdent pas de pin de trace (la fameuse pin SWO).

Lujji a effectué quelques recherches sur ces dongles. Il s'avère que ceux-ci sont directement compatibles avec le logiciel ST-Link Utility. Ils utilisent donc le firmware officiel de ST pour les ST-Link v2 et supportent les fonctionnalités de trace.

Sur ces clones, la pin de trace (PA10) est donc bien présente mais n'est pas reliée au connecteur. C'est ce que nous allons changer.

st-link-v2_schematic.png


Modifications

Pour ajouter la trace à la place du 5V sur le connecteur, il faut couper la piste de 5V juste après le via et souder un fil entre le connecteur et la pin PA10 (pin 31) du microcontrôleur. Il est conseillé d'ajouter une résistance (22Ω pour l'exemple) pour filtrer le signal et éviter de griller le microcontrôleur en cas de problème.

Vous pouvez également utiliser la pin SWIM sur le connecteur si vous ne comptez pas debugger un STM8 un jour. Dans ce cas, pas besoin de couper de piste : dessoudez juste la résistance. Cependant la patte 5V est plus facile à atteindre.

clone-st-link-v2_modifications.jpg

Avec cette modification, le dongle devient bien plus pratique à utiliser.

- page 3 de 4 -