• 《精通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
  • 相关阅读:
    管道和FIFO
    2.Qt Creator的使用
    1.新手上路:Windows下,配置Qt环境
    系统数据文件和信息
    使用Python与数据库交互
    与文件和目录操作相关的函数
    使用Python处理Excel文件的一些代码示例
    使用Python处理CSV文件的一些代码示例
    【Jenkins】发布报错“error: RPC failed; curl 18 transfer closed with outstanding read data remaining”
    Linux之文本处理命令
  • 原文地址:https://www.cnblogs.com/zygote/p/13624128.html
Copyright © 2020-2023  润新知