444 lines
24 KiB
ReStructuredText
444 lines
24 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
================
|
|
ADIS16480 driver
|
|
================
|
|
|
|
This driver supports Analog Device's IMUs on SPI bus.
|
|
|
|
1. Supported devices
|
|
====================
|
|
|
|
* `ADIS16375 <https://www.analog.com/ADIS16375>`_
|
|
* `ADIS16480 <https://www.analog.com/ADIS16480>`_
|
|
* `ADIS16485 <https://www.analog.com/ADIS16485>`_
|
|
* `ADIS16488 <https://www.analog.com/ADIS16488>`_
|
|
* `ADIS16490 <https://www.analog.com/ADIS16490>`_
|
|
* `ADIS16495 <https://www.analog.com/ADIS16495>`_
|
|
* `ADIS16497 <https://www.analog.com/ADIS16497>`_
|
|
* `ADIS16545 <https://www.analog.com/ADIS16545>`_
|
|
* `ADIS16547 <https://www.analog.com/ADIS16547>`_
|
|
|
|
Each supported device is a complete inertial system that includes a triaxial
|
|
gyroscope and a triaxial accelerometer. Each inertial sensor in device combines
|
|
with signal conditioning that optimizes dynamic performance. The factory
|
|
calibration characterizes each sensor for sensitivity, bias, and alignment. As
|
|
a result, each sensor has its own dynamic compensation formulas that provide
|
|
accurate sensor measurements.
|
|
|
|
2. Device attributes
|
|
====================
|
|
|
|
Accelerometer, gyroscope measurements are always provided. Furthermore, the
|
|
driver offers the capability to retrieve the delta angle and the delta velocity
|
|
measurements computed by the device.
|
|
|
|
The delta angle measurements represent a calculation of angular displacement
|
|
between each sample update, while the delta velocity measurements represent a
|
|
calculation of linear velocity change between each sample update.
|
|
|
|
Finally, temperature data are provided which show a coarse measurement of
|
|
the temperature inside of the IMU device. This data is most useful for
|
|
monitoring relative changes in the thermal environment.
|
|
|
|
ADIS16480 and ADIS16488 also provide access to barometric pressure data and
|
|
triaxial magnetometer measurements.
|
|
|
|
Each IIO device, has a device folder under ``/sys/bus/iio/devices/iio:deviceX``,
|
|
where X is the IIO index of the device. Under these folders reside a set of
|
|
device files, depending on the characteristics and features of the hardware
|
|
device in questions. These files are consistently generalized and documented in
|
|
the IIO ABI documentation.
|
|
|
|
The following tables show the adis16480 related device files, found in the
|
|
specific device folder path ``/sys/bus/iio/devices/iio:deviceX``.
|
|
|
|
**Available only for ADIS16480 and ADIS16488:**
|
|
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| 3-Axis Magnetometer related device files | Description |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_scale | Scale for the magnetometer channels. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_x_calibbias | Calibration offset for the X-axis magnetometer channel. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_x_filter_low_pass_3db_frequency | Bandwidth for the X-axis magnetometer channel. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_x_raw | Raw X-axis magnetometer channel value. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_y_calibbias | Calibration offset for the Y-axis magnetometer channel. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_y_filter_low_pass_3db_frequency | Bandwidth for the Y-axis magnetometer channel. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_y_raw | Raw Y-axis magnetometer channel value. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_z_calibbias | Calibration offset for the Z-axis magnetometer channel. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_z_filter_low_pass_3db_frequency | Bandwidth for the Z-axis magnetometer channel. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
| in_magn_z_raw | Raw Z-axis magnetometer channel value. |
|
|
+------------------------------------------+---------------------------------------------------------+
|
|
|
|
+------------------------------------------+-----------------------------------------------------+
|
|
| Barometric pressure sensor related files | Description |
|
|
+------------------------------------------+-----------------------------------------------------+
|
|
| in_pressure0_calibbias | Calibration offset for barometric pressure channel. |
|
|
+------------------------------------------+-----------------------------------------------------+
|
|
| in_pressure0_raw | Raw barometric pressure channel value. |
|
|
+------------------------------------------+-----------------------------------------------------+
|
|
| in_pressure0_scale | Scale for the barometric pressure sensor channel. |
|
|
+------------------------------------------+-----------------------------------------------------+
|
|
|
|
**Available for all supported devices:**
|
|
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| 3-Axis Accelerometer related device files | Description |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_scale | Scale for the accelerometer channels. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_x_calibbias | Calibration offset for the X-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_x_calibscale | Calibration scale for the X-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_x_filter_low_pass_3db_frequency | Bandwidth for the X-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_x_raw | Raw X-axis accelerometer channel value. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_y_calibbias | Calibration offset for the Y-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_y_calibscale | Calibration scale for the Y-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_y_filter_low_pass_3db_frequency | Bandwidth for the Y-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_y_raw | Raw Y-axis accelerometer channel value. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_z_calibbias | Calibration offset for the Z-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_z_calibscale | Calibration scale for the Z-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_z_filter_low_pass_3db_frequency | Bandwidth for the Z-axis accelerometer channel. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_accel_z_raw | Raw Z-axis accelerometer channel value. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_deltavelocity_scale | Scale for delta velocity channels. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_deltavelocity_x_raw | Raw X-axis delta velocity channel value. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_deltavelocity_y_raw | Raw Y-axis delta velocity channel value. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
| in_deltavelocity_z_raw | Raw Z-axis delta velocity channel value. |
|
|
+-------------------------------------------+----------------------------------------------------------+
|
|
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| 3-Axis Gyroscope related device files | Description |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_scale | Scale for the gyroscope channels. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_x_calibbias | Calibration offset for the X-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_x_calibscale | Calibration scale for the X-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_x_filter_low_pass_3db_frequency | Bandwidth for the X-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_x_raw | Raw X-axis gyroscope channel value. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_y_calibbias | Calibration offset for the Y-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_y_calibscale | Calibration scale for the Y-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_y_filter_low_pass_3db_frequency | Bandwidth for the Y-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_y_raw | Raw Y-axis gyroscope channel value. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_z_calibbias | Calibration offset for the Z-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_z_calibscale | Calibration scale for the Z-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_z_filter_low_pass_3db_frequency | Bandwidth for the Z-axis gyroscope channel. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_anglvel_z_raw | Raw Z-axis gyroscope channel value. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_deltaangl_scale | Scale for delta angle channels. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_deltaangl_x_raw | Raw X-axis delta angle channel value. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_deltaangl_y_raw | Raw Y-axis delta angle channel value. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
| in_deltaangl_z_raw | Raw Z-axis delta angle channel value. |
|
|
+--------------------------------------------+------------------------------------------------------+
|
|
|
|
+----------------------------------+-------------------------------------------+
|
|
| Temperature sensor related files | Description |
|
|
+----------------------------------+-------------------------------------------+
|
|
| in_temp0_raw | Raw temperature channel value. |
|
|
+----------------------------------+-------------------------------------------+
|
|
| in_temp0_offset | Offset for the temperature sensor channel.|
|
|
+----------------------------------+-------------------------------------------+
|
|
| in_temp0_scale | Scale for the temperature sensor channel. |
|
|
+----------------------------------+-------------------------------------------+
|
|
|
|
+-------------------------------+---------------------------------------------------------+
|
|
| Miscellaneous device files | Description |
|
|
+-------------------------------+---------------------------------------------------------+
|
|
| name | Name of the IIO device. |
|
|
+-------------------------------+---------------------------------------------------------+
|
|
| sampling_frequency | Currently selected sample rate. |
|
|
+-------------------------------+---------------------------------------------------------+
|
|
|
|
The following table shows the adis16480 related device debug files, found in the
|
|
specific device debug folder path ``/sys/kernel/debug/iio/iio:deviceX``.
|
|
|
|
+----------------------+-------------------------------------------------------------------------+
|
|
| Debugfs device files | Description |
|
|
+----------------------+-------------------------------------------------------------------------+
|
|
| serial_number | The serial number of the chip in hexadecimal format. |
|
|
+----------------------+-------------------------------------------------------------------------+
|
|
| product_id | Chip specific product id (e.g. 16480, 16488, 16545, etc.). |
|
|
+----------------------+-------------------------------------------------------------------------+
|
|
| flash_count | The number of flash writes performed on the device. |
|
|
+----------------------+-------------------------------------------------------------------------+
|
|
| firmware_revision | String containing the firmware revision in the following format ##.##. |
|
|
+----------------------+-------------------------------------------------------------------------+
|
|
| firmware_date | String containing the firmware date in the following format mm-dd-yyyy. |
|
|
+----------------------+-------------------------------------------------------------------------+
|
|
|
|
Channels processed values
|
|
-------------------------
|
|
|
|
A channel value can be read from its _raw attribute. The value returned is the
|
|
raw value as reported by the devices. To get the processed value of the channel,
|
|
apply the following formula:
|
|
|
|
.. code-block:: bash
|
|
|
|
processed value = (_raw + _offset) * _scale
|
|
|
|
Where _offset and _scale are device attributes. If no _offset attribute is
|
|
present, simply assume its value is 0.
|
|
|
|
The adis16480 driver offers data for 7 types of channels, the table below shows
|
|
the measurement units for the processed value, which are defined by the IIO
|
|
framework:
|
|
|
|
+--------------------------------------+---------------------------+
|
|
| Channel type | Measurement unit |
|
|
+--------------------------------------+---------------------------+
|
|
| Acceleration on X, Y, and Z axis | Meters per Second squared |
|
|
+--------------------------------------+---------------------------+
|
|
| Angular velocity on X, Y and Z axis | Radians per second |
|
|
+--------------------------------------+---------------------------+
|
|
| Delta velocity on X. Y, and Z axis | Meters per Second |
|
|
+--------------------------------------+---------------------------+
|
|
| Delta angle on X, Y, and Z axis | Radians |
|
|
+--------------------------------------+---------------------------+
|
|
| Temperature | Millidegrees Celsius |
|
|
+--------------------------------------+---------------------------+
|
|
| Magnetic field along X, Y and Z axis | Gauss |
|
|
+--------------------------------------+---------------------------+
|
|
| Barometric pressure | kilo Pascal |
|
|
+--------------------------------------+---------------------------+
|
|
|
|
Usage examples
|
|
--------------
|
|
|
|
Show device name:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat name
|
|
adis16545-1
|
|
|
|
Show accelerometer channels value:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw
|
|
1376728
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw
|
|
4487621
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw
|
|
262773792
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale
|
|
0.000000037
|
|
|
|
- X-axis acceleration = in_accel_x_raw * in_accel_scale = 0.050938936 m/s^2
|
|
- Y-axis acceleration = in_accel_y_raw * in_accel_scale = 0.166041977 m/s^2
|
|
- Z-axis acceleration = in_accel_z_raw * in_accel_scale = 9.722630304 m/s^2
|
|
|
|
Show gyroscope channels value:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_x_raw
|
|
-1041702
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_raw
|
|
-273013
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_z_raw
|
|
2745116
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_scale
|
|
0.000000001
|
|
|
|
- X-axis angular velocity = in_anglvel_x_raw * in_anglvel_scale = −0.001041702 rad/s
|
|
- Y-axis angular velocity = in_anglvel_y_raw * in_anglvel_scale = −0.000273013 rad/s
|
|
- Z-axis angular velocity = in_anglvel_z_raw * in_anglvel_scale = 0.002745116 rad/s
|
|
|
|
Set calibration offset for accelerometer channels:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
|
|
0
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo 5000 > in_accel_x_calibbias
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
|
|
5000
|
|
|
|
Set calibration offset for gyroscope channels:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_calibbias
|
|
0
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo -5000 > in_anglvel_y_calibbias
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_calibbias
|
|
-5000
|
|
|
|
Set sampling frequency:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat sampling_frequency
|
|
4250.000000
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo 1000 > sampling_frequency
|
|
1062.500000
|
|
|
|
Set bandwidth for accelerometer channels:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_filter_low_pass_3db_frequency
|
|
0
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo 300 > in_accel_x_filter_low_pass_3db_frequency
|
|
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_filter_low_pass_3db_frequency
|
|
300
|
|
|
|
Show serial number:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/kernel/debug/iio/iio:device0> cat serial_number
|
|
0x000c
|
|
|
|
Show product id:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/kernel/debug/iio/iio:device0> cat product_id
|
|
16545
|
|
|
|
Show flash count:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/kernel/debug/iio/iio:device0> cat flash_count
|
|
88
|
|
|
|
Show firmware revision:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/kernel/debug/iio/iio:device0> cat firmware_revision
|
|
1.4
|
|
|
|
Show firmware date:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/kernel/debug/iio/iio:device0> cat firmware_date
|
|
09-23-2023
|
|
|
|
3. Device buffers
|
|
=================
|
|
|
|
This driver supports IIO buffers.
|
|
|
|
All devices support retrieving the raw acceleration, gyroscope and temperature
|
|
measurements using buffers.
|
|
|
|
The following device families also support retrieving the delta velocity, delta
|
|
angle and temperature measurements using buffers:
|
|
|
|
- ADIS16545
|
|
- ADIS16547
|
|
|
|
However, when retrieving acceleration or gyroscope data using buffers, delta
|
|
readings will not be available and vice versa. This is because the device only
|
|
allows to read either acceleration and gyroscope data or delta velocity and
|
|
delta angle data at a time and switching between these two burst data selection
|
|
modes is time consuming.
|
|
|
|
Usage examples
|
|
--------------
|
|
|
|
Set device trigger in current_trigger, if not already set:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo adis16545-1-dev0 > trigger/current_trigger
|
|
root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
|
|
adis16545-1-dev0
|
|
|
|
Select channels for buffer read:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_x_en
|
|
root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_y_en
|
|
root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_z_en
|
|
root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_temp0_en
|
|
|
|
Set the number of samples to be stored in the buffer:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo 10 > buffer/length
|
|
|
|
Enable buffer readings:
|
|
|
|
.. code-block:: bash
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> echo 1 > buffer/enable
|
|
|
|
Obtain buffered data::
|
|
|
|
root:/sys/bus/iio/devices/iio:device0> hexdump -C /dev/iio\:device0
|
|
...
|
|
00006aa0 09 62 00 00 ff ff fc a4 00 00 01 69 00 03 3c 08 |.b.........i..<.|
|
|
00006ab0 09 61 00 00 00 00 02 96 00 00 02 8f 00 03 37 50 |.a............7P|
|
|
00006ac0 09 61 00 00 00 00 12 3d 00 00 0b 89 00 03 2c 0b |.a.....=......,.|
|
|
00006ad0 09 61 00 00 00 00 1e dc 00 00 16 dd 00 03 25 bf |.a............%.|
|
|
00006ae0 09 61 00 00 00 00 1e e3 00 00 1b bf 00 03 27 0b |.a............'.|
|
|
00006af0 09 61 00 00 00 00 15 50 00 00 19 44 00 03 30 fd |.a.....P...D..0.|
|
|
00006b00 09 61 00 00 00 00 09 0e 00 00 14 41 00 03 3d 7f |.a.........A..=.|
|
|
00006b10 09 61 00 00 ff ff ff f0 00 00 0e bc 00 03 48 d0 |.a............H.|
|
|
00006b20 09 63 00 00 00 00 00 9f 00 00 0f 37 00 03 4c fe |.c.........7..L.|
|
|
00006b30 09 64 00 00 00 00 0b f6 00 00 18 92 00 03 43 22 |.d............C"|
|
|
00006b40 09 64 00 00 00 00 18 df 00 00 22 33 00 03 33 ab |.d........"3..3.|
|
|
00006b50 09 63 00 00 00 00 1e 81 00 00 26 be 00 03 29 60 |.c........&...)`|
|
|
00006b60 09 63 00 00 00 00 1b 13 00 00 22 2f 00 03 23 91 |.c........"/..#.|
|
|
...
|
|
|
|
See ``Documentation/iio/iio_devbuf.rst`` for more information about how buffered
|
|
data is structured.
|
|
|
|
4. IIO Interfacing Tools
|
|
========================
|
|
|
|
See ``Documentation/iio/iio_tools.rst`` for the description of the available IIO
|
|
interfacing tools.
|