[I've sent an answer to the list from home yesterday, but it seems it didn't 
reach it, so here another try from office]

On Tuesday, 16. April 2002 17:08, you wrote:
> On Tue, Apr 16, 2002 at 03:39:27PM +0200, Wolfgang Fritz wrote:
> > Hello,
> >
> > I have a Prolific PL-2303 serial converter connected to my laptop. It
> > basically works, but I have 3 problems which I am not able to solve:
> >
> > 1. After open()-ing the device /dev/ttyUSB0, the first character received
> > on the serial does not come through.
>
> What do you have the line settings set to?  You should use a serial
> program, not just 'cat' and 'cp' to test these things out.
>
> > 2. I can not change the baud rate of the converter. It stays on 9600
> > Baud.
>
> How are you trying to change the baud rate?  It seems to work fine for
> me :)

stty -F /dev/ttyUSB0
That seems to work, but... see later
>
> > 3. cp or cat to /dev/ttyUSB0 does not work (hangs forever)

It goes into an infinite loop, trying to send zero length messages (see 
attached logs)

>
> Again, see the above comment about not using these programs for testing.
> I recommend using minicom or any other serial terminal program.  See the
> Linux Serial Programming HOWTO for more info on how to write code to
> talk to serial ports.

Yes. I know that HOWTO, and I used some code from it.
The commands I use in my download procedure are

sndboot -d /dev/ttyUSB0 sccboot.bin  # C-program to load the bootloader
stty -F /dev/ttyUSB0 ospeed 115200
cp srecord_file /dev/ttyUSB0

That works with /dev/ttyS0.
The s-record file is printable ASCII, organized in lines seperated by LF or 
CR/LF, so I expect cp or cat to work.

>
> > I found this with an application program which bootloads a program to a
> > 68LC302 microcontroller which has a special serial bootload mode which
> > works as follows:
>
> Is the 68LC302 connected up to the pl2303 device?

The RS232 side is connected to the 68LC302 via RS232 level converters

[description of bootload process snipped]
>
> Try loading the pl2303 driver with "debug=1" so you can see the data and
> line changes happening on the device.  That might help you out to see
> what is wrong with either your user program, or the driver.
>

Done. See attached logs.

> > I did some strace-ing and debugging which gave me error messages about
> > unsupported ioctls in the pl2303 module. If useful, I will post it here.
> > I also looked at the pl2303 source code and found that it has not changed
> > significantly up to 2.5.
>
> There are loads of serial ioctls that are not supported by some of the
> usb-serial drivers, but these can usually be ignored just fine.

>From the logs I see the following:

1. cp, cat, echo to /dev/ttyUSB0 hang in an infinite loop, trying to send 
zero length data blocks. For me that looks like a bug, maybe not in the 
pl2303 module, but somewhere in the higher layers.

2. On an open(), the baudrate is reset to 9600. This is intentional (I looked 
at pl2303.c), but different from standard serial ports and makes settings via 
command line tools like stty useless. For me that's a bug. I'll try to patch 
the pl2302.c not to do this reset (or to remember the last settings and reset 
to these), but I cannot do that in the office.

I tried to change the baudrate inside minicom, that works (/dev/ttyUSB0 stays 
open)

I have to check the "lost first received byte" problem, but that takes a 
little longer. If I can resolve or work around this problem, I can change my 
download procedure to replace the stty and cp commands by a small program 
which keeps the device open between setting the baudrate and transferring the 
s-record file.

Wolfgang

[logs attached as file to avoid line break problems]
>
> thanks,
>
> greg k-h

modprobe pl2303 debug=1
Apr 17 07:07:38 de-h-lap3-nb kernel: usbserial.c: USB Serial support registered for 
PL-2303
Apr 17 07:07:38 de-h-lap3-nb kernel: usbserial.c: PL-2303 converter detected
Apr 17 07:07:38 de-h-lap3-nb kernel: usbserial.c: PL-2303 converter now attached to 
ttyUSB0 (or usb/tts/0 for devfs)
Apr 17 07:07:38 de-h-lap3-nb kernel: pl2303.c: Prolific PL2303 USB to serial adaptor 
driver v0.9

echo "123456789" >/dev/ttyUSB0
# sends the data then
# hangs until CTRL-C pressed 2 times
# the same happens with cp, cat.
# 
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_open -  port 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x0  0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x1  0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x0:0x1  0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x1:0xc0  0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x2:0x4  0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios -  port 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0x40:1:0:1  0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - data bits = 8
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - baud = 9600
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - stop bits = 1
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - parity = none
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0x21:0x20:0:0  7
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 3, retval = 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting read urb
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting interrupt urb
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write - port 0, 9 bytes
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write - length = 9, data = 31 32 
33 34 35 36 37 38 39

#### the following lines repeat until the echo command is interrupted by 2 CTRL-C 

Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write_bulk_callback - port 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write - port 0, 0 bytes
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write - length = 0, data = 
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write_bulk_callback - port 0
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write - port 0, 0 bytes
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write - length = 0, data = 
Apr 17 07:14:44 de-h-lap3-nb kernel: pl2303.c: pl2303_write_bulk_callback - port 0

#### these are the last lines

Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: pl2303_close - port 0
Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: pl2303_write_bulk_callback - port 0
Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 0, retval = 0
Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: pl2303_close - shutting down urbs
Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: pl2303_close - usb_unlink_urb 
(write_urb) failed with reason: -19
Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - port 0
Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - urb->status 
= -2
Apr 17 07:14:46 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - unable to 
handle the error, exiting.
#
# Trying to change baudrate
#
stty -F /dev/ttyUSB0 19200

Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_open -  port 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x0  0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x1  0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x0:0x1  0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x1:0xc0  0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x2:0x4  0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios -  port 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x40:1:0:1  0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - data bits = 8
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - baud = 9600
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - stop bits = 1
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - parity = none
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x21:0x20:0:0  7
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 3, retval = 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting read urb
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting interrupt urb
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5401
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_ioctl not supported = 0x5401
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5403
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_ioctl not supported = 0x5403
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios -  port 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x40:1:0:1  0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - data bits = 8
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - baud = 19200
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - stop bits = 1
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - parity = none
#
# Seems to be OK
#
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0x21:0x20:0:0  7
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 3, retval = 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 0 4b 0 0 0 0 8
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5401
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_ioctl not supported = 0x5401
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_close - port 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 0, retval = 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_close - shutting down urbs
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_close - usb_unlink_urb 
(write_urb) failed with reason: -19
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - port 0
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - urb->status 
= -2
Apr 17 07:23:54 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - unable to 
handle the error, exiting.

#
# another echo command after changing baudrate
#
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_open -  port 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x0  0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x1  0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x0:0x1  0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x1:0xc0  0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x2:0x4  0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios -  port 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0x40:1:0:1  0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - data bits = 8
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - baud = 9600
#
# Baudrate is reset to 9600??? Need to look at the code. Maybe this is always done on 
open()?
# That is different from standard serial lines and I consider it a bug, because in
# this case the stty command is useless.
#
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - stop bits = 1
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - parity = none
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0x21:0x20:0:0  7
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 3, retval = 0
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting read urb
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting interrupt urb
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_write - port 0, 9 bytes
Apr 17 07:30:28 de-h-lap3-nb kernel: pl2303.c: pl2303_write - length = 9, data = 31 32 
33 34 35 36 37 38 39 
#
# log for the following simple test program
#
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#
#int main (void)
#{
#  int fd;
#  fd = open ("/dev/ttyUSB0", O_RDWR);
#  close (fd);
#}
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_open -  port 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x0  0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x404:0x1  0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8484:0x0  1 - 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xc0:0x1:0x8383:0x0  1 - 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x0:0x1  0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x1:0xc0  0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0x40:0x1:0x2:0x4  0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios -  port 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0x40:1:0:1  0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - data bits = 8
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - baud = 9600
#
# Yes. Baudrate is reset to 9600 on open. That's bad.
#
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - stop bits = 1
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_set_termios - parity = none
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0x21:0x20:0:0  7
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 3, retval = 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: 0xa1:0x21:0:0  7 - 80 25 0 0 0 0 8
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting read urb
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_open - submitting interrupt urb
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_close - port 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: set_control_lines - value = 0, retval = 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_close - shutting down urbs
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_close - usb_unlink_urb 
(write_urb) failed with reason: -19
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - port 0
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - urb->status 
= -2
Apr 17 07:53:38 de-h-lap3-nb kernel: pl2303.c: pl2303_read_bulk_callback - unable to 
handle the error, exiting.
 








Reply via email to