Pb avec une carte S2 mini

Bonsoir,

j'ai commandé (et reçu aujourd'hui) deux cartes :

C'est pas cher mais ça marche pas... enfin pas encore (j'espère) puisque piloté par un neuneu (moi)

Plus sérieusement, sur mon PC linux, la carte semble reconnue :

# dmesg
[531460.743058] usb 1-4: new full-speed USB device number 97 using xhci_hcd
[531460.896751] usb 1-4: New USB device found, idVendor=303a, idProduct=0002, bcdDevice= 7.23
[531460.896761] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[531460.896766] usb 1-4: Product: ESP32-S2
[531460.896770] usb 1-4: Manufacturer: Espressif
[531460.896774] usb 1-4: SerialNumber: 0
[531460.900045] cdc_acm 1-4:1.0: ttyACM0: USB ACM device

dans l'IDE arduino 2.10 j'arrive a sélectionner le port /dev/ttyACM0 et il trouve une carte intitulée : Deneyap mini v.2

J'essaye juste de compiler et uploader l'exemple blink et là ça ne marche pas : Après la compilation, j'ai :

Performing 1200-bps touch reset on serial port /dev/ttyACM0
Waiting for upload port...
No upload port found, using /dev/ttyACM0 as fallback
python3 "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool.py" --chip esp32s2 --port "/dev/ttyACM0" --baud 921600  --before default_reset --after hard_reset write_flash  -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x1000 "/tmp/arduino/sketches/9C8793DD19D057248F82568DCE8F90B1/Blink.ino.bootloader.bin" 0x8000 "/tmp/arduino/sketches/9C8793DD19D057248F82568DCE8F90B1/Blink.ino.partitions.bin" 0xe000 "/home/christian/.arduino15/packages/esp32/hardware/esp32/2.0.9/tools/partitions/boot_app0.bin" 0x10000 "/tmp/arduino/sketches/9C8793DD19D057248F82568DCE8F90B1/Blink.ino.bin" 
esptool.py v4.5.1
Serial port /dev/ttyACM0
Connecting...Traceback (most recent call last):
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool.py", line 34, in <module>

    esptool._main()
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/__init__.py", line 1032, in _main
    main()
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/__init__.py", line 674, in main
    esp = esp or get_default_connected_device(
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/__init__.py", line 921, in get_default_connected_device
    _esp.connect(before, connect_attempts)
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/loader.py", line 640, in connect
    last_error = self._connect_attempt(reset_strategy, mode)
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/loader.py", line 525, in _connect_attempt
    reset_strategy()  # Reset the chip to bootloader (download mode)
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/reset.py", line 83, in __call__
    self._setDTRandRTS(False, False)
  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/reset.py", line 58, in _setDTRandRTS
    fcntl.ioctl(self.port.fileno(), TIOCMSET, struct.pack("I", status))
OSError: [Errno 71] Protocol error
Failed uploading: uploading error: exit status 1

Mais c'est un peu obscure pour moi...

Quelqu'un pourrait-il me donner un coup de pouce ?

Je viens de voir en bas de page la très courte « Description du produit » :

firmware par défaut : MicroPython.

Qu'est ce que cela veut dire et serait-ce cela le problème ?

Sur Amazon la plupart des vendeurs ne s'occupent même pas pour les spécifications des produits. Ne te fie pas à cela, ils ont écrit quelque chose au hasard.

Moyennement étonné je suis. Mais comme j'avais croisé ce type de carte dans divers posts de forum et tutos je me suis lancé.

J'ai bien essayé de modifier les réglages « au hasard » aussi mais comme prévu, ça ne donne rien.

En reprenant à zéro et en essayant de tout noter pour poster ici je suis arrivé à un premier sketch fonctionnel sur la carte. J'ai l'impression que la première tentative d'upload sur la carte échoue et que la deuxième passe. Un peu chiant surtout si la compilation est un peu plus longue qu'un simple "blink" :frowning:

Mais si jamais ça parle à quelqu'un, voici la sortie de console lors de l'erreur :

[je coupe la partie compilation qui se passe bien]
...
Le croquis utilise 260430 octets (19%) de l'espace de stockage de programmes. Le maximum est de 1310720 octets.
Les variables globales utilisent 27540 octets (8%) de mémoire dynamique, ce qui laisse 300140 octets pour les variables locales. Le maximum est de 327680 octets.
Performing 1200-bps touch reset on serial port /dev/ttyACM0
Waiting for upload port...
Upload port found on /dev/ttyACM0
python3 "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool.py" --chip esp32s2 --port "/dev/ttyACM0" --baud 921600  --before default_reset --after hard_reset write_flash  -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x1000 "/tmp/arduino/sketches/C8F7E783CBEB76E48B7DDBB59E7B061F/Blink.ino.bootloader.bin" 0x8000 "/tmp/arduino/sketches/C8F7E783CBEB76E48B7DDBB59E7B061F/Blink.ino.partitions.bin" 0xe000 "/home/christian/.arduino15/packages/esp32/hardware/esp32/2.0.9/tools/partitions/boot_app0.bin" 0x10000 "/tmp/arduino/sketches/C8F7E783CBEB76E48B7DDBB59E7B061F/Blink.ino.bin" 
esptool.py v4.5.1
Serial port /dev/ttyACM0

A fatal error occurred: Could not open /dev/ttyACM0, the port doesn't exist
Failed uploading: uploading error: exit status 2

Ton ordinateur n'a pas l'air de détecter le port.

Petite question :
As-tu quelque chose de connecté à ta carte ? En particulier les pins RX et TX ?
Si oui déconnecte-le/les.

Y avait-il un ancien programme dessus modifiant le sens des broches RX et TX ?
Si oui force au moins le boulot reset de la carte.

Quelle est la vitesse de téléversement ?
Le câble et le port fonctionnent bien ?
As-tu essayé avec un PC avec Windows ?

C'est ce que je me suis dit (sans avoir la moindre piste d'explication ni solution) mais cela arrive apparemment juste avant le transfert du code compilé, une fois sur deux.

Rien du tout. Testé sur les deux cartes (une seule pour les quelques essais qui ont fonctionné) tout au plus les broches soudées sur l'une des deux.

Rien du tout à priori : elles sortent de l'emballage.

la manip' bouton reset enfoncé + clic sur le bouton zéro (ou le contraire je sais plus, je n'ai pas la carte sous la main) permet à chaque fois de retrouver la connexion avec le port. Débracher/brancher aussi, mais c'est ch...

RAS avec une autre carte freenode

Je regarde dès que possible, demain pour le PC windows quand je serai au collège.

Merci de ton aide.

Bonsoir

Sur cette carte Lolin S2 Mini le téléversement se fait par le port USB natif, pas par un composant intermédiaire relié à RX et TX. (On peut toutefois ajouter un tel composant USB/UART pour télécharger, le bootloader des ESP32-S2 connait les deux voies)

le port USB pour téléversement apparait toujoiyrs (de mémoire) en forçant le bootloader Reset avec l'autre bouton enfoncé

il apparait aussi automatiquement ......mais pas toujours.....sur demande de l'IDE, j'ai eu aussi des râtés en tentant un téléchargement automatique, sans action préalable sur les BP
(simple impression , aucune certitude : l'IDE déclenche le bootloader mais n'attend pas assez pour que l'ESP32-S2 y ait démarré son USB natif, résultat le téléversement commence parfois avant que le système d'exploitation ait vu apparaître le port série)

le port série USB natif pour la communication est lancé au démarrage du sketch si l'option 'USB CDC on Boot' est activée dans l'IDE

N.B la présence initiale d'un firmware microPython est sans conséquence si on utilise l'IDE Arduino qui fait 'table rase' lors d'un téléversement pour mettre en Flash tout ce qui est nécessaire à l'exécution du code utilisateur

C'est bien ce que j'envisage de faire et comme ça que je le comprenais.

Donc pour être sûr de la réussite de la manip' je clique de la main droite sur le bouton de téléchargement :arrow_right: dans l'IDE et de la main gauche sur le bouton RST en même temps ?

Il faut maintenir le bouton enfoncé durant toute la procédure ou après la compilation et avant le téléchargement ?

On est bien d'accord que dans l'IDE il n'y a que compilation PLUS téléchargement qui soit possible, il n'y a pas de téléchargement seul ?

Je regarderai tous ces réglages tout à l'heure...

Merci pour ces explications

Non , pour activer manuellement le bootloader de l'ESP32-S2:
1appui maintenu sur le bouton marqué 0 (GPIO0)
2-appui bref sur le bouton RST
3-relâchement du bouton marqué 0
lancer ensuite le téléversement( + compilation)

(Avec la manip des boutons l'ESP32-S2 trouvera un GPIO0 à la masse lors du reset, c'est une combinaison qui luifait démarrer en mode bootloader, passe en mode 'écoute' et attend que, coté ordi , le protocole de téléchargement se manifeste , via esptool en général)

Merci, j'avais déjà lu cette manip sans comprendre son intérêt et son fonctionnement.

Activer le bootloader par l'état , au reset, d'un GPIO particulier (9 ou 0 selon les ESP32) est un procédé général sur les ESP32

point fort des ESP32 : le coeur du bootlaoder est figé en ROM et il est toujours possible de l'activer par action sur un GPIO particulier

les ESP32 disposant d'un USB natif (-C3, -S2, -S3......) semblent égalemnt être capable d'activer leur bootloader par une méthode supplémentare, via les signaux D+ et D+ de l'USB , d'où d'activation automatique du bootloader ........qui peut être capricieuse.....(pb côté ESP ? pb côté IDE ?)

Les ennuis ne sont pas finis :frowning:

l'upload de fichiers pour littlefs ne marche pas non plus :

Chip : esp32s2
Using partition scheme from Arduino IDE.
Start: 0x290000
Size : 0x160000
mklittlefs : /home/christian/.arduino15/packages/esp32/tools/mklittlefs/3.0.0-gnu12-dc7f933/mklittlefs

esptool : /home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool.py

[LittleFS] data   : /home/christian/Arduino/esp-newton01/data
[LittleFS] offset : 0
[LittleFS] start  : 2686976
[LittleFS] size   : 1408
[LittleFS] page   : 256
[LittleFS] block  : 4096
->/index.html
->/script.js
->/style.css
[LittleFS] upload : /tmp/arduino_build_998955/esp-newton01.littlefs.bin
[LittleFS] address: 2686976
[LittleFS] port   : /dev/ttyACM0
[LittleFS] speed  : 921600
[LittleFS] mode   : dio
[LittleFS] freq   : 80m

->esptool.py v4.5.1
->Serial port /dev/ttyACM0
_>Traceback (most recent call last):
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool.py", line 34, in <module>
_>    esptool._main()
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/__init__.py", line 1032, in _main
->Connecting........
_>    main()
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/__init__.py", line 674, in main
_>    esp = esp or get_default_connected_device(
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/__init__.py", line 921, in get_default_connected_device
_>    _esp.connect(before, connect_attempts)
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/loader.py", line 640, in connect
_>    last_error = self._connect_attempt(reset_strategy, mode)
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/loader.py", line 525, in _connect_attempt
_>    reset_strategy()  # Reset the chip to bootloader (download mode)
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/reset.py", line 89, in __call__
_>    self._setDTRandRTS(False, False)  # IO0=HIGH, done
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/reset.py", line 58, in _setDTRandRTS
_>    fcntl.ioctl(self.port.fileno(), TIOCMSET, struct.pack("I", status))
_>OSError: [Errno 71] Protocol error
LittleFS Upload failed!

Et ceci que je ne fasse rien de particulier ou que je fasse la manip avec les deux boutons...

Bonsoir

L'utilitaire dont tu te sers pour uploader pour LittleFS est-il décrit comme compatible avec l'ESP32-S2 , en particulier en USB natif ?

ici on voit qu'il tente de manipuler GPIO0 pour activer le bootloader :

File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/loader.py", line 640, in connect
_>    last_error = self._connect_attempt(reset_strategy, mode)
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/loader.py", line 525, in _connect_attempt
_>    reset_strategy()  # Reset the chip to bootloader (download mode)
_>  File "/home/christian/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/reset.py", line 89, in __call__
_>    self._setDTRandRTS(False, False)  # IO0=HIGH, done

en USB natif ces tentatives sont vaines, GPIO0 ne peut être titillé que par action manuelle sur son BP associé

De pire en pire, je désespère :sob:
Ce matin je suis arrivé à uploader un blink, et là plus rien du tout, pourtant j'ai l'impression de n'avoir rien changé.

Ci-dessous les réglages de l'IDE (2.1.0)

Il fonctionne parfaitement avec un ESP32-S2 de freenove

J'ai bien essayé de titiller les boutons avant l'upload : rien à faire :frowning:

Dans ce cas tu passes peut être par RX, TX via un CH340 ou équivalent

C'est à dire ?

Correction, l'autre carte (qui marche bien) est une ESP32-S3 :
https://www.amazon.fr/dp/B0BMQ8F7FN

C'est à dire ?

Sur ta carte REENOVE avec un ESP32-S3 tu as deux embases USB.

-l'uneest reliée directement à l'ESP32-S3 à 2 GPIO portant les signaux D+ et D- de l'USB (ce chemin utilise l'USB interne de la puce ESP32-S3 = USB 'natif')

-l'autre est reliée à un circuit intégré d'interface USB UART (CH340, CP2102, FTDI232 ....etc.....) qui se connecte aux GPIO TX et RX de l'ESP32-S3, c'est une fonction USB externe à la puce ESP32-S3

j'ai la même chose sur une carte avec un ESP32-C3 avec 2 embases USB et je peux pour le téléversement ou pour la communicationchoisir l'un ou l'autre chemin. l'un fonctionne parfois moins bien que l'autre.... ça me rappelle quelques bizarreries de port USB rencontrées autrefois avec l'USB natif des cartes Leonardo avec leur ATMega 32U4.....

dans le cas de la petite carte LOLIN S2 mini seule existe la voie 'USB natif', idem pour la carte LOLINC3 mini

Bon, j'ai fait deux modif (c'est un peu c... parce que je ne sais pas laquelle à le plus d'influence)

1. il y a vraisemblablement un bug dans l'IDE (ou au moins un méli-mélo entre les deux versions installées) : ce matin j'étais au collège et comme l'IDE m'indiquait qu'il était déconnecté du web, j'ai réglé le proxy. Sauf que en rentrant ce soir, j'ai décoché le réglage dans les prefs. mais ce n'est pas pris en compte. J'ai été obligé de modifier à la main le fichier de config arduino-cli.yaml où se planque le réglage. Je m'en suis rendu compte en constatant que le download des fichiers de mise à jour au démarrage de l'IDE n'aboutissaient jamais.

Après ce premier changement j'ai pu relancer la compil-upload de blink et l'upload des fichiers sur littlefs a été OK.

2. j'ai baissé la vitesse Upload Speed à 115200. @techvij l'avait évoqué plus haut... L'upload a fonctionné après compilation. Le sketch n'a pas l'air de marcher mais c'est déjà une avancée.

Mais le coup du proxy, je ne le comprend vraiment pas !