linux IIO子系统使用说明

新的内核将ADC/DAC/G_sensor这样的设备统一成IIO子系统,用户层通过访问IIO的接口来实现如ADC的触发、采样等操作。

下面给出IIO接口用户层的接口使用实例(以ADC的采样为例)

1. 方法一:直接读取/sys下的接口

以下方式使用软件写入start的方式,每次触发一次采样
$cat /sys/bus/iio/devices/iio:device0/in_voltagex_raw

这里的x代码不同的通道

获取scale:

$cat /sys/bus/iio/devices/iio\:device0/in_voltage_scale

实际的电压值 = in_voltagex_raw * scale


2. 方法二:通过ADC外部硬件trigger自动读取

这种方式下,每次ADC的触发都需要ADC的trg引脚的电平变化进行

//使能采样通道
$echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en
$cat trigger0/name
//这里读取trigger的名字,作为下一步的输入,名字不匹配将导致cerrent_trigger激活失败
$ echo fc030000.adc-dev0-external_rising > /sys/bus/iio/devices/iio:device0/trigger/current_trigger
$ echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
$ echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable

$cat /dev/iio:device0 > /var/adc.bin
每次手动触发adc的外部trigger引脚,上升沿触发,即可得到十六进制的ad采样数据

另外ADC时钟可以通过以下方式设定:

$echo freq > /sys/bus/iio/devices/iio:device0/samping_freq


3. 方法三:sys trigle

这种方式下直接通过软件即可进行一次adc采样触发,不用等待方法二中的外部触发引脚的改变


a. 内核配置里面选中
 <*>   SYSFS trigger

内核会创建iio_sysfs_trigger 目录

 

b.

 

 

$echo 123 > /sys/bus/iio/devices/iio_sysfs_trigger/add_trigger

这时会在device目录下创建 trigger1 目录,这里trigger0 是默认的硬件触发用的trigger

$echo sysfstrig123 > /sys/bus/iio/devices/iio:device0/trigger/current_trigger
$echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en
$ echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
$ echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable

这样每次执行

$echo 1 > /sys/bus/iio/devices/trigger1/trigger_now  就会进行一次采样

注意,trigger0目录下是没有trigger_now

 

关于iio子系统的驱动分析这里不做说明,后续有时间的话会专门写个系列来介绍。

你可能感兴趣的:(linux IIO子系统使用说明)