• IIC设备


     驱动开发的学习方法:框架 --->流程--->编程

    IIC硬件设备(低速总线)

    两根信号线:SCL、SDA
    总线速度:标准100kbps、快速模式400kbps、高速模式3.4Mbps
    特点:半双工通信方式;仅需两根线(所以又被成为2-wire总线);一次传输8位;高位在前,低位在后;总线空闲状态:数据线SDA拉高

    IIC硬件的基本操作原理

    启动停止信号:由IIC主机发出

    数据传输格式:
      SDA线上传输的每个字节要有8位,每次传输没有传输字节多少的限制。启动信号发出后,首先传输的是地址字段。如果IIC总线是主机模式,由主机发送地址地段。每一个字段后必须跟上应答位,字段中的内容(地址/数据) 按照先高位(MSB)后低位(LSB)的顺序传输。

     应答信号传输:
      对于每一个字节的传送,接收者都要发送一个应答信号给发送者。应答信号在时钟线SCL的第九个时钟时产生。这个应答信号需要的时钟脉冲由主机产生。在第九个时钟周期时,主机释放SDA,由从机驱动SDA线。当主机传送的地址与某个接收者(I2C从机设备)匹配,则这个接受者在第九个时钟周期高电平期间拉低SDA线,即发出一个ACK应答信号。

    IIC子系统架构组成:
      设备驱动层组件(i2c-dev.c)、核心层组件(i2c-core.c)、总线驱动层组件(i2c-s3c2410.c)

    IIC子系统架构功能作用

    设备驱动层组件(i2c-dev.c)
    ================================
    功能:

      给用户提供调用接口
      实现策略问题:发什么数据

    核心层组件(i2c-core.c)
    ==================================
    功能:

      注册一根I2C总线
      给驱动编程人员提供编程接口

    总线驱动层组件(i2c-s3c2410.c)
    ===================================
    功能:

      初始化硬件(I2C控制器)
      实现操作方法:(根据I2C操作时序进行控制I2c控制器,实现数据接收/发送)
            怎么发数据


    IIC子系统架构设计的重要结构体和函数

    IIC子系统开发之设备驱动涉及重要函数(linux/i2c.h)
    ==============================================================

    int i2c_master_send(const struct i2c_client *client, const char *buf,int count);
    int i2c_master_recv(const struct i2c_client *client, char *buf,int count);
    int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,int num);//传输一个i2c数据包
    int i2c_register_board_info(int busnum, struct i2c_board_info const *info,unsigned n);//注册板子信息
    /*注册/注销适配器*/
    int i2c_add_adapter(struct i2c_adapter *);
    int i2c_del_adapter(struct i2c_adapter *);
    int i2c_add_numbered_adapter(struct i2c_adapter *);
    /*注册/注销I2C驱动*/
    int i2c_register_driver(struct module *, struct i2c_driver *);
    void i2c_del_driver(struct i2c_driver *);
    /*注册/注销I2C设备 */
    struct i2c_client * i2c_new_probed_device(struct i2c_adapter *adap,struct i2c_board_info *info, 
          unsigned short const *addr_list,int (*probe)(struct i2c_adapter *, unsigned short addr));
    void i2c_unregister_device(struct i2c_client *);


    IIC子系统架构源码分析
    IIC特定设备驱动开发

  • 相关阅读:
    解决“Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id 'org.springframework.boot' not found.”
    linux随机生成密码
    NFS网络共享文件系统
    shell实现带颜色输出的进度条
    【AtCoder】 ARC 101
    【AtCoder】 ARC 102
    【AtCoder】 ARC 103
    20190814校内模拟赛
    「2019-8-13提高模拟赛」树 (tree)
    [PA2014]Fiolki
  • 原文地址:https://www.cnblogs.com/embeded-linux/p/10850437.html
Copyright © 2020-2023  润新知