Install Debian Lenny depuis une clef USB

Pour créer une clef USB d’installation Debian procéder comme suit :

Récupérer le fichier boot.img.gz depuis  un FTP Debian

Le dumper vers la clef USB : zcat boot.img.gz > /dev/sdc

Monter la clef : mount /dev/sdc /mnt/point

Télécharger l’image ISO du CD Netinst depuis le FTP Debian

Copier l’image ISO sur la clef : cp debian-502a-i386-businesscard.iso /mnt/point/ && sync && umount /mnt/point

Connecter la clef à la machine cible et booter

Note : Ce billet est plus un mémo pour moi-même qu’autre chose puisque l’info se trouve un peu partout. Ça m’agace juste de chercher à chaque fois.

Programmeur ISP USB pour AVR

Les programmeurs de type dapa sont économiques, efficaces et très simples. Mais ils dépendent d’un port clairement en voie de disparition sur les machines modernes : le port parallèle. Peu d’adaptateurs USB/parallèle existent, il s’agit en forte majorité d’USB/printer (lp) avec lesquels il n’est pas possible de contrôler les lignes DATA, CONTROL et STATUS individuellement.

On peut alors se tourner vers le dasa, adaptateur pour port série utilisant du bit banging mais, là encore, on rencontre des problèmes puisque tous les pilotes ne supportent pas la palette d’ioctl nécessaires.

Finalement, pour pouvoir développer et programmer un Atmel AVR via USB (sur un lappy par exemple), il ne reste pas d’autre choix simple que d’investir quelques euros (moins de 30 euros avec le port sur eBay)  dans un programmeur USB compatible STK500v2 (chercher « USB ISP-Programmer »).

(Le miens est vert fluo et livré avec un câble également vert, très bon produit, joli design, super propre)

La chose est reconnu comme ttyACM0: USB ACM device par Linux et on en profite pour ajouter une règle udev :
SUBSYSTEMS== »usb », KERNEL== »ttyACM* », ATTRS{product}== »DX-ISP », SYMLINK+= »STK500″
Ainsi, le périphérique est accessible systématiquement via /dev/STK500. On flash un AVR avec avrdude ainsi :
% avrdude -p t13 -c stk500v2 -P /dev/STK500 -i 5 -U flash:w:main.hex
A moi le développement AVR dans le TER. Luvz !

ttyUSB0 ? ttyUSB2 ? Non, ttyUSB1… Graaaahh ! udev !

J’ai acheté il y a quelque temps plusieurs de ces petites choses :

Des convertisseurs USB/Série en TTL (0-5V). Ceci permet de connecter directement, sans max232, un adaptateur USB/Série à un montage à base de microcontrôleur (genre Atmel AVR) ou un système embarqué (genre Fonera, remarquez le cavalier permettant de choisir 5V ou 3.3V, convitude). Seulement, voilà :
je branche un adaptateur, il est accessible via /dev/ttyUSB0
j’en branche un autre qui devient /dev/ttyUSB1
je débranche le premier et en branche deux autres et ça devient la fête aux ttyUSB*

Où est ma Fonera 1, où est mon Attiny2313, où est ma Fonera 2… etc…  ?

On trouve dans /sys/bus/usb-serial/devices plein de choses intéressantes avec udevinfo -a -p. Parmi lesquelles :
ATTRS{manufacturer}== »FTDI »
ATTRS{product}== »FT232R USB UART »
ATTRS{serial}== »A90066ai »
Du coup, il ne reste plus qu’à se construire des petites règles sympathiques dans un fichier placé dans /etc/udev/rules.d :
SUBSYSTEMS== »usb », KERNEL== »ttyUSB* », ATTRS{product}== »FT232R USB UART »,
SYSFS{serial}== »A90066j7″, SYMLINK+= »TTYUSB0″
SUBSYSTEMS== »usb », KERNEL== »ttyUSB* », ATTRS{product}== »FT232R USB UART »,
SYSFS{serial}== »A90066ac », SYMLINK+= »TTYUSB1″
SUBSYSTEMS== »usb », KERNEL== »ttyUSB* », ATTRS{product}== »FT232R USB UART »,
SYSFS{serial}== »A900669W », SYMLINK+= »TTYUSB2″
SUBSYSTEMS== »usb », KERNEL== »ttyUSB* », ATTRS{product}== »FT232R USB UART »,
SYSFS{serial}== »A90066ai », SYMLINK+= »TTYUSB3″
On redémarre udev avec un petit /etc/init.d/udev restart et on marque des petits chiffres au feutre indélébile sur les adaptateurs. A la connexion du périphérique identifié par son numéro de série, un lien symbolique est créé dans /dev. Peu importe le /dev/ttyUSB*, le lien symbolique donne toujours accès au bon périphérique.

Done.

PS : ça marche pour plein de périphériques. Ceci inclus les clef USB par exemple :
BUS== »usb », SYSFS{serial}== »123456789ABCDEF », NAME= »%k », SYMLINK= »usbkey1″

Ecran LCD 2*16 série/USB via AVR Attiny2313

Décidément aujourd’hui je n’arrête pas ! Cela faisait longtemps que j’avais cette idée en tête : monter un afficheur LCD alpha-numérique sur USB/série. Voilà chose faîte avec un petit AVR Attiny2313.

La connectique est simple :
LCD (1 ) : Masse
LCD(2) : Vcc +5V
LCD(3) : Contraste ((connecté à Masse)
LCD(4) : RS (1=data, 0=commande) : AVR Port D PD5
LCD(5) : RW (1=read, 0=write) : AVR Port D PD4
LCD(6) : Enable : AVR Port D PD3
LCD(7-14) : data 0-7 : AVR Port B PB0-PB7

L’Attiny2313 est configuré pour la communication série à 19200 avec un quartz à 14.7456 Mhz.

Le code n’est qu’un début mais il permet déjà d’afficher du texte sur les deux lignes de l’afficheur. Quelques essais montrent qu’il est relativement facile de créer les 8 caractères programmables si on respecte bien la datasheet et les timings. Le code est, pour l’instant, relativement bouillon. C’est normal ;)
serialint.c
makefile
common.mk

Le but n’est pas vraiment d’obtenir un firmware complet permettant toutes les opérations possibles comme ce qui existe déjà dans les boutiques sur le Web (quoi que, si j’ai le temps). Il s’agit d’avoir un périphérique d’affichage simple pouvant se connecter en TTL, RS232 et/ou USB sur un système embarqué comme une Fonera, Fonera+ ou Fonera 2. Je pourrai alors voir en temps réel les connexions Wifi et autres informations de base pour un AP.

Décidément, j’adore le 2313, c’est vraiment mon microcontrôleur préféré.

Quelques liens :
http://www.quinapalus.com/hd44780udg.html
http://home.iae.nl/users/pouweha/lcd/lcd0.shtml
http://www.geocities.com/dinceraydin/lcd/custom.htm

FreeRunner GTA-02 FSO/Debian et mode USB host

Après de nombreux essais de différents firmwares pour le FreeRunner, je me suis finalement tourné vers FSO (FreeSmartphone.Org) qui reprend pas mal d’éléments de configuration de Debian/OpenWrt. Les images sont disponibles ici : http://downloads.freesmartphone.org/fso-stable/milestone4.1/.

Tout ceci se flash exactement comme les autres firmwares et après reboot on accède au FreeRunner via USB. Par défaut, son IP est 192.168.0.202. Comme mes interfaces réseau sur ma machine de travail sont bridgées, j’ajoute simplement usb0 au bridge :
% brctl addif br0 usb0
% ifconfig usb0 up
% ping 192.168.0.202
PING 192.168.0.202 (192.168.0.202) 56(84) bytes of data.
64 bytes from 192.168.0.202: icmp_seq=1 ttl=64 time=216 ms
64 bytes from 192.168.0.202: icmp_seq=2 ttl=64 time=29.9 ms
^C
Ce qui me permet un accès SSH sur le FreeRunner (root, pas de mot de passe). Ainsi, je peux configurer le Wifi en ajoutant simplement ce qu’il faut dans /etc/network/interface comme sur une Debian :
iface eth0 inet dhcp
        wireless-mode Managed
        wireless-essid dalefwrt
        wpa-conf /etc/wpa_supplicant/openwrthome.conf
Ainsi qu’un /etc/wpa_supplicant/openwrthome.conf qui va bien :
network={
        ssid= »dalefwrt »
        psk= »laphrasedepass »
}
Un petit ifup eth0 et le tour est joué. Plus besoin de l’interface usb0, ifdown usb0 donc. Le Freerunner est accessible en SSH par Wifi à condition de modifier la configuration de dropbear qui n’écoute que sur l’IP de l’interface usb0 par défaut. On édite /etc/default/dropbear pour avoir ceci :
DROPBEAR_PORT=22
Comme le port USB n’est plus vraiment utile en mode device autant le passer en mode host pour pouvoir utiliser des périphériques USB avec le FreeRunner. Ceci se fait très simplement avec :
echo host > /sys/devices/platform/s3c2410-ohci/usb_mode
On repasse en mode device avec :
echo device > /sys/devices/platform/s3c2410-ohci/usb_mode
Par défaut le FreeRunner est en mode device et utilise l’USB comme source de courant pour se recharger. En mode host il lui faut normalement alimenter les périphériques USB. Le GTA-02, aka FreeRunner, peut basculer d’un mode à l’autre de manière logicielle. Avec ceci :
echo 1 > /sys/devices/platform/neo1973-pm-host.0/hostmode
le FreeRunner alimente le port USB avec un courant de 500mA, exactement comme une machine standard. Des résistances de rappel de 15K à la masse sont activées sur les lignes D+ et D- de l’USB. Malheureusement, ceci consomme énormément de courant et vide rapidement la batterie.

Avec :
echo 0 > /sys/devices/platform/neo1973-pm-host.0/hostmode
on repasse en mode standard. Les résistances sont désactivées et la charge depuis l’USB est réactivé. Notez que ceci est indépendant du mode USB device/host. Et justement, c’est ce qui permet d’utiliser le courant fourni par un hub USB pour charger le FreeRunner alors qu’il est en mode host.

Attention, tout les hub USB fournissent du courant aux périphériques mais pas nécessairement à l’hôte. Le plus simple est d’avoir quelques hub sous la main et de faire les essais. Une autre solution consiste, tout simplement à récupérer du +5V en sortie du hub et de le connecter au Vcc du connecteur côté hôte. Enfin, une autre solution est de jeter un oeil au hub. Souvent, une simple diode est utilisée pour bloquer le courant du hub vers l’hôte.

Regardez http://wiki.openmoko.org/wiki/Neo1973_USB_host et http://wiki.openmoko.org/wiki/Specialized_USB_cables pour plus d’informations.

De mon côté j’ai la chance de disposer d’un pauvre hub sans marque acheté en supermarché, mais qui alimente effectivement l’hôte en courant. Il m’a donc suffit de bricoler un connecteur me permettant de brancher le hub sur du le connecteur mini type B jack du FreeRuner.

On trouve ce type de câble (mini type B plug vers type A jack) sur le net (eBay). J’ai opté pour une autre solution :
un câble mini type B plug vers type A plug
un double déporteur type A jack provenant d’un PC que j’ai ponté avec des cavaliers
le connecteur type A plug du hub

Je peux ainsi alimenter le FreeRunner tout en utilisant le mode host et le hub USB pour y connecter plein de choses :

# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 082: ID 05e3:0606 Genesys Logic, Inc.
Bus 001 Device 085: ID 0951:1603 Kingston Technology
Bus 001 Device 086: ID 0718:0286 Imation Corp.
Bus 001 Device 087: ID 9710:7830
Bus 001 Device 088: ID 4348:5523
Tout ne fonctionne pas par défaut faute de drivers. Il faut installer les modules adéquates sous forme de paquets avec opkg (qui est déjà configuré). Exemple :
# opkg update
# opkg install kernel-module-cp2101 kernel-module-pl2303 kernel-module-ftdi-sio
[…]
Configuring kernel-module-cp2101
Configuring kernel-module-pl2303
Configuring kernel-module-ftdi-sio
# dmesg
[…]
ftdi_sio 1-2.3:1.0: FTDI USB Serial Device converter detected
drivers/usb/serial/ftdi_sio.c: Detected FT232RL
usb 1-2.3: FTDI USB Serial Device converter now attached to ttyUSB0
Un convertisseur USB/série permet d’étendre les sorties du FreeRunner. Il suffit de lui ajouter un AVR (Attiny2313) pour disposer de plein de GPIO. Le FreeRunner dispose d’un GPS, d’un modem GSM/GPRS, du Wifi, du BlueTooth, d’un écran, d’un périphérique audio… En utilisant le port USB en mode host on lui offre tout ce qui manque. Je ne parle plus de téléphone mais d’un système embarqué autonome accessible en IP et GSM/GPRS. Imaginez deux secondes ce qu’il devient possible de faire si je dis, par exemple, «domotique».

Idem pour la robotique. Le FreeRunner peut devenir le cœur d’un drone très efficace…

Adaptateur USB/Série TTL

Enfin, enfin mes amis bulgares m’ont expédiés ma commande sur eBay. L’objet ? Un sympathique adaptateur USB/série (FTDI) vers TTL. En clair, on entre en USB, Linux voit un port série supplémentaire, mais l’interface se fait en TTL (5V) ou 3.3V. Fini les adaptateurs USB/Série RS232 en +/-12V puis RS232/console TTL. Je peux, à présent, connecter directement un microcontrôleur AVR Attiny2313 via son UART avec une box Linux USB (ou une Fonera 2.0).

C’est tout petit et ça simplifie grandement les choses. Je suis maintenant en mesure de développer des périphériques USB (sans consommer la majorité de la Flash de l’AVR).

Que voit Linux ? Ceci :

[862432.095490] usb 5-3.4: FTDI USB Serial Device converter now attached to ttyUSB1
[862432.096332] usb 5-3.4: New USB device found, idVendor=0403, idProduct=6001
[862432.096336] usb 5-3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[862432.096340] usb 5-3.4: Product: FT232R USB UART
[862432.096343] usb 5-3.4: Manufacturer: FTDI
[862432.096345] usb 5-3.4: SerialNumber: A90066ac

Et en plus c’est tout choupy :

Ça vaut 15€/pièce, mais quel gain d’espace, de ressources et de temps ! Viens, Fonera 2.0 ! Je vais te faire parler avec le monde du dehors !

Stabilisation du quadruple afficheur 7 segments USB

Juste pour information, l’ajout d’une capa de 10 uF entre Vcc et GND est effectivement suffisant pour éviter les problèmes sur certaines machines (comme on pouvait s’en douter). Le montage semble maintenant stable et ne pose plus de problème, en tout cas depuis quelques 48 heures. J’ai également décidé de diffuser les sources du firmware dérivé des travaux de Dick Streefland pour son adaptateur USB SPI. En GPL donc.

Voici le tarball du firmware à copier directement dans les sources d’usbtiny. Attention, c’est du vite fait, du quick’n’dirty, du gruik coding de 10 minutes… Je ferai propre lorsque j’aurais un peu de temps devant moi. En attendant, il faudra vous satisfaire de ceci :

http://www.lefinnois.net/7seg.tar.gz

Tant qu’à faire, voici aussi le PDF du montage. La plupart des informations s’y trouve, sauf les résistances de 470 ou 330 permettant de relier le circuit du bas avec les 4511 et l’AVR et celui du haut avec les afficheurs à cathodes communes. Un coup d’oeil sur la photo et vous devriez comprendre :

Afficheur 4 fois 7 segments sur USB

Je poursuis mes essais concernant l’utilisation de l’Atmel AVR Attiny2313 cadencé à 12Mhz (quartz) permettant de gérer de manière entièrement soft l’USB. Voici un premier projet visant à remplacer un montage équivalent sur port parallèle : un notificateur/compteur de mail.

J’utilise désormais la technique du transfère de toner détaillées dans un autre billet. Cette fois, en lieu et place du fer à repasser j’ai utilisé une plastifieuse à document légèrement bidouillée. La température et la pression exercée sont constant mais quelques réglages devront encore être fait. Les pistes un peu épaisse ne sont pas parfaite en raison de la non uniformité du toner déposé par l’imprimante. Le problème ne se pose pas avec le fer à repasser car le toner fond bien plus et les imperfections se corrigent d’elles-même. Malheureusement, la pression du fer est totalement aléatoire et l’écrasement des pistes peut créer des faux contactes et autres bouchage de vias.

Avec des pistes épaisse les problèmes de recouvrement se pose mais cela reste acceptable. Un petit coup de lampe à leds permet de s’en assurer :

L’autre avantage du transfère de toner est de pouvoir très facilement s’occuper du marquage côté composants. Cela donne une touche plus pro :

Même de près :

Le montage ici présent utilise, bien entendu, le fameux Attiny2313 couplé à 4 décodeur BCD vers 7 segments 4511. On les voit ici, juste sous les afficheurs (oui, il y a une pétouille corrigée à la hache avec l’un des connecteurs PDIP):

Comme vous pouvez vous en douter le placement du module supérieur était une vrai partie de plaisir avec les 28 résistances devant s’insérer parfaitement dans le module inférieur. Etre Zen pour faire de l’électronique tu dois…

Au finale, le montage complet occupe un peu trop de place à mon goût mais je ne suis pas mécontent du routage finalement :

Les tests sont également concluant :

Malheureusement, après des essais sur plusieurs machines il semblerait qu’il y ai un problème de stabilité de l’alimentation. L’absence de condensateur entre le +5 et la masse n’est sans doute pas pour rien dans l’affaire. Je comprend mieux maintenant pourquoi le créateur d’usbtiny recommande d’activer la Brown Out Detection. Une autre solution est d’alimenter le montage en +5V stabilisé plutôt que via l’USB. Le montage pompe quelques 85mA, nous ne sommes vraiment par loin des 100mA que l’USB peut fournir sans négociation…

PS : Ah oui, j’oubliais. Je grave maintenant les circuits au persulfate de sodium. C’est plus pratique (transparent) et moins nocif et polluant que le perchlorure de fer. Un jour peut-être me laisserai-je tenter par le couple acide + eau oxygénée 30% (disponible chez Castorama). Mais je ne suis pas encore très chaud pour les dégagement gazeux dangereux..