ADXL313 driver

This driver supports Analog Device’s ADXL313 on SPI/I2C bus.

1. Supported devices

The ADXL313is a low noise density, low power, 3-axis accelerometer with selectable measurement ranges. The ADXL313 supports the ±0.5 g, ±1 g, ±2 g and ±4 g ranges.

2. Device attributes

Accelerometer measurements are always provided.

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 adxl313 related device files, found in the specific device folder path /sys/bus/iio/devices/iio:deviceX.

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_raw

Raw X-axis accelerometer channel value.

in_accel_y_calibbias

y-axis acceleration offset correction

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_raw

Raw Z-axis accelerometer channel value.

Miscellaneous device files

Description

name

Name of the IIO device.

in_accel_sampling_frequency

Currently selected sample rate.

in_accel_sampling_frequency_available

Available sampling frequency configurations.

The iio event related settings, found in /sys/bus/iio/devices/iio:deviceX/events.

in_accel_mag_adaptive_falling_period

AC coupled inactivity time.

in_accel_mag_adaptive_falling_value

AC coupled inactivity threshold.

in_accel_mag_adaptive_rising_value

AC coupled activity threshold.

in_accel_mag_falling_period

Inactivity time.

in_accel_mag_falling_value

Inactivity threshold.

in_accel_mag_rising_value

Activity threshold.

in_accel_x&y&z_mag_adaptive_falling_en

Enable or disable AC coupled inactivity events.

in_accel_x|y|z_mag_adaptive_rising_en

Enable or disable AC coupled activity events.

in_accel_x&y&z_mag_falling_en

Enable or disable inactivity events.

in_accel_x|y|z_mag_rising_en

Enable or disable activity events.

The default coupling is DC coupled events. In this case the threshold will be in place as such, where for the AC coupled case an adaptive threshold (described in the datasheet) will be applied by the sensor. In general activity, i.e. ACTIVITY or ACTIVITY_AC and inactivity i.e. INACTIVITY or INACTIVITY_AC, will be linked with auto-sleep enabled when both are enabled. This means in particular ACTIVITY can also be linked to INACTIVITY_AC and vice versa, without problem.

Note here, that ACTIVITY and ACTIVITY_AC are mutually exclusive. This means, that the most recent configuration will be set. For instance, if ACTIVITY is enabled, and ACTIVITY_AC will be enabled, the sensor driver will have ACTIVITY disabled, but ACTIVITY_AC enabled. The same is valid for inactivity. In case of turning off an event, it has to match to what is actually enabled, i.e. enabling ACTIVITY_AC and then disabling ACTIVITY is simply ignored as it is already disabled. Or, as if it was any other not enabled event, too.

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:

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 ADXL313 driver offers data for a single 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

Usage examples

Show device name:

root:/sys/bus/iio/devices/iio:device0> cat name
adxl313

Show accelerometer channels value:

root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw
2
root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw
-57
root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw
2
root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale
0.009576806

The accelerometer values will be:

  • X-axis acceleration = in_accel_x_raw * in_accel_scale = 0.0191536 m/s^2

  • Y-axis acceleration = in_accel_y_raw * in_accel_scale = -0.5458779 m/s^2

  • Z-axis acceleration = in_accel_z_raw * in_accel_scale = 0.0191536 m/s^2

Set calibration offset for accelerometer channels. Note, that the calibration will be rounded according to the graduation of LSB units:

root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
0

root:/sys/bus/iio/devices/iio:device0> echo 50 > in_accel_x_calibbias
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
48

Set sampling frequency:

root:/sys/bus/iio/devices/iio:device0> cat in_accel_sampling_frequency
100.000000
root:/sys/bus/iio/devices/iio:device0> cat in_accel_sampling_frequency_available
6.250000 12.500000 25.000000 50.000000 100.000000 200.000000 400.000000 800.000000 1600.000000 3200.000000

root:/sys/bus/iio/devices/iio:device0> echo 400 > in_accel_sampling_frequency
root:/sys/bus/iio/devices/iio:device0> cat in_accel_sampling_frequency
400.000000

3. Device buffers and triggers

This driver supports IIO buffers.

All devices support retrieving the raw acceleration measurements using buffers.

Usage examples

Select channels for buffer read:

root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_accel_x_en
root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_accel_y_en
root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_accel_z_en

Set the number of samples to be stored in the buffer:

root:/sys/bus/iio/devices/iio:device0> echo 10 > buffer/length

Enable buffer readings:

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
...
000000d0  01 fc 31 00 c7 ff 03 fc  31 00 c7 ff 04 fc 33 00  |..1.....1.....3.|
000000e0  c8 ff 03 fc 32 00 c5 ff  ff fc 32 00 c7 ff 0a fc  |....2.....2.....|
000000f0  30 00 c8 ff 06 fc 33 00  c7 ff 01 fc 2f 00 c8 ff  |0.....3...../...|
00000100  02 fc 32 00 c6 ff 04 fc  33 00 c8 ff 05 fc 33 00  |..2.....3.....3.|
00000110  ca ff 02 fc 31 00 c7 ff  02 fc 30 00 c9 ff 09 fc  |....1.....0.....|
00000120  35 00 c9 ff 08 fc 35 00  c8 ff 02 fc 31 00 c5 ff  |5.....5.....1...|
00000130  03 fc 32 00 c7 ff 04 fc  32 00 c7 ff 02 fc 31 00  |..2.....2.....1.|
00000140  c7 ff 08 fc 30 00 c7 ff  02 fc 32 00 c5 ff ff fc  |....0.....2.....|
00000150  31 00 c5 ff 04 fc 31 00  c8 ff 03 fc 32 00 c8 ff  |1.....1.....2...|
00000160  01 fc 31 00 c7 ff 05 fc  31 00 c3 ff 04 fc 31 00  |..1.....1.....1.|
00000170  c5 ff 04 fc 30 00 c7 ff  03 fc 31 00 c9 ff 03 fc  |....0.....1.....|
...

Enabling activity detection:

root:/sys/bus/iio/devices/iio:device0> echo 1.28125 > ./events/in_accel_mag_rising_value
root:/sys/bus/iio/devices/iio:device0> echo 1 > ./events/in_accel_x\|y\|z_mag_rising_en

root:/sys/bus/iio/devices/iio:device0> iio_event_monitor adxl313
Found IIO device with name adxl313 with device number 0
<only while moving the sensor>
Event: time: 1748795762298351281, type: accel(x|y|z), channel: 0, evtype: mag, direction: rising
Event: time: 1748795762302653704, type: accel(x|y|z), channel: 0, evtype: mag, direction: rising
Event: time: 1748795762304340726, type: accel(x|y|z), channel: 0, evtype: mag, direction: rising
...

Disabling activity detection:

root:/sys/bus/iio/devices/iio:device0> echo 0 > ./events/in_accel_x\|y\|z_mag_rising_en
root:/sys/bus/iio/devices/iio:device0> iio_event_monitor adxl313
<nothing>

Enabling inactivity detection:

root:/sys/bus/iio/devices/iio:device0> echo 1.234375 > ./events/in_accel_mag_falling_value
root:/sys/bus/iio/devices/iio:device0> echo 5 > ./events/in_accel_mag_falling_period
root:/sys/bus/iio/devices/iio:device0> echo 1 > ./events/in_accel_x\&y\&z_mag_falling_en

root:/sys/bus/iio/devices/iio:device0> iio_event_monitor adxl313
Found IIO device with name adxl313 with device number 0
Event: time: 1748796324115962975, type: accel(x&y&z), channel: 0, evtype: mag, direction: falling
Event: time: 1748796329329981772, type: accel(x&y&z), channel: 0, evtype: mag, direction: falling
Event: time: 1748796334543399706, type: accel(x&y&z), channel: 0, evtype: mag, direction: falling
...
<every 5s now indicates inactivity>

Now, enabling activity, e.g. the AC coupled counter-part ACTIVITY_AC

root:/sys/bus/iio/devices/iio:device0> echo 1.28125 > ./events/in_accel_mag_rising_value
root:/sys/bus/iio/devices/iio:device0> echo 1 > ./events/in_accel_x\|y\|z_mag_rising_en

root:/sys/bus/iio/devices/iio:device0> iio_event_monitor adxl313
Found IIO device with name adxl313 with device number 0
<some activity with the sensor>
Event: time: 1748796880354686777, type: accel(x|y|z), channel: 0, evtype: mag_adaptive, direction: rising
<5s of inactivity, then>
Event: time: 1748796885543252017, type: accel(x&y&z), channel: 0, evtype: mag, direction: falling
<some other activity detected by accelerating the sensor>
Event: time: 1748796887756634678, type: accel(x|y|z), channel: 0, evtype: mag_adaptive, direction: rising
<again, 5s of inactivity>
Event: time: 1748796892964368352, type: accel(x&y&z), channel: 0, evtype: mag, direction: falling
<stays like this until next activity in auto-sleep>

Note, when AC coupling is in place, the event type will be of mag_adaptive. AC- or DC-coupled (the default) events are used similarly.

4. IIO Interfacing Tools

See IIO Interfacing Tools for the description of the available IIO interfacing tools.