L’USBasp est un programmateur AVR qui se branche sur un port USB et écrit directement dans la mémoire d’un microcontrôleur Atmel, sans carte intermédiaire et sans bootloader. C’est l’outil qui transforme une puce nue — un ATmega328P posé sur une plaque d’essai, un ATtiny85 seul — en circuit programmable.
Il ne demande aucune alimentation externe : il la prend sur le port USB, et il se présente à l’ordinateur comme un programmateur standard. avrdude, l’IDE Arduino, Khazama ou eXtreme Burner le reconnaissent sans configuration particulière, et il n’y a aucun port COM à choisir.
À quoi sert un USBasp ?
Une carte Arduino se programme par le port série parce qu’un bootloader l’attend au démarrage. Un microcontrôleur nu n’a pas ce bootloader : il faut passer par l’interface ISP du fabricant. C’est exactement ce que fait l’USBasp.
- Programmer une puce seule — un microcontrôleur AVR posé sur une plaque d’essai, sans carte Arduino autour.
- Graver un bootloader — sur une puce neuve, ou pour transformer un ATmega328P nu en carte compatible Arduino.
- Réparer une carte briquée — quand le bootloader a été effacé, la carte ne répond plus au port série ; l’USBasp la remet en service par son connecteur ICSP.
- Régler les fusibles — l’horloge, le démarrage, les bits de verrouillage : des réglages qu’aucun port série ne peut atteindre.
- Lire le contenu d’une puce — flash et EEPROM d’un circuit déjà programmé.
- Programmer plusieurs puces d’affilée — sans rien rebrancher entre deux microcontrôleurs.
Caractéristiques techniques
| Rôle | Programmateur ISP pour microcontrôleurs AVR (Atmel) |
|---|---|
| Microcontrôleur embarqué | ATmega8, en 12 MHz — certaines séries embarquent un ATmega88 ou un ATmega168 |
| Interface ordinateur | Port USB, fiche mâle soudée sur la carte : le programmateur se branche directement, sans câble |
| Contrôleur USB | Aucun : l’USB est émulé par le firmware (V-USB), c’est ce qui rend la carte si simple |
| Identifiant USB | 16c0:05dc — c’est sous cet identifiant que les logiciels le reconnaissent |
| Alimentation | Prise sur le port USB, aucune alimentation externe |
| Connecteur de programmation | ISP 10 broches (2 rangées de 5, pas de 2,54 mm) ; les cartes récentes ajoutent souvent un connecteur 6 broches (2 × 3) |
| Vitesse de programmation | Jusqu’à 5 ko/s |
| Vitesse lente | Option SCK, pour les cibles cadencées sous 1,5 MHz (puce neuve, horloge interne) |
| Voyants | Un voyant fixe d’alimentation, un voyant d’activité qui clignote pendant l’écriture |
| Opérations | Lecture et écriture de la flash, de l’EEPROM, des fusibles et des verrous |
| Logiciels compatibles | avrdude depuis la version 5.2, IDE Arduino, Khazama AVR Programmer, eXtreme Burner, BASCOM-AVR |
| Systèmes | Linux et macOS sans pilote ; Windows avec un pilote USB libre |
Ce qu’il peut programmer
La liste est large, et ce sont les familles les plus courantes en prototypage :
- Série ATmega — ATmega8, ATmega48, ATmega88, ATmega168, ATmega328P, jusqu’aux ATmega1280 et ATmega2560.
- Série ATtiny — ATtiny13, ATtiny25, ATtiny45, ATtiny85, ATtiny2313.
- Séries plus anciennes — AT90S1200 à AT90S8535, AT90CAN128, AT90PWM2 et AT90PWM3.
L’IDE Arduino ne connaît d’origine que quelques cartes. Pour programmer un ATtiny25, 45 ou 85 depuis l’IDE, il faut y ajouter les définitions de cartes correspondantes : c’est un fichier de configuration à installer une fois, puis ces puces se programment comme n’importe quelle autre.
Le branchement : six signaux, pas un de plus
La programmation passe par le connecteur ICSP du microcontrôleur cible, en général un petit connecteur 2 × 3 broches. Six fils suffisent, et leur nom est toujours le même quel que soit le modèle :
MISO | Les données qui remontent de la cible vers le programmateur. Sur l’ICSP 2 × 3, c’est la broche 1. |
|---|---|
VCC | L’alimentation de la cible, quand on choisit de la fournir par le programmateur. Broche 2. |
SCK | L’horloge de programmation, générée par le programmateur. Broche 3. |
MOSI | Les données qui descendent du programmateur vers la cible. Broche 4. |
RESET | La remise à zéro qui fait entrer la puce en mode programmation. Broche 5. |
GND | La masse, référence commune des six signaux. Broche 6. |
Repérer la broche 1, c’est la moitié du travail. Sur le connecteur du câble, l’encoche du boîtier et le fil rouge du ruban marquent la broche 1. Sur la carte cible, elle est signalée par un point ou un carré imprimé sur le circuit. Un connecteur monté à l’envers est de loin la première cause d’un programmateur « qui ne répond pas » — et sur une cible alimentée, il peut aussi l’endommager.
Une différence entre séries. Sur le connecteur 10 broches, la plupart des USBasp suivent le brochage ISP standard, mais certains exemplaires câblent les broches 4 et 6 en TXD et RXD plutôt qu’en masse. Ces deux broches ne servent pas à la programmation, et un adaptateur 10 vers 6 broches d’une autre provenance peut alors créer un court-circuit. Utilisez le câble fourni avec le programmateur, et vérifiez le repère avant de le brancher ailleurs.
Les cavaliers et les voyants
La carte porte des cavaliers qui se déplacent à la main. Trois fonctions existent, réparties différemment selon les séries :
- Alimenter la cible — le cavalier fermé, la broche VCC du connecteur ISP fournit du 5 V pris sur le port USB. À laisser ouvert si la cible est déjà alimentée par ailleurs, pour ne pas mettre deux sources en parallèle.
- Programmation lente — pour une cible dont l’horloge est sous 1,5 MHz, typiquement une puce neuve, sortie d’usine sur son oscillateur interne.
- Reprogrammer le programmateur — le microcontrôleur qui fait tourner l’USBasp est lui-même un AVR : ce cavalier permet de mettre son firmware à jour avec un second programmateur.
Les numéros ne veulent rien dire. Selon la carte, JP1, JP2 et JP3 désignent des fonctions différentes, et certaines séries n’en câblent que deux, la troisième étant remplacée par une piste à couper. Repérez la fonction, pas le numéro, et fiez-vous à la sérigraphie imprimée à côté du cavalier.
Côté voyants, un exemplaire en bon état montre une lumière fixe dès que le programmateur est branché, et une seconde qui clignote pendant la programmation. Si rien ne s’allume du tout, le pilote USB n’est pas en place : voir la section suivante.
Le pilote, selon le système
Sous Linux et macOS, il n’y a rien à installer : avrdude dialogue directement avec le périphérique. La commande de base est toujours de cette forme :
avrdude -c usbasp -p m328p
Sous Windows, le système ne reconnaît pas l’USBasp tout seul : il faut lui associer un pilote libre, une fois pour toutes. L’outil Zadig fait ce travail en trois clics, en remplaçant le pilote proposé par Windows par celui du périphérique 16c0:05dc. Une fois le pilote installé, les mises à jour de Windows ne le remettent plus en cause.
Mini-projet : programmer un ATmega328P nu et lui faire clignoter une LED
Voici le montage qui montre à quoi sert vraiment un USBasp : un microcontrôleur seul, sans carte Arduino, programmé puis mis en service. Comptez vingt minutes.
Ce qu’il faut
| Le programmateur | L’USBasp de cette page, avec son câble |
|---|---|
| Le microcontrôleur | ATmega328P en boîtier DIP, celui des cartes Arduino Uno |
| Le support | Plaque d’essai 830 points |
| L’horloge | Quartz 16 MHz et deux condensateurs de 22 pF |
| Le voyant | LED 5 mm rouge |
| La protection de la LED | Résistance 1/4 W 220 Ω |
| Les liaisons | Fils de prototypage mâle-mâle |
Le câblage
Le boîtier DIP de l’ATmega328P porte 28 pattes, numérotées dans le sens inverse des aiguilles d’une montre, repère d’encoche en haut. Le tableau donne la correspondance directe entre les signaux du programmateur et les pattes du boîtier :
Programmateur VCC | → pattes 7 et 20 du boîtier, avec un condensateur de 100 nF entre la patte 7 et la patte 8 |
|---|---|
Programmateur GND | → pattes 8 et 22 du boîtier |
Programmateur RESET | → patte 1 du boîtier |
Programmateur MOSI | → patte 17 du boîtier (PB3) |
Programmateur MISO | → patte 18 du boîtier (PB4) |
Programmateur SCK | → patte 19 du boîtier (PB5) |
| Quartz 16 MHz | → entre les pattes 9 et 10, chaque patte reliée à la masse par un condensateur de 22 pF |
| LED (patte longue) | → patte 14 du boîtier (PB0), en passant par la résistance de 220 Ω |
| LED (patte courte) | → masse |
Le quartz et ses deux condensateurs sont ce qui donnera sa cadence à la puce : sans eux, et sans le réglage des fusibles qui va avec, le microcontrôleur tournerait sur son oscillateur interne, huit fois plus lent. C’est justement ce que la gravure du bootloader règle pour vous.
Les réglages dans l’IDE Arduino
- Brancher l’USBasp sur un port USB de l’ordinateur. Le voyant d’alimentation doit s’allumer.
- Dans l’IDE, choisir comme type de carte Arduino Uno, et comme programmateur USBasp (menu Outils).
- Lancer Graver la séquence d’initialisation. Cette commande règle les fusibles d’horloge sur le quartz 16 MHz et installe le bootloader : c’est l’étape que seul un programmateur ISP peut faire.
- Ouvrir ensuite le programme ci-dessous et lancer Téléverser avec un programmateur (Ctrl + Maj + U). L’IDE passe par l’USBasp, pas par le port série.
Si avrdude ne répond pas (erreur rc=-1) sur une puce neuve, c’est presque toujours l’horloge : sortie d’usine, la puce tourne à 1 MHz et n’arrive pas à suivre le rythme du programmateur. Deux solutions, l’une ou l’autre suffit dans la majorité des cas : fermer le cavalier de programmation lente avant de réessayer, ou lancer la gravure en ligne de commande avec l’option -B 10, qui ralentit l’horloge de programmation. Une fois les fusibles gravés, la puce tourne à 16 MHz et le problème ne revient plus.
Le programme
À copier dans l’IDE Arduino, puis à téléverser avec le programmateur :
/*
* Clignotant sur un ATmega328P nu, programme par un USBasp
* Carte : ATmega328P DIP sur plaque d'essai, quartz 16 MHz
* Montage : une LED rouge et une resistance de 220 ohms sur PB0
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
const byte LED = 8; // PB0 = patte 14 du boitier = sortie D8 dans l'IDE
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH); // la LED s'allume
delay(500);
digitalWrite(LED, LOW); // la LED s'eteint
delay(500);
}Comment ça marche
- La sortie
D8de l’IDE ne correspond pas à une broche d’Arduino mais à la patte 14 du boîtier : c’est le port PB0 du microcontrôleur. La table de correspondance est la même que sur une carte Uno, ce qui permet de réutiliser les programmes existants. pinModeetdigitalWritefont ici exactement ce qu’ils font sur une carte : la bibliothèque Arduino s’occupe du registre à la place du programmeur.- La résistance de 220 Ω n’est pas facultative. Sans elle, la LED reçoit bien plus que les 20 mA qu’elle supporte et grille en quelques secondes.
- Pendant l’écriture, le voyant d’activité du programmateur clignote : c’est la seule confirmation visuelle que la puce est en train de recevoir le programme.
Variante : remettre en service une carte Arduino briquée
Même outil, autre situation, et c’est sans doute l’usage le plus fréquent. Une carte Arduino Uno R3 dont le bootloader a été effacé — un téléversement interrompu suffit — ne répond plus au port série et semble morte.
- Brancher le câble du USBasp sur le connecteur ICSP 6 broches de la carte, en alignant le repère de la broche 1 des deux côtés.
- Laisser ouvert le cavalier d’alimentation de la cible : la carte prend déjà son 5 V sur son propre port USB, et deux sources en parallèle ne font pas bon ménage.
- Choisir la carte Arduino Uno et le programmateur USBasp, puis lancer Graver la séquence d’initialisation.
- Débrancher le USBasp : la carte repart comme neuve, et le téléversement par le port USB fonctionne de nouveau.
Questions fréquentes
Faut-il obligatoirement un pilote sous Windows ?
Oui. Windows ne dispose d’aucun pilote pour cet identifiant USB, et l’USBasp apparaît en périphérique inconnu tant que rien n’est installé. L’outil Zadig règle le problème en une fois, en installant le pilote libre du fabricant à la place de celui que Windows propose.
avrdude répond « initialisation failed, rc=-1 », que faire ?
Cette erreur signifie que le programmateur ne parvient pas à faire entrer la cible en mode programmation. Dans l’ordre : vérifier que MOSI et MISO ne sont pas inversés, que RESET est bien relié, et que la cible est alimentée. Vient ensuite la question de l’horloge : une puce neuve à 1 MHz demande une programmation lente, avec le cavalier correspondant ou l’option -B 10.
Puis-je alimenter la carte cible avec le programmateur ?
Oui, en fermant le cavalier d’alimentation : la cible reçoit alors le 5 V du port USB par la broche VCC du connecteur ISP. C’est pratique pour une puce seule, et à éviter dès que la cible a sa propre alimentation. Sur certains exemplaires, un cavalier voisin permet de ne délivrer que 3,3 V sur cette broche : vérifiez la tension au multimètre avant de la brancher sur un circuit fragile, car les lignes de données, elles, restent au niveau 5 V.
Le message « warning: cannot set sck period » est-il grave ?
Non. Certains firmwares d’usine ont une fréquence d’horloge fixe et ne savent pas la modifier : avrdude signale simplement qu’il n’a pas pu appliquer sa propre vitesse, et la programmation fonctionne quand même. La mise à jour du firmware du USBasp, faisable avec un second programmateur, fait disparaître l’avertissement.
Peut-on libérer la broche de remise à zéro d’un ATtiny ?
Oui, en modifiant le fusible qui réserve cette broche. Sur un ATtiny85, la patte de reset devient alors une entrée-sortie ordinaire, ce qui rend un projet possible avec peu de pattes. Attention : ce fusible se change une seule fois dans ce sens — une puce ainsi réglée n’accepte plus la programmation par ISP et demande un programmateur haute tension pour revenir en arrière. À réserver à une puce dont on n’a plus besoin comme cible de programmation.
L’USBasp peut-il servir de convertisseur USB-série ?
Non. C’est un programmateur, pas un adaptateur de communication : il écrit dans la mémoire de la puce et s’arrête là. Pour dialoguer avec un microcontrôleur en série depuis un ordinateur, il faut un convertisseur USB vers série en plus.
À combiner avec
Pour brancher durablement un montage sans câble ruban, une barrette de broches mâles 2,54 mm permet de souder sur la carte un connecteur ISP au pas standard, et de repartir de là avec de simples fils. Et si vous partez de zéro, le kit Arduino Uno starter apporte la plaque d’essai, les fils, les LED et les résistances qui complètent ce programmateur.












