首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从/dev/iio:deviceX中的LSM330中读取数据?

如何从/dev/iio:deviceX中的LSM330中读取数据?
EN

Stack Overflow用户
提问于 2017-07-21 01:48:15
回答 1查看 1.6K关注 0票数 2

我正在尝试连接i.MX6板上的LSM330加速度计/陀螺仪模块。该模块连接到I2C总线,设备树文件的相关部分如下:

代码语言:javascript
复制
&i2c1 {
    clock-frequency = <100000>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_i2c1_2>;
    status = "okay";

    /* LSM330 motion detector (accelerometer) */
    lsm330_accel: lsm330_accel@0x1e {
        compatible = "st,lsm330-accel";
        st,drdy-int-pin = <1>;
        reg = <0x1e>;
    };

    /* LSM330 motion detector (gyroscope) */
    lsm330_gyro: lsm330_gyro@0x6a {
        compatible = "st,lsm330-gyro";
        st,drdy-int-pin = <2>;
        reg = <0x6a>;
    };
};

该模块对于加速度计显示为/dev/iio:device0,对于陀螺仪显示为/dev/iio:device1。它们还以/sys/bus/iio/devices/iio:device0/sys/bus/iio/devices/iio:device1的形式出现。我可以通过cat in_accel_x_raw等获取传感器读数。但是,运行cat /dev/iio:device0会立即返回,并且不会产生任何输出。

在互联网上搜索后,我也尝试了以下命令:

代码语言:javascript
复制
cd /sys/bus/iio/devices/iio_sysfs_trigger
echo 0 > add_trigger
cd /sys/bus/iio/devices/iio:device0
echo 1 > scan_elements/in_accel_x_en
echo 1 > scan_elements/in_accel_y_en
echo 1 > scan_elements/in_accel_z_en
echo 1 > scan_elements/in_timestamp_en
echo sysfstrig0 > trigger/current_trigger
echo 100 > buffer/length
echo 1 > buffer/enable
echo 1 > /sys/bus/iio/devices/trigger0/trigger_now

这将设置通道,启用缓冲区,并将一些读数放入缓冲区。据我所知,cat /dev/iio:device0应该显示缓冲区,但它给了我Device or resource busy。使用cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw从内核中进一步读取不再有效,并给出相同的错误消息。

我对linux内核非常陌生,我的目标是将传感器数据暴露给Android系统,这样用户就可以旋转屏幕等。我如何让Android从模块中获得传感器读数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 00:18:26

在查看android logcat之后,发现Android HAL没有权限读取或写入sysfs中的目录。最后,我在init.rc文件中放了一堆chmod命令,这样安卓就可以访问传感器数据了。

代码语言:javascript
复制
# Change permissions for the LSM330 sysfs entries (accelerometer)
chmod 0666 /sys/bus/iio/devices/iio\:device0/sampling_frequency
chmod 0666 /sys/bus/iio/devices/iio\:device0/buffer/enable
chmod 0666 /sys/bus/iio/devices/iio\:device0/buffer/length
chmod 0666 /sys/bus/iio/devices/iio\:device0/trigger/current_trigger
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_x_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_y_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_accel_z_en
chmod 0666 /sys/bus/iio/devices/iio\:device0/scan_elements/in_timestamp_en
chmod 0666 /dev/iio\:device0

希望这对某些人有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45221825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档