Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site https://www.yesik.it !

LCSoft USBasp.png

LCSoft Studio USBasp clone — On trouve sur internet de nombreux clones très bon marché de l'USBasp. Comme celui de LCSoft Studio disponible sur e-bay à moins de 3€!

…enfin peut être pas le moins cher, mais en tous cas un des moins chers! En effet à moins de 3€ port compris au moment où j'écris ces lignes, on trouve sur e-bay un petit programmateur USB ISP pour Atmel AVR fabriqué par la société chinoise LCSoft Studio. Son design est basé sur l'USBasp de Thomas Fischl – ce qui lui garanti d'être supporté par de nombreux outils et en particulier avrdude.

Seul « souci », la documentation du vendeur est succincte et le site du fabriquant est en chinois… Bon ça reste un clone de l'USBasp, donc il ne devrait pas être bien compliqué à mettre en œuvre, comme nous allons le voir dans les lignes qui suivent.

USBasp en général

Avant de passer à la pratique, un rappel sur l'USBasp. Lui et ses clones sont des programmateurs logiciels (firmware only). C'est à dire qu'ils embarquent pour seul composant actif un micro-contrôleur (un AVR ATmega8 ou ATmega88 dans le design de Thomas Fischl). C'est ce circuit qui est chargé – grâce au firmware adéquat – de gérer la communication entre le PC hôte (via le port USB) et la cible à programmer (via le port SPI). D'un point de vue pratique, un USBasp possède donc deux ports:

un port USB
destiné à communiquer avec le PC hôte, ainsi qu'à l'alimentation du programmateur et de sa cible (dans la configuration par défaut)
un port ISP (In-system programming)
relié à la cible AVR à programmer.

La plupart des USBasp possèdent aussi un jeu de cavaliers qui permettent d'en modifier le fonctionnement. C'est le cas du modèle produit par LCSoft Studio, comme nous allons le voir dans un instant.

Attention:

N'allez pas chercher d'opto-coupleur ou un quelconque autre dispositif d'isolation galvanique sur l'USBasp ou un de ses clones: sur ce type de programmateur, il y a une connexion électrique directe entre la cible et le PC hôte. Donc, même si l'interface SPI permet en principe de programmer un AVR sur site, dans la pratique, il vaut mieux être prudent et extraire le micro-contrôleur de sa carte pour le programmer.

C'est d'autant plus vrai si votre cible est susceptible de consommer un courant important (pilotage de moteurs, par ex.): en effet, l'alimentation fournie par le programmateur provient du port USB de l'ordinateur auquel il est relié. En cas de pic de courant ou de consommation excessive, c'est donc le port USB qui va être sollicité – éventuellement au point de l'endommager.

USBasp par LCSoft Studio

Cavaliers

Après ces généralités, passons maintenant à l'étude du produit qui nous intéresse spécifiquement ici, à savoir l'USBasp fabriqué par LCSoft Studio. Ce programmateur comporte trois emplacements pour des cavaliers sérigraphiés JP1, JP2 et JP3 sur la carte. Des trois, seul JP1 est peuplé avec des embases à picots. Si vous voulez utiliser les autres cavaliers, vous devrez souder vous-même les embases manquantes.

Position Description
JP1
Dans cette position, la broche VCC de l'interface ISP est directement reliée à la broche VCC du port USB et fournit donc une tension de 5V environ
Dans cette position, l'alimentation délivrée sur la broche VCC de l'interface ISP vient aussi du port USB, mais elle transite par un régulateur de tension (AMS1117 - 3.3V). La tension fournie est donc de 3,3V.
Sans cavalier, la broche VCC de l'interface ISP est en l'air. Aucune tension n'est fournie par VCC – et la broche devrait être non connectée
JP2
Fonctionnement normal – l'USBasp sert à programmer une cible externe.
Mode auto-programmation – un programmateur externe peut mettre à jour le firmware de l'USBasp.
JP3
Vitesse normale.
Slow SCK.

JP1

JP1 permet de sélectionner la tension fournie par le programmateur sur la broche de sortie VCC de l'interface ISP.

Notez que le cavalier JP1 n'a d'incidence que sur la tension délivrée par la broche VCC de l'interface ISP. Le micro-contrôleur embarqué est toujours alimenté en 5V par le port USB. Et les niveaux logiques de sortie sont ceux qui correspondent à cette tension.

JP2

Sur le programmateur qui m'a été livré, JP2 n'est pas muni de picot. JP2 est un cavalier noté self program sur le schéma électrique du programmateur. Le nom est un peu trompeur puisque qu'il permet de mettre à jour le firmware de l'USBasp à partir d'un autre programmateur.

En fait son rôle est simplement de relier la broche /RESET de l'ATmega8 sur la broche /RST de l'interface ISP – ce qui permet au programmateur externe de faire passer le micro-contrôleur en mode mise à jour du firmware par SPI. En fonctionnement normal, vous ne devez pas utiliser de cavalier à cet emplacement.

JP3

JP3 Slow clock (Slow SCK) permet de ralentir la vitesse de programmation. Ce cavalier se révèle utile dans le cas d'un câble de liaison trop long entre le programmateur et la cible. Ou dans le cas d'un AVR dont la fréquence d'horloge est trop lente – comme ça peut être le cas d'un AVR neuf (configuré d'usine avec l'oscillateur interne 1MHz et un diviseur d'horloge ÷8). La règle est que la fréquence de programmation doit être inférieure au quart de la fréquence d'horloge de la cible [1].

Ceci dit, cette discussion autour du cavalier JP3 est très théorique ici: en effet, mesures faites, quelque soit la position du cavalier JP3, le programmateur semble toujours utiliser une horloge de 92kHz. J'ai aussi lu sur le forum AVRfreaks que certains clones USBasp utilisent un firmware personnalisé capable de s'adapter à la vitesse d'horloge de la cible, mais cela ne semble pas non plus le cas puisque j'ai mesuré la même fréquence sur le bus SPI quelle que soit la position des fusibles (fuse) CKDIV8, CKSEL1 et CKSEL0 de l'ATtiny qui m'a servi pour les tests…

Brochage de l'interface ISP

USBasp ISP interface (header).png

Brochage de l'embase ISP de l'USBasp LCSoft Studio — Ce schéma décrit le brochage de l'embase mâle du programmateur; c'est à dire la prise soudée sur le programmateur.

Remarquez les broches 3, 4 et 6 à ne pas connecter à la cible en mode programmation.

USBasp ISP interface (lead).png

Brochage de la fiche ISP de l'USBasp LCSoft Studio — Ce schéma décrit le brochage de la fiche femelle du programmateur; c'est à dire de chacune des fiches fixées aux extrémités du câble plat (nappe) de raccordement du programmateur à la cible.

Remarquez les broches 3, 4 et 6 à ne pas connecter à la cible en mode programmation.

L'interface ISP est disponible sur une embase mâle 2×5 broches. Le connecteur – et le brochage – sont à peu près standard parmi les différents clones. C'est également celui utilisé par les kits de développement Atmel STK200/STK500. Par contre il y a une différence notable au niveau du brochage de l'USBasp LCSoft Studio. En effet, habituellement les broches 4 et 6 du connecteur sont reliées à la masse. Or, ici, elles sont reliées aux broches TXD et RXD de l'ATmega8 embarqué sur la carte. C'est sans doute pour permettre de transformer le programmateur en interface USB-UART. Mais pour cet usage, je pense qu'il faudra (?) flasher un autre firmware. Toujours est-il que ces broches ne sont pas directement reliées à la masse, et qu'il faudra donc éviter de les connecter. Quand à la broche 3, elle ne semble reliée à rien. Il faudra donc également la laisser non connectée (NC). C'est aussi une petite différence avec le STK200/STK500, puisque cette broche y est utilisée pour signaler que la programmation est en cours.

Utilisation

Numérotation des broches.png

Numérotation des broches — Les broches des connecteurs et des circuits intégrés ne sont pas numérotées de la même manière. En zig-zag pour les premiers et dans le sens anti-horaire pour les seconds.

Broche USBasp Signal Broche ATtiny13
(boitier DIP)
2 Vcc 8
8, 10 Masse 4
1 MOSI 5
9 MISO 6
7 SCK 7
5 /RESET 1

Raccordement à la cible et test avec avrdude

Muni du brochage de l'interface ISP, il devient possible de tester ce programmateur. J'ai attrapé un ATtiny13 que j'ai raccordé au programmateur USBasp de LCSoft Studio. À titre indicatif j'ai résumé le raccordement dans le tableau ci-contre. Mais je vous conseille fortement de vous reporter à la documentation du micro-contrôleur que vous voulez programmer pour vérifier le brochage! En plus de cela, faites bien attention, car l'usage veut que l'on ne numérote pas les broches des circuits intégrés et celles des embases dans le même ordre (voir illustration). Une fois les connexions vérifiées et le programmateur raccordé à un port USB de votre ordinateur, vous constaterez que la DEL d'alimentation G (comme green … mais la mienne est rouge) est allumée.

Sur ma machine, avrdude est déjà installé. Et j'ai déjà configuré les permissions pour d'autres programmateurs compatibles USBasp. Si ce n'est pas le cas pour vous, je vous renvoie sur un autre article ou je détaille la procédure.

Une fois les outils en place, le programmateur peut enfin être testé:

sh$ avrdude -p t13 -c usbasp

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9007

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Pendant la manipulation, l'autre DEL (R) du programmateur s'illumine, signifiant que le programmateur communique avec la cible. C'est confirmé par le message renvoyé sur la console par avrdude – puisque celui-ci a (notamment) détecté la signature 0x1e9007 qui correspond bien à un Attiny13. En cas de problème avrdude le signalerait clairement.

Petite déception: vous voyez aussi que le programmateur semble livré avec une ancienne version du firmware USBasp. Une mise à jour est suggérée pour pouvoir contrôler par logiciel la fréquence d'horloge de programmation. Pour l'instant, je n'ai pas fait cette mise à jour, d'autant plus que j'ai un doute que le firmware installé soit un authentique firmware USBasp écrit par Thomas Fischl. J'ai bien la possibilité d'en faire un backup avec avrdude en mettant le programmateur en mode self-programming (JP2) – et en utilisant un autre programmateur – mais en l'état il fonctionne de façon satisfaisante. Pas forcément très vite, puisque comme je disais plus haut il semble configuré pour utiliser la vitesse fixe de 92kHz, mais c'est bien assez pour commencer.

Télécharger un programme

Si vous disposez de la toolchain AVR, vous pouvez compiler un petit programme et essayer de le télécharger – vous ne devriez rencontrer comme moi aucun problème pour peu que vous ayez convenablement raccordé votre cible au programmateur:

/*
 * blink.c - blinking LED on PB4
 *
 * Fait clignoter une LED reliée au port PB6
*/
 
#include <avr/io.h>
#include <util/delay.h>
 
int main(void)
{
  DDRB |= (1<<DDB4);
  while(1) {
    _delay_ms(500);
    PORTB ^= (1<<PORTB4);
  }
}
# Compile pour ATtiny13 @ 1MHz
sh$ avr-gcc blink-pb4.c -O2 -mmcu=attiny13 -DF_CPU=1000000
sh$ avr-objcopy -j .text -j .data -O ihex a.out rom.hex
# Téléchargement du firmware
sh$ avrdude -p t13 -c usbasp -U flash:w:rom.hex

En plaçant une résistance et une DEL en série entre les broches PB4 (3) et GND (4) on peut voir clignoter cette dernière à environ 1Hz – c'est bien mon programme qui a été téléchargé et qui s'exécute…

Accés aux fusibles (fuses)

Les fusibles (fuses) sont des drapeaux binaires qui permettent de modifier le fonctionnement des micro-processeurs de la famille AVR d'Atmel. Rassurez-vous, malgré leur nom, il ne s'agit pas de vrais fusibles – et lorsque vous en aurez modifié la valeur, vous pourrez (presque) toujours revenir en arrière.

Ne jouer pas au hasard avec les fusibles!

En effet, il y a quelques fusibles dont la valeur est critique pour la programmation du micro-contrôleur AVR avec des outils comme un USBasp. En particulier, sur un ATtiny13, faites attention à ne pas toucher à RSTDISBL et SPIEN.

Les fuses critique d'un ATtiny13.
Un bit à l'état logique zéro est dit programmé et la fonction correspondante est activée. Un bit à l'état un est déprogrammé et sa fonction est désactivée.
fuse valeur par défaut description
RSTDISBL High byte bit 0 External Reset disable 1 (unprogr.) Pour être programmé avec l'interface SPI, il est nécessaire de mettre la broche /RESET du micro-contrôleur à l'état bas. Ce fusible permet de désactiver le reset externe via cette broche, rendant de fait impossible de programmer le micro-contrôleur de cette manière.
SPIEN Low byte bit 7 Enable Serial Programming and Data 0 (progr.) Quand ce bit est programmé (c'est à dire à zéro), l'interface SPI peut être utilisée pour télécharger des données et des programmes sur le micro-contrôleur. Déprogrammer ce bit (le mettre à un) rend inutilisable l'interface SPI dans ce but. Normalement, vous ne pouvez pas changer la valeur de ce bit via l'interface SPI elle-même.

Il ne s'agit ici que des fusibles critiques pour l'ATtiny13 que j'ai sous la main. Je ne saurais assez vous conseiller d'examiner la documentation d'Atmel correspondant votre micro-contrôleur avant de vous aventurer en territoire inconnu.

Avec avrdude et l'USBasp de LCSoft Studio (comme avec n'importe quel autre, d'ailleurs), vous pouvez accéder facilement aux fusibles pour en lire la configuration actuelle:

# Lire la configuration actuelle du fusible "low fuse" (affichage en binaire)
sh$ avrdude -p t13 -c usbasp -U lfuse:r:/dev/stdout:b -q -q
0b1101010
# Idem avec le "high fuse"
sh$ avrdude -p t13 -c usbasp -U hfuse:r:/dev/stdout:b -q -q
0b11111111
Pour désactiver le diviseur par 8 de l'horloge de l'ATtiny13, il faut déprogrammer le fusible correspondant (i.e.: mettre CKDIV8 à 1).
lfuse – ATmega13
0 1 1 1 1 0 1 0 = 0x7A
SPIEN EESAVE WTDON CKDIV8 SUT1 SUT0 CKSEL1 CKSEL0

Il est bien entendu possible de modifier leur valeur. Ainsi, admettons que l'on souhaite désactiver le diviseur d'horloge /8 (CKDIV8 – low fuse, bit 4):

sh$ avrdude -p t13 -c usbasp -U lfuse:w:0b1111010:m -q -q

Alors?

Bon, je ne vais pas m'appesantir plus longuement sur ce clone de l'USBasp par LC Studio: il s'agit en résumé d'un petit programmateur classique et sans prétention, mais qui fonctionne sans problème, et satisfera n'importe quel utilisateur occasionnel de micro-contrôleurs AVR. Et surtout pour un prix dérisoire qui met décidément le monde de l'embarqué à la portée de tous!