**

Linux I2C architecture

1.I2C仅使用SCL、SDA 两根信号线实现通信
2.I2C驱动由I2C core、I2C bus driver、I2C device driver三部分组成

**
1. I2C core
为I2C bus driver and device driver提供register 、unregister、communication
2. I2C bus driver
对应硬件adapter的实现,adapter可由CPU控制,甚至可以直接集成在CPU内部
包含:struct i2c_adapter(对该adapter的描述)、struct i2c_algorithm(负责通信)、functions(产生通信信号)
通过I2C bus driver,我们可以控制I2C adapter,来达到主或者从的方式读写,产生启止,ACK等
3. I2C device driver
对应硬件设备端的实现,这些设备挂在I2C adapter上,通过I2C适配器与CPU交换数据
包含:struct i2c_driver、struct i2c_client、functions(具体设备具体实现)
可以通过sysfs文件系统中/sys/bus/i2c/* 来查看当前i2c adapter上已挂在的device

4. i2c_driver、i2c_client、i2c_adapter 和 i2c_algorithm 这 4 个数据结构的作用及关系

struct i2c_adapter {
对应物理上的一个adapter,其上可以被多个i2c_client依附(链表连起来)
struct i2c_algorithm {
对应一套通信方法
master_xfer();
}
}
缺少i2c_algorithm的i2c_adapter什么也做不了,因此i2c_adapter中包含其使用的i2c_algorithm的指针
master_xfer()用于产生I2C访问周期需要的信号,以i2c_msg为单位
struct i2c_msg {
__u16 addr;
__u16 flags;
__u16 len;
__u8 *buf;
};

i2c_client 对应一个真实的物理设备,每个I2C设备都需要一个i2c_client来描述,其依附于i2c_adapter
i2c_driver对应一套驱动方法,主要是当探测物理设备的存在与否,然后使设备与adapter关联起来,纯粹用于辅助作用

Linux I2C 核心、总线、与设备驱动相关推荐

  1. linux i2c核心,总线与设备驱动,Linux2.6.37 I2C驱动框架分析(一)

    最近工作中又使用到了I2C,所以借S3C2440开发板GT2440为硬件平台温习一遍I2C驱动体系. linux内核中IIC驱动的体系框架 linux内核中IIC部分驱动代码位于:/drivers/i ...

  2. Linux I2C核心、总线与设备驱动(二)

    从上面的分析可知,虽然I2C硬件体系结构比较简单,但是I2C体系结构在Linux中的实现却相当复杂.当工程师拿到实际的电路板,面对复杂的 Linux I2C子系统,应该如何下手写驱动呢?究竟有哪些是需 ...

  3. Linux I2C核心、总线与设备驱动(一)

    本章导读 I2C总线仅仅使用SCL.SDA两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和PCB板布线空间的占用.因此,I2C总线被非常广泛地应用在EEPROM.实时钟.小型LCD等设备与 ...

  4. Linux I2C核心、总线与设备驱动

    Linux I2C核心.总线与设备驱动 I2C总线仅仅使用SCL. SDA这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB板布线空间的占用.因此, I2C总线非常广泛地应用在EE ...

  5. 从需求的角度去理解Linux系列:总线、设备和驱动

    <从需求的角度去理解Linux系列:总线.设备和驱动>是一篇有关如何学习嵌入式Linux系统的方法论文章,也是从需求的角度去理解Linux系统软件的开篇.这是作者精心撰写的经验总结,希望嵌 ...

  6. Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化

    我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...

  7. Linux SPI总线和设备驱动架构之三:SPI控制器驱动

    通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能: 1 ...

  8. 设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

    以下内容转载于微信公众号:嵌入式企鹅圈.如有侵权,请告知删除. 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sysfs等相关概念和技术. 对于初学者来说会非常 ...

  9. 一起分析Linux系统设计思想——05字符设备驱动框架剖析(四)

    在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习.我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直 ...

  10. Linux内核学习-字符设备驱动学习(二)

    在Linux内核学习-字符设备驱动学习(一)中编写字符设备驱动的一种方法,但是需要手动创建设备节点. 有没有能够自动的创建设备节点的呢? 有!使用class_create()和device_creat ...

最新文章

  1. 大学计算机课程改革项目,大学计算机课程改革.ppt
  2. 我眼里的Exchange 2010 之:1—DAG
  3. UA MATH523A 实分析3 积分理论 概念与定理整理
  4. 高德地图和百度地图接口封装遇到的问题(一):重复添加实时路况图层后无法移除
  5. java rect 旋转_处理(Java可视化语言):使用rectMode(CENTER)而不是rectMode(CORNER)旋转矩形,留下奇数衰落轨迹效果...
  6. ubuntu切换中文输入法
  7. sklearn自学指南(part28)--双向聚类
  8. Android开发之常用的自定义输入框之EditText
  9. js sort方法根据数组中对象的某一个属性值进行排序(实用方法)
  10. BZOJ 1601 [Usaco2008 Oct]灌水 (最小生成树)
  11. STM32F7xx —— 96位唯一ID
  12. hdu 6092 Rikka with Subset 01背包 思维
  13. Ubuntu 安装 VMware 15
  14. wps里为什么没有华文楷体_是谁动了我的字体?为什么Word或PPT换台电脑打开字体就变了呢?...
  15. 09、Non-Black-Box ZK(Barak‘s protocol)--Alon Rosen
  16. Yoga Book YB1-X91F 重装win10系统后键盘没有震动的解决办法
  17. 阿里云CDN配置步骤
  18. 【产品】UI设计:哪些字体可以商用
  19. 小程序发送短信验证码完整工具
  20. Java面试总结(2021优化版)发布1024程序员节

热门文章

  1. 赵小楼《天道》《遥远的救世主》深度解析(29)优秀的传统文化和弱势思想观念的转变
  2. 用60行代码实现一个高性能的圣诞抽抽乐H5小游戏(含源码)
  3. 论文研读-社交媒体可视化-大规模地理社交媒体数据的可视化抽象与探索
  4. 今日科技联播:滴滴5000亿上市计划或受影响,高德地图暂时下线顺风车业务
  5. 彼时彼刻,正如此时此刻——评《让×××飞》
  6. 【一日一logo_day_36】fai
  7. OBD系统系族分类规则
  8. 本人常用软件(工具)
  9. windows服务器硬盘怎么扩容,亚马逊Amazon EC2 Windows服务器磁盘扩容操作步骤
  10. 课程实验三-bomb实验