On 7/9/20 2:14 AM, Petr Titěra wrote:
Just one note. Most USB to serial chip claim USB2.0 support but they
only provide Full-Speed data transfers. That is data communication
protocol based on USB1.1 parameters with 1ms polling interval. You have
to specifically look for High-Speed (i.e 480mbps) transfers when going
trough chip specification. Not all manufacturers have such chips and no
all chips from manufacturers who provide them have such capability.
To this day I was able to find only one such chip family and that is
FTDI FT232H (that H suffix specifies High-Transfer rate).
Petr Titera
I suspect the 1ms is not limited by the chip (after all, they all have
to support 8kHz schedules for isochronous audio, even if the serial port
doesn't use it).
I suspect it's more an artifact of how Linux (or whatever) OS deals with
the interrupt handling. Linux isn't designed as a "real time fast
response" operating system. It depends on devices doing big transfers,
so a 1 ms response time is fine.
That is, you set up a DMA transfer to a disk drive at 100 Mbps, but
since you're transferring 100 kByte buffers, you only need to service
the event 125 times/second.
You'll easily see this on high speed serial links through USB if you do
"character at a time" operations. You cannot get 50kbps with character
at a time with buffer flushes between characters.
Try it with a USB serial dongle and a loopback from TxD to RxD.
Most serial software that runs at high speed (>9600 bps) assumes a
slightly smarter device (maybe a 16550 style) with a FIFO, so it
"bursts" bytes to/from the device. Rather than hang a "read one
character" io call, they'll do a "read up to N characters, with a
timeout of 10 milliseconds" and put that in the loop instead.
Similarly, they'll accumulate characters to be sent, and do the io_write
call with all the characters in the buffer.
I've done a fair amount of high speed USB serial stuff between arduinos
and PCs, and you always wind up with some scheme for buffering on both
sides.
Since you're not going to be transferring (batches of) bytes any more
frequently than 1 millisecond, there's not much point in sending the
"modem control" signals (RTS/CTS) through faster. Any high speed
protocol handler has to account for the fact that if RTS/CTS handshaking
is implemented, you can't overrun the transmit FIFO - That is, if the
far end drops CTS, the near end doesn't send, and bytes pile up in the
FIFO. So you just need to tell the device driver to stop sending soon
enough that the FIFO doesn't overflow. If the FIFO is, e.g., 16 deep,
and you're sending at 56 kbps (7 kBytes/sec), the FIFO will overflow in
about 2 milliseconds. So a 1 millisecond response time to the CTS
changing state is fine.
For the other modem control signals (RI, CD, DSR, DTR) they're even
slower. DSR and DTR are basically "my power is on" and don't change
state. RI is "seconds" - the signal the modem is detecting is a 20Hz
audio tone. CD is likewise "many milliseconds" depending on the
modulation being used. A Bell 103 or 202 is a hundreds of bits/second
device, so carrier acquisition/detect is typically 10s of bit times. For
fancier modems with multitone signalling and coding, it could be many
seconds for the speed negotiation to complete.
TL;DR - there's no reason for a USB-Serial adapter manufacturer to have
a faster than 1ms response time, nor for an operating system to be
faster than 1ms.
On 08.07.2020 22:02, Steven Sommars wrote:
My RPi4 (Raspbian Buster) has a GPS+PPS/USB. Serial->USB uses Prolific
PL2303, which supports USB 2.0
The PPS jitter is 1 msec (e.g., using ppstest). lsusb -v shows:
Bus 001 Device 008: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial
Port
bInterval 1
which means 1 msec polling of the PPS signal. I've been unable to poll
more frequently, that seems to require driver changes.
Petr, what polling rate do you see? Has anyone been able to poll USB @
125 µsec on a stock RPi?
With the 1 ms polling the PPS reaches the OS between 0 and 1 ms late,
in an
unpredictable pattern. Although the PPS jitter is 1 msec,
ntpd/chrony on
my RPi4 typically reports low dispersion: 50-150 µsec. The zero-mean
assumption Achim mentioned is unlikely to be valid. Running chrony +
GPS+PPS/USB I see a ~640µsec offset compared to a GPS+PPS directly
connected to the GPIO pins. That offset will fluctuate, of course.
Steve Sommars
On Wed, Jul 8, 2020 at 12:57 PM ASSI <[email protected]> wrote:
On Dienstag, 7. Juli 2020 18:27:01 CEST Petr Titěra wrote:
Timing on USB need not to be so horrible. Below is stats from my server
with GPS connected using FT232H chip (supporting high speed
transfers on
USB). Yes, the jitter is far greater than on other computer where
PPS is
connected directly but it is a lot less than that 500microseconds you
get with common USB convertors.
remote refid st t when poll reach delay offset
jitter
=======================================================================
o127.127.22.0 .PPS. 0 u 7 16 377 0.000 -0.019 0.033
*192.168.3.240 .GPSD. 1 u 24 64 377 0.377 0.187 0.026
+192.168.3.246 .PPS. 1 u 28 64 377 0.643 0.181 0.028
The reason you're seeing this with the newer FTDI chips that support
USB2.0
highspeed rates is that the frame rate got increased 8x for highspeed
USB,
so
the expected frame jitter is now 125µs when and if the interface as well
as
the full protocol stack support and enable it. But you seem to have
missed
the point that Hal was trying to make: The jitter you are going to
see has
deterministic components and some of these can create bias when you
try to
filter with the usual assumption of a stationary zero-mean random
sampling.
In other words, you don't necessarily converge to the true time and
where
your
filter tries to converge varies over time.
Regards,
Achim.
--
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+
DIY Stuff:
http://Synth.Stromeko.net/DIY.html
_______________________________________________
time-nuts mailing list -- [email protected]
To unsubscribe, go to
http://lists.febo.com/mailman/listinfo/time-nuts_lists.febo.com
and follow the instructions there.
_______________________________________________
time-nuts mailing list -- [email protected]
To unsubscribe, go to
http://lists.febo.com/mailman/listinfo/time-nuts_lists.febo.com
and follow the instructions there.
_______________________________________________
time-nuts mailing list -- [email protected]
To unsubscribe, go to
http://lists.febo.com/mailman/listinfo/time-nuts_lists.febo.com
and follow the instructions there.
_______________________________________________
time-nuts mailing list -- [email protected]
To unsubscribe, go to
http://lists.febo.com/mailman/listinfo/time-nuts_lists.febo.com
and follow the instructions there.