ts-7000
[Top] [All Lists]

Re: [ts-7000] Re: TS-7550 XUARTs

To: "" <>
Subject: Re: [ts-7000] Re: TS-7550 XUARTs
From: Walter Marvin <>
Date: Thu, 1 Sep 2011 14:46:09 -0700 (PDT)


I agree that user space drivers are useful for minor non time critical usage. Anything that approaches real time, the overhead becomes a liability. In your case the data rate is low enough you will probably get away with it, providing you do not multiplex the serial data streams prior to the xuarts, as was suggested.


From: mike ingle <>
To:
Sent: Thursday, September 1, 2011 4:19 PM
Subject: Re: [ts-7000] Re: TS-7550 XUARTs

 
Hi Jesse,

thank you for the detailed response.  I am a fan of user space drivers and big hardware buffers, for the same reasons you outlined, I just wanted to make sure that there weren't any gotcha's present.   While I maybe have your attention, what is the usability of the FPGAs for user reconfiguration on:

ts 7500   sd on fpga
ts 7550   xnand no sd on fpga 
ts 4500   xnand sd on fpga

i am considering all of the above as possible solutions.  I tend to want to add tools to my toolbox, and would like to settle on a board I can use for future projects as well.  With the lattice fpga can you offer encrypted modules, allowing the user to have their own IP and still have the sd and xuart functionality?  Also, in the past I have had issues using the 0.1" dual row headers, where the female connector was damaged by prying the module out at an angle (hard to do any other way),  have you had issues on the ts75xx modules with that?

Regards Mike


On Sep 1, 2011, at 11:21 AM, jesseoff wrote:

 


I thought I'd step in and clarify some things. I work at Technologic Systems and designed both the XUART hardware FPGA core and the xuartctl software a few years ago.

There seems to be confusion on what average response latency to expect out of the XUART hardware + software.

First off, the RX FIFO is so deep in the XUART hardware that we don't even need an interrupt for 90% of applications out there. This is why by default, the xuartctl server process simply polls at 100hz (10ms) -- even if all 8 possible channels are actively receiving data at 115200 baud the hardware is in no danger of FIFO overflow. In the polling mode, you can expect around 10ms latency before your app sees the RX data because thats how long it could be in the hardware RX FIFO before being consumed and sent out to pipes/sockets to downstream application code. Anything beyond 10ms is due to process competition for the CPU -- if you have other threads/processes wanting the CPU but you want to ensure your application still sees XUART serial data promptly, its a simple matter of setting process priorities. Its worth noting this latency is the norm for kernel serial drivers too, since they post their data to the kernel termios layer which holds on to bytes and does not present them to userspace until after 10-100ms unless a not-well-known low latency mode ioctl() is run on the serial driver.

The XUART hardware and software can also be told to use IRQs. There really is only 2 reasons to use IRQs: 1) You are using baud rates above 115200, or 2) you need minimal or sub-10ms latency on RX characters. To use IRQs on the TS-7550, edit the /linuxrc and change the line that invokes the xuartctl server from "xuartctl --server" to "xuartctl --server --irq=29"

Once you start allowing the software to use IRQs, xuartctl starts paying attention to a couple extra parameters -- specifically, the "rlw=" (Receive low-water mark) and the "ithr=" (Idle-threshold). The "rlw=" arg takes a number between 1-255 is the the minimum number of RX characters in the RX FIFO that will be accumulated before sending an IRQ and waking up the hardware consumer process. When you enable irq's, it defaults to "1" meaning it will send an IRQ after every single RX character received. The "ithr=" argument is used to tune the number of bit-times the RX line has to be idle before sending an IRQ before the rlw= threshold is met.

The simple latency test we run as part of "xuartctl --test" is run with TX and RX looped back to each other. The test transmits a single character, waits to receive it on the rx line, then sends it again, over and over. This emulates a system with a 1 byte 0-latency request/response protocol and serves as our benchmark. The XUART polling at 100hz, predictably gives us approximately 100 request/response transactions per second, when using IRQs, we get approx 600 per second. When using the CPU internal uart with the low latency ioctl, we get 1500. A modern multi-ghz Linux-x86 PC on a motherboard (not USB) serial port gets 2000.

Why did we implemented XUART's in userspace over TCP? There are actually several reasons:
1) Talking to customers over the years I've found a very large portion of people use our boards as serial to network(TCPIP) converters, so I figured I'd save them some development by allowing that out-of-the-box.
2) Linux kernel version independence -- xuartctl doesn't need to be reworked when kernel innards APIs change.
3) Linux kernel serial port API deficiencies -- XUART hardware has features that cannot be represented in the normal serial API. 9-bit serial, timed idle/break, non-standard arbitrary baud rates, pipelined baud rate changes, etc...
4) Debuggability -- since we designed both the hardware and software, we had to debug both at the same time. This sort of design flow is much faster and efficient when you have good debug tools and don't have to worry about crashing/deadlocking the kernel.
5) As a userspace process, its priority can be tweaked lower if there are more important things to process than serial ports. A kernel driver is always on and interrupting at its full rate while its open.
6) Exportability -- xuartctl can export its serial ports to other UNIX machines across the internet to serve as virtual "local" serial ports since xuartctl.c compiles on any UNIX.

//Jesse Off

--- In , Walter Marvin <> wrote:
>
> What actually occurs is that Technologic mmaps the xuart hardware into the Linux user space and then treats them as internal TCP servers.
> They have arranged the servers so as to support "raw" device mapping within Linux. What this does is cause excessive user space to kernel space context switches, especially since the xuart hardware can dribble in characters a few time. This causes non-linear latency responses when combined with other user space loads.  The actual latency starts at about 2ms and increases in a non-linear fashion dependent on other load. This is really not that measurable with a simplistic program, but  top is useful.
>
> If you want to use one xuart channel per serial line at 100 ms per packet, Technologics' system can probably handle that,  but I would model it with some scripting and measure, just to be sure
>
>
>
> ________________________________
> From: mike ingle <>
> To:
> Sent: Wednesday, August 31, 2011 4:19 PM
> Subject: Re: [ts-7000] TS-7550 XUARTs
>
>
>  
> Hi Walter,
>
> Am I right there there is no device driver, and that the userspace just mmaps the xuarts?  For my application, latency won't be a problem, also very much a fixed line setup.  What little I read on the xuart indicated that they expect about 100ms latency in their user space server (I would assume that I wouldn't be using their xuartctl server, instead directly reading and writing to the xuarts) .  As long as It never ever drops characters, latency is OK.  Given how few of these will be built, and the desire to run device test routines on the server, I think 8 uarts per 7550 is OK.  my biggest concern is that the 7550 perform as described.
>
> best regards Mike
> On Aug 31, 2011, at 11:50 AM, Walter Marvin wrote:
>
>  
> >
> >
> >The TS7500 and 7550 does NOT I repeat NOT have standard Linux serial device driver support. The User Space servers that Technologic supply limit the throughput and latency you achieve.  Since your baud rate is the same on all channels and the through put is relatively low you might be able to get away with it.  I would suggest you set up a demo with one 7550 and see if it works without delays. 
> >
> >
> >
> >I had to modify the servers and finally write my own drivers to get 50 ms latency and line set up flexibility. If you go to a device driver, you might be able to multiplex the serial streams in hardware and limit the number of 7550's. I can help you with this.
> >
> >
> >
> >
> >
> >
> >________________________________
> >From: mike ingle <>
> >To:
> >Sent: Wednesday, August 31, 2011 2:34 PM
> >Subject: [ts-7000] TS-7550 XUARTs
> >
> >
> > 
> >Hi all,
> >
> >I need to maintain communications with 80 devices overRS-232 serial (115k). Each device streams an approximately 120 byte packet every 100ms.
> >also the host, can send packets, and expect a response at any time. The packets are hex encoded with out of band start and stop characters.
> >
> >I am contemplating using 10 ts-7550s (with appropriate level shifters) to control the devices, and forward the data over ethernet. The intent would be to crack the serial packets (which include 2 crc32 checks) down to their 60byte binary size, buffer 10 or so serial packets per channel, (600bytes per ethernet packet) and send them on up to a host for logging and display.
> >
> >My data rate calculations show very modest ethernet usage (8 x 600 bytes/s).
> >
> >On the surface the ts-7550 looks like a nice fit for this. Anyone have any experience with the XUARTs , or better suggestions? Probably no more than 3 <80 channel systems> will be built.
> >
> >Best Regards Mike
> >
> >
> >
> >
> >
> >
>






__._,_.___


Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: =Email Delivery: Digest | m("yahoogroups.com?subject","ts-7000-fullfeatured");=Change Delivery Format: Fully Featured">Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | =Unsubscribe

__,_._,___
<Prev in Thread] Current Thread [Next in Thread>
Admin

Disclaimer: Neither Andrew Taylor nor the University of NSW School of Computer and Engineering take any responsibility for the contents of this archive. It is purely a compilation of material sent by many people to the birding-aus mailing list. It has not been checked for accuracy nor its content verified in any way. If you wish to get material removed from the archive or have other queries about the archive e-mail Andrew Taylor at this address: andrewt@cse.unsw.EDU.AU