zoukankan      html  css  js  c++  java
  • (二十)linux中i2c的ioctl,write,read函数的使用

    一、ioctl函数的使用:
    原型:struct ioctl(struct file *file,unsigned int cmd,unsigned long arg);
    cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_S3C2410_SET_SPEED几个选项;
    I2C_SLAVE:对应的arg取值为I2C从机地址,用来设定I2C从机地址;

    I2C_SLAVE_FORCE:对应的arg取值为I2C从机地址,用来修改I2C从机地址;

    I2C_TENBIT:对应的arg取值为0:从机地址为7 bit;对应的arg取值为1:从机地址为10bit。用来指定I2C从机地址的位数;  

    I2C_S3C2410_SET_SPEED:对应的arg取值为I2C总线控制器分频值。用来设置I2C总线控制器时钟频率;
     

    常用设置设置I2c从机地址为0xA0,如果选用at24c08设备,那么从机是7 bit地址,所以要右移1位,指定从机地址为7 bit,

    ioctl(fd,I2C_TENBIT,0)。
    ioctl(fd,I2C_SLAVE,0xA0>>1);

    read()与write()函数的使用
    假设子地址为12,向有子地址的器件写进7个字节:

    unsigned char buf[8]={12,'s','j','s','u','n','n','y');write(fd,buf,9);/*写进7个字节,第1个字节为子地址*/

    从有子地址的I2C器件读取7个字节:
    unsigned char suba=0;recbuf[20];
    write(fd,buf,1);/*发送子地址0*/
    read(fd,recbuf,7);/*从子地址12开始读取7个字节*/

     

    二、ioctl同read和write区别

    ioctl被誉为Unix系统的"瑞士军刀",他被当作扩充Linux系统功
    能一个通用的方法,在Linux系统中被广泛使用。

    ioctl一般用来用户空间程序和驱动程序模块之间传递控制数
    据,ioctl同read和write区别是:
    1、ioctl一般是用来传递控制参数的,比如:串口的波特率、串口的流控方法(xon/xoff、DTR/DSR、RTS/CTS)等等,一般不
    用来传递“主要的”数据(我不到合适的词来说明:)。

    2、ioctl的语义一般是非阻塞的,read和write却省是阻塞的。

    3、ioctl的接口是万能的,ioctl(fd, cmd, arg)第三个参数可以是一个整形变量,也可以是一个指向某种数据结构的指针。

  • 相关阅读:
    rem 适配屏幕大小
    javascript实现多线程提升项目加载速度
    前端工程化、模块化、组件化见解
    Object.defineProperty方法
    js 冒泡排序
    git 如何生成 SSH 公钥
    奇数幻方
    最长公共子序列-动态规划
    Sping学习笔记_整合hibernate
    Sping学习笔记_AOP
  • 原文地址:https://www.cnblogs.com/zhangshenghui/p/6322786.html
Copyright © 2011-2022 走看看