I2C子系统知识(一)

I2C Hold 功能详解 I2C控制器中的hold功能主要用于支持连续传输更多数据,通过在完成一次传输后保持对总线的控制权,可以显著提高传输效率。具体的功能和配置可能因不同的硬件平台和I2C控制器而异,因此需要参考具体的硬件手册来进行详细的配置。通过合理的配置和使用hold功能,可以显著提升I2C通信的性能和可靠性。 阅读详情
1.Linux的I2C驱动架构Linux中I2C总线的驱动分为两个部分,总线驱动(BUS)和设备驱动(DEVICE)。其中总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在在那里,等待设备驱动调用其函数。

设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。通过I2C总线驱动提供的函数,设备驱动可以忽略不同总线控制器的差异,不考虑其实现细节地与硬件设备通讯。

总线驱动在系统开机时,首先装载的是I2C总线驱动。一个总线驱动用于支持一条特定的I2C总线的读写。提供i2c总线上的读写寄存器方法的东东叫做适配器,用结构体adapter表示的。

I2c总线上有寄存器存在,将i2c控制器(i2c寄存器所在的那块电路)抽象出来,用adapter(适配器)这个结构来描述,可以说一个适配器就代表一条 i2c总线,而挂接在i2c总线上的设备是用client这个结构体来表述,另外i2c_bus上的设备链表挂接的不单单是连接的这条i2c上的 client,同样adapter也作为一个设备挂在其所在的i2c_bus,也就是说控制器和设备都作为i2c_bus上的设备连接在设备链表,他们用 内嵌的struct device的type这个成员来区分,适配器的类型为i2c_adapter_type,client的类型为i2c_client_type。


struct i2c_adapter {
    struct module *owner;
    unsigned int id; 
    unsigned int class;       /* classes to allow probing for */ //// 适配器支持的类型
    const struct i2c_algorithm *algo; /* the algorithm to access the bus */    /*适配器的通信函数*/
    void *algo_data;  /通讯所需要的数据

    /* data fields that are valid for all devices   */
    struct rt_mutex bus_lock;

    int timeout;            /* in jiffies */
    int retries;         //通信重复次数限定
    struct device dev;      /* the adapter device */

    /*dev为adapter,其值为i2c_adapter_type  */  

    int nr;    /*适配器编号也是bus编号,第几条i2c总线 */
    char name[48];
    struct completion dev_released;  

    struct list_head userspace_clients;
};



struct i2c_client {
    unsigned short flags;       /* div., see below      */
    unsigned short addr;        /* chip address - NOTE: 7bit    */
                    /* addresses are stored in the  */
                    /* _LOWER_ 7 bits       */
    char name[I2C_NAME_SIZE];
    struct i2c_adapter *adapter;    /* the adapter we sit on 设备所属的适配器  */
    struct i2c_driver *driver;  /* and our access routines 设备的driver */
    struct device dev;      /*  内嵌的标准device模型,其中dev->type标识该设备是个client,其值为i2c_client_type   */
    int irq;            /* irq issued by device     */
    struct list_head detected;
};

可见,一个i2c_client代表着位于adapter总线上,地址为address,使用driver来驱动的一个设备。它将总线驱动与设备驱动,以及设备地址绑定在了一起。一个i2c_client就代表着一个I2C设备。

I2C子系统 串行、半双工总线,主要用于低速、近距离的芯片之间的通信。 阅读详情

相关推荐

深入探索Linux内核的I2C驱动开发

本文详细解读了Linux内核中I2C驱动开发的关键概念和步骤。首先,介绍了I2C和SMBus协议的基础知识及其在嵌入式系统中的应用。然后,通过源代码实例,展示了如何使用内核提供的API来编写适用于不同处理器的UIO平台驱动程序。接着,深入分析了Linux I2C子系统的架构,包括I2C总线核心、控制器驱动和设备驱动的注册流程。文章最后强调了编写I2C从端驱动的重要性,并指出了注册I2C从端驱动的步骤。

weixin_32047493的博客 335

linux下i2c驱动笔记

1. 几个基本概念 1.1. 设备模型 由 总线(bus_type) + 设备(device) + 驱动(device_driver) 组成,在该模型下,所有的设备通过总线连接起来,即使有些设备没有连接到一根物理总线上,linux为其设置了一个内部的、虚拟的platform总线,用以维持总线、驱动、设备的关系。 因此,对于实现一个linux下的设备驱动,可以划分为两大步: 1、设备注册; ...

weixin_33923762的博客 302

车载通信技术原理-CAN通讯和代码配置:奥迪A6轿车总线拓扑图

CAN总线是一种用于汽车监测与控制系统的串行通信协议,由德国Bosch公司开发。它具有多主工作方式、优先级仲裁、高抗干扰等特点,支持点对点、广播等多种通信方式,传输距离可达10公里。CAN协议采用差分信号传输,物理层使用双绞线,数据链路层实现错误检测、位填充等功能。协议帧类型包括数据帧、遥控帧、错误帧等。CAN总线自1986年发布以来,已成为汽车电子系统的标准配置,广泛应用于车载网络。文章还提供了S32K144芯片的CAN驱动代码示例。

擎天柱工坊 1070

I2C驱动框架理解

相关对象 1、 I2C总线 2、 I2C设备驱动 4、 I2C设备 3、 I2C适配器 ------------------------------------------------------------------------------------------------------- I2C总线 struct bus_type变量i2c_bus_type定义了I2C总线 ...

Embedded engineer 1281

usb设备的定位信息获取

一个usb hub有20个口,每个口有一个标号,那么如果一个为X的标号插入了一个android设备,如何通过函数,得到这个X,代码实现如下,获取了location, 得到类似 Port_#0002.Hub_#0003 的字符串,然后,要对应一个表。

babytiger的专栏 2107

Python爬虫实战:用Selenium+ChromeDriver批量抓取政府网站政策文件(附完整代码)

本文详细介绍了使用Python的Selenium和ChromeDriver进行政府网站政策文件批量抓取的实战技巧。从环境配置、动态页面元素定位到分页机制破解和反爬虫策略,提供了完整的解决方案和代码示例,帮助开发者高效获取结构化政策数据。

weixin_42531710的博客 266

linux设备模型之i2c子系统

=============================== 本文系本站原创,欢迎转载! 转载请注明出处:http://blog.youkuaiyun.com/gdt_a20 ===============================       I2c子系统将i2c控制器(i2c寄存器所在的那块电路)抽象出来,用adapter(适配器)这个结构来描述,可以说一个适配器就代表一条i2c总线,而挂

gdt-A20的专栏 3386

暴力破解pdf文档密码

相信小伙伴们都遇到这种情况;你收到了一些标题很吸引人的pdf文档 或者是重要数据泄露 学习资料总结,再或者是某机构的押题密卷,打开pdf却提示你要输入密码 因为不知道密码 只能弃罢。我就遇到过这种情况 网友发来了标题为某天一的押题密卷 ,我也想看看这个卷子的题怎么样,因为被设置了密码 我尝试用6到10位的纯数字组合来暴力破解这个pdf,结果三 四个小时都没找到正确的密码。有些网友为破解这个密码 请某宝某多来破解 也都没有破解成功。

shelter1234567的博客 1万+

LINUX I2C设备驱动模型分析之三 I2C ADAPTER实现分析

前两篇我们分析了I2C总体框架、I2C总线,本节主要分析下I2C ADAPTER部分,其实也就是 I2C控制器部分。在I2C模块中,有两个设备类型:i2c adapter、i2c client,其中i2c client可以理解为设备驱动模型中的设备,与注册到总线上的i2c驱动绑定,而i2c adapter也属于注册到i2c总线上的设备,但其不需要与i2c驱动绑定。其主要为i2c驱动...

lickylin的专栏 2392

数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

相关性分析:求解相关系数并绘制热力图进行对比

weixin_67565775的博客 8万+

Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图

其中,阵列方向图是评价阵列性能的重要参数之一。均匀面阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个圆盘。均匀线阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个矩形。本文将采用Matlab进行仿真,分别实现均匀面阵方向图、均匀线阵方向图和均匀圆阵方向图,并对三种阵列进行比较分析。通过以上代码仿真,我们可以对均匀面阵、均匀线阵和均匀圆阵进行方向图的绘制,进一步分析不同阵列在天线性能方面的差异。Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图。

2301_79326857的博客 3439

嵌入式Linux驱动开发之I2C子系统--基础知识

​ I2C(Inter-Integrated Circuit)是由飞利浦公司发明的一种集成电路互连通信协议。仅利用两条线路就可以实现芯片之间的互连通信。

mmmm123CC的博客 565

[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记

最近开始学习网络安全相关知识,接触了好多新术语,感觉自己要学习的东西太多,真是学无止境,也发现了好几个默默无闻写着博客、做着开源的大神。接下来系统分享一些网络安全的自学笔记,希望读者们喜欢。 上一篇文章分享了看雪Web安全总结知识和一个异或解密的示例,本篇文章着重讲解Chrome浏览器保留密码功能渗透解析及登录加密入门笔记,结合实际例子一步步实现浏览器漏洞的挖掘。非常基础的文章,希望对入门的博友们有帮助,大神请飘过,谢谢各位看官!

杨秀璋的专栏 2万+

I2C子系统知识(二)

I2C总线驱动是对适配器端的实现,其含有适配器数据结构struct i2c_adapter,适配器算法数据结构struct i2c_algorithm。I2C设备驱动是对设备端的实现和控制,其含有设备驱动结构i2c_driver和设备客户端结构struct i2c_client。 以下为i2c_driver结构体,里面提供了通用的操作i2c设备的接口函数. struct i2c_d

K_Linux_ManのBlog 3463

VS中的C#项目怎样引入另一个项目

场景 在C#项目A中需要引用项目B。 实现 将项目B手动复制到A所在的项目目录下的同一个解决方案中,即与项目A同级的目录下。 在VS中打开项目B,打开解决方案资源管理器--右击解决方案--添加--现有项目 然后找到项目B的.csproj文件打开。 然后看到资源管理器中已经将B添加进来了 点击项目A的引用-右键-添加 将项目下的解决方...

BADAO_LIUMANG_QIZHI的博客 9322

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Linux 驱动-I2C输入子系统相关知识点

gpio、pin 脚复用平台总线i2c 通讯:寄存器读写波形相关知识点这里我们一步一步 先从输入子系统角度看看这里其实就是做了一件事情:在i2c 驱动代码中引入了输入子系统输入子系统知识点这里只是用了最简单一部分,暂未涉及到上报,后面了解、分析。通过i2c 把很多相关知识点串联起来了,要会用,指导原理为什么这么用。

十年饮冰,难凉热血 214

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ft5x06_ts.c android,i2c子系统+ft5x06触摸屏驱动知识点

第37章:i2c子系统+ft5x06触摸屏驱动1.i2c子系统的作用a.在linux当中,可以通过各种各样的方式来驱动i2c从器件,比如裸机的时候可以直接去配置cpu的片内i2c控制器,在linux下可以通过GPIO模拟的方法来进行配置,有可以在早期,杂项,经典字符型,在平台驱动的框架下等等方式进行,但是这些方法都不如直接使用i2c子系统来的方便,i2c子系统对linux下的i2c部分进行了分层驱...

weixin_39923137的博客 598

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

I2c子系统

总结一下数据传输的关键点:数据稳定性:在 SCL 的高电平期间,SDA 上的数据必须保持稳定,不发生变化。这是因为在 SCL 的高电平时,数据被接收方读取。数据变化时机:SDA 上的数据变化应在 SCL 的低电平期间进行,这样数据在 SCL 的下一个高电平到来之前已经稳定,确保数据的正确读取。数据有效性:数据在 SCL 为高电平时被视为有效,此时数据被从设备读取。每一次发送数据过后都需要收一个ack来确认数据是否收到在I2C中,0110这个数据是先发送最高位,然后再发送低位。

qq_46518045的博客 956

Linux I2C驱动笔记

I2C总线是一种同步、串行、半双工的通信总线,由SDA(串行数据线)和SCL(串行时钟线)两根信号线构成,通常通过上拉电阻保持总线空闲状态为高电平。I2C总线支持多设备连接,允许多主机存在,但同一时刻只允许一台主机操作。每个I2C设备都有唯一的地址,主机通过地址与从机通信。I2C总线的传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。I2C总线上的设备数量受总线最大电容400pF限制,且挂载相同型号器件时还受器件地址限制。 在硬件实现上,I2C总

yan1139698896的博客 1231

I2C子系统面试指南:基础原理、经典问答与答题技巧全解析

本文全面解析了I2C子系统的核心知识,包括分层架构、三大结构体(i2c_adapter、i2c_client、i2c_driver)、关键API及通信机制。详细介绍了I2C在Linux内核中的实现原理,并针对面试常见问题提供了标准答案,如驱动绑定机制、设备树配置、用户空间访问方法和常见问题调试技巧。内容涵盖I2C子系统的基础架构、开发实践和面试应答策略,适合嵌入式开发人员深入学习和面试准备。

Interview_TC的博客 1154

嵌入式Linux内核I2C子系统详解

1.1 I2C总线知识 1.1.1  I2C总线物理拓扑结构      I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。 通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的 传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。 1.1.2  I2C总线特

tianshiyalin的专栏 678

BSP及驱动开发笔记-78 I2C子系统

我思故我在! 235

驱动开发硬核特训 · Day 31:理解 I2C 子系统的驱动模型与实例剖析

本文深入探讨了Linux内核中I2C子系统的核心结构和工作机制。I2C子系统是一个总线型子系统,由控制器(i2c_adapter)、从设备(i2c_client)和驱动程序(i2c_driver)组成。控制器通过platform_driver注册,而从设备通过设备树挂载并创建i2c_client对象,最终与i2c_driver匹配。文章以AT24 EEPROM驱动为例,详细解析了驱动注册、设备匹配及数据传输过程,并提供了相关练习题和实战建议,帮助读者巩固理解。通过本文,读者可以全面掌握I2C子系统的组织方式

Interview_TC的博客 1129

Linux i2c子系统(一) _动手写一个i2c设备驱动

Linux i2c子系统(一) _动手写一个i2c设备驱动

peifeng 154

Linux设备驱动开发-I2C子系统

来看看数据传输,这里 调用i2c_transfer 传输所有的 msg,对于读取数据的传输,在传输完后还需要把得到的数据拷贝回用户空间,这里i2c_transfer 就是和 adapter 打交道了。地址是通过unlocked_ioctl 来进行也就是i2cdev_ioctl,I2C_SLAVE/I2C_SLAVE_FORCE 设置 client 的地址。在 open 设备节点的时候调用i2cdev_open,这里会通过次设备号获取到 adapter(i2c 控制器)来看看内核中的 i2c 控制器驱动。

通信开发 393

I2C驱动学习

I2C适配器驱动层的软件已经被原厂工程师写好了,并且这部分是包含时序相关的内容的。然后,我们只是编写i2c_driver,在这个部分里面,不再涉及时序相关内容。向上提供接口,向下进行硬件操作这个部分包含时序的内容,并且不需要我们编写。是内核准备好的,我们编写i2c_driver的时候,对这个部分的API进行调用I2C驱动分为I2C_client和I2C_driver两个部分,或者说I2C设备模型 = client(设备) + driver(驱动),解析来分开进行讲解。

weixin_60289859的博客 509
上一篇: container_of
下一篇: MACH_START
karry_vcent
博客等级 码龄15年 93粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值