Impossible de modifier le débit en bauds sur le périphérique série USB

J'ai récemment mis à niveau vers Ubuntu 12.04 à partir de 10.04. Sous 10.04, je n'ai eu aucun problème à utiliser le pilote usbserial pour me connecter à un périphérique via le port série. Après la mise à jour, je ne peux pas réinitialiser le débit en bauds: il est initialisé à 9600, mais mon appareil a besoin de 115200. Lorsque j'essaie de réinitialiser la vitesse, j'obtiens:

$ sudo stty -F /dev/ttyUSB0 speed 9600 baud; line = 0; -brkint -imaxbel $ sudo stty -F /dev/ttyUSB0 115200 stty: /dev/ttyUSB0: unable to perform all requested operations $ sudo setserial -av /dev/ttyUSB0 Cannot get serial info: Invalid argument $ ls -l /dev/ttyUS* crw-rw---- 1 root dialout 188, 0 Nov 26 10:21 /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 1 Nov 26 10:21 /dev/ttyUSB1 

La chose la plus étrange est que je l'ai obtenu à travailler à l'occasion. La première fois que j'ai redémarré le système, et cela a fonctionné. Après un arrêt, il a eu le même problème et le redémarrage n'a pas fonctionné, mais le rechargement du pilote l'a fait. Malheureusement cela n'a pas fonctionné depuis:

 $ sudo modprobe -r usbserial $ sudo modprobe usbserial vendor=0x0403 product=0x6001 $ sudo stty -F /dev/ttyUSB0 115200 stty: /dev/ttyUSB0: unable to perform all requested operations 

Les périphériques USB vers série tels que la série Prolific ou FTDI ne suivent aucune spécification officielle. Au lieu de cela, ils utilisent deux points de terminaison en bloc (un pour la sortie, un pour l'input) avec des messages de contrôle spécifiques au fournisseur utilisés pour configurer des choses comme le débit en bauds. Ainsi, il n'est pas trop surprenant si quelque chose comme le pilote usbserial générique a du mal à établir des baudrates ou à effectuer d'autres tâches de configuration sur une puce FTDI. Comme vous l'avez remarqué, l'utilisation de ftdi_sio fonctionnera beaucoup mieux.

Même 10.04 devrait charger ftdi_sio par défaut, car ftdi_sio a été codé en dur pour gérer les périphériques 4003: 6001 (FT232) aussi longtime qu'Ex Ubuntu a existé. Je suppose que vous chargiez deux pilotes qui étaient tous les deux enregistrés pour gérer 4003: 6001 – un par design, un en raison des parameters de votre module. Changer votre kernel ou même la phase de la lune pourrait signifier que l'on arrive à se charger avant l'autre – et si usbserial est chargé en premier, vous ne pourrez pas définir le débit en bauds. Vous devez supprimer votre configuration usbserial manuelle et laisser ftdi_sio gérer le périphérique. Il fonctionnera à la fois 10.04 et 12.04.

Je pense que j'ai trouvé la solution à cela, au cas où quelqu'un le googlerait à l'avenir. Mon 10.04 n'a pas chargé usbserial par défaut, donc je devais le faire avec modprobe usbserial vendor=0x0403 product=0x6001 , que j'ai ajouté à /etc/modules . Après ma mise à niveau, mon 12.04 charge le pilote ftdi_sio par défaut, ce qui correspond au périphérique embedded que j'utilise. Je n'ai pas changé mes /etc/modules , donc usbserial était en train d'être chargé aussi, et causant probablement une sorte de conflit. J'ai retiré usbserial de /etc/modules et redémarré, et cela a fonctionné.

Si j'étais vraiment confiant dans cette solution, je le confirmerais en redémarrant ma machine et en voyant si le port série apparaissait correctement – mais je me sentirais stupide si je redémarrais et que je perdais la connection, car je dois travailler Je l'ai.