Ehko blog

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

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.

jeudi, septembre 7 2017

DIABOLIGHTS rev A

Cela faisait un moment que je voulais me mettre à réaliser mes propres cartes électroniques. Ce ne sont pas les idées qui me manque mais juste que je n'avais jamais fait le pas, faute de temps et de motivation.

Je me suis donc lancé et j'ai créé cette première carte : DIABOLIGHTS.

Cette carte est délibérément très simple et je l'ai réalisée comme une ouverture, une découverte à la fabrication d'une carte électronique. Le but était de finaliser le projet pour une fois. Car je suppose que vous êtes comme moi : toujours à commencer des trucs à droite à gauche mais jamais à les terminer :-). Et puis en réalisant une première version simple ça laissera de la place pour une révision B voir C.


Le concept

Je possède depuis quelques années deux diabolos Finesse de Mister Babache, et je souhaitais pouvoir les utiliser dans le noir avec un kit lumineux. J'avais le choix entre :

  • le kit de Mister Babache dont les avis sur internet semblait plutôt mitigés.
  • un kit lumineux universel pour diabolo qui se monte comme une rondelle supplémentaire sur l'axe du diabolo. Ces kits n'exploitent donc pas le système de fixation des diabolos Finesse (deux écrous sont déjà montés dans les cônes intérieurs).
  • réaliser moi même mon kit lumineux (que ceux qui disent que c'est une mauvaise idée sortent).

Vous l'aurez donc devinez, cette carte est donc un kit lumineux pour diabolo Finesse.

Je n'ai pas choisi la simplicité la plus extrême, qui aurait consisté à seulement allumer quelques LEDs de chaque coté du diabolo mais j'ai décidé de faire clignoter les LEDs. Oui ce n'est pas beaucoup plus complexe mais j'ai déjà expliqué que c'était un projet simple pour débuter.


Le schéma

Pour faire clignoter des LEDs il suffit de réaliser un oscillateur. Et un exemple simple dans lequel peuvent s'insérer facilement des LEDs est le Multivibrateur. En ajoutant une LEDs sur chaque branche, on se retrouve avec deux LEDs qui clignotent inversement l'une par rapport à l'autre.

DIABOLIGHTS-A_schema.png

Pour les piles, mon choix s'est tourné vers les CR2032 car elles sont courantes et donc il est facile de s'en procurer et elles ne sont pas chères. Et comme je ne voulais pas me limiter sur le choix de la couleur des LEDs, une seule de ces piles ne suffisait pas car elles ont une tension de 3V, tension supérieur à la tension directe de bon nombre de LEDs. Par exemple, les LEDs bleues, vertes et blanches ont une tension directe d'environ 3.2V.


Nomenclature

Le schéma étant très simple et robuste, la tolérance des composants n'a que peu d'importance. J'ai donc pris les éléments que j'avais sous la main.

Pour les transistors NPN j'ai pris les premiers que j'ai trouvé. Ceux-ci m'ont été fournis par mon entreprise.

Les piles CR2032, les LEDs et les DIPSwitch ont été achetés sur Aliexpress. Et les supports de pile CR2032 sont des 712-BAT-HLD-001, achetés chez Mouser.


Le PCB

Design

La contrainte principale d'un kit pour diabolo est l'équilibre et donc la répartition du poids. J'ai donc cherché à symétriser un maximum la carte autour de son point central.

DIABOLIGHTS-A_PCB.png

Le perçage central permet d'accéder aux écrous de l'axe central du diabolo même quand le kit est monté.

Achat

Pour le PCB j'ai avant tout cherché à minimiser le coût. Après quelques recherches rapides, j'ai fini par me tourner vers le site EasyEDA. Le service fonctionne très bien et permet d'avoir les PCB en environ deux semaines.

DIABOLIGHTS_PhotoPCB.jpg

La qualité des PCB reçus est plutôt bonne mais pas excellente. Le plus gros défaut, pour moi, vient de la mauvaise qualité de la colle entre le cuivre et l'époxy. Si la durée de chauffe d'une pastille s'éternise, ou après plusieurs soudure/dessoudure, celle-ci fini par ce décoller. Enfin beaucoup plus rapidement que sur d'autres PCB avec lesquels j'ai eu l'occasion de travailler. Cependant le rapport qualité/prix reste à mon avis très intéressant.


Résultat

Rien de mieux que quelques photos pour vous montrez le résultat final.

DIABOLIGHTS_Photo1.jpg

DIABOLIGHTS_Photo2.jpg

Les plus attentifs d'entre vous auront remarqués que les supports de pile sont inversés et décalés par rapport à leur empreinte. Et oui ! Comme cela devait arriver, j'ai réalisé une bonne boulette en designant cette carte (oui oui c'est possible sur une carte aussi simple !). J'ai sous-estimé l'effet de la force centrifuge qui s'exerce sur les piles. Après seulement une petite accélération, elles se retrouvent éjectées ! J'ai donc inversé le sens des connecteurs et j'ai dû les écartés au maximum pour que les piles puissent être insérées par le centre.

La seule réparation de cette erreur pourrait conduire à une nouvelle version. Mais ce serait oublier toutes les améliorations possibles. Si je réalise une seconde version, je pense mettre un microcontrôleur avec des LEDs RGB pour pouvoir réaliser des enchaînements lumineux personnalisables. Le paramétrage peut tout à fait être réalisé en flashant le microcontrôleur, par bluetooth ou par NFC. On peut également imaginer un capteur permettant de mesurer la vitesse de rotation et les à-coups tel qu'un lancé pour modifier la lumière en conséquence.

page 2 de 2 -