IIO缓冲区重新填充超时

时间:2017-05-19 10:44:19

标签: c linux-kernel device-tree iio

我想从C项目中读取IMU传感器的值。有问题的设备是LSM6DSL,我使用的是IIO内核驱动程序。它们正常工作,因为我能够使用以下命令读取值:

cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw
> 2

问题是,当我想使用函数 iio_buffer_refill(struct iio_buffer * buffer)重新填充我的缓冲区时,它会返回错误代码110,这是一个超时。在此之前,我启用了一些通道来读取,并且缓冲区已成功创建。我对这个问题做了一些研究,我相信它与设备树中的中断参数有关。

这是我的i2c协议的设备树(我从this链接获取了一个示例):

lsm6dsl@6b {                                                                  
            compatible = "st,lsm6dsl";                                            
            reg = <0x6b>;                                                         
            interrupt-parent = <&gpio>;                                           
            interrupts = <26 0x4>;                                                
           };

它真的与设备树有关,还是我遗漏了别的东西?提前感谢你。

[编辑]以下是创建缓冲区并尝试从中读取的源代码:

struct iio_context *context = iio_create_local_context();
struct iio_device *device = iio_context_get_device(context, 1);
struct iio_channel *chan = iio_device_get_channel(device, 0);
iio_channel_enable(chan);
struct iio_buffer *buff = iio_device_create_buffer(device, 1, false);
if (buff == NULL)
{
  printf("Error %d: %s\n", errno, strerror(errno));
  return (1);
}
printf("Read size is: %ld\n", (long)iio_buffer_refill(buff));
iio_buffer_destroy(buff);

> Read size is: -110

0 个答案:

没有答案