Dfu-util: No DFU capable USB device available (Arduino UNO R4 Minima)

Bonjour à toutes et tous,

Je totalement débutant en programmation avec Arduino
Je viens d'acheter un Arduino UNO R4 Minima

Quand j'essaye de téléverser, j'ai ce message d'erreur :

dfu-util: Cannot open DFU device 2341:0069 found on devnum 14 (LIBUSB_ERROR_ACCESS)
dfu-util: No DFU capable USB device available
Failed uploading: uploading error: exit status 74

Ici il y a une solution qui a fonctionné sous windows
https://forum.arduino.cc/t/dfu-error-cannot-upload-sketch-to-r4-minima/1143436/3

I had this issue but when i ran

C:....\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.0.1\drivers\dpinst-amd64.exe
 as an administrator I was able to upload sketches.

Le plus inquiétant c'est que ces fichiers sont présents sur mon système :
$HOME/.arduino15/packages/arduino/hardware/avr/1.8.6/drivers/dpinst-amd64.exe
$HOME/.arduino15/packages/arduino/hardware/renesas_uno/1.2.1/drivers/dpinst-amd64.exe

Que font là des exécutables pour MS Windows (je suis sous Debian)?
dpinst-amd64.exe: PE32+ executable (GUI) x86-64, for MS Windows

Merci d'avance,

Benoît

Bonjour

Il est possible que ce ne soit qu'une question de droit d'accès au fichier de périphérique qui permet d'accéder à ton Arduino UNO R4 Minima.

Est-ce que ton compte utilisateur est dans la liste des comptes utilisateurs du groupe dialout ?

Comme on peut le voir ci-desous,
mon compte utilisateur (mic) en fait bien partie :

mic@deb12:~$ groups
mic dialout cdrom floppy audio dip video plugdev netdev bluetooth lpadmin scanner libvirt
mic@deb12:~$

Si ton compte utilisateur n'est pas dans la liste des utilisateurs du groupe dialout, il te faudrait ajouter ton compte utilisateur (par exemple : benoitlst) à ce groupe en lançant la ligne de commande suivante avec les privilèges du compte root :

usermod -a -G dialout benoitlst

ensuite, il te faudra fermer ta session (<=> te déconnecter) et la modification sera prise en compte à partir de la prochaîne ouverture de session.

Bonjour,

Merci pour ta réponse,

groups
benoit dialout sudo plugdev users vboxusers

je suis bien dans le groupe dialout :
less /etc/group
dialout:x:20:benoit

Je l'avais fait avec :
adduser benoit dialout

Mais à ma connaissance le résultat est le même.

Pour info, j'ai dû installer le support pour Arduino UNO R4 Boards pour que l’IDE reconnaisse ma carte.

--
Benoît

Bonjour
Je me répond à moi-même.
J'ai trouvé la réponse ici
https://support.arduino.cc/hc/en-us/articles/9005041052444-Fix-udev-rules-on-Linux

Donc la dernière ligne du tableau concerne la UNO R4 Minima qui me pose problème :
Suivre les instructions en suivant l'url de la colonne de droite :
https://support.arduino.cc/hc/en-us/articles/9005041052444-Fix-udev-rules-on-Linux#renesas

C.A.D :
Télécharger ce script :
post_install.sh
Le télécharger l'exécuter en root
Ne pas oublier de le rendre exécutable avant :wink:

chmod a+x post_install.sh && ./post_install.sh

Voilà, ça marche ! :wink:

Je n'avais pas pensé à une règle UDEV manquante.
J'utilise le fichier provenant de platformIO qui recense toutes les cartes gérées par platformIO, ce qui fait que je n'y pense pas, c'est de la routine.
/etc/udev/rules.d/99-platformio-udev.rules

En fait, ce qu'on t'a fait faire est bien obscur pour faire une chose simple.

Ce que post_install.sh fait, c'est tout simplement de rédiger une règle UDEV.
L'emplacement est
/etc/udev/rules.d/nom_du_fichier.rules
Sous Debian l'emplacement est consultable en utilisateur normal, il n'est modifiable qu'avec les droits root.

Dans post_install.sh, on trouve la ligne :
`SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", MODE:="0666"

Dans ce fichier de platformIO , /etc/udev/rules.d/99-platformio-udev.rules, je lis :

# Arduino boards
ATTRS{idVendor}=="2341", ATTRS{idProduct}=="[08][023]*", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"

Les informations pour créer soi-même la règle UDEV pour une carte se trouvent en faisant sous root :
Exemple avec une carte ESP32-C3 avec utilisation d'un CH341

root@altair:/home/b# dmesg |tail -10
[18838.919937] usb 1-3: new full-speed USB device number 7 using xhci_hcd
[18839.073647] usb 1-3: New USB device found, idVendor=1a86, idProduct=7522, bcdDevice= 2.64
[18839.073660] usb 1-3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[18839.073666] usb 1-3: Product: USB Serial
[18839.099849] usbcore: registered new interface driver usbserial_generic
[18839.099857] usbserial: USB Serial support registered for generic
[18839.101728] usbcore: registered new interface driver ch341
[18839.101737] usbserial: USB Serial support registered for ch341-uart
[18839.101749] ch341 1-3:1.0: ch341-uart converter detected
[18839.102153] usb 1-3: ch341-uart converter now attached to ttyUSB0

La même chose avec cette fois utilisation de l'USB natif de l'ESP32-C3

root@altair:/home/b# dmesg |tail -10
[20648.455939] ch341 1-3:1.0: device disconnected
[20651.663737] usb 1-3: new full-speed USB device number 9 using xhci_hcd
[20651.813326] usb 1-3: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.01
[20651.813339] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[20651.813344] usb 1-3: Product: USB JTAG/serial debug unit
[20651.813348] usb 1-3: Manufacturer: Espressif
[20651.813352] usb 1-3: SerialNumber: EC:DA:3B:BF:03:CC
[20651.838832] cdc_acm 1-3:1.0: ttyACM0: USB ACM device
[20651.838847] usbcore: registered new interface driver cdc_acm
[20651.838848] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

Dans le premier cas la carte est vu sous ttyUSB0, dans le second cas la carte est vue comme ttyACM0.

Edit :
je viens de découvrir que ls -l /dev/ttyUSB0
donne l'heure de connexion du module.

b@altair:~$ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 13 sept. 18:24 /dev/ttyUSB0

Merci pour ce complément d'information.

En effet, il aurait suffit de créer un fichier :
/etc/udev/rules.d/60-arduino-renesas.rules

et d'y copier la ligne :

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", MODE:="0666"

Sans oublier de recharger

Si "ATTRS{idVendor}=="2341"" est codé en dure dans le script post_install.sh

Ça veut dire qu'il est le même pour toutes les cartes Arduino ?

--
Benoît

Si l'interface est un circuit spécialisé USB/UART c'est ce circuit qui seul importe.
Si le microcontrôleur est doté d'un USB natif, c'est plus compliqué. Le produit étant alors vu en ACMx au lieu de USBy.
Dans ce cas, ACMx, si j'ai bien compris, le produit peut être vu comme une mémoire de masse. Je ne sais pas si c'est systématique.
Edit : si cela parle de DFU ce doit être une mémoire de masse.

Je ne connais pas la UNO R4, la UNO (R1,2,3avec atmega328p) avait inauguré l'interface USB/UART avec un petit micro Atmel (atmega8U2 puis atmega16U2), ce sont les références de ce petit micro qui interviennent.

Quand tu fais : ls -l /dev/tty*
tu obtiens un ttyUSBx ou un ttyACMy ?

C'est bien ça "ACM0"

Par contre, il est bien vu comme tel, mais n'est pas "monté" en tant que mémoire de masse.
En tout cas, il n'est pas listé comme disque monté, mais ça je suppose que c'est normal.

crw-rw-rw- 1 root dialout 166, 0 13 sep 20:37 /dev/ttyACM0