Bonjour, comment allez-vous?
Aujourd’hui je vais vous parler d’une carte que j’ai depuis trop longtemps dans mes cartons… Ce n’est pas un modèle courant, mais il a l’avantage d’être fabriqué par une entreprise française et aussi d’être complètement open-source. Son utilisation n’est pas à la porté du premier venu et il peut en décourager plus d’un au premier abord…
Introduction :
Comme il y a près de trois ans j’étais un « newbie » dans le monde de l’open-source et de l’électronique, j’ai dût attendre, apprendre et surtout beaucoup lire… Particulièrement dans un livre peu ragoûtant :
Alors oui c’est un livre de la série pour les nuls, je suis certain qu’il y a de meilleurs ouvrages sur le sujet… Mais il faut bien commencer quelque part…
Le PCB dont je vous parle est le Module GPIO Demo de Techno Innov : http://www.techno-innov.fr/technique-module-gpio-demo/
Le module possède un processeur ARM Cortex M0 qui répond au doux nom de : LPC1224FBD48, fabriqué par NPX. Tout les liens utiles se trouvent sur la fiche descriptive : http://techdata.techno-innov.fr/Modules/GPIO_Demo/System_Reference_Manual_Module_GPIO_Demo_v03.pdf
Je vais passer rapidement les détails techniques car toutes les informations sont dans la documentation… Toutefois, je peux vous dire rapidement ceci : on a accès à tout les protocoles SPI, I2C, UART et il y’a même un capteur de température intégré au PCB…
J’ai monté ma carte moi-même lors d’un atelier avec les dev. Ce n’est pas évident, mais on y arrive et c’est surtout gratifiant… Vous pouvez acheter le votre ici :
http://boutique.techno-innov.fr/
En fait cette plateforme me sert surtout à apprendre car elle permet le maniement de code de très bas niveau : le C… Comme toute la documentation est à disposition c’est parfait pour comprendre et apprendre les rudiments du code et le fonctionnement de ce genre de carte…
Surtout que la fabrication a été détaillé dans plusieurs numéros de Open Silicium N°7, 8 et 13 : http://boutique.ed-diamond.com/16-open-silicium et que d’autres articles sont en préparation, c’est pourquoi je ne parlerai pas de bootstrap, d’handlers, de table de vecteurs d’interruption et que je resterai généraliste… Le but de cet article étant plus de faciliter l’utilisation de ce module… 😳
Debian 7, Ubuntu 14 et GCC 4.7 pour compiler
Les personnes de Techno-Innov ne travaillent que sur Debian… Comme je trouvais personnellement Debian un peu rude alors que je débutais sur Linux, je me suis rabattu sur Ubuntu à l’époque…
Mais maintenant que je suis sur Debian et je ne changerai plus… Même si cela n’empêche pas de rentrer dans le débat entre systemd et launch.d…
On ouvre donc une fenêtre Terminal et on récupère donc le contenu du repo avec :
git clone http://gitclone.techno-innov.fr/modules
Si on essaie de faire un :
make
On tombe fatalement sur un erreur :
Car il y avait un petit problème, la chaine de compilation recommandée : gcc-4.7-arm-linux-gnueabi pour compiler le code arm par les dev ne fonctionnait pas sur Ubuntu… De plus sur Debian 7 gcc-4.7-arm-linux-gnueabi n’était même pas disponible sur les repos unstables…
Comme la technique pour installer le paquet nécessaire ne fonctionnait pas… J’ai donc recontacté les dev qui ont passé du temps à chercher une solution, mais rien à faire… Il faut dire qu’à cette époque et même encore maintenant trouver un bon compilateur croisé disponible facilement sur de nombreuses distributions et bien mis-à-jour n’est pas forcément évident à trouver…
Je commençais donc à me résigner à devoir dompter Debian mais dans une ultime recherche j’ai trouvé ce site magique : https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
On nous y indique comment faire fonctionner la chaîne de compilation gcc-arm-embedded contenant arm-none-eabi qui permet donc de compiler du code ARM sur Ubuntu 14 et supérieur. En fait, le problème tenait à peu de chose :
!!! If you are using Ubuntu 14.04 and later, please be careful because there are packages with same name but produced by Debian and inherited by Ubuntu. Simply follow the above 3 steps, you may end up with gcc-arm-none-eabi from Ubuntu. So to install gcc-arm-none-eabi from ARM, steps are: 1). sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi 2). sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded 3). sudo apt-get update 4). sudo apt-get install gcc-arm-none-eabi=4.8.4.2014q3-0trusty11 Meanwhile we are working with Debian to consolidate and unify this toolchain.
Ce qui signifie tout simplement que Ubuntu installait sa propre librairie venant de Debian 7 alias gcc-4.7 qui ne contenait pas gcc-arm-none-eabi… Pour compiler le code ARM il fallait simplement l’enlever pour mettre celle de ce site à la place…
Une fois cette opération faite tout allait bien… Enfin il faut maintenant faire une croix sur les mises-à-jour venant des repo officiels et il faut encore modifier le lien du compilateur dans le MakeFile du projet pour que la compilation ce lance :
Dans le MakeFile, transformez :
Qui donne une erreur toute de suite à la compilation :
Qui donne une compilation nickel :
La compilation est un succès mais après? Il faut penser à transferer le code dans notre micro. C’est ce que je vais expliquer dans le paragraphe suivant… Dernière petit astuce pour ce paragraphe, si vous recompilez le code après l’avoir modifié, pensez bien à faire un :
make clean
avant un nouveau :
make
sinon vos modifications ne seront pas prises en compte…
Comme le github est beaucoup alimenté et subit de nombreux remaniements en ce moment, il est important de faire des :
git pull
C’est aussi pourquoi, vous ne compilerez peut-être jamais le fichier mod_gpio.bin comme moi… Effectivement à l’heure où j’écris ces lignes, la compilation donne 7 fichiers *.bin en fonction de ce que l’on veut faire avec le module. En gros, ce sont un peu comme les fichiers exemples des Arduinos, qui permettent de voir les différentes fonctions mises à dispositions par la carte pour nous apprendre à jouer avec…
Debian 8, Ubuntu 15 et GCC 4.9 pour compiler
Sur la dernière mouture de Debian et de Ubuntu les paquets gcc-4.9 et gcc-arm-none-eabi sont passés dans les repos unstables ce qui facilite grandement la tâche… Tant que je suis dans les versions récentes, sachez que lpctools a été intégré à Jessie il vous suffira juste de faire un :
sudo apt-get install lpctools
La compilation marche alors automatiquement, surtout que le repo de Techno-innov a été mis-à-jour entre temps facilitant d’autant plus le processus. Donc mon énorme paragraphe précédent est quasiment inutile surtout que Jeezy est stable maintenant…
Le Transfert
Vous l’aurez sûrement remarqué si vous n’êtes pas sur les dernières versions de Debian ou Ubuntu il n’est pas facile de compiler. J’ai perdu pas mal de temps pour arriver à compiler le code nécessaire pour le fonctionnement de la PCB à l’époque… Mais je n’ai pas du tout expliqué comment transférer le code sur le PCB, et c’est bien normal, car il faut un programme spécifique : lpctools .
Là par contre, aucun problème pour compiler le programme sur Ubuntu, comme sur Debian peut importe la version… Mais si vous êtes passés à Jessie je vous conseille de passer par apt-get… Comme le décrit la documentation, il m’a suffit de cloner le repo :
git clone http://gitclone.techno-innov.fr/lpctools
et de compiler avec :
make
Comment ce sert-on de lpctools? C’est assez simple en réalité… Une fois le module GPIO connecté, vérifiez qu’il est bien reconnu en ouvrant une fenêtre Terminal et en tapant :
lsusb
Si sur une des lignes apparaît la même chose que moi pour le Bus 2 et le Device 0008 c’est que votre module est bien reconnu et fonctionne :
Il est maintenant temps d’envoyer le code que l’on a compilé plus haut pour notre module… Avant de vouloir envoyer le code ou même lire l’id de la puce, il faut mettre le processeur en mode de programmation. Pour cela :
- Appuyez sur les boutons Reset & ISP en même temps puis relâchez le bouton Reset, et enfin relâchez le bouton ISP.
Puis envoyez la commande suivante pour lire l’id du MCU:
sudo lpcprog -d /dev/ttyUSB0 -c id
Lorsque que vous soudez des composants si petits à la plancha pour la première fois et que vous galérez autant pour arriver à compiler le code, voir le processeur répondre ces quelques lignes est déjà une victoire en soit…
Par contre, si vous n’êtes pas en mode de programmation, vous rencontrerez une erreur :
Si maintenant vous voulez envoyez votre code il faut utiliser :
sudo lpcprog -d /dev/ttyUSB0 -c flash /mod_gpio.bin
Si vous avez comme moi déplacé le *.bin que vous avez compilé de votre dossier de travail. Pour moi du dossier /mod_gpio_demo au dossier /lpctools grâce à la commande mv. Sinon il faut mettre le chemin absolu du fichier :
/home/user/mod_gpio_demo/mod_gpio.bin
Où User est à remplacer en fonction de votre ordinateur… Il ne reste alors plus qu’à appuyer sur le bouton Reset pour redémarrer le PCB et voir le code à l’oeuvre… Et là Magie, le code de base vous montre l’équivalent du « hello word » ou du blink sur Arduino.
Un petit exemple :
Si on veut allez un peu plus loin et s’amuser sans rien brancher sur le module. On peut fabriquer un mini thermomètre car il intégre un capteur de température…
J’ai pris le code de i2c_temp, je l’ai dupliqué et renommé dans le dossier apps en thermomètre. J’ai forké le dépôt de Techno-Innov et intégré mon application dedans sur mon Github afin de vous faciliter la vie. Vous pouvez donc :
- Envoyer directement le *.bin avec lpctools sur votre module
- Ouvrir le fichier main.c, le lire, le modifier et le recompiler
https://github.com/Anderson69s/LPC_Techno_Innov_Demo
Enfin j’ai parcouru la documentation ainsi que les libraries pour comprendre comment la double led intégrée était commandée. En insérant quelques lignes de code au bon endroit, j’ai maintenant un petit PCB que je peux connecter sur n’importe quel port USB qui m’indique avec deux leds la température de façon lumineuse… Si le module est branché sur un port USB qui permet la communication je peux sur OS X ou Linux lire plus précisemment la température dans une fenêtre serial grâce à la commande :
screen /dev/ttyUSB0 115200
Oui je sais c’est inutile mais je trouve cela bien marrant… Surtout qu’il ne m’a fallut que « peu de temps » pour arriver à réaliser cela… C’est vrai quoi de plus marrant que de lire des librairies entières à la recherche de la commande qui va bien pour arriver à faire ce qu’on veut?
@Bientôt Anders

