zoukankan      html  css  js  c++  java
  • linux iio子系统

    //============================================================================\
    ||             统:WindowsXP & Ubuntu14.04      
    ||             具:Source Insight 3.5     
    ||             者:疯狂的三极管      
    \===========================================================================//

    最近由于工作的需要,接触了Linux iio子系统,对于这个目录其实以前是很少接触,接下了对 Linux iio 子系统进行分析。


    1、首先 iio子系统在内核树中位置:drivers/staging/iio

    详细的iio子系统说明文档位置:drivers/staging/iio/Documentation(文档是个好东西,详细阅读文档,有利于更深层次的理解iio子系统)


    2、简介:
    iiO子系统全称是 Industrial I/O subsystem(工业 I/O 子系统),此子系统的目的在于填补那些分类时处在hwmon(硬件监视器)和输入子系统之间的设备类型。在某些情况下,iio和hwmon、Input之间的相当大的重叠。


    3、iio目录结构架构:

    [plain] view plain copy
    1. iio  
    2. ├── accel             
    3. ├── adc               
    4. ├── addac             
    5. ├── cdc               
    6. ├── dac           
    7. ├── dds  
    8. ├── Documentation  
    9. │   └── dac  
    10. ├── gyro  
    11. ├── impedance-analyzer  
    12. ├── imu  
    13. │   └── mpu  
    14. │       └── inv_test  
    15. ├── light  
    16. ├── magnetometer  
    17. ├── meter  
    18. ├── pressure  
    19. ├── resolver  
    20. └── trigger  


    4、iio 目录结构说明:

    进入相应目录,里面都有相关IC的驱动,网上查阅资料,对iio子系统做如下简要的说明:

    accel :
    该文件夹下是一些加速度传感器,例如:adis16201、kxsd9、lis3l02dq、sca3000等


    adc :
    该文件夹下是一些模数转换器,将模拟信号转换成数字信号,例如:ad7192、adt7310(数字温度传感器)等


    addac :
    Temperature Sensor 温度传感器,例如:adt7316

    cdc
    电容数字转换,例如:ad7150

    dac :

    一些数模转换器,将数字信号转换成模拟信号,例如:ad5064、ad5791(单通道、20位、无缓冲电压输出DAC)等

    dds
    频率扫描仪,频率合成器,例如:ad5930、ad9951等

    Documentation :
    iio子系统相关文档说明,相关说明比较详细,说明文档是个好东西……

    gyro:
    陀螺仪,例如:adis16060(角速度陀螺仪)、adis16260(数字陀螺仪)、adxrs450(角速率陀螺仪)等

    impedance-analyzer :
    阻抗测量芯片,只有一个芯片ad5933

    imu:
    惯性陀螺仪、磁力计、加速度计,例如:adis16400,其中的mpu子目录有些重要的传感器(目前工作中正在使用)
    imu
        └── mpu:有MPU3050(三轴)、MPU6050(六轴)、MPU9150(整合了MPU6050及AK8975电子罗盘)、MPU6515等

    light :
    光学传感器,例如:isl29018、tsl2563等

    magnetometer :
    地磁传感器、磁力计传感器,例如:hmc5843、ak8975

    meter : 
    有功功率和电能计量,例如:ade7759(电能计量数据转换器)、ade7753等


    pressure :
    压力传感器,例如:bmp182

    resolver :
    旋转变压器/数字转换器,例如:ad2s1200(旋转变压器输出的模拟信号转化为数字信号)等

    trigger:

    触发器


    5、iio子系统架构图:



    6、iio子系统功能:

    (1)、设备注册和处理

    (2)、通过虚拟文件系统(VFS)轮训访问设备

    (3)、chrdevs事件

    chrdevs事件包括阈值检测器,自由下落检测器和更复杂的动作检测。chrdevs事件的输入,iio为底层硬件触发与用户空间通行提供了通道,chrdevs事件本身已经不仅仅是一个事件的代码和一个时间戳,与chrdevs事件相关联的任何数据必须通过轮询访问。

    (4)、硬件环缓冲支持

    现在很多传感器芯片上本身就包括 fifo / ring 缓冲,通过sensor自带 fifo / ring 缓冲,可以大大的减少主芯片处理器的负担。

    (6)、触发和软件缓冲区(kfifo)支持

    在许多数据分析中,触发和软件缓冲区(kfifo)支持就显得非常有用,能够更加高效的捕捉到外部信号数据。这些触发包括(数据准备信号、GPIO线连接到外部系统、处理器周期中断、用户空间访问sysfs中的特定文件等),都会产生触发。


    7、iio子系统的内核接口

    为各种sensor提供了内核接口


    8、iio子系统环形缓冲区(如下图)

    iio子系统采用环形缓冲区,环形缓冲区本质是一个数据结构(单一,固定大小,可调并首尾相连),这种结构非常适合缓冲数据流。这些缓冲区通常用来解决生产者消费者问题,在一些应用中,它被设计成生产者会(例如一个ADC)覆盖消费者(例如一个用户空间应用程序)无法暂时处理的过期数据。但是通常这种缓冲会被设置为适当的大小,以使这种情况不会发生。

  • 相关阅读:
    andorid 平台调用Web Service , 图片传输
    android 中在CMD中查看sqlite
    Click ListView Item跳转Activity
    C# 中几个小“陷阱”
    Xamarin 手动安装步骤+破解(最新版Xamarin V3)
    语音播报实时天气
    手动创建VS单元测试,显示代码覆盖率
    Ubuntu 12.10 配置MyEclipes 10.7环境(加破解)
    C#对象赋值出现的诡异问题,或许你也遇到过,有待你的解决
    jquery 小插件,完成“输入字段预期值的提示信息”,防html5 placeholder属性
  • 原文地址:https://www.cnblogs.com/liang123/p/6325175.html
Copyright © 2011-2022 走看看