On Wed, Sep 14, 2011 at 5:38 AM, Stefan Schaal <ssch...@usc.edu> wrote:
> This is a summary and conclusion of using a NI6259 with Xenomai/Analogy for 
> digital data I/O. First of all, many thanks to Alexis whose Analogy branch 
> really allowed us to succeed! We would just like share the final results of 
> our implementation with the hope that this might help others.
> Goals:
> We needed a 19 bit parallel I/O for bi-directional communication between a 
> host computer and a robot controller. The 32bit DIO of the NI6259 seemed to 
> well suited. The communication protocol needs about 300 DIO commands per ms, 
> where every about 20 commands the DIO port needs to switch from write to read 
> and then back.
> Problems:
> Initially we tried a4l_sync_dio() (synchronous communication). We measured 
> that one a4l_sync_dio() takes about 5us. Additionally, the switch from read 
> to write mode also seems to take some additional time. Thus, the 
> communication speed was not sufficient.
> A 2nd attempt was to use instructions and instruction lists using 
> a4l_snd_insnlist() and a4l_snd_insn(). We measure that this can bring down 
> one data acquisition to about 3.5us when all commands are queued up in an 
> instruction list, but due to the read/write switch we needed, we cannot use 
> very long instruction lists, and the read/write switch takes too long. Thus, 
> the communication speed did not improve a lot.
> A 3rd attempt was to use CMD structures. Following comedi examples, we create 
> a 200ns clock and triggered the CMD streaming with this clock. This allows 
> VERY fast DIO. But, again, the read/write switches that are needed frequently 
> made CMD structures inefficient as we could not cue up a lot of DIO commands 
> before the next read/write switch, and in order to do the read/write switch, 
> the CMD has to be aborted. We also noted that starting a CMD has some delays.
> We realized that none of these approaches was feasible.
> Solution:
> We create a simple IC-based circuit that allowed to branch the read/write DIO 
> protocol such that we could use one DIO channel of the NI6259 for write only 
> (never switched to read), and the 2nd DIO channel on the NI6259 for read only 
> (no switching). By avoiding the read/write switching, all three ideas from 
> above are possible and run fast enough (after some optimization of our 
> communication protocol). We ended up using a4l_sync_dio() as it is the 
> easiest to use, and yielded sufficient speed. With the CMD approach, we would 
> be able to go a factor 5-10 faster even.
> For you info, our interface C-code is attached. This is not general purpose 
> software, but should allow other to get the idea of what we do.

Many thanks for this feedback!

> Best wishes, and thanks again to Alexis!
> -Stefan


Xenomai-core mailing list

Reply via email to