[PATCH] staging: comedi: das1800: fix analog input number of channels

Hartley Sweeten HartleyS at visionengravers.com
Thu Apr 7 17:45:38 UTC 2016


On Thursday, April 07, 2016 9:48 AM, Hartley Sweeten wrote:
> On Thursday, April 07, 2016 3:16 AM, Ian Abbott wrote:
>> On 06/04/16 19:06, H Hartley Sweeten wrote:
>>> The "hc" type boards have 64 analog input channels with a 64 entry queue.
>>> All the others have 16 channels and a 256 entry queue.
>>>
>>> Currently the boardinfo 'qram_len' is used to initialize the subdevice
>>> 'n_chan' and 'len_chanlist'. This works for the 64 channel boards but
>>> sets the 'n_chan' wrong for the 16 channel boards.
>>
>> I think the 256 QRAM positions is to allow use with a set of EXP-1800 
>> boards, each of which can multiplex one of the single-ended inputs of 
>> the DAS-1800 series into 16 channels.  According to the user's guide, 
>> they can be daisy chained to provide up to 256 channels.
>>
>> Datasheet:
>>
>> http://www.tek.com/sites/tek.com/files/media/media/resources/exp-1800_ds.pdf
>>
>> User's Guide download page (need to fill in contact info!):
>>
>> http://www.tek.com/manual/exp-1800-users-guide-92160b-manual
>>
>>
>> So it's probably best to leave the number of channels alone.

Finally able to get the user's guide to download.

> The EXP-1800 support looks like it will need additional changes to the driver
> in order to work correctly. According to the data sheet:
>
> 1) all board input channels must be configured as single-ended,
>    EXP-1800 inputs can be single-ended or differential. Not sure how
>    the board needs to be programmed to achieve this.
> 2) only gains of 1 and 50 are selectable on a per-channel basis
> 3) resolution is 12-bit, not clear how this works on a 16-bit board
> 4) max ai speed depends on the EXP-1800 gain not the board
>     gain 1 = 312kHz sample rate
>     gain 50 = 150kHz sample rate
> 5) gain must be the same on all channels and the boards gain must be 1 
>
> Additionally, it's not clear how the channel mapping works for each
> EXP-1800 connected to a board input channel.

The channel mapping is a bit warped as far as comedi is concerned.

Each EXP-1800 is jumper configured for what board input channel will
be used to return the 16 channels on the EXP-1800. The hi bits of the
QRAM are output to the EXP-1800 boards to select the channel as the
MUX4-7 pins on the connector.

Channel mapping looks like this:

On-board channel 0	EXP-1800 logical channels 0 to 15
On-board channel 1	EXP-1800 logical channels 16 to 31
...
On-board channel 15	EXP-1800 logical channels 240 to 255

So it looks like the QRAM 'channel' (i.e. the comedi channel) to physical
channel mapping goes:

channel 0	On-board channel 0 / EXP-1800 logical channel 0
channel 1	On-board channel 1 / EXP-1800 logical channel 16
channel 2	On-board channel 2 / EXP-1800 logical channel 32
channel 3	On-board channel 3 / EXP-1800 logical channel 48
channel 4	On-board channel 4 / EXP-1800 logical channel 64
channel 5	On-board channel 5 / EXP-1800 logical channel 80
channel 6	On-board channel 6 / EXP-1800 logical channel 96
channel 7	On-board channel 7 / EXP-1800 logical channel 112
channel 8	On-board channel 8 / EXP-1800 logical channel 128
channel 9	On-board channel 9 / EXP-1800 logical channel 144
channel 10	On-board channel 10 / EXP-1800 logical channel 160
channel 11	On-board channel 11 / EXP-1800 logical channel 176
channel 12	On-board channel 12 / EXP-1800 logical channel 192
channel 13	On-board channel 13 / EXP-1800 logical channel 208
channel 14	On-board channel 14 / EXP-1800 logical channel 224
channel 15	On-board channel 15 / EXP-1800 logical channel 240
channel 16	On-board channel 0 / EXP-1800 logical channel 1
channel 17	On-board channel 1 / EXP-1800 logical channel 17
...
channel 254	On-board channel 14 / EXP-1800 logical channel 239
channel 255	On-board channel 15 / EXP-1800 logical channel 255

So if no EXP-1800 boards are used the comedi channel matches the
on-board channel. But, if any EXP-1800 boards are used the comedi
channel to physical channel gets all screwy. Just using one EXP-1800
board connected to on-board channel 0 results in this comedi channel
map for the 32 'usable' channels:

channel 0	EXP-1800 logical channel 0
channel 1	On-board channel 1
channel 2	On-board channel 2
channel 3	On-board channel 3
channel 4	On-board channel 4
channel 5	On-board channel 5
channel 6	On-board channel 6
channel 7	On-board channel 7
channel 8	On-board channel 8
channel 9	On-board channel 9
channel 10	On-board channel 10
channel 11	On-board channel 11
channel 12	On-board channel 12
channel 13	On-board channel 13
channel 14	On-board channel 14
channel 15	On-board channel 15
channel 16	EXP-1800 logical channel 1
channel 32 	EXP-1800 logical channel 2
channel 48 	EXP-1800 logical channel 3
channel 64 	EXP-1800 logical channel 4
channel 80 	EXP-1800 logical channel 5
channel 96 	EXP-1800 logical channel 6
channel 112 	EXP-1800 logical channel 7
channel 128 	EXP-1800 logical channel 8
channel 144 	EXP-1800 logical channel 9
channel 160 	EXP-1800 logical channel 10
channel 176 	EXP-1800 logical channel 11
channel 192 	EXP-1800 logical channel 12
channel 208 	EXP-1800 logical channel 13
channel 224 	EXP-1800 logical channel 14
channel 240 	EXP-1800 logical channel 15

> I think it's better to set the number of channels to 16 and just support
> the on-board analog inputs for now. Once the EXP-1800 support is
> figured out it can be added.

There is also the issue with the gain when using an EXP-1800 board.
For now I think limiting the channels to 16 is the best option.

Also, the driver doesn't state that the EXP-1800 boards are supported.
I'm not sure the author (Frank Mori Hess) actually thought about or
tested it when he originally wrote the driver.

Regards,
Hartley



More information about the devel mailing list