IIO DATA ACCESS IIO数据获取git
只有两种方法可使用IIO框架访问数据; 经过sysf通道进行一次性捕获,或经过IIO字符设备进行连续模式(触发缓冲)。github
One-shot capture:单次获取框架
一次性数据捕获经过sysfs接口完成。 经过读取与通道对应的sysfs条目,您将仅捕获特定于该通道的数据。 给定一个带有两个通道的温度传感器:一个用于环境温度,另外一个用于热电偶温度:工具
# cd /sys/bus/iio/devices/iio:device0 # cat in_voltage3_raw 6646 # cat in_voltage_scale 0.305175781
经过将比例乘以原始值来得到处理值。spa
Voltage value: 6646 * 0.305175781 = 2028.19824053code
器件数据表说过程值以mV给出。 在咱们的例子中,它对应于2.02819V。blog
Buffer data access:缓冲区数据获取索引
要使触发的采集工做,必须在驱动程序中实现触发器支持。 而后,要从用户空间内获取数据,必须:建立触发器,分配它,启用ADC通道,设置缓冲区的维度,并启用它。这里主要介绍两种:sysfs触发器和hrtimer触发器。接口
使用sysfs触发器获取:事件
使用sysfs触发器捕获数据包括发送一组命令少许sysfs文件。 让咱们列举一下咱们应该作些什么来实现这一目标:
1. 建立触发器:在将触发器分配给任何设备以前,应该建立它:
# echo 0 > /sys/devices/iio_sysfs_trigger/add_trigger
这里,0对应于咱们须要分配给触发器的索引。 在此命令以后,触发器目录将在/ sys / bus / iio / devices /下做为trigger0。
2. 将触发器分配给设备:触发器由其名称惟一标识,咱们可使用该触发器将设备绑定到触发器。 因为咱们使用0做为索引,所以触发器将命名为sysfstrig0:
# echo sysfstrig0 > /sys/bus/iio/devices/iio:device0/trigger/current_t
咱们也可使用下面这个命令:cat /sys/bus/iio/devices/trigger0/name> /sys/bus/iio/devices/iio:device0/trigger/current_trigger. 也就是说,若是咱们编写的值与现有的触发器名称不对应,则不会发生任何事情。 为了确保咱们真正定义了一个触发器,咱们可使用cat/sys/bus/iio/devices/iio:device0/trigger/current_trigger.
3. 启用扫描元素:此步骤包括选择将其数据值推入缓冲区的通道。 应该注意驱动程序中的available_scan_masks:
# echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage5_en # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage6_en # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage7_en
4. 设置缓冲区大小:这里应该设置缓冲区能够保存的样本集数量:
# echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
5. 启用缓冲区:此步骤包括将缓冲区标记为准备接收推送数据:
# echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable
要中止捕获,咱们必须在同一个文件中写入0。
6.使能触发器:启动采集:
# echo 1 > /sys/bus/iio/devices/trigger0/trigger_now
如今数据获取已经完成,下一步咱们能够
7. 禁用缓冲区:
# echo 0 > /sys/bus/iio/devices/iio:device0/buffer/enable
8.分离触发器Detach the trigger:
# echo "" > /sys/bus/iio/devices/iio:device0/trigger/current_trigger
9.转储IIO字符设备的内容
# cat /dev/iio\:device0 | xxd –
使用hrtimer触发器获取(4.5及以上内核版本)
如下是容许使用hrtimer触发器捕获数据的命令集:
# echo /sys/kernel/config/iio/triggers/hrtimer/trigger0 # echo 50 > /sys/bus/iio/devices/trigger0/sampling_frequency # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage5_en # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage6_en # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage7_en # echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable # cat /dev/iio:device0 | xxd - 0000000: 0188 1a30 0000 0000 8312 68a8 c24f 5a14 ...0......h..OZ. 0000010: 0188 1a30 0000 0000 192d 98a9 c24f 5a14 ...0.....-...OZ. [...]
而后,咱们查看类型以肯定如何处理数据:
$ cat /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage_type be:s14/16>>2
Voltage processing: 0x188 >> 2 = 98 * 250 = 24500 = 24.5 v
IIO tools
您可使用一些有用的工具来简化和加快使用IIO设备开发应用程序的速度。 它们在内核树中的tools / iio中可用: