Lors du dernier meeting HZV, Mandarine a présenté le TI Launchpad, un circuit d'expérimentation réalisé par TI et basé sur un micro-contrôleur MSP430. J'avais auparavant entendu parler d'Arduino, et même eu dans les mains un Arduino prêté par l'ami Tixlegeek, mais j'hésitais à en acheter un. Et je dois avouer que le MSP430 m'a fait craquer.
Arduino vs. TI Launchpad
Lorsque Mandarine a présenté le TI Launchpad, je m'attendais à quelque chose d'un peu roots, et je n'ai pas été déçu. Contrairement à l'Arduino, le Launchpad ne possède aucun module d'extension officiel (ce qu'on nomme shields chez Arduino), et il faut donc tout concevoir. Cette approche me plaît plus qu'avec Arduino, car cela nécessite une documentation et un effort de la part de celui qui veut concevoir un circuit basé sur un MSP430. Mais c'est vrai que cela peut faire peur. Toutefois, mis à part cet aspect rustique de la board de TI, plusieurs éléments m'ont séduit.
Le premier d'entre eux est l'existence de plusieurs packages Debian et Ubuntu offrant la possibilité de développer en C et même en C++ sur MSP430, en s'affranchissant royalement d'une surcouche, contrairement à Arduino où il faut employer l'IDE Arduino et la couche Arduino, qui n'améliore pas les performances. Ces outils sont opensource, et dérivés des outils standards GNU comme binutils et gcc. J'aime.
Second point, le prix. C'est idiot, mais à 4 dollars et 30 cents le TI Launchpad, cela vaut vraiment le coup. Sans compter qu'un MSP430 de rechange est fourni (si vous grillez celui installé sur la board), ainsi que des contacteurs et un micro-quartz que l'on peut souder pour améliorer la stabilité de l'horloge. Et un cordon USB. Pour seulement un peu plus de 4 dollars. Comparé aux 20 et quelques euros réclamés pour un Arduino UNO, c'est très intéressant.
J'ai donc décidé d'en commander deux, pour voir exactement ce que c"est et comment cela pourrait me servir dans mes projets hardware. Et je viens de les recevoir.
Unboxing du TI Launchpad
Je dois avouer que tout cela est très bien packagé: une belle boîte (quoique, dans mon cas recouvertes d'étiquettes en tout genre), une présentation soignée, et des stickers de surcroît !
Installation de la toolchain
La toolchain est en réalité un ensemble d'outils permettant de développer et compiler des programmes pour le MSP430 du Launchpad. Heureusement, plusieurs paquets existent pour les distributions Debian et Ubuntu:
msp430-gcc msp430-libc mspdebug
Mais en réalité, ces paquets ne sont disponibles que sur Ubuntu 10.10 ou Debian sid (testing). Or ma distribution de choix est Squeeze (Debian 6.0), et ces paquets ne sont pas compatibles. J'ai bien essayé de les installer à la barbare, mais rien n'y fait. Pas le choix donc que de trouver une solution alternative: la compilation from scratch.
Pour les heureux possesseurs d'une Debian Squeeze qui souhaiteraient comme moi tester le Launchpad de TI et son MSP430, je vous livre dans les lignes suivantes la technique pour installer proprement et correctement la toolchain, testé et approuvé.
L'outil msp430-gcc est en réalité une version modifiée du célèbre compilateur GNU GCC, et un projet créé par des adorateurs ultimes du MSP430 a été créé de manière à fournir aux libristes un moyen de créer cette toolchain: j'ai nommé le projet mspgcc. Ce projet contient un ensemble de patches à appliquer à des versions publiées et stables d'outils GNU (comme binutils et gcc) afin d'obtenir des binaires permettant de compiler des programmes pour MSP430.
Avant toute chose, il faut passer root sur sa machine, et créer un dossier dédié à la construction de la toolchain:
$ su - # mkdir msp430 # cd msp430
On s'assure ensuite d'avoir tous les paquets nécessaires à la compilation:
msp430:/# apt-get install libmpfr-dev libncurses5-dev zlibc zlib1g-dev libx11-dev libusb-dev libreadline6-dev libgmp3-dev libmpc-dev make
Ensuite, on récupère la version LTS (Long-Term Support) de mspgcc :
msp430/:# wget -O mspgcc.tar.bz2 http://downloads.sourceforge.net/project/mspgcc/mspgcc/mspgcc-20120406.tar.bz2?r=&ts=1359415411&use_mirror=ignum msp430/:# tar xvjf mspgcc.tar.bz2 msp430/:# mv mspgcc-20120406 mspgcc msp430/:# cd mspgcc msp430/mspgcc/:#
On jette un oeil aux versions des logiciels requis pour les patches:
msp430/mspgcc/:# ls -Al drwxr-sr-x 2 root root 4096 6 avril 2012 docs drwxr-sr-x 4 root root 4096 6 avril 2012 htdocs -rw-r--r-- 1 root root 342378 6 avril 2012 msp430-binutils-2.21.1a-20120406.patch -rw-r--r-- 1 root root 390548 6 avril 2012 msp430-gcc-4.6.3-20120406.patch -rw-r--r-- 1 root root 382048 6 avril 2012 msp430-gdb-7.2a-20111205.patch -rw-r--r-- 1 root root 9 6 avril 2012 msp430-libc.version -rw-r--r-- 1 root root 9 6 avril 2012 msp430mcu.version -rw-r--r-- 1 root root 2955 6 avril 2012 README -rw-r--r-- 1 root root 52679 6 avril 2012 RELEASES.TXT
Cette version de mspgcc se base sur la version 2.21.1a de binutils, la version 4.6.3 de gcc et la version 7.2a de gdb. On télécharge ces logiciels sous forme d'archive de code source dans le dossier courant:
msp430/mspgcc/:# wget ftp://ftp.gnu.org/pub/gnu/binutils/binutils-2.21.1a.tar.bz2 msp430/mspgcc/:# wget ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.3/gcc-4.6.3.tar.bz2 msp430/mspgcc/:# wget ftp://ftp.gnu.org/pub/gnu/gdb/gdb-7.2a.tar.bz2
Et on les décompresse dans le dossier courant:
msp430/mspgcc/:# tar xvjf binutils-2.21.1a.tar.bz2 msp430/mspgcc/:# tar xvjf gcc-4.6.3.tar.bz2 msp430/mspgcc/:# tar xvjf gdb-7.2a.tar.bz2
On applique ensuite les patches du projet mspgcc. Attention, cette étape est cruciale, si vous l'oubliez la suite ne fonctionnera pas !
msp430/mspgcc/:# cd binutils-2.21.1 msp430/mspgcc/binutils-2.21.1/:# patch -p1 < ../msp430-binutils-2.21.1a-20120406.patch msp430/mspgcc/:# cd ../gcc-4.6.3/ msp430/mspgcc/gcc-4.6.3/:# patch -p1 < ../msp430-gcc-4.6.3-20120406.patch msp430/mspgcc/:# cd ../gdb-7.2/ msp430/mspgcc/gdb-7.2/:# patch -p1 < ../msp430-gdb-7.2a-20111205.patch msp430/mspgcc/gdb-7.2/:# cd ..
Avant de commencer à construire la toolchain, il faut au préalable créer un dossier de destination dans lequel on installera les binaires. J'ai opté pour /opt/msp430, mais libre à vous de choisir le nom et l'emplacement qui vous plaît.
msp430/mspgcc/:# mkdir /opt/msp430 msp430/mspgcc/:# export BUILD=/opt/msp430
On configure et on compile les binutils:
msp430/mspgcc/:# cd binutils-2.21.1 msp430/mspgcc/binutils-2.21.1/:# ./configure --target=msp430 --prefix=$BUILD msp430/mspgcc/binutils-2.21.1/:# make && make install msp430/mspgcc/binutils-2.21.1/:# cd ..
On configure et on compile gcc:
msp430/mspgcc/:# cd gcc-4.6.3 msp430/mspgcc/gcc-4.6.3/:# mkdir gcc-build msp430/mspgcc/gcc-4.6.3/gcc-build/:# ../configure --target=msp430 --enable-languages=c,c++ --prefix=$BUILD msp430/mspgcc/gcc-4.6.3/gcc-build/:# make && make install
Et pour terminer, on configure et on compile gdb:
msp430/mspgcc/:# cd gdb-7.2 msp430/mspgcc/gdb-7.2/:# ../configure --target=msp430 --prefix=$BUILD msp430/mspgcc/gdb-7.2/:# make && make install
Les outils de compilation ont été installés dans le dossier /opt/msp430 (ou celui que vous avez paramétré). Il ne reste plus qu'à installer la libc compilée pour le MSP430 et les entêtes. Pour cela, il faut récupérer sur le site du projet les fichiers suivants:
msp430mcu-20120716.tar.bz2 msp430-libc-20120716.tar.bz2
La compilation de la libc nécessite que le binaire msp430-gcc, produit lors de la compilation de gcc pour msp430, soit accessible dans le PATH:
msp430/:# export PATH=$*PATH*:$BUILD/bin
On peut ensuite décompresser la libc, la configurer, la compiler et l'installer:
msp430/:# tar xvjf msp430-libc-20120716.tar.bz2 msp430/:# cd msp430-libc-20120716 msp430/msp430-libc-20120716/:# ./configure --prefix=$BUILD msp430/msp430-libc-20120716/:# cd src msp430/msp430-libc-20120716/src:# make && make install msp430/msp430-libc-20120716/src:# cd ../../
Et terminer par l'installation des entêtes de développement:
msp430/:# tar xvjf msp430mcu-20120716.tar.bz2 msp430/:# cd msp430mcu-20120716 msp430/msp430mcu-20120716/:# export MSP430MCU_ROOT=$(pwd) msp430/msp430mcu-20120716/:# scripts/install.sh $BUILD
Bon, voilà une bonne chose de faite ! On a installé gcc, gdb, la libc et les entêtes de développement. Nous allons aussi modifier le fichier /etc/profile pour qu'il prenne en compte nos binaires créés. Pour cela on l'édite, et on ajoute la ligne suivante à la fin du fichier:
export PATH=$*PATH*:/opt/msp430/bin
On recharge ensuite notre profil:
# source /etc/profile
Installation de mspdebug
Mspdebug est l'outil nécessaire pour programmer et déboguer le MSP430. Il s'agit encore une fois d'un projet opensource, que l'on va installer sur notre machine. Téléchargez la dernière version sur Sourceforge, puis installez-la:
msp430/:# tar xvzf mspdebug-0.21.tar.gz msp430/:# cd mspdebug-0.21/ msp430/mspdebug-0.21/:# ./configure && make && make install
Configuration d'UDEV
Afin que notre Launchpad soit détecté par USB, il faut s'assurer qu'une règle est bien présente dans la configuration d'UDEV. Si elle n'y est pas, il faut la créer:
# cat /etc/udev/rules.d/46-launchpad.rules ATTRS*idVendor*=='0451',ATTRS*idProduct*=='f432',MODE='0660',GROUP='plugdev'
Une fois cela effectué, vous pouvez vous amuser avec votre launchpad. Vous trouverez notamment un programme exemple sur Hack a Day, et la manière de programmer le MSP430 avec mspdebug. Je ferai certainement un prochain billet sur le développement sur Launchpad.
Bon, pour la route je vous donne mon Helloworld:
int main(void) {
/* disable watchdog */
WDTCTL = WDTPW + WDTHOLD;
P1DIR = BIT0|BIT6;
P1OUT = BIT6;
while(1) {
if ((P1IN & BIT3)==BIT3)
P1OUT = BIT6;
else
P1OUT = BIT0;
}
}
Et mon Makefile:
CC=msp430-gcc CFLAGS=-Os -Wall -g -mmcu=msp430g2231 OBJS=main.o all: $(OBJS) $(CC) $(CFLAGS) -o main.elf $(OBJS) %.o: %.c $(CC) $(CFLAGS) -c $< clean: rm -fr main.elf $(OBJS)
Conclusion
Le Launchpad de TI est tout à fait valable, car pas cher et quand même très bien fourni avec son MSP430. Certes, cela nécessite plus de travail qu'avec un Arduino, mais c'est un peu comme avec Linux, on a plus de contrôle sur le système et on peut donc en faire exactement ce que l'on veut. Une philosophie que j'apprécie tout particulièrement. Testez, découvrez, bidouillez avec le Launchpad de TI.
Last july stood the DefCon18 at Las Vegas and I was lucky enough to be there with three friends of mine. As we registered to this event (140 bucks), we got some stickers and a DefCon18 CD and a nice shiny badge which is in fact a real circuit board with a mini-usb port, some leds and a cool LCD display. I was asking myself if there were a way to hack this little badge in order to make it display everything we want to, but I spent my time reversing the firmware source code to unlock the Ninja Party feature of this badge (I coded a short python keygen by the way). Anyway, I went to the Hardware Hacking Village (HHV) located in the sky boxes (near the Lockpicking Village) and met a lot of hardware hackers trying to hack some robots and other cool stuff. I asked a goon if he had any idea about how to flash the DefCon18 badge but he couldn't help, so I decided to figure it out by myself.
Joe Grand's PDF
I took my DefCon CD and decided to make a deep search in the dedicated DefCon18 badge folder it contains, and found a PDF about DefCon electronic badges designed by Joe Grand. This PDF contains all the necessary stuff to flash the badge, but some tricks were missing. I tried it the way it was explained, but I did not succeed. After many long minutes and a very grateful help from a dude, I eventually found the way to do this.
Before flashing this little toy, let's have a look at it:
Follow the guide
First of all, you need an USB to mini-usb adapter, in order to connect to the badge. You also need the correct drivers and install them on your computer. I found the correct drivers on the Internet but you are lucky, I put the installer right after this post. Oh, and remove the battery from the badge and be careful, many badges were broken at the HHV by some people who did not handle it with enough care.
Before connecting the badge to the USB port, press the two buttons of the badge simultaneously, and hold them while plugging the USB cable into your computer. If you did everything correctly, the badge would look like this:
Run an hyperterminal, and create a new connection on the newly appeared COMXX (the virtual COM port associated with the USB cable connected to the DefCon badge). If no COM port is visible you may have done something wrong. Configure the connection (9600 bps, 8 bits, parity:null, stop bits: 1, stream control: Xon/Xoff) and then click OK. Your connection is configured and now active. And now is the great moment, we are going to send the original firmware into the badge, and reset it. When I first try to send the firmware, I was doing it wrong because I was trying to send the firmware as a binary data, but in fact it is only text (great thanks to the dude who helped me on this), and all you have to do is only click the "Send Text File" submenu in the "Transfer" Menu and then select the firmware according to Joe Grand's PDF and click OK.
BUT (because there's always a but) the first try generally fails and you have to do it again and wait 30~ seconds to see the badge LEDs blinking. Once it's done, the badge would reset itself and launch the new firmware. I found a way to fix this up: if you save your connection and reload it from the hyperterminal, it would be ok the next time (no wait) and it would send it correctly on the first try.
I made a little screen cast as a reminder for many of you bored to read a long paragraph of extremely annoying phrases.
<object id="scPlayer" class="embeddedObject" width="635" height="675" type="application/x-shockwave-flash" data="http://content.screencast.com/users/Virtualabs/folders/Jing/media/08d8df84-57dd-4a8a-88f4-6ec7afc43fa9/jingswfplayer.swf" > <param name="movie" value="http://content.screencast.com/users/Virtualabs/folders/Jing/media/08d8df84-57dd-4a8a-88f4-6ec7afc43fa9/jingswfplayer.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#FFFFFF" /> <param name="flashVars" value="thumb=http://content.screencast.com/users/Virtualabs/folders/Jing/media/08d8df84-57dd-4a8a-88f4-6ec7afc43fa9/FirstFrame.jpg&containerwidth=635&containerheight=675&content=http://content.screencast.com/users/Virtualabs/folders/Jing/media/08d8df84-57dd-4a8a-88f4-6ec7afc43fa9/Flashing_DefCon18_Badge.swf&blurover=false" /> <param name="allowFullScreen" value="true" /> <param name="scale" value="showall" /> <param name="allowScriptAccess" value="always" /> <param name="base" value="http://content.screencast.com/users/Virtualabs/folders/Jing/media/08d8df84-57dd-4a8a-88f4-6ec7afc43fa9/" /> </object>
(And yes it is all in french, but f*ck ya :)
All the necessary materials are provided at the end of this post (badge drivers, my custom firmware and Joe Grand's original firmware).
DefCon18 Ninja Badge
I managed to get one of those marvelous electronic geeky toys from the 650 released at the DefCon (well, I'm not going to give any deeper details about the way I got it, but say I just grabbed some juicy informations from an uncommon person present at this DefCon18 and submitted them to the Wall of Sheep crew ;), and here are some extra pictures of this ninja badge !
When caming back from vegas, I was thinking about how to flash this one, but it is not very easy and there is no goon in France able to explain me how to do this (and maybe I'm not a pure hardware hacker too). Nevermind, I'll try to do it later.
<center><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&hl=fr&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fvirtualabs%2Falbumid%2F5514264346484685761%3Falt%3Drss%26kind%3Dphoto%26authkey%3DGv1sRgCIe9rYG-hs2hXg%26hl%3Dfr" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></center>
Heureux possesseur d'un Motorola Cliq (Dext) sous Android 1.5, j'eus le courage de tenter le rootage de l'engin. Pour les novices, le rootage d'un téléphone sous android consiste à prendre le contrôle complet du téléphone et installer une version "libre" d'android 2.1 par exemple. Le processus permettant de faire cela a été détaillé récemment sur Internet pour ce modèle de smartphone, ici et là.
Custom Rom
Lors de l'opération, il est conseillé d'installer une ROM personnalisée par l'équipe de TheDudes, compatible avec le firmware Motorola pour Orange. J'ai donc installé cette ROM, et rebooté dessus. Je dois avouer qu'à ce moment, tout s'est déroulé impeccablement, la custom ROM s'est lancée, mais le clavier s'est retrouvé en QWERTY. Une petite bidouille existe toutefois pour le remettre en AZERTY, citée notamment ici.
Et là, je me suis dit que j'allais pouvoir profiter pleinement de mon phone rooté. Ou pas. La ROM de The Dudes est basée sur une version 1.1.36 du firmware, et n'est donc pas considérée comme étant à jour par le phone, celui-ci propose donc en tout état de cause une upgrade. Et c'est là que ça se gâte ...
** Bootloader & Upgrade **
Je télécharge donc l'upgrade, et je passe par le bootloader flashé pour lancer le fichier zip ... et là c'est le drame, j'obtiens un message me disant que la signature de l'upgrade n'est pas correcte. WTF ?!
Me disant que c'était pas grave, je reboot le téléphone, celui-ci détecte la mise à jour, me propose de l'installer, et cela toutes les 5 minutes ... Le téléphone est donc devenu inutilisable. La seule solution à envisager, reflasher avec une version originale du firmware.
** Reinstall **
J'ai un peu galéré à trouver une technique de contournement pour faire passer la signature, et j'ai finalement trouvé la solution au fin fond d'un forum: il faut re-signer l'archive zip en utilisant un outil développé par des moddeurs. J'ai donc repris la version officielle directement du site de Motorola (la version 1.3.20) et je l'ai signée avec l'outil en question. Et là miracle, l'installation se déroule correctement.
Cependant, j'ai pu observer plusieurs conséquences: - le bootloader flashé lors de la phase de rootage est réécrasé par celui de Motorola - perte complète des données (mais MotoBlur aide à récupérer ses contacts, ça c'est un point positif)
** Mot de la fin **
Il existe une seule ROM custom sous android 2.1 pour le Motorola Cliq, que l'on pourrait envisager d'installer, cependant celle-ci n'est qu'en version alpha (Eclair2Cliq), et n'est désormais plus supportée par ses développeurs. Ceux-ci attendent sagement la release de la version officielle sous android 2.1, attendue pour on ne sait quand en europe (alors que les US ont une date de prévue, d'ailleurs peut-être déjà passée). De plus, la version alpha est loin d'être pleinement fonctionnelle, donc à éviter.
Je joins à ce post l'upgrade de la version 1.3.20 avec la signature falsifiée, en espérant que ça puisse servir aux personnes bloquées par cette manip.