zoukankan      html  css  js  c++  java
  • 《精通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
  • 相关阅读:
    【动态规划、贪心】剪绳子
    【Leetcode 数组】 有序数组中出现次数超过25%的元素(1287)
    【Leetcode 数组】 杨辉三角(118)
    【Leetcode 数组】 螺旋矩阵 II(59)
    【Leetcode 数组】 螺旋矩阵(54)
    【BFPRT】数组中出现次数超过一半的数字
    【Leetcode 大小堆、二分、BFPRT、二叉排序树、AVL】数据流的中位数(295)
    【Leetcode 二分】 滑动窗口中位数(480)
    常见ie9兼容问题
    js常用正则表达式
  • 原文地址:https://www.cnblogs.com/zygote/p/13624128.html
Copyright © 2011-2022 走看看