1.. SPDX-License-Identifier: GPL-2.0
2
3================
4ADIS16480 driver
5================
6
7This driver supports Analog Device's IMUs on SPI bus.
8
91. Supported devices
10====================
11
12* `ADIS16375 <https://www.analog.com/ADIS16375>`_
13* `ADIS16480 <https://www.analog.com/ADIS16480>`_
14* `ADIS16485 <https://www.analog.com/ADIS16485>`_
15* `ADIS16486 <https://www.analog.com/ADIS16486>`_
16* `ADIS16487 <https://www.analog.com/ADIS16487>`_
17* `ADIS16488 <https://www.analog.com/ADIS16488>`_
18* `ADIS16489 <https://www.analog.com/ADIS16489>`_
19* `ADIS16490 <https://www.analog.com/ADIS16490>`_
20* `ADIS16495 <https://www.analog.com/ADIS16495>`_
21* `ADIS16497 <https://www.analog.com/ADIS16497>`_
22* `ADIS16545 <https://www.analog.com/ADIS16545>`_
23* `ADIS16547 <https://www.analog.com/ADIS16547>`_
24
25Each supported device is a complete inertial system that includes a triaxial
26gyroscope and a triaxial accelerometer. Each inertial sensor in device combines
27with signal conditioning that optimizes dynamic performance. The factory
28calibration characterizes each sensor for sensitivity, bias, and alignment. As
29a result, each sensor has its own dynamic compensation formulas that provide
30accurate sensor measurements.
31
322. Device attributes
33====================
34
35Accelerometer, gyroscope measurements are always provided. Furthermore, the
36driver offers the capability to retrieve the delta angle and the delta velocity
37measurements computed by the device.
38
39The delta angle measurements represent a calculation of angular displacement
40between each sample update, while the delta velocity measurements represent a
41calculation of linear velocity change between each sample update.
42
43Finally, temperature data are provided which show a coarse measurement of
44the temperature inside of the IMU device. This data is most useful for
45monitoring relative changes in the thermal environment.
46
47ADIS16480 and ADIS16488 also provide access to barometric pressure data and
48triaxial magnetometer measurements.
49
50Each IIO device, has a device folder under ``/sys/bus/iio/devices/iio:deviceX``,
51where X is the IIO index of the device. Under these folders reside a set of
52device files, depending on the characteristics and features of the hardware
53device in questions. These files are consistently generalized and documented in
54the IIO ABI documentation.
55
56The following tables show the adis16480 related device files, found in the
57specific device folder path ``/sys/bus/iio/devices/iio:deviceX``.
58
59**Available only for ADIS16480 and ADIS16488:**
60
61+------------------------------------------+---------------------------------------------------------+
62| 3-Axis Magnetometer related device files | Description                                             |
63+------------------------------------------+---------------------------------------------------------+
64| in_magn_scale                            | Scale for the magnetometer channels.                    |
65+------------------------------------------+---------------------------------------------------------+
66| in_magn_x_calibbias                      | Calibration offset for the X-axis magnetometer channel. |
67+------------------------------------------+---------------------------------------------------------+
68| in_magn_x_filter_low_pass_3db_frequency  | Bandwidth for the X-axis magnetometer channel.          |
69+------------------------------------------+---------------------------------------------------------+
70| in_magn_x_raw                            | Raw X-axis magnetometer channel value.                  |
71+------------------------------------------+---------------------------------------------------------+
72| in_magn_y_calibbias                      | Calibration offset for the Y-axis magnetometer channel. |
73+------------------------------------------+---------------------------------------------------------+
74| in_magn_y_filter_low_pass_3db_frequency  | Bandwidth for the Y-axis magnetometer channel.          |
75+------------------------------------------+---------------------------------------------------------+
76| in_magn_y_raw                            | Raw Y-axis magnetometer channel value.                  |
77+------------------------------------------+---------------------------------------------------------+
78| in_magn_z_calibbias                      | Calibration offset for the Z-axis magnetometer channel. |
79+------------------------------------------+---------------------------------------------------------+
80| in_magn_z_filter_low_pass_3db_frequency  | Bandwidth for the Z-axis magnetometer channel.          |
81+------------------------------------------+---------------------------------------------------------+
82| in_magn_z_raw                            | Raw Z-axis magnetometer channel value.                  |
83+------------------------------------------+---------------------------------------------------------+
84
85+------------------------------------------+-----------------------------------------------------+
86| Barometric pressure sensor related files | Description                                         |
87+------------------------------------------+-----------------------------------------------------+
88| in_pressure0_calibbias                   | Calibration offset for barometric pressure channel. |
89+------------------------------------------+-----------------------------------------------------+
90| in_pressure0_raw                         | Raw barometric pressure channel value.              |
91+------------------------------------------+-----------------------------------------------------+
92| in_pressure0_scale                       | Scale for the barometric pressure sensor channel.   |
93+------------------------------------------+-----------------------------------------------------+
94
95**Available for all supported devices:**
96
97+-------------------------------------------+----------------------------------------------------------+
98| 3-Axis Accelerometer related device files | Description                                              |
99+-------------------------------------------+----------------------------------------------------------+
100| in_accel_scale                            | Scale for the accelerometer channels.                    |
101+-------------------------------------------+----------------------------------------------------------+
102| in_accel_x_calibbias                      | Calibration offset for the X-axis accelerometer channel. |
103+-------------------------------------------+----------------------------------------------------------+
104| in_accel_x_calibscale                     | Calibration scale for the X-axis accelerometer channel.  |
105+-------------------------------------------+----------------------------------------------------------+
106| in_accel_x_filter_low_pass_3db_frequency  | Bandwidth for the X-axis accelerometer channel.          |
107+-------------------------------------------+----------------------------------------------------------+
108| in_accel_x_raw                            | Raw X-axis accelerometer channel value.                  |
109+-------------------------------------------+----------------------------------------------------------+
110| in_accel_y_calibbias                      | Calibration offset for the Y-axis accelerometer channel. |
111+-------------------------------------------+----------------------------------------------------------+
112| in_accel_y_calibscale                     | Calibration scale for the Y-axis accelerometer channel.  |
113+-------------------------------------------+----------------------------------------------------------+
114| in_accel_y_filter_low_pass_3db_frequency  | Bandwidth for the Y-axis accelerometer channel.          |
115+-------------------------------------------+----------------------------------------------------------+
116| in_accel_y_raw                            | Raw Y-axis accelerometer channel value.                  |
117+-------------------------------------------+----------------------------------------------------------+
118| in_accel_z_calibbias                      | Calibration offset for the Z-axis accelerometer channel. |
119+-------------------------------------------+----------------------------------------------------------+
120| in_accel_z_calibscale                     | Calibration scale for the Z-axis accelerometer channel.  |
121+-------------------------------------------+----------------------------------------------------------+
122| in_accel_z_filter_low_pass_3db_frequency  | Bandwidth for the Z-axis accelerometer channel.          |
123+-------------------------------------------+----------------------------------------------------------+
124| in_accel_z_raw                            | Raw Z-axis accelerometer channel value.                  |
125+-------------------------------------------+----------------------------------------------------------+
126| in_deltavelocity_scale                    | Scale for delta velocity channels.                       |
127+-------------------------------------------+----------------------------------------------------------+
128| in_deltavelocity_x_raw                    | Raw X-axis delta velocity channel value.                 |
129+-------------------------------------------+----------------------------------------------------------+
130| in_deltavelocity_y_raw                    | Raw Y-axis delta velocity channel value.                 |
131+-------------------------------------------+----------------------------------------------------------+
132| in_deltavelocity_z_raw                    | Raw Z-axis delta velocity channel value.                 |
133+-------------------------------------------+----------------------------------------------------------+
134
135+--------------------------------------------+------------------------------------------------------+
136| 3-Axis Gyroscope related device files      | Description                                          |
137+--------------------------------------------+------------------------------------------------------+
138| in_anglvel_scale                           | Scale for the gyroscope channels.                    |
139+--------------------------------------------+------------------------------------------------------+
140| in_anglvel_x_calibbias                     | Calibration offset for the X-axis gyroscope channel. |
141+--------------------------------------------+------------------------------------------------------+
142| in_anglvel_x_calibscale                    | Calibration scale for the X-axis gyroscope channel.  |
143+--------------------------------------------+------------------------------------------------------+
144| in_anglvel_x_filter_low_pass_3db_frequency | Bandwidth for the X-axis gyroscope channel.          |
145+--------------------------------------------+------------------------------------------------------+
146| in_anglvel_x_raw                           | Raw X-axis gyroscope channel value.                  |
147+--------------------------------------------+------------------------------------------------------+
148| in_anglvel_y_calibbias                     | Calibration offset for the Y-axis gyroscope channel. |
149+--------------------------------------------+------------------------------------------------------+
150| in_anglvel_y_calibscale                    | Calibration scale for the Y-axis gyroscope channel.  |
151+--------------------------------------------+------------------------------------------------------+
152| in_anglvel_y_filter_low_pass_3db_frequency | Bandwidth for the Y-axis gyroscope channel.          |
153+--------------------------------------------+------------------------------------------------------+
154| in_anglvel_y_raw                           | Raw Y-axis gyroscope channel value.                  |
155+--------------------------------------------+------------------------------------------------------+
156| in_anglvel_z_calibbias                     | Calibration offset for the Z-axis gyroscope channel. |
157+--------------------------------------------+------------------------------------------------------+
158| in_anglvel_z_calibscale                    | Calibration scale for the Z-axis gyroscope channel.  |
159+--------------------------------------------+------------------------------------------------------+
160| in_anglvel_z_filter_low_pass_3db_frequency | Bandwidth for the Z-axis gyroscope channel.          |
161+--------------------------------------------+------------------------------------------------------+
162| in_anglvel_z_raw                           | Raw Z-axis gyroscope channel value.                  |
163+--------------------------------------------+------------------------------------------------------+
164| in_deltaangl_scale                         | Scale for delta angle channels.                      |
165+--------------------------------------------+------------------------------------------------------+
166| in_deltaangl_x_raw                         | Raw X-axis delta angle channel value.                |
167+--------------------------------------------+------------------------------------------------------+
168| in_deltaangl_y_raw                         | Raw Y-axis delta angle channel value.                |
169+--------------------------------------------+------------------------------------------------------+
170| in_deltaangl_z_raw                         | Raw Z-axis delta angle channel value.                |
171+--------------------------------------------+------------------------------------------------------+
172
173+----------------------------------+-------------------------------------------+
174| Temperature sensor related files | Description                               |
175+----------------------------------+-------------------------------------------+
176| in_temp0_raw                     | Raw temperature channel value.            |
177+----------------------------------+-------------------------------------------+
178| in_temp0_offset                  | Offset for the temperature sensor channel.|
179+----------------------------------+-------------------------------------------+
180| in_temp0_scale                   | Scale for the temperature sensor channel. |
181+----------------------------------+-------------------------------------------+
182
183+-------------------------------+---------------------------------------------------------+
184| Miscellaneous device files    | Description                                             |
185+-------------------------------+---------------------------------------------------------+
186| name                          | Name of the IIO device.                                 |
187+-------------------------------+---------------------------------------------------------+
188| sampling_frequency            | Currently selected sample rate.                         |
189+-------------------------------+---------------------------------------------------------+
190
191The following table shows the adis16480 related device debug files, found in the
192specific device debug folder path ``/sys/kernel/debug/iio/iio:deviceX``.
193
194+----------------------+-------------------------------------------------------------------------+
195| Debugfs device files | Description                                                             |
196+----------------------+-------------------------------------------------------------------------+
197| serial_number        | The serial number of the chip in hexadecimal format.                    |
198+----------------------+-------------------------------------------------------------------------+
199| product_id           | Chip specific product id (e.g. 16480, 16488, 16545, etc.).              |
200+----------------------+-------------------------------------------------------------------------+
201| flash_count          | The number of flash writes performed on the device.                     |
202+----------------------+-------------------------------------------------------------------------+
203| firmware_revision    | String containing the firmware revision in the following format ##.##.  |
204+----------------------+-------------------------------------------------------------------------+
205| firmware_date        | String containing the firmware date in the following format mm-dd-yyyy. |
206+----------------------+-------------------------------------------------------------------------+
207
208Channels processed values
209-------------------------
210
211A channel value can be read from its _raw attribute. The value returned is the
212raw value as reported by the devices. To get the processed value of the channel,
213apply the following formula:
214
215.. code-block:: bash
216
217        processed value = (_raw + _offset) * _scale
218
219Where _offset and _scale are device attributes. If no _offset attribute is
220present, simply assume its value is 0.
221
222The adis16480 driver offers data for 7 types of channels, the table below shows
223the measurement units for the processed value, which are defined by the IIO
224framework:
225
226+--------------------------------------+---------------------------+
227| Channel type                         | Measurement unit          |
228+--------------------------------------+---------------------------+
229| Acceleration on X, Y, and Z axis     | Meters per Second squared |
230+--------------------------------------+---------------------------+
231| Angular velocity on X, Y and Z axis  | Radians per second        |
232+--------------------------------------+---------------------------+
233| Delta velocity on X. Y, and Z axis   | Meters per Second         |
234+--------------------------------------+---------------------------+
235| Delta angle on X, Y, and Z axis      | Radians                   |
236+--------------------------------------+---------------------------+
237| Temperature                          | Millidegrees Celsius      |
238+--------------------------------------+---------------------------+
239| Magnetic field along X, Y and Z axis | Gauss                     |
240+--------------------------------------+---------------------------+
241| Barometric pressure                  | kilo Pascal               |
242+--------------------------------------+---------------------------+
243
244Usage examples
245--------------
246
247Show device name:
248
249.. code-block:: bash
250
251	root:/sys/bus/iio/devices/iio:device0> cat name
252        adis16545-1
253
254Show accelerometer channels value:
255
256.. code-block:: bash
257
258        root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw
259        1376728
260        root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw
261        4487621
262        root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw
263        262773792
264        root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale
265        0.000000037
266
267- X-axis acceleration = in_accel_x_raw * in_accel_scale = 0.050938936 m/s^2
268- Y-axis acceleration = in_accel_y_raw * in_accel_scale = 0.166041977 m/s^2
269- Z-axis acceleration = in_accel_z_raw * in_accel_scale = 9.722630304 m/s^2
270
271Show gyroscope channels value:
272
273.. code-block:: bash
274
275        root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_x_raw
276        -1041702
277        root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_raw
278        -273013
279        root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_z_raw
280        2745116
281        root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_scale
282        0.000000001
283
284- X-axis angular velocity = in_anglvel_x_raw * in_anglvel_scale = −0.001041702 rad/s
285- Y-axis angular velocity = in_anglvel_y_raw * in_anglvel_scale = −0.000273013 rad/s
286- Z-axis angular velocity = in_anglvel_z_raw * in_anglvel_scale = 0.002745116 rad/s
287
288Set calibration offset for accelerometer channels:
289
290.. code-block:: bash
291
292        root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
293        0
294
295        root:/sys/bus/iio/devices/iio:device0> echo 5000 > in_accel_x_calibbias
296        root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
297        5000
298
299Set calibration offset for gyroscope channels:
300
301.. code-block:: bash
302
303        root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_calibbias
304        0
305
306        root:/sys/bus/iio/devices/iio:device0> echo -5000 > in_anglvel_y_calibbias
307        root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_calibbias
308        -5000
309
310Set sampling frequency:
311
312.. code-block:: bash
313
314	root:/sys/bus/iio/devices/iio:device0> cat sampling_frequency
315        4250.000000
316
317        root:/sys/bus/iio/devices/iio:device0> echo 1000 > sampling_frequency
318        1062.500000
319
320Set bandwidth for accelerometer channels:
321
322.. code-block:: bash
323
324        root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_filter_low_pass_3db_frequency
325        0
326
327        root:/sys/bus/iio/devices/iio:device0> echo 300 > in_accel_x_filter_low_pass_3db_frequency
328        root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_filter_low_pass_3db_frequency
329        300
330
331Show serial number:
332
333.. code-block:: bash
334
335        root:/sys/kernel/debug/iio/iio:device0> cat serial_number
336        0x000c
337
338Show product id:
339
340.. code-block:: bash
341
342        root:/sys/kernel/debug/iio/iio:device0> cat product_id
343        16545
344
345Show flash count:
346
347.. code-block:: bash
348
349        root:/sys/kernel/debug/iio/iio:device0> cat flash_count
350        88
351
352Show firmware revision:
353
354.. code-block:: bash
355
356        root:/sys/kernel/debug/iio/iio:device0> cat firmware_revision
357        1.4
358
359Show firmware date:
360
361.. code-block:: bash
362
363        root:/sys/kernel/debug/iio/iio:device0> cat firmware_date
364        09-23-2023
365
3663. Device buffers
367=================
368
369This driver supports IIO buffers.
370
371All devices support retrieving the raw acceleration, gyroscope and temperature
372measurements using buffers.
373
374The following device families also support retrieving the delta velocity, delta
375angle and temperature measurements using buffers:
376
377- ADIS16545
378- ADIS16547
379
380However, when retrieving acceleration or gyroscope data using buffers, delta
381readings will not be available and vice versa. This is because the device only
382allows to read either acceleration and gyroscope data or delta velocity and
383delta angle data at a time and switching between these two burst data selection
384modes is time consuming.
385
386Usage examples
387--------------
388
389Set device trigger in current_trigger, if not already set:
390
391.. code-block:: bash
392
393        root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
394
395        root:/sys/bus/iio/devices/iio:device0> echo adis16545-1-dev0 > trigger/current_trigger
396        root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
397        adis16545-1-dev0
398
399Select channels for buffer read:
400
401.. code-block:: bash
402
403        root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_x_en
404        root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_y_en
405        root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_z_en
406        root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_temp0_en
407
408Set the number of samples to be stored in the buffer:
409
410.. code-block:: bash
411
412        root:/sys/bus/iio/devices/iio:device0> echo 10 > buffer/length
413
414Enable buffer readings:
415
416.. code-block:: bash
417
418        root:/sys/bus/iio/devices/iio:device0> echo 1 > buffer/enable
419
420Obtain buffered data::
421
422  root:/sys/bus/iio/devices/iio:device0> hexdump -C /dev/iio\:device0
423  ...
424  00006aa0  09 62 00 00 ff ff fc a4  00 00 01 69 00 03 3c 08  |.b.........i..<.|
425  00006ab0  09 61 00 00 00 00 02 96  00 00 02 8f 00 03 37 50  |.a............7P|
426  00006ac0  09 61 00 00 00 00 12 3d  00 00 0b 89 00 03 2c 0b  |.a.....=......,.|
427  00006ad0  09 61 00 00 00 00 1e dc  00 00 16 dd 00 03 25 bf  |.a............%.|
428  00006ae0  09 61 00 00 00 00 1e e3  00 00 1b bf 00 03 27 0b  |.a............'.|
429  00006af0  09 61 00 00 00 00 15 50  00 00 19 44 00 03 30 fd  |.a.....P...D..0.|
430  00006b00  09 61 00 00 00 00 09 0e  00 00 14 41 00 03 3d 7f  |.a.........A..=.|
431  00006b10  09 61 00 00 ff ff ff f0  00 00 0e bc 00 03 48 d0  |.a............H.|
432  00006b20  09 63 00 00 00 00 00 9f  00 00 0f 37 00 03 4c fe  |.c.........7..L.|
433  00006b30  09 64 00 00 00 00 0b f6  00 00 18 92 00 03 43 22  |.d............C"|
434  00006b40  09 64 00 00 00 00 18 df  00 00 22 33 00 03 33 ab  |.d........"3..3.|
435  00006b50  09 63 00 00 00 00 1e 81  00 00 26 be 00 03 29 60  |.c........&...)`|
436  00006b60  09 63 00 00 00 00 1b 13  00 00 22 2f 00 03 23 91  |.c........"/..#.|
437  ...
438
439See ``Documentation/iio/iio_devbuf.rst`` for more information about how buffered
440data is structured.
441
4424. IIO Interfacing Tools
443========================
444
445See ``Documentation/iio/iio_tools.rst`` for the description of the available IIO
446interfacing tools.
447