| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- .. SPDX-License-Identifier: GPL-2.0-only
- =============
- AD7380 driver
- =============
- ADC driver for Analog Devices Inc. AD7380 and similar devices. The module name
- is ``ad7380``.
- Supported devices
- =================
- The following chips are supported by this driver:
- * `AD7380 <https://www.analog.com/en/products/ad7380.html>`_
- * `AD7381 <https://www.analog.com/en/products/ad7381.html>`_
- * `AD7383 <https://www.analog.com/en/products/ad7383.html>`_
- * `AD7384 <https://www.analog.com/en/products/ad7384.html>`_
- * `AD7386 <https://www.analog.com/en/products/ad7386.html>`_
- * `AD7387 <https://www.analog.com/en/products/ad7387.html>`_
- * `AD7388 <https://www.analog.com/en/products/ad7388.html>`_
- * `AD7380-4 <https://www.analog.com/en/products/ad7380-4.html>`_
- * `AD7381-4 <https://www.analog.com/en/products/ad7381-4.html>`_
- * `AD7383-4 <https://www.analog.com/en/products/ad7383-4.html>`_
- * `AD7384-4 <https://www.analog.com/en/products/ad7384-4.html>`_
- * `AD7386-4 <https://www.analog.com/en/products/ad7386-4.html>`_
- * `AD7387-4 <https://www.analog.com/en/products/ad7387-4.html>`_
- * `AD7388-4 <https://www.analog.com/en/products/ad7388-4.html>`_
- * `AD7389-4 <https://www.analog.com/en/products/ad7389-4.html>`_
- * `ADAQ4370-4 <https://www.analog.com/en/products/adaq4370-4.html>`_
- * `ADAQ4380-4 <https://www.analog.com/en/products/adaq4380-4.html>`_
- * `ADAQ4381-4 <https://www.analog.com/en/products/adaq4381-4.html>`_
- Supported features
- ==================
- SPI wiring modes
- ----------------
- ad738x ADCs can output data on several SDO lines (1/2/4). The driver currently
- supports only 1 SDO line.
- Reference voltage
- -----------------
- ad7380-4
- ~~~~~~~~
- ad7380-4 supports only an external reference voltage (2.5V to 3.3V). It must be
- declared in the device tree as ``refin-supply``.
- ad7389-4
- ~~~~~~~~
- ad7389-4 supports only an internal reference voltage. ``refin-supply`` and
- ``refio-supply`` properties are both omitted in this case.
- ADAQ devices
- ~~~~~~~~~~~~
- ADAQ devices don't have an external reference, but use a 3.3V internal reference
- derived from one of its supplies (``refin-supply``)
- All other devices from ad738x family
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- All other devices from ad738x support 2 possible reference voltage sources:
- - Internal reference (2.5V)
- - External reference (2.5V to 3.3V)
- The source is determined by the device tree. If ``refio-supply`` is present,
- then it is used as external reference, else the internal reference is used.
- Oversampling and resolution boost
- ---------------------------------
- This family supports 2 types of oversampling: normal average and rolling
- average. Only normal average is supported by the driver, as rolling average can
- be achieved by processing a captured data buffer. The following ratios are
- available: 1 (oversampling disabled)/2/4/8/16/32.
- When the on-chip oversampling function is enabled the performance of the ADC can
- exceed the default resolution. To accommodate the performance boost achievable,
- it is possible to enable an additional two bits of resolution. Because the
- resolution boost feature can only be enabled when oversampling is enabled and
- oversampling is not as useful without the resolution boost, the driver
- automatically enables the resolution boost if and only if oversampling is
- enabled.
- Since the resolution boost feature causes 16-bit chips to now have 18-bit data
- which means the storagebits has to change from 16 to 32 bits, we use the new
- ext_scan_type feature to allow changing the scan_type at runtime. Unfortunately
- libiio does not support it. So when enabling or disabling oversampling, user
- must restart iiod using the following command:
- .. code-block:: bash
- root:~# systemctl restart iiod
- Alert
- -----
- 2 channels variants of the ad738x family, can use the SDOB line as an alert pin
- when configured in 1 SDO line mode. 4 channels variants, can use SDOD as an
- alert pin when configured in 1 or 2 SDO line(s) mode, although only 1 SDO line
- mode is currently supported by the driver (see `SPI wiring modes`_).
- At the end of a conversion the active-low alert pin gets asserted if the
- conversion result exceeds the alert high limit or falls below the alert low
- limit. It is cleared, on a falling edge of CS. The alert pin is common to all
- channels.
- User can enable alert using the regular iio events attribute:
- .. code-block:: bash
- events/thresh_either_en
- The high and low thresholds are common to all channels and can also be set using
- regular iio events attributes:
- .. code-block:: bash
- events/in_thresh_falling_value
- events/in_thresh_rising_value
- If debugfs is available, user can read the ALERT register to determine the
- faulty channel and direction.
- In most use cases, user will hardwire the alert pin to trigger a shutdown.
- Channel selection and sequencer (single-end chips only)
- -------------------------------------------------------
- Single-ended chips of this family (ad7386/7/8(-4)) have a 2:1 multiplexer in
- front of each ADC. They also include additional configuration registers that
- allow for either manual selection or automatic switching (sequencer mode), of
- the multiplexer inputs.
- From an IIO point of view, all inputs are exported, i.e ad7386/7/8
- export 4 channels and ad7386-4/7-4/8-4 export 8 channels.
- Inputs ``AinX0`` of multiplexers correspond to the first half of IIO channels (i.e
- 0-1 or 0-3) and inputs ``AinX1`` correspond to second half (i.e 2-3 or 4-7).
- Example for AD7386/7/8 (2 channels parts):
- .. code-block::
- IIO | AD7386/7/8
- | +----------------------------
- | | _____ ______
- | | | | | |
- voltage0 | AinA0 --|--->| | | |
- | | | mux |----->| ADCA |---
- voltage2 | AinA1 --|--->| | | |
- | | |_____| |_____ |
- | | _____ ______
- | | | | | |
- voltage1 | AinB0 --|--->| | | |
- | | | mux |----->| ADCB |---
- voltage3 | AinB1 --|--->| | | |
- | | |_____| |______|
- | |
- | +----------------------------
- When enabling sequencer mode, the effective sampling rate is divided by two.
- Gain (ADAQ devices only)
- ~~~~~~~~~~~~~~~~~~~~~~~~
- ADAQ devices have a pin selectable gain in front of each ADC. The appropriate
- gain is selectable from device tree using the ``adi,gain-milli`` property.
- Refer to the typical connection diagrams section of the datasheet for pin
- wiring.
- Unimplemented features
- ----------------------
- - 2/4 SDO lines
- - Rolling average oversampling
- - Power down mode
- - CRC indication
- SPI offload support
- ===================
- To be able to achieve the maximum sample rate, the driver can be used with the
- `AXI SPI Engine`_ to provide SPI offload support.
- .. _AXI SPI Engine: http://analogdevicesinc.github.io/hdl/projects/pulsar_adc/index.html
- When SPI offload is being used, some attributes will be different.
- * ``trigger`` directory is removed.
- * ``in_voltage0_sampling_frequency`` attribute is added for setting the sample
- rate.
- * ``in_voltage0_sampling_frequency_available`` attribute is added for querying
- the max sample rate.
- * ``timestamp`` channel is removed.
- * Buffer data format may be different compared to when offload is not used,
- e.g. the ``in_voltage0_type`` attribute.
- Device buffers
- ==============
- This driver supports IIO triggered buffers.
- See :doc:`iio_devbuf` for more information.
|