I2C总线因为它及简单的硬件连接和通讯方式,在现在的很多设备上它是一种不可或缺的通讯总线。如果用当单片机直接操作I2C,其实很简单,只要正确把握IIC的操作时序就可以了。但是在linux系统中,I2C子系统结构是比较复杂的,因为它涉及到很多linux内核相关的知识,理解起来十分费劲。

(一)I2C架构概述

Linux 的I2C体系架构分为3个组成部分:

(1)I2C核心:I2C核心提供了I2C总线驱动和总线设备注册,注销,通信方法。还提供了与适配器无关的代码以及探测代码等。

(2)I2C总线驱动:I2C总线驱动是对I2C硬件体系结构中适配器驱动的实现。(IIC使用的是平台设备驱动模型)

(3)I2C设备驱动:I2C设备驱动是对设备端的实现(客户驱动),比如EEPROM设备。

(二)linux中I2C驱动架构图

Hardware 是我们的硬件设备,调试设备的时候我们经常在这用示波器来跟踪I2C通讯波形。

根据I2C架构概述的介绍,可以知道:

I2C核心:I2C核心层

I2C总线驱动(platform bus):硬件实现控制层,访问抽象层

I2C设备驱动(device driver):driver层

注意:在我们linux I2C子系统中,有使用到平台设备驱动机制。使用平台设备驱动的主要目是:将硬件/平台相关的东西分离出来,以提高程序的可移植性。

接下来按照linux i2c子系统的注册顺序进一步分析I2C子系统架构,总共分为下面几篇文章

《 linux IIC子系统分析(一)——AT24C02 芯片简介》

《linux IIC子系统分析(三)——I2c子系统初始化顺序分析》

《 linux IIC子系统分析(四)——I2c bus初始化》

《linux IIC子系统分析(五)——I2C plaform device 初始化》

《linux IIC子系统分析(六)——I2c plaform driver 初始化》

《 linux IIC子系统分析(七)——实例分析通过i2c-dev操作I2C设备》

《 linux IIC子系统分析(八)——实例分析通过sysfs访问I2c设备》

《linux IIC子系统分析(九)——实例分析通过设备节点访问I2c设备》

(三)(四)(五)(六)介绍I2C总线驱动

(七)(八)(九)实例介绍三种不同的方式驱动i2C 设备

说明:

1.分析的内核版本是linux2.6.32.2

2.开发板为友善之臂的mini2440, 用的是ARM9(S3C2440A)处理器

3.链接的IIC设备是EEPROM(AT24C02)

4.按照内核I2C子系统的注册顺序分析。

---------------------------------------2022.08.20:21:19更新----------------------------------------

由于各种原因,后续文章内容将更新到公众号,本平台将不再做更新。

CSDN上相关文章的测试工程代码,也统一放到了公众号上,可以免费免积分下载

可以通过主页上的二维码,也可以通过搜索微信公众号 liwen01 进入公众号

liwen01   2022.08.20

---------------------------------------2022.08.20:21:19更新----------------------------------------

linux IIC子系统分析(二)—— linux i2c 架构概述相关推荐

  1. linux IIC子系统分析(九)——实例分析通过设备节点访问I2c设备

    在< linux IIC子系统分析(四)--I2c bus初始化> 中我们创建了I2C 总线驱动,I2C adapter device 和adapter drivers也在这时创建 在&l ...

  2. Linux MMC子系统分析(二)——Host分析

    Linux MMC子系统分析(二)--Host分析 前言 通过前面对mmc子系统的模型分析,我们能够知道host是对应于硬件控制器的具体操作.本文将以sdhci-s3c.c为例对host进行简单的分析 ...

  3. linux - 中断子系统分析(1) -- GICv3硬件架构

    目录 1. 参考文档 2. GIC Version History 3. Interrup Types 4. Interrupt State Machine 5. Programmer's Model ...

  4. 【linux iic子系统】gpio模拟i2c(八)

    刚学i2c子系统时写的程序,一个简单的参考~~~ 注意,gpio的硬件地址信息需要根据实际填写~~ gpio_i2c.h文件 #ifndef _HIK_GPIO_I2C_H #define _HIK_ ...

  5. linux内存管理分析 二,linux内存管理分析【二】

    为建立内存管理系统,在内核初始化过程中调用了下面几个函数: init/main.c asmlinkage void __init start_kernel(void) { ...... 初始化持久映射 ...

  6. Linux中断子系统(二)中断控制器GIC驱动分析

    Linux中断子系统(二)中断控制器GIC驱动分析 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux中断子系统(一 ...

  7. Linux input子系统分析

    输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...

  8. Linux驱动入门学习(三):I2C架构全面理解

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  9. linux input子系统分析--子系统核心.事件处理层.事件传递过程

    linux input子系统分析--子系统核心.事件处理层.事件传递过程 一.  输入子系统核心分析. 1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注 ...

最新文章

  1. 6个让比特币现金保持匿名性的最佳方法
  2. (转)iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
  3. Flex, SilverLight 和 JavaFX
  4. 应用程序标准输入输出、Shell、程序界面的关系
  5. [数据库] --- clickhouse
  6. Java BigInteger类| 带有示例的减去()方法
  7. html td中加label,html – td对齐内的2个标签
  8. Python监视进程创建情况和系统服务状态
  9. 修改PHP上传文件大小限制的方法,php.ini修改php上传文件大小限制的方法
  10. Redis 真得那么好用吗?
  11. 现在没有可用的软件包 *** ,但是它被其它的软件包引用了 和 E: 无法定位软件包 ***问题解决(思路清晰干货)
  12. 高等数学(第七版)同济大学 习题7-8 个人解答
  13. 阿里云虚拟主机部署php项目分享
  14. 企业核心-不是技术而是人才
  15. Navicat 15注册时报错“Rsa Public key not find“的解决办法
  16. 黑客宣称可以越狱苹果T2安全芯片
  17. sql 条件查询以及模糊查询
  18. EEPROM存储芯片24C02
  19. Ubuntu(WSL)安装3b1b的manim
  20. 搜索系统—搜索引擎的原理,架构与细节

热门文章

  1. 找工作必须知道的9个常识!
  2. android+5.0+彩蛋+华为,华为隐藏系统怎么弄
  3. 如何查看自己chrome的版本
  4. 【路径规划】基于拓展随机树(RRT)算法的路径规划问题(Matlab代码实现)
  5. Javascript开发人员的图形和检测循环指南
  6. php调用lol数据,教你如何用php实现LOL数据远程获取
  7. 林大OJ习题 2020年1月14日
  8. 中国燃气热水器产量、进出口量、零售量、零售额和发展趋势分析「图」
  9. mysql技能特长怎么写_自我介绍性格技能兴趣特长.doc
  10. 洛谷 P5424 [USACO19OPEN]Snakes