ATTINY85 : Clone Digispark non reconnu (mais récupéré)
Article mis en ligne le 22 juin 2021

par Rémi

Pour un petit projet, j’ai voulu bricoler avec un attiny85.

Mais comme le processeur tout seul, ce n’est pas toujours pratique, je me suis dirigé vers un module appelé Digispark. Branchement en USB pour la programmation, c’est pratique. Et il y a un régulateur de tension pour une connexion externe.
 Sauf que...

Sauf que l’achat sur le net n’est pas toujours sans faille. Sur les 5 que j’ai acheté (à 1€ pièce, frais de port compris), aucun n’était reconnu par le noyau Linux de ma machine (Debian stable à jour au 10/06/2021).

debian kernel: [36042.347341] usb 3-2: new low-speed USB device number 6 using xhci_hcd
debian kernel: [36042.475338] usb 3-2: device descriptor read/64, error -71
debian kernel: [36042.711263] usb 3-2: device descriptor read/64, error -71

Le port étant en USB3, j’ai tenté un hub USB2, mais pas mieux.
J’ai suivie plusieurs pistes, mis un câble, sans câble, utilisé tous les ports de la machine, mais rien n’y a fait.
En désespoir de cause, j’ai fini par me résoudre à changer le boot loader. Mais évidemment, ça ne s’est pas passé comme dans les livres/blogs. Voilà pourquoi je vais vous montrer mes problèmes et mes solutions. Elles ne sont pas universelles, ce sont juste celles qui m’ont été utile. Je suppose, si vous tentez d’appliquer ce que j’écris, que vous connaissez l’IDE Arduino, au minimum la manipulation des sketchs, .... ?

Toutes les opérations ont été faite à partir d’un Arduino Nano. Je n’avais que ça sous la main, à vrai dire.

  • LE lien qui m’a aidé : instructable et accessoirement un site qui reprend les mêmes explications, mais en français. Plus pas mal de forums.
  • Tous les fichiers utilisés sont sur le site d’Instructable bien sûr
  • La première partie d’Instructable, explique qu’il faut réinitialiser le Digispark. Pour cela, il faut appliquer 12v sur la pin 5 de l’attiny85. N’ayant pas de pile, j’ai utilisé une alimentation d’ordinateur, reconvertie en alim de labo. L’avantage a été de pouvoir faire tous les branchements, et au moment d’appliquer le 12v, j’ai appuyé sur le bouton on/off de l’alimentation. Ça a été très pratique. Le schéma de montage est assez simple, il ne m’a fallu qu’une résistance de 10 kOhm (marron noir rouge pour info). D’après les commentaires sur Instructable, les autres résistances ne sont pas nécessaires.

     
    Le montage : reset du Digispark
     
     
     
     

  • Il faut, pour réaliser ce fameux "reset", charger un sketch dans l’interface Arduino, le télé verser dans le Nano, puis appliquer la procédure.
    Ce que j’ai fait :
    • Télécharger sur le site en français Sketch HV_Programmer_for_ATtiny85, puis charger le sketch dans l’IDE (et le sauvegarder cela évite de tout perdre en cas de mauvaise(s) manipulation(s)) ;
    • compiler d’abord pour voir s’il n’y a pas d’erreur (simple sécurité, je suis prudent) ;
    • vérifier que vous avez le bon port de configuré pour communiquer avec le Nano quand celui-ci est branché (/dev/ttyUSB0 chez moi) ;
    • ouvrir de terminal de l’IDE Arduino ;
    • télé verser dans l’Arduino (jusqu’ici je n’ai pas eu de problème) ;
    • quand, dans le terminal, il est demandé de taper une lettre puis ’Enter’, mettre en marche l’alimentation 12v, et uniquement à ce moment-là ;
    • taper ’z’ puis ’Enter’ (le ‘z’ n’a pas plus d’importance qu’une autre lettre)
    • 1 seconde après, tout est fini. Pas de fumée, pas d’explosion.
    • extinction de l’alim 12v, déconnexion du Nano de l’USB, puis déconnexion de tous les fils du Digispark.

C’est après que cela s’est compliqué.
Jusqu’ici, j’ai utilisé la version 1.6.x de l’IDE Arduino. Ça fonctionnait bien, même sur la très petite machine que j’utilisais. Mais, il faut flasher le nouveau boot loader. Pour cette seconde partie, il va falloir utiliser le Nano en mode ISP. Cela demande de brancher le Digispark différemment sur le Nano, et d’envoyer le programme aussi d’une façon un peu particulière. Sans oublier le condensateur (jai utiliser un 100µF/25V, la patte négatif sur gnd du Nano)

 
Le montage : l’Arduino Nano en mode ISP pour le module Digispark
 

  • Pour passer l’Arduino Nano en mode ISP, il faut simplement lui dire de charger le sketch ArduinoISP. Celui-ci se trouve dans la bibliothèque fournie avec l’IDE : ’Fichier’->’Exemples’->’11.ArduinoISP’->’ArduinoISP’
  • Configuration du matériel : ’Outils’->"Programmateur : AVR as ISP’->’Arduino as ISP’
  • Programmateur :
  • Télé verser le sketch dans l’Arduino Nano et si tout se passe bien, tant mieux.
  • ce qu’il s’est passé (je vous passe les détails de recherches)
    • vérifier toujours que le port USB sur lequel est connecté le Nano n’a pas changé du genre ttyUSB0 => ttyUSB1
    • vérifier les droits sur ttyUSBx (eh oui, un coup sous root, un coup en user simple...)
    • vérifier les connexions entre le Nano et le Digispark (c’est la base, mais c’est chiant quand on se fait avoir)
    • se méfier des lignes de commande sous Windows : il faut les adapter pour linux. Là-dessus, je n’ai pas vraiment perdu de temps, mais il faut bien comprendre que les chemins d’accès aux fichiers ne sont pas les même, il faut parfois les forcer...
    • vérifier les versions de l’IDE Arduino et attention au boot loader d’Arduino : tout a fonctionné jusqu’à ce que je tente de flasher le nouveau boot loader du digispark :
      avrdude stk500_getsync() attempt 1 of 10 not in sync resp=0x00

      Et après plusieurs jours, LA solution : la version de l’IDE Arduino propose dans ’Tools’->’Processor :"ATmega328P" ’ le choix de 3 boot loader Arduino. Il m’a fallut choisir ’ATmega 328P (Old Bootloader)’ dans la dernière version (1.8.16) !!! Après l’avoir modifié, tout passe à merveille, même un simple ‘blink.ino’ dans le Nano fonctionne : c’est un très bon test pour être sûr que tout est en bon ordre.

  • Maintenant que tout est prêt, pour flasher le nouveau boot, voilà comment faire :
    • récupérer et compiler la dernière version de micronucleus, qui est le boot loader du digispark. Ne pas oublier d’installer les dépendances pour la compilation (libusb-dev, gcc-avr, ...)
      $ cd ~
      $ git clone https://github.com/micronucleus/micronucleus.git
      $ cd micronucleus/commandline/
      $ make
    • Une fois ceci fait, vous avez deux fichiers à récupérer et installer :
      • micronucleus/firmware/releases/t85_default.hex
      • micronucleus/commandline/micronucleus (fichier exécutable)
    • Le fichier t85_default.hex est à copier dans le répertoire ou se trouve l’installation d’avrdude (/opt/... chez moi)
      $ sudo cp micronucleus/firmware/releases/t85_default.hex /opt/Arduino-1.8.16/hardware/tools/avr/bin/
    • le second fichier permet de communiquer entre l’IDE Arduino et le Digispark une fois tout terminé, il faut donc le copier ici (les chemins sont peut être légèrement différent chez vous) :
      $ sudo cp micronucleus/commandline/micronucleus ~/.arduino15/packages/digistump/tools/micronucleus/2.0a4/
    • Tout est prêt pour envoyer ? Alors allons y !
      $ cd /opt/Arduino-1.8.16/hardware/tools/avr/bin/
      $ ./avrdude -v -pattiny85 -cstk500v1 -C ../etc/avrdude.conf -P /dev/ttyUSB0 -b19200 -Uflash:w:upgrade-t85_default.hex -U lfuse:w:0xF1:m -U hfuse:w:0xD5:m -U efuse:w:0xFE:m

      Il faut vraiment faire attention que le fichier t85_default.hex soit dans le même répertoire que avrdude (là où nous nous trouvons). Les erreurs arrivent : mauvais port USB, pas de synchro avec l’Arduino, manque de fichier de conf… Bon j’en ai parlé plus haut, la ligne de commande est bonne, il faut vraiment faire attention aux détails ! Sinon reprenez :

    • télé versement de ’Fichier’->’Exemples’->’11.ArduinoISP’->’ArduinoISP’ ;
    • passage en terminal linux, et exécution de ./avrdude ..... comme ci-dessus ;
    • démontage de l’Arduino et du digispark ;
    • retour dans le terminal, tail -f /var/log/syslog
    • instant de vérité : branchement du Digispark => Cool !!! à présent il est vu comme un Digispark !!! Et surtout, il est correctement vu comme périphérique USB avec VID/PID !!! Et je n’ai pas besoin de passer par un HUB, je suis sur mon port USB3 :
      debian kernel: [38005.194916] usb 3-2: new low-speed USB device number 14 using xhci_hcd
      debian kernel: [38005.345520] usb 3-2: New USB device found, idVendor=16d0, idProduct=0753, bcdDevice= 2.05
       debian kernel: [38005.345529] usb 3-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0

Premier test : télé verser le blink habituel dans le nouveau Digispark afin de vérifier le bon fonctionnement :

  • Fichier->Exemples->Basic->Blink
  • Modifier le type de matériel pour Digispark 16,5mhz
  • ne pas brancher le module, mais lancer le télé versement. Quand la console d’erreur demande de brancher le module, il reste 60 secondes pour le faire
  • Je branche ... ça clignote, ça gigote ... Et ça marche !!!!

Bon, les modules m’ont certes couté très peu en argent, mais beaucoup en effort pour comprendre qu’il fallait remettre (ou installer tout simplement) un boot loader. Je me demande si en fin de compte, il y en a un. L’avantage, c’est qu’à présent, il y a la dernière version, ET j’ai appris comment faire.

Merci de m’avoir lu jusqu’ici. (n’oubliez pas qu’il y a un lien PayPal, je fais ça pour "la communauté" mais ça me paiera une bière)