从用户空间读取IIO设备数据

问题描述 投票:0回答:2

我正在使用 MPU-9250 Invensense 传感器,并从 Android 内核获取其驱动程序并与 Linux 内核集成。对内核和节点进行一些修改后,驱动程序工作正常,/dev/iio:\device0,并且还生成了sys文件系统下的文件。所以我认为驱动程序工作正常。

现在我想使用 /dev/iio:\device0 节点通过应用程序从用户空间读取传感器数据。为此,我需要在 MPU-9250 驱动程序中打开读取关闭功能。但驱动程序中无法进行文件操作。

我尝试从 sys 文件系统读取数据,即

# echo 1 > /sys/bus/iio/devices/iio:device0/power_state
# echo 1 > /sys/bus/iio/devices/iio:device0/accel_enable
# echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
# echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable

此后,它应该填充从传感器读取的数据。但没有显示任何内容。所以在此之后我尝试从 dev 文件系统读取数据

# cat /dev/iio:\device0

即便如此,也没有显示任何内容。

请有人告诉我如何读取数据。

问候

linux iio
2个回答
0
投票

我相信您的问题与您没有启用任何扫描元素有关。

扫描位于 的元素: /sys/bus/iio/devices/iio:device[x]/scan_elements。

在这里您应该启用您想要捕获的扫描元素。你应该有 3 个带有后缀的文件: _en 、 _index 和 _type 。

_type 是指扫描的类型,index 是在设备读取中为扫描分配的通道,_en 状态为“enable”。只需将“1”写入您想要启用的 scan _en 文件,写入 /buffer/length 100 和 /buffer/enable“1”,您就应该开始获取数据。

我不认为这是你的问题,因为你可能根本无法启用缓冲区,但是,你可能需要启用一个触发器,该触发器也应该位于 /sys/bus/iio/devices 中。这里应该有trigger1/2/3 目录,具体取决于您拥有的IIO 设备的数量。您可能需要将触发器名称写入 /sys/bus/iio/devices/iio:device[x]/trigger/current_trigger。

所以你应该这样做:

echo /sys/bus/iio/devices/trigger[x]/name > 
/sys/bus/iio/devices/iio:device[x]/trigger/current_trigger

希望有帮助。


0
投票

我也面临着同样的问题。 echo 1 > enable' 产生 '-sh: echo: 写入错误: 参数无效。我们怎样才能解决它?有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.