Another ISP1761 / FTDI / serial problem
Arvid Brodin
arvid.brodin at enea.com
Tue Feb 8 11:30:38 EST 2011
Sorry, this was intended for the linux-usb list.
--
Arvid
Arvid Brodin wrote:
> Hi!
>
> I get weird problems when I use a null modem cable between the two ports
> on a FT232BM (2-port FTDI USB-to-serial converter) with an isp1761 host
> controller. The same thing does not happen with an EHCI host controller.
> Lengthy details follows:
>
> With the EHCI host controller:
> =============================
>
> [Terminal 1]
> $ cat /dev/ttyUSB1
>
> [Terminal 2]
> $ echo "Something seems wrong here" > /dev/ttyUSB0
> $ echo "Something seems wrong here" > /dev/ttyUSB0
>
> [Terminal 1]
> Something seems wrong here
>
> Something seems wrong here
>
> ^C
> $
>
> Observe the extra new line after the strings. I'm not sure if this is a
> bug in the ftdi driver, some other part of the serial subsystem, or if
> it is the result of some terminal setting; with a USB analyzer I observe
> the following sequence of packets (#-# == device-endpoint):
>
> 3-2 OUT: "Something seems wrong here"
> 3-2 OUT: 0x0D 0x0A
> 4-1 IN: 0x01 0x60 'S'
> 4-1 IN: 0x01 0x60 'o'
> ...
> 4-1 IN: 0x01 0x60 0x0D
> 4-1 IN: 0x01 0x60 0x0A
> 4-2 OUT: 'S' # The echo from the reading side starts here
> 4-2 OUT: 'o'
> ...
> 4-2 OUT: 0x0D 0x0A
> 4-2 OUT: 0x0D 0x0A # The newline pair is echoed twice - perhaps both
> 'CR' and 'NL' are converted to "CRNL" in the echo?
>
> Anyway, since 3-1 is never read, no feedback loop is created by the two
> echoing devices.
>
>
> With the isp1761 host controller, driver from 2.6.35.7 backported to
> 2.6.27.54 and modified for platform endianness:
> =============================
>
> [Terminal 1]
> $ cat /dev/ttyUSB1
>
> [Terminal 2]
> # echo "This is isp1761 and something is wrong" > /dev/ttyUSB0
> # echo "This is isp1761 and something is wrong" > /dev/ttyUSB0
> # echo "This is isp1761 and something is wrong" > /dev/ttyUSB0
> # echo "This is isp1761 and something is wrong" > /dev/ttyUSB0
> # echo "This is isp1761 and something is wrong" > /dev/ttyUSB0
> # echo "This is isp1761 and something is wrong" > /dev/ttyUSB0
>
> [Terminal 1]
> This is isp1761 and something is wrong
>
> This is isp1761 and something is wrong
>
> This is isp1761 and something is wrong
>
> This is isp1761 and something is wrong
>
> This is isp1761 and something is wrong
>
> and something is wrong
> (blank line x7)
> This is isp1761 and something is wrong
>
> ^C
> # echo "This is isp1761 and something is wrong" > /dev/ttyUSB0
> # cat /dev/ttyUSB1
> is wrong
> (blank line x30 ca)
> TThis is isp1761 and something is wrong
>
> ^C
> #
>
> The exact look of the error differs, but it is quite easy to trigger by
> echoing text several times in a row; also breaking the "cat" execution,
> echoing some more text, and then starting cat again seems to trigger the
> error often.
>
> On the bus the traffic looks something like this:
>
> 7-2 OUT: "This is isp1761 and something is wrong"
> 7-2 OUT: 0x0D
> 7-2 OUT: 0x0A (NAK) # The CRNL pair is split here and the NL is not
> directly accepted by the device
> 7-2 OUT: 0x0A (NAK)
> Following this is lots and lots of "0x0A NAKs" intermixed with traffic
> that looks quite like the EHCI case except that much of the traffic has
> to be re-sent lots of times before it is accepted. The 0x0A is finally
> accepted after all text has been received by 8-1 and echoed from 8-2.
> This exact pattern is repeated every time text is written to the serial
> port.
>
> Device 8 receives the characters and echoes them back to 7-1 as in the
> EHCI case. But with isp1761, after a while device 7 for some reason
> starts echoing parts of the received echo-text back. My guess is that
> this should not happen since device 7 is never read from. Anyway, this
> creates a feedback loop which would be the source of the spurious
> characters in the "cat" run above and that sometimes is powerful enough
> to make the terminal unresponsible.
>
> I've been trying to figure this thing out for a while now but quite
> frankly I'm stumped; I can't figure out where and why things goes wrong.
> Any ideas are welcome! Perhaps the NAK problem/bug triggers a
> problem/bug somewhere in linux' serial terminal code?
>
> The terminal settings are the defaults and are the same during all
> examples above on both serial ports:
>
> $ stty -a -F /dev/ttyUSB0
> speed 9600 baud; rows 0; columns 0; line = 0;
> intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
> eol2 = <undef>; swtch = <undef>;
> start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
> flush = ^O; min = 1; time = 0;
> -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
> -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon
> -ixoff -iuclc -ixany -imaxbel
> -iutf8
> opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
> vt0 ff0
> isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
> -echoprt echoctl echoke
>
> $ stty -g -F /dev/ttyUSB0
> 500:5:cbd:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
>
> --
> Arvid Brodin
> Enea Services Stockholm AB
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
More information about the Kernelnewbies
mailing list