[aprssig] Re: USB to RS232 adapters? (again)
scott at opentrac.org
Fri Feb 11 13:16:53 CST 2005
> For general purpose serial port usage in both Linux and Windows 2k
> (and XP), my personal experience is only with one particular model, a
> 4-port from Keyspan. It works for all datastreaming type applications,
> but I've never tried it with any pin-twiddling applications. My data
> input therefore is pretty useless :-)
I'm learning a lot more about this subject, being right in the middle of
writing the firmware for such a device myself. The USB spec defines virtual
serial ports as part of its Communications Device Class specification. The
Abstract Control Model (ACM) defines how things like modem commands are
passed to the device, and provides commands like GET_LINE_CODING and
SET_LINE_CODING to set baud rate, stop bits, and so on. Control lines are
set through another command (SET_CONTROL_LINE_STATE) - but none of these
commands are mandatory. Also, control line state changes get sent to the
host through a different mechanism, typically an interrupt-in endpoint.
Regardless of how it's done, the fact remains that USB just works
differently. Unless you're using isochronous transfers, your bandwidth and
latency aren't guaranteed. You can't be sure of any control line or data
timing. And if you are using isochronous, you have no guarantee of
reliability - it'll drop packets if needed. Besides, control line setting
(like you'd use for a Baycom serial port modem) is done through a control
transfer. That means something like half a dozen packets zipping back and
forth on the wire to send an 8-byte message that sets a couple of bits.
Hmm, and now that I look at the docs, that only specifies carrier and DTR.
The standard CDC class devices can use the drivers that come with the
operating system - at least, for Windows, Linux, and probably OS X. Devices
from some vendors might provide their own driver, and implement their own
transfer protocol and interface with the COM port system. They still can't
get around the unpredictable latency inherent in USB, so timing-critical
pin-twiddling applications are always going to be bad idea.
More information about the aprssig