Linux设备驱动之IIO子系统——IIO框架数据读取
IIO DATA ACCESS IIO数据获取
只有两种方法可以使用IIO框架访问数据; 通过sysf通道进行一次性捕获,或通过IIO字符设备进行连续模式(触发缓冲)。
One-shot capture:单次获取
一次性数据捕获通过sysfs接口完成。 通过读取与通道对应的sysfs条目,您将仅捕获特定于该通道的数据。 给定一个带有两个通道的温度传感器:一个用于环境温度,另一个用于热电偶温度:
# cd /sys/bus/iio/devices/iio:device0
# cat in_voltage3_raw # cat in_voltage_scale
0.305175781
通过将比例乘以原始值来获得处理值。
Voltage value: 6646 * 0.305175781 = 2028.19824053
器件数据表说过程值以mV给出。 在我们的例子中,它对应于2.02819V。
Buffer data access:缓冲区数据获取
要使触发的采集工作,必须在驱动程序中实现触发器支持。 然后,要从用户空间内获取数据,必须:创建触发器,分配它,启用ADC通道,设置缓冲区的维度,并启用它。这里主要介绍两种:sysfs触发器和hrtimer触发器。
使用sysfs触发器获取:
使用sysfs触发器捕获数据包括发送一组命令少量sysfs文件。 让我们列举一下我们应该做些什么来实现这一目标:
1. 创建触发器:在将触发器分配给任何设备之前,应该创建它:
# echo > /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 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en
# echo > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage5_en
# echo > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage6_en
# echo > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage7_en
4. 设置缓冲区大小:这里应该设置缓冲区可以保存的样本集数量:
# echo > /sys/bus/iio/devices/iio:device0/buffer/length
5. 启用缓冲区:此步骤包括将缓冲区标记为准备接收推送数据:
# echo > /sys/bus/iio/devices/iio:device0/buffer/enable
要停止捕获,我们必须在同一个文件中写入0。
6.使能触发器:启动采集:
# echo > /sys/bus/iio/devices/trigger0/trigger_now
现在数据获取已经完成,下一步我们可以
7. 禁用缓冲区:
# echo > /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 > /sys/bus/iio/devices/trigger0/sampling_frequency
# echo > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en
# echo > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage5_en
# echo > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage6_en
# echo > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage7_en
# echo > /sys/bus/iio/devices/iio:device0/buffer/enable
# cat /dev/iio:device0 | xxd - : 1a30 68a8 c24f 5a14 .........h..OZ.
: 1a30 192d 98a9 c24f 5a14 ........-...OZ.
[...]
然后,我们查看类型以确定如何处理数据:
$ cat /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage_type be:s14/>>
Voltage processing: 0x188 >> 2 = 98 * 250 = 24500 = 24.5 v
IIO tools
您可以使用一些有用的工具来简化和加快使用IIO设备开发应用程序的速度。 它们在内核树中的tools / iio中可用:
- lsiio.c:枚举IIO触发器,设备和通道
- iio_event_monitor.c: 监视IIO设备的IIO事件的ioctl接口
- generic_buffer.c: 检索,处理和打印从IIO设备缓冲区接收的数据
- libiio: 一个功能强大的库,由模拟设备开发,用于接口IIO设备,可从https://github.com/analogdevicesinc/libiio获得。
Linux设备驱动之IIO子系统——IIO框架数据读取的更多相关文章
- 【转】Linux设备驱动--块设备(一)之概念和框架
原文地址:Linux设备驱动--块设备(一)之概念和框架 基本概念 块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时 ...
- linux设备驱动的分层设计思想--input子系统及RTC
转自:linux设备驱动的分层设计思想 宋宝华 http://blog.csdn.net/21cnbao/article/details/5615493 1.1 设备驱动核心层和例化 在面向对象的程序 ...
- 宋宝华:Linux设备驱动框架里的设计模式之——模板方法(Template Method)
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典 ...
- 《Linux设备驱动开发具体解释(第3版)》进展同步更新
本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTE ...
- LINUX设备驱动模型之class
转自 https://blog.csdn.net/qq_20678703/article/details/52754661 1.LINUX设备驱动模型中的bus.device.driver,.其中bu ...
- 《Linux设备驱动开发具体解释(第3版)》(即《Linux设备驱动开发具体解释:基于最新的Linux 4.0内核》)网购链接
<Linux设备驱动开发具体解释:基于最新的Linux 4.0内核> china-pub spm=a1z10.3-b.w4011-10017777404.30.kvceXB&i ...
- Linux设备驱动中的软件架构思想
目录 更新记录 一.Linux驱动的软件架构 1.1 出发点 1.2 分离思想 1.3 分层思想 二.platform设备驱动 2.1 platform设备 2.2 platform驱动 2.3 pl ...
- linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-119723.html linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxx ...
- linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-110738.html linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想 xxxxxx ...
- linux设备驱动归纳总结(八):2.总线、设备和驱动的关系【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-110295.html linux设备驱动归纳总结(八):2.总线.设备和驱动的关系 xxxxxxxxx ...
随机推荐
- ubuntu Pycharm 2017 3.3 Active
1.打开激活窗口 2.选择 Activate new license with License server (用license server 激活) 3.在 License sever addres ...
- json格式 (JavaScipt Object Notation)
json格式 json语法规则: 01.对象表现形式 key:value 键值对 02.如果有多个数据,之间使用逗号隔开 k1:v1,k2:v2 03.把对象写在大括号中 var student={a ...
- 【.NET Core微服务实战-统一身份认证】开篇及目录索引
简介 学习.NETCORE也有1年多时间了,发现.NETCORE项目实战系列教程很少,都是介绍开源项目或基础教程,对于那些观望的朋友不能形成很好的学习思路,遇到问题怕无法得到解决而不敢再实际项目中 ...
- aspnet core2中使用csp内容安全策略
aspnet core2中使用csp内容安全策略 问题:aspnet core2如何使用csp防止xss的攻击 方法: public void ConfigureServices( IServiceC ...
- [WEB]绕过安全狗与360PHP一句话的编写
00x01安全狗的确是让人很头痛,尤其是在上传一句话或者写入一句话的时候,会被安全狗拦截从而拿不下shell.当然,安全狗是最简单的一款waf,很容易就进行一个绕过.00x02对于绕过安全狗跟360, ...
- [Swift]LeetCode945. 使数组唯一的最小增量 | Minimum Increment to Make Array Unique
Given an array of integers A, a move consists of choosing any A[i], and incrementing it by 1. Return ...
- Android开发:修改eclipse里的Android虚拟机路径
一.发现问题: 今天打开电脑发现C盘缩了不少,这才意识到:eclipse里配置的安卓虚拟机默认放在了C盘里. 当然,在不同的电脑上可能路径有所不同,我的默认路径是:C:\Users\lenovo\.a ...
- 聊聊Python的time模块
time模块 time模块是很多人最早接触到的模块,像time.sleep(x)好像随处可见,但是time模块里面的其他方法呢?下面一起看一下time模块. 在Python中一般用这3种方式表示时间: ...
- 侯哥的Python分享
侯哥语录 我曾经是一个职业教育者,现在是一个自由开发者.我希望我的分享可以和更多人一起进步.分享一段我喜欢的话给大家:"我所理解的自由不是想干什么就干什么,而是想不干什么就不干什么.当你还没 ...
- Python——day14 三目运算、推导式、递归、匿名、内置函数
一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系 cmd = input ...