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
- Hp usb disk storage format tool - Télécharger - Stockage
- Usb show - Télécharger - Sauvegarde
- Serial windows 10 - Guide
- Clé usb - Accueil - Stockage
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