Communication avec cable USB-SERIAL
damip
-
Hassane -
Hassane -
Bonjour,
je suis en train d'essayer de connecter un PIC16F876 paramétré a 9600bauds, 1bit stop, pas de parité, à mon ordi, selon le tutorial suivant : http://angeliz.free.fr/langagec/howto_serie.htm.
N'ayant pas de port série sur mon laptop (Lenovo 3000 C200 tournant sous Ubuntu Gusty Gibbon), j'ai acheté un adaptateur USB<->RS232.
Ensuite j'ai codé un programme en C++ selon le tutorial suivant : http://www.aqra.ca/Port-serie-en-C-sous-Linux
Je connecte le tout, j'alimente le PIC qui semble fonctionner (jai mis un temoin lumineux qui clignotte...), et qui envoie constament des données au port serial.
Puis je lance mon programme en root.
Resultat : le device s'ouvre et parametre correctement. Mais la fonction READ échoue, renvoie -1 avec errno à EAGAIN.
Voici mon code coté ordi :
Voici à présent le code du PIC :
Ce que renvoie lsusb -v a propos du cable usb-serial :
PS : j'ai aussi essayé de brancher une souris serial sur cet adaptateur... aucune réaction de la part du OS et la souris n'est pas prise en compte.
Voila, je pense que vous avez assez d'infos pour pouvoir m'aider.
J'ai deja essayé sur d'autres forums sans résultat. Merci d'avance.
je suis en train d'essayer de connecter un PIC16F876 paramétré a 9600bauds, 1bit stop, pas de parité, à mon ordi, selon le tutorial suivant : http://angeliz.free.fr/langagec/howto_serie.htm.
N'ayant pas de port série sur mon laptop (Lenovo 3000 C200 tournant sous Ubuntu Gusty Gibbon), j'ai acheté un adaptateur USB<->RS232.
Ensuite j'ai codé un programme en C++ selon le tutorial suivant : http://www.aqra.ca/Port-serie-en-C-sous-Linux
Je connecte le tout, j'alimente le PIC qui semble fonctionner (jai mis un temoin lumineux qui clignotte...), et qui envoie constament des données au port serial.
Puis je lance mon programme en root.
Resultat : le device s'ouvre et parametre correctement. Mais la fonction READ échoue, renvoie -1 avec errno à EAGAIN.
Voici mon code coté ordi :
handle= open(device, O_RDWR | O_NOCTTY | O_NDELAY); if(handle < 0) { printf("Ouverture du port serie impossible.\n"); return; } { struct termios options; tcgetattr(handle, &options); cfsetospeed(&options, B9600); options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; if(tcsetattr(handle, TCSANOW, &options) < 0) { printf("Parametrage du port serie impossible.\n"); return; } } if(fcntl(handle, F_SETFL, FNDELAY) < 0) { printf("Positionnement du port serie en non-bloquant impossible.\n"); return; } //PS : tout se passe bien a ce niveau //CODE DE LECTURE : errno= 0; res= read(handle, buffer, len); //La parcontre res est négatif et errno est EAGAIN. //[normelement sil ny a pas de données disponibles, ca retourne 0.]
Voici à présent le code du PIC :
TRISC= 0b10000000; //RC7 RX en entree, RC6 TX en sortie, autres en sortie GIE= 1; PEIE= 1; //activation des interruptions RCIE= 1; //interruption de reception RCSTA= 0b10010000; //activation port serie, activation de la reception TXSTA= 0b00100110; //high speed mode brgh1, activation de l'emission SPBRG= 25; //9600 baud Envoi : while(!TXIF); //attente de fin d'emission TXREG= byte; //envoi de la donnee while(!TRMT); //attente de traitement
Ce que renvoie lsusb -v a propos du cable usb-serial :
Bus 004 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x067b Prolific Technology, Inc. idProduct 0x2303 PL2303 Serial Port bcdDevice 3.00 iManufacturer 1 Prolific Technology Inc. iProduct 2 USB-Serial Controller iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 39 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x000a 1x 10 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Device Status: 0x0000 (Bus Powered)
PS : j'ai aussi essayé de brancher une souris serial sur cet adaptateur... aucune réaction de la part du OS et la souris n'est pas prise en compte.
Voila, je pense que vous avez assez d'infos pour pouvoir m'aider.
J'ai deja essayé sur d'autres forums sans résultat. Merci d'avance.
A voir également:
- Communication avec cable USB-SERIAL
- Clé usb non détectée - Guide
- Usb show - Télécharger - Sauvegarde
- Hp usb disk storage format tool - Télécharger - Stockage
- Formater clé usb - Guide
- Serial windows 10 - Guide
3 réponses
Quelques idées:
Peu probable:
- S'assurer que le module pl2303 soit bien chargé avec lsmod.
- Un problème de droits sur le fichier ? essayer en root
- débugger avec un ordinateur disposant d'un port série "standard"
Est-ce que ça fonctionne en écriture ?
Peu probable:
- S'assurer que le module pl2303 soit bien chargé avec lsmod.
- Un problème de droits sur le fichier ? essayer en root
- débugger avec un ordinateur disposant d'un port série "standard"
Est-ce que ça fonctionne en écriture ?
la commande lsmod me retourne le ligne suivante:
pl2303 25348 0
en principe c'a veut dire qu'il n'est pas bien charger!!nn?
pl2303 25348 0
en principe c'a veut dire qu'il n'est pas bien charger!!nn?
Un message par an lol
a mon tour, j'ai un cable USB to Serial que je veux faire fonctionner mais pas aux memes fins que toi, mais notre point commun est que le port ne répond pas, meme à de simples requetes envoyées par hyperterminal (oui je suis sous Windows).
j'ai constaté que tu as un cable basé sur une chipset de Prolific, pour moi c'est une Sipex, je sais pas d'ou vient le probleme, et tous ceux que je croise sur internet et disent que leurs cables marchent a merveille je ne sais pas quelle marque ils ont (je doute de la marque moi !)
bonne chance dans tes projets et je souhaite que tu resolve ton probleme.
cordialement, Hassane
a mon tour, j'ai un cable USB to Serial que je veux faire fonctionner mais pas aux memes fins que toi, mais notre point commun est que le port ne répond pas, meme à de simples requetes envoyées par hyperterminal (oui je suis sous Windows).
j'ai constaté que tu as un cable basé sur une chipset de Prolific, pour moi c'est une Sipex, je sais pas d'ou vient le probleme, et tous ceux que je croise sur internet et disent que leurs cables marchent a merveille je ne sais pas quelle marque ils ont (je doute de la marque moi !)
bonne chance dans tes projets et je souhaite que tu resolve ton probleme.
cordialement, Hassane