Re: reading from ttyUSB0 not possible (pl2303, ch341-uart and FT232RL)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 5 May 2010, Manfred Gruber wrote:

> Hi,
> 
> On Ubuntu I try to access a PIC-controler via the ttyUSB0. I send a few 
> command bytes and get the status from the controller. My C code works 
> without problems on ttyS0 but with the usb-to-serial adapter (I tried 
> tree defferent chipsets pl2303, ch341-uart and FT232RL) it just sends 
> but can't read from the controller.

What happens if you use your program to communicate with another
computer running minicom instead of with the PIC-controller?

> With minicom I can communicate with an other computer without problems 
> but in my code there must be something wrong for the ttyUSB.
> 
> Any ideas what the problem could be?
> 
> Manfred
> 
> Im working on Ubuntu 9.10, Kernel 2.6.31-21
> 
> 
> here is my code:
> =====================================================
> struct termios oldtio,newtio;
> 
> extern "C" HANDLE SioOpen(char *name, unsigned int baudrate)
> {
> BOOL RetStat;
> HANDLE ComHandle;
> DWORD winrate;
> 
> //Open COM port as a file
> printf("Opening %s\n",name);
> ComHandle = open(name, O_RDWR) | O_NOCTTY);
> 
>    if (ComHandle < 0)
>        {
>       printf("%s failed to open\n",name);
>       perror(name);        }
> 
>   switch (baudrate) {
>        case 9600:     winrate = B9600; break;
>        case 19200:     winrate = B19200; break;
>        case 38400:     winrate = B38400; break;
>        case 57600:     winrate = B57600; break;
>        case 115200:     winrate = B115200; break;
>       default:        printf("Baud rate not supported - using default of 
> 19200\n");
>                       winrate = B19200;
>       }
>   //printf("tcgetattr(ComHandle,&oldtio)\n");
> 
>   tcgetattr(ComHandle,&oldtio); // save current port settings
> 
>   bzero(&newtio, sizeof(newtio));

Instead of using bzero, you should copy oldtio into newtio.  By setting 
everything to 0, you may be messing up something that is essential.

>   newtio.c_cflag = winrate | CS8 | CLOCAL | CREAD;
>   newtio.c_iflag = IGNPAR;
>   newtio.c_oflag = 0;
> 
>   // set input mode (non-canonical, no echo,...)
>   newtio.c_lflag = 0;
> 
>   // Wait block for 100ms, then timeout
>   newtio.c_cc[VTIME]    = 1;   // inter-character timer unused    
> newtio.c_cc[VMIN]     = 0;   // blocking read until 1 chars received
>   //tcflush(ComHandle, TCIFLUSH);
>   tcflush(ComHandle, TCIOFLUSH);
>   //printf("tcsetattr(ComHandle,TCSANOW,&newtio)\n");
>   RetStat = tcsetattr(ComHandle,TCSANOW,&newtio);
> 
>    if (RetStat < 0)
>       {
>       printf("Failed to set COMM configuration\n");
>       //break;
>       }
> //printf("Setup complete, returning file handle.\n"); return(ComHandle);
> }

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux