[RESOLU] IDE 1.0.2 & Leonardo : le port COM disparait

Bonsoir

J'ai un problème avec l'IDE 1.0.2 et ma Léonardo (Vinciduino en fait).

Apparemment l'IDE 1.0.2 introduit un changement de comportant sur la fin du téléchargement.
Jusqu'à présent, une fois le téléchargement terminé, l'IDE ne faisait rien d'autre pendant que l'ATmega redémarre

Or apparemment dans la v1.0.2, l'IDE essaye de remettre le port série à la vitesse définie pour le moniteur série (il y a une nouvelle trace en blanc après la fin de AVRdude).

Ce qui pose un problème avec la Léonardo puisque à ce moment précis l'ATmega est en train de redémarrer et le port USB n'est pas en mode port série.
Sur mon PC (Win7-64) cela semble crasher le driver du port série et le port COM disparait. Du moins la Léonardo apparait bien dans le gestionnaire de périphériques, le port COM indiqué est le bon mais ce port COM n'existe pas (il n'apparait pas dans la liste des Serial Port).
Il faut que je supprime le périphérique et réinstalle le driver pour qu'il revienne.

Retour en IDE 1.0.1 et tout remarche comme avant.

Suis-je le seul a constater ce problème ?

==========================================
SOLUCE :
Le problème venait du fait que j'ai bricolé les réglages des ports COM de façon a utiliser le port même port COM (COM3) à la fois pour le bootloader et Serial. Avec l'IDE 1.0.2 ca ne pardonne pas !
Voir les explications ci-dessous.

Ah le progrès... Je ne peux malheureusement pas te dire, je suis resté à la version 1.0.1, et avec ce que tu dis, je préfère ne pas upgrader.

Si ce que tu remarques est vrai, on peut se poser des questions sur les idées de l'équipe de dev de l'IDE... Ca serait pire qu'un bug!

Bonjour

je viens de vérifier à l'instant et ne peut reproduire le probleme
La ligne blanche 'setting baud rate to 57600 on COM6' (exemple) coincide bien avec le démarrage de l'application flashée à l'instant.

Installation fraiche de l'IDE 1.0.2 sur un PC sous Seven 64 bits (au passage j'ai admiré l'installation du driver Leonardo très simplifiée maintenant)
Carte Vinciduino qui a déjà reçu le bootloader Caterina des Leonardo
Le ping-pong des ports séries virtuels (auto-reset, chargement , redémarrage de l'appli avec le bon débit) se passe bien quelque soit le nombre de bauds choisi pour l'application. (COM5 pour le bootloader, COM6 pour l'application sur cette installation fraïche)

Aurais tu des ports séries virtuels BlueTooth en standby, sur mon PC XP utilisé habituellement ça ralentit toutes les situations susceptibles de générer des scans de ports série ? Le PC 7-64bits est celui de ma compagne, zero ports série virtuels avant Leonardo/Vinciduino !

Je n'ai aucun autre port virtuel, en tout cas actif (aucun autre port COM)

Voici ce qui se passe si je fait un upload depuis l'IDE 1.0.2 :

Binary sketch size: 5 588 bytes (of a 28 672 byte maximum)
Forcing reset using 1200bps open/close on port COM3
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {} => {}
PORTS {} / {} => {}
PORTS {} / {COM3, } => {COM3, }
Found Leonardo upload port: COM3
D:\Projets\tools\arduino\hardware/tools/avr/bin/avrdude -CD:\Projets\tools\arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -P\.\COM3 -b57600 -D -V -Uflash:w:d:\tmp\build5839210021584487937.tmp\blink.cpp.hex:i

avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "D:\Projets\tools\arduino\hardware/tools/avr/etc/avrdude.conf"

Using Port : \.\COM3
Using Programmer : avr109
Overriding Baud Rate : 57600
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

......

Connecting to programmer: .avrdude: Send: . [1b]
avrdude: Send: S [53]
avrdude: Recv: C [43]

avrdude: Recv: A [41] T [54] E [45] R [52] I [49] N [4e]
avrdude: Send: V [56]
avrdude: Recv: 1 [31] 0 [30]
avrdude: Send: v [76]
avrdude: Recv: ? [3f]
avrdude: Send: p [70]
avrdude: Recv: S [53]
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
avrdude: Send: a [61]
avrdude: Recv: Y [59]
Programmer supports auto addr increment.
avrdude: Send: b [62]
avrdude: Recv: Y [59]
avrdude: Recv: . [00]
avrdude: Recv: . [80]
Programmer supports buffered memory access with buffersize=128 bytes.
avrdude: Send: t [74]

Programmer supports the following devices:
avrdude: Recv: D [44]
Device code: 0x44
avrdude: Recv: . [00]

avrdude: Send: T [54] D [44]
avrdude: Recv: . [0d]
avrdude: devcode selected: 0x44
avrdude: Send: P [50]
avrdude: Recv: . [0d]
avrdude: AVR device initialized and ready to accept instructions

..........

avrdude: 5588 bytes of flash written
avrdude: Send: L [4c]
avrdude: Recv: . [0d]
avrdude: Send: E [45]
avrdude: Recv: . [0d]

avrdude done. Thank you.

Setting baud rate to 9600 on COM3
processing.app.SerialException: Serial port 'COM3' already in use. Try quitting any programs that may be using it.
at processing.app.Serial.touchPort(Serial.java:119)
at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:201)
at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)
at processing.app.Sketch.upload(Sketch.java:1671)
at processing.app.Sketch.exportApplet(Sketch.java:1627)
at processing.app.Sketch.exportApplet(Sketch.java:1599)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2380)
at java.lang.Thread.run(Thread.java:619)

Et là, plus de port COM3 (mes 2 ports COM bootloader et série sont réglés sur COM3)

Si j'utilise l'IDE 1.0.1, l'upload s’arrête à "avrdude done. Thank you." et les ports COM partent et reviennent normalement .

De ton coté, tu vois bien passer cette phase de reconfiguration du port COM et ca se passe bien ?

Le probleme de ton côté : un seul port COM alors qu'il doit y avoir un port distinct pour le bootloader (COM5 chez moi)
ça pourrait etre lié à un défaut de fermeture du port de l'appli = défaut du reset automatique (spécial sur leonardo)
Vinciduino/Leonardo , quelque soit le systeme d'exploitation et le bootloader ça a toujours été deux ports série virtuels chez moi.

Quand j'ai fait l'installation fraïche tout à l'heure Seven a bien trouvé deux ports com (COM5 au moment de l'insertion , COM6 peu après à la fin du time out du bootloader je suppose)

chez moi :

Taille binaire du croquis : 5 032 octets (d'un max de 28 672 octets)
Forcing reset using 1200bps open/close on port COM6
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {} => {}
PORTS {} / {} => {}
PORTS {} / {COM5, } => {COM5, }
Found Leonardo upload port: COM5
C:\Program Files (x86)\arduino-1.0.2\hardware/tools/avr/bin/avrdude -CC:\Program Files (x86)\arduino-1.0.2\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -P\\.\COM5 -b57600 -D ........

.......FLASH.....

avrdude: verifying ...
avrdude: 5032 bytes of flash verified
avrdude: Send: L [4c] 
avrdude: Recv: . [0d] 
avrdude: Send: E [45] 
avrdude: Recv: . [0d] 

avrdude done.  Thank you.

Setting baud rate to 57600 on COM6

Laisses-tu agir l'auto reset ou cherches tu à accélérer en actionnant toi même le reset ?

De ton coté, tu vois bien passer cette phase de reconfiguration du port COM et ca se passe bien ?

Sous Seven 64 comme sous XP j'ai toujours affaire à une permutation de ports , pas à une reconfiguration d'un seul et unique port.

je n'ai jamais eu , comme toi, une séquence de ce type à port unique: (défaut d'installation de driver ?)

Forcing reset using 1200bps open/close on port COM3
PORTS {COM3, } / {COM3, } => {}
PORTS {COM3, } / {COM3, } => {}
PORTS {} / {} => {}
PORTS {} / {COM3, } => {COM3, }
Found Leonardo upload port: COM3

Nouvel essai pour montrer les débits boot et appli différents sur deux ports distincts (je ne vais pas pouvoir skatter ce PC très longtemps aujourd'hui !!) :

appli en COM6 115200 bauds
autoreset par ouverture/fermeture COM6 en 1200bauds
recherche Port COM Boot .....scan..... COM5 trouvé (mieux vaut ne pas avoir de nombreux ports insrits dans la base de registre !)
Flashage par COM5 57600 bauds
fermeture COM5, ouverture COM6 (application) en 115200 bauds

Taille binaire du croquis : 5 032 octets (d'un max de 28 672 octets)
Forcing reset using 1200bps open/close on port COM6
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {COM6, } => {}
PORTS {COM6, } / {} => {}
PORTS {} / {} => {}
PORTS {} / {COM5, } => {COM5, }
Found Leonardo upload port: COM5
C:\Program Files (x86)\arduino-1.0.2\hardware/tools/avr/bin/avrdude -CC:\Program Files (x86)\arduino-1.0.2\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -P\\.\COM5 -b57600 -D

...FLASH....

avrdude done.  Thank you.

Setting baud rate to 115200 on COM6

al1fch:
je n'ai jamais eu , comme toi, une séquence de ce type à port unique: (défaut d'installation de driver ?)

Non, reconfiguration volontaire de ma part. A l'origine je m’emmêlait encore plus les pinceaux avec 2 ports COM différents.

Je vais re-configurer sur 2 ports COM différents.

Avec COM3 pour le Serial et COM5 pour le bootloader ca se passe bien.

Avec l'IDE 1.0.1, qui ne cherche pas à ré-ouvrir le port COM Serial après le téléchargement c'était ok d'avoir 2 ports COM identiques.
Mais avec l'IDE 1.0.2 qui ré-ouvre le port COM Serial après le téléchargement, il le faisait sur le port COM Bootloader qui était en train de partir.. d'où foirage complet.

CORROLAIRE IMPORTANT

Si vous avez l'habitude de mettre un

while( !Serial );

au début de vos sketches (setup) alors suite à un téléchargement :

  • Avec l'IDE v1.0.1 : le sketch attend que vous ayez ouvert manuellement le Moniteur Série pour continuer (sketch bloqué sur le while => Vous êtes sur de ne pas looper le démarrage du sketch et ce qu'il affiche au début).
  • Avec l'IDE v1.0.2 : le sketch démarre tout de suite et vous loupez le début. Il faut faire un reset pour relancer le sketch pour qu'il se bloque sur le while() le temps que vous lanciez le Moniteur Série.

Je viens de le vérifier et ca ne me plait pas du tout du tout ]:slight_smile:

le choix d'un bootloader CDC + autoreset semble très contraigant.
Pourquoi CD et pas HID comme Teensy ? je ne connais pas les motifs.
La réouverture automatique du port était une demande exprimée (mailing list Developpers)
visiblement ça se paie .... et il faut maintenant retarder le premier envoi de données sur le port série ou attendre qu'un humain envoie un caractère par le Terminal !!

Je ne vois pas l'intérêt de la réouverture automatique du port sauf si elle s'accompagne de l'ouverture automatique du moniteur série.
Et cela devrait pouvoir être contrôlé par une option dans Préférences.

Je ne vois pas l'intérêt de la réouverture automatique du port sauf si elle s'accompagne de l'ouverture automatique du moniteur série.
Et cela devrait pouvoir être contrôlé par une option dans Préférences.

+1

Tu veux donc dire qu'il faudrait faire un Serial.End() au début du setup? Le souci, c'est que pour ça, il faut le faire directement dans les registres, je ne crois pas que ce soit implémenté dans la classe Serial...

Non, je parle de l'ouverture du port COM coté PC.

Sur la léonardo, tant que le PC n'a pas ouvert le port COM, l'objet Serial n'existe pas.
Dans si tu met

while( !Serial );

le sketch se bloque et attend que le PC ouvre le port COM.
C'est pratique car çà évite que le sketch démarre et commence à afficher des choses avant que le moniteur série soit ouvert.
Sur une Arduino normal, l'ouverture du port série par le PC génère un reset qui relance le sketch d'où tu a l'impression de n'avoir rien perdu.

barbudor:
Non, je parle de l'ouverture du port COM coté PC.

Sur la léonardo, tant que le PC n'a pas ouvert le port COM, l'objet Serial n'existe pas.

Tu veux dire l'IDE, car j'ai un sketch qui tourne très bien en autonome, et si le PC (je dis bien le PC, c'est une appli en VB6) envoie un code reconnu par le sketch, le PC prend la main sur le sketch. si le PC n'est pas connecté, le sketch tourne tout seul...

barbudor:
Dans si tu met

while( !Serial );

le sketch se bloque et attend que le PC ouvre le port COM.
C'est pratique car çà évite que le sketch démarre et commence à afficher des choses avant que le moniteur série soit ouvert.
Sur une Arduino normal, l'ouverture du port série par le PC génère un reset qui relance le sketch d'où tu a l'impression de n'avoir rien perdu.

même remarque... :wink: de mon côté, je vis ça très bien car je n'utilise pas le terminal arduino, il est trop contraignant par rapport à ma façon de coder...

PC, IDE, VB6: c'est du pareil au même.
Il y a des cas où tu veux que ton code Arduino démarre tout seul, il y a des fois ou tu veux contrôler.

Si tu veux qu'il démarre tout seul, tu ne met pas la boucle while sur Serial.
Si tu veux qu'il attende, tu la met. Sauf qu'avec l'IDE 1.0.2 ca ne marche plus sans faire un reset manuel

Ah...

J'avais lu que le while(!Serial) était obligatoire dans la leonardo, mais comme ça a toujours bien marché sans, je ne m'en suis guerre occupé.

Le principal est que ça marche comme on veut :wink:

Salut,

Barbudor, essaye d'ouvrir une "issue" sur le google code du projet arduino.
Pas sûr qu'ils t'écouterons, mais qui ne tente rien n'as rien :grin: