Communication avec cable USB-SERIAL

damip -  
 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 :

    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:

3 réponses

pierrelux
 
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 ?
0
miko_miko Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
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?
0
Hassane
 
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
0