• 《精通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
  • 相关阅读:
    VpnService
    css样式占位和不占位隐藏元素的方法
    apply和call用法
    根据条件改变表格内容
    bootstrap中给表格设置display之后表格宽度变小问题解决
    根据条件决定是否为input设置只读属性
    根据条件决定My97DatePicker日期控件弹出的日期格式
    关于关闭TAB,IFRAME占用的内存不能释放问题
    jquery中attr和prop的区别分析
    jQuery height()、innerHeight()、outerHeight()函数的区别详解
  • 原文地址:https://www.cnblogs.com/zygote/p/13624128.html
Copyright © 2020-2023  润新知