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 :
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.
Configuration: Linux
Firefox 2.0.0.8