ADIS16550 驱动程序

该驱动程序支持 Analog Device 基于 SPI 总线的 IMU。

1. 支持的设备

ADIS16550 是一个完整的惯性系统,包括三轴陀螺仪和三轴加速度计。出厂校准对每个传感器的灵敏度、偏差和对准进行特性化。因此,每个传感器都有自己的动态补偿公式,可提供准确的传感器测量值。

2. 设备属性

加速度计和陀螺仪测量始终提供。此外,驱动程序还提供检索设备计算的增量角度和增量速度测量值的功能。

增量角度测量表示每次采样更新之间的角位移计算,而增量速度测量表示每次采样更新之间的线性速度变化计算。

最后,提供了温度数据,显示了 IMU 设备内部温度的粗略测量。此数据对于监测热环境中相对变化最有用。

每个 IIO 设备在 /sys/bus/iio/devices/iio:deviceX 下都有一个设备文件夹,其中 X 是设备的 IIO 索引。这些文件夹下存放着一组设备文件,具体取决于所讨论的硬件设备的特性和功能。这些文件在 IIO ABI 文档中得到了统一的通用化和记录。

下表显示了在特定设备文件夹路径 /sys/bus/iio/devices/iio:deviceX 中找到的 adis16550 相关设备文件。

三轴加速度计相关设备文件

描述

in_accel_scale

加速度计通道的刻度。

in_accel_filter_low_pass_3db_frequency

加速度计通道的带宽。

in_accel_x_calibbias

X 轴加速度计通道的校准偏移。

in_accel_x_calibscale

X 轴加速度计通道的校准刻度。

in_accel_x_raw

X 轴加速度计通道的原始值。

in_accel_y_calibbias

Y 轴加速度计通道的校准偏移。

in_accel_y_calibscale

Y 轴加速度计通道的校准刻度。

in_accel_y_raw

Y 轴加速度计通道的原始值。

in_accel_z_calibbias

Z 轴加速度计通道的校准偏移。

in_accel_z_calibscale

Z 轴加速度计通道的校准刻度。

in_accel_z_raw

Z 轴加速度计通道的原始值。

in_deltavelocity_scale

增量速度通道的刻度。

in_deltavelocity_x_raw

X 轴增量速度通道的原始值。

in_deltavelocity_y_raw

Y 轴增量速度通道的原始值。

in_deltavelocity_z_raw

Z 轴增量速度通道的原始值。

三轴陀螺仪相关设备文件

描述

in_anglvel_scale

陀螺仪通道的刻度。

in_anglvel_filter_low_pass_3db_frequency

陀螺仪通道的刻度。

in_anglvel_x_calibbias

X 轴陀螺仪通道的校准偏移。

in_anglvel_x_calibscale

X 轴陀螺仪通道的校准刻度。

in_anglvel_x_raw

X 轴陀螺仪通道的原始值。

in_anglvel_y_calibbias

Y 轴陀螺仪通道的校准偏移。

in_anglvel_y_calibscale

Y 轴陀螺仪通道的校准刻度。

in_anglvel_y_raw

Y 轴陀螺仪通道的原始值。

in_anglvel_z_calibbias

Z 轴陀螺仪通道的校准偏移。

in_anglvel_z_calibscale

Z 轴陀螺仪通道的校准刻度。

in_anglvel_z_raw

Z 轴陀螺仪通道的原始值。

in_deltaangl_scale

增量角度通道的刻度。

in_deltaangl_x_raw

X 轴增量角度通道的原始值。

in_deltaangl_y_raw

Y 轴增量角度通道的原始值。

in_deltaangl_z_raw

Z 轴增量角度通道的原始值。

温度传感器相关文件

描述

in_temp0_raw

原始温度通道值。

in_temp0_offset

温度传感器通道的偏移。

in_temp0_scale

温度传感器通道的刻度。

杂项设备文件

描述

名称

IIO 设备的名称。

sampling_frequency

当前选定的采样率。

下表显示了在特定设备调试文件夹路径 /sys/kernel/debug/iio/iio:deviceX 中找到的 adis16550 相关设备调试文件。

Debugfs 设备文件

描述

serial_number

芯片的序列号,十六进制格式。

product_id

芯片特定的产品 ID (16550)。

flash_count

设备上执行的闪存写入次数。

firmware_revision

包含固件版本的字符串,格式为 ##.##。

firmware_date

包含固件日期的字符串,格式为 mm-dd-yyyy。

通道处理值

可以从其 _raw 属性读取通道值。返回的值是设备报告的原始值。要获取通道的处理值,请应用以下公式

processed value = (_raw + _offset) * _scale

其中 _offset 和 _scale 是设备属性。如果不存在 _offset 属性,则假定其值为 0。

adis16550 驱动程序提供 5 种类型通道的数据,下表显示了处理值的测量单位,这些单位由 IIO 框架定义

通道类型

测量单位

X、Y 和 Z 轴上的加速度

米/秒²

X、Y 和 Z 轴上的角速度

弧度/秒

X、Y 和 Z 轴上的增量速度

米/秒

X、Y 和 Z 轴上的增量角度

弧度

温度

毫摄氏度

使用示例

显示设备名称

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

显示加速度计通道值

root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw
6903851
root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw
5650550
root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw
104873530
root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale
0.000000095
  • X 轴加速度 = in_accel_x_raw * in_accel_scale = 0.655865845 米/秒²

  • Y 轴加速度 = in_accel_y_raw * in_accel_scale = 0.53680225 米/秒²

  • Z 轴加速度 = in_accel_z_raw * in_accel_scale = 9.96298535 米/秒²

显示陀螺仪通道值

root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_x_raw
193309
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_raw
-763676
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_z_raw
-358108
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_scale
0.000000003
  • X 轴角速度 = in_anglvel_x_raw * in_anglvel_scale = 0.000579927 弧度/秒

  • Y 轴角速度 = in_anglvel_y_raw * in_anglvel_scale = −0.002291028 弧度/秒

  • Z 轴角速度 = in_anglvel_z_raw * in_anglvel_scale = −0.001074324 弧度/秒

设置加速度计通道的校准偏移

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

设置陀螺仪通道的校准偏移

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

设置采样频率

root:/sys/bus/iio/devices/iio:device0> cat sampling_frequency
4000.000000

root:/sys/bus/iio/devices/iio:device0> echo 1000 > sampling_frequency
1000.000000

设置加速度计通道的带宽

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

root:/sys/bus/iio/devices/iio:device0> echo 100 > in_accel_filter_low_pass_3db_frequency
root:/sys/bus/iio/devices/iio:device0> cat in_accel_filter_low_pass_3db_frequency
100

显示序列号

root:/sys/kernel/debug/iio/iio:device0> cat serial_number
0x000000b6

显示产品 ID

root:/sys/kernel/debug/iio/iio:device0> cat product_id
16550

显示闪存写入次数

root:/sys/kernel/debug/iio/iio:device0> cat flash_count
13

显示固件版本

root:/sys/kernel/debug/iio/iio:device0> cat firmware_revision
1.5

显示固件日期

root:/sys/kernel/debug/iio/iio:device0> cat firmware_date
28-04-2021

3. 设备缓冲区

该驱动程序支持 IIO 缓冲区。

该设备支持使用缓冲区检索原始加速度、陀螺仪、增量速度、增量角度和温度测量值。

然而,当使用缓冲区检索加速度或陀螺仪数据时,增量读数将不可用,反之亦然。这是因为设备一次只允许读取加速度和陀螺仪数据或增量速度和增量角度数据,并且在这两种突发数据选择模式之间切换非常耗时。

使用示例

在 current_trigger 中设置设备触发器(如果尚未设置)

root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger

root:/sys/bus/iio/devices/iio:device0> echo adis16550-dev0 > trigger/current_trigger
root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
adis16550-dev0

选择用于缓冲区读取的通道

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

设置要存储在缓冲区中的样本数量

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

启用缓冲区读取

root:/sys/bus/iio/devices/iio:device0> echo 1 > buffer/enable

获取缓冲数据

root:/sys/bus/iio/devices/iio:device0> hexdump -C /dev/iio\:device0
...
0000cdf0  00 00 0d 2f 00 00 08 43  00 00 09 09 00 00 a4 5f  |.../...C......._|
0000ce00  00 00 0d 2f 00 00 07 de  00 00 08 db 00 00 a4 4b  |.../...........K|
0000ce10  00 00 0d 2f 00 00 07 58  00 00 08 a3 00 00 a4 55  |.../...X.......U|
0000ce20  00 00 0d 2f 00 00 06 d6  00 00 08 5c 00 00 a4 62  |.../.......\...b|
0000ce30  00 00 0d 2f 00 00 06 45  00 00 08 37 00 00 a4 47  |.../...E...7...G|
0000ce40  00 00 0d 2f 00 00 05 d4  00 00 08 30 00 00 a3 fa  |.../.......0....|
0000ce50  00 00 0d 2f 00 00 05 d0  00 00 08 12 00 00 a3 d3  |.../............|
0000ce60  00 00 0d 2f 00 00 05 dd  00 00 08 2e 00 00 a3 e9  |.../............|
0000ce70  00 00 0d 2f 00 00 05 cc  00 00 08 51 00 00 a3 d5  |.../.......Q....|
0000ce80  00 00 0d 2f 00 00 05 ba  00 00 08 22 00 00 a3 9a  |.../......."....|
0000ce90  00 00 0d 2f 00 00 05 9c  00 00 07 d9 00 00 a3 40  |.../...........@|
0000cea0  00 00 0d 2f 00 00 05 68  00 00 07 94 00 00 a2 e4  |.../...h........|
0000ceb0  00 00 0d 2f 00 00 05 25  00 00 07 8d 00 00 a2 ce  |.../...%........|
...

有关缓冲数据结构的更多信息,请参阅 Documentation/iio/iio_devbuf.rst

4. IIO 接口工具

有关可用 IIO 接口工具的说明,请参阅 Documentation/iio/iio_tools.rst