• 《精通linux设备驱动程序开发》第8章I2C协议 学习笔记


    主要内容:

    • I2C/SMBus是什么
    • I2C核心
    • 设备实例:EEPROM

    1.I2C/SMBus是什么

    I2CInter-Intergrated Circuit,内置集成电路)及其子集SMBusSystem Management Bus,系统管理总线)均为同步串行接口。

    I2CSMBus为主-从协议,其通信双方为主机适配器(主控制器)和客户设备(从设备)。

    2.I2C核心

    I2C核心由主机适配器驱动程序和客户驱动程序可利用的函数和数据接口组成。核心中的公共代码减轻了驱动程序开发者的工作量。核心也见解使客户驱动程序独立于主机适配器,核心层的此机制及其好处也可在内核中其他的很多设备驱动程序类中发现。

    3.设备实例:EEPROM

    3.1初始化

    类似其他驱动程序,I2C客户驱动程序也有自己的init()入口点,初始化用于分配数据结构,向I2C核心层注册驱动程序,将sysfsLinux设备模块联系在一起。

    代码片段 打开EEPROM驱动程序:

    int eep_open(struct inode *inode, struct file *file)
    {
        /* The EEPROM bank to be opened*/
        n = MINOR(file->f_dentry->d_inode->i_rdev);
        
        file->private_data = (struct ee_bank *)ee_bank_list[n];
        
        /* Initialize the fields in ee_bank_list[n] such as 
        size,slave address, and the current file pointer */
        /* ... */
    }

    3.2 探测设备

    I2C客户驱动,在主机控制器驱动和I2C核心的合作下,使某自身对应的设备成为从设备的过程如下:

    (1)在初始化过程中,注册probe()方法。

    (2)I2C核心调用表明主机适配器已经存在的客户驱动程序的方法时,还会反过来调用i2c_probe()

    (3)主机控制器在总线上搜索步骤(2)中指定的从设备。

    (4)在步骤(3)中,如果主机适配器检测到从设备,I2C核心会调用步骤(2)中在i2c_probe()的第三个参数中指定的attack()

    stay hungry, stay foolish
  • 相关阅读:
    bash组织成树数据结构
    statickeyword于C和C++用法
    POJ2239 Selecting Courses【二部图最大匹配】
    MVC过滤器的详细讲解和示范样本
    hdoj 2602 Bone Collector 【01背包】
    下的生产环境was重新启动不同意,怎么做?
    Qt Model/View 的简单说明
    View与Model绑定注意事项 (视图无数据显示)
    Qt Delgate的使用 简单说明
    QAbstractTableModel中的data()到底执行几遍???
  • 原文地址:https://www.cnblogs.com/zygote/p/13624128.html
Copyright © 2020-2023  润新知