首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux系统驱动之I2C协议

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。 2....举个例子: 体育老师:可以把球发给学生,也可以把球从学生接过来。 发球: 老师:开始了(start) 老师:A!我要发球给你!(地址/方向) 学生A:到!...下图:白色背景表示"主→从",灰色背景表示"从→主" 3.3 I2C信号 I2C协议数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。...双方设备,某个设备发送数据时,另一方怎样才能不影响SDA上的数据?

2.8K20

Linux I2C驱动入门,建议收藏!

I2C驱动 i2c_driver 类似 platform_driver,是我们编写 I2C 设备驱动重点要处理的内容, i2c_driver 结构体定义在 include/linux/i2c.h 文件...I2C设备 I2C设备结构体i2c_client 结构体定义在 include/linux/i2c.h 文件,内容如下: struct i2c_client { unsigned short...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件,结构体内容如下: /*...i2c_algorithm 结构体定义在 include/linux/i2c.h 文件,内容如下: struct i2c_algorithm { /* If an adapter algorithm...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

2.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux系统驱动之I2C视频介绍

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...I2C硬件框架 在一个芯片(SoC)内部,有一个或多个I2C控制器 在一个I2C控制器上,可以连接一个或多个I2C设备 I2C总线只需要2条线:时钟线SCL、数据线SDA 在I2C总线的SCL、SDA...I2C控制器驱动 它根据I2C协议发出各类信号:I2C设备地址、I2C存储地址、数据 它根据I2C协议判断 3....我们讲什么 3.1 对于Linux 从上到下: 先讲I2C协议 APP可以通过两类驱动程序访问设备 I2C设备自己的驱动程序 内核自带的i2c-dev.c驱动程序,它是i2c控制器驱动程序暴露给用户空间的驱动程序...: 先讲I2C协议 APP I2C Device Driver I2C Controller Driver(也被称为adapter)

2.3K40

Linux I2C 驱动入门,建议收藏!!!

I2C驱动 i2c_driver 类似 platform_driver,是我们编写 I2C 设备驱动重点要处理的内容, i2c_driver 结构体定义在 include/linux/i2c.h 文件...I2C设备 I2C设备结构体i2c_client 结构体定义在 include/linux/i2c.h 文件,内容如下: struct i2c_client { unsigned short...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件,结构体内容如下: /*...i2c_algorithm 结构体定义在 include/linux/i2c.h 文件,内容如下: struct i2c_algorithm { /* If an adapter algorithm...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

2.5K20

LinuxI2C驱动框架分析

Linux总线设备框架的工作原理 如果想要弄清楚I2C驱动框架,必须深刻的理解Linux的总线设备框架。之所以会形成这样的框架,很重要的原因是为了代码的复用性。...为了提高驱动的可移植性,Linux抽象出一套管理资源的函数。设备是存在的硬件,在设备里包含自己的属性,也包含需要用到的资源。...3.LinuxI2C驱动程序的体系结构 ---- 对于Linux下的I2C驱动,其体系结构的组成主要分为三个部分 (1)I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法...(2)I2C总线驱动:I2C总线驱动是对I2C硬件体系结构适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。...(3)I2C设备驱动:I2C设备驱动(也称为客户驱动)是对I2C硬件体系结构设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。 ?

4.5K11

Linux驱动之I2C子系统剖析

一般在驱动无需关心具体时序,只需操作SoCI2C控制器即可,只有在裸机下需要用GPIO模拟I2C通信时才需用到,所以笔者在本文不阐述I2C时序(其实就是懒 O__O “…)。...= i2c_device_remove, .shutdown = i2c_device_shutdown, .pm = &i2c_device_pm_ops, }; 根据Linux...从源码可见,需要注意的是I2C总线匹配方式不同于Platform总线,I2C总线只匹配id_table的name,并不会去匹配driver的name。...核心层分析可知,I2C总线是根据id_table进行匹配,所以这里并不会按照常规的Linux驱动模型进行match后probe,况且这个驱动里也没有probe方法。...注意从前一段分析得知,内核I2C采用中断方式等待从机响应,所以probe函数这一段代码申请了IRQ并绑定了中断处理函数s3c24xx_i2c_irq。

6.2K20

i2cstart和restart的区别【转】

有的硬件芯片提供了一个个寄存器,供我们很好的操作i2c,但是,在用的时候,我们是不知道他到地是怎么操作的,下边,我就探讨下i2c的start和restart的区别。 ?...start是在scl是高电平的时候sda的一个下降沿来表示一个i2c的开始信号,到了i2c传输的内部,scl是低电平的时候,所有数据都是无效的,也就是说,硬件上start只是操作sda,令sda产生下降沿...有的硬件芯片提供了一个个寄存器,供我们很好的操作i2c,但是,在用的时候,我们是不知道他到地是怎么操作的,下边,我就探讨下i2c的start和restart的区别。 ?...restart是在一个i2c的时间段内实现在scl高电平的时候的一个sda的下降沿呢,因此,要实现,所操作的是线令sda成高电平,在令scl来个高电平,再令sda成低电平,其实质就是操作一个scl的高电平内产生一个

1.6K10

Linux系统驱动之I2C系统驱动程序模型

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 I2C系统驱动程序模型 参考资料: Linux内核文档: Documentation\i2c\instantiating-devices.rst Documentation...\i2c\writing-clients.rst Linux内核驱动程序示例: drivers/eeprom/at24.c 1....I2C驱动程序的层次 I2C Core就是I2C核心层,它的作用: 提供统一的访问函数,比如i2c_transfer、i2c_smbus_xfer等 实现I2C总线-设备-驱动模型,管理:I2C设备(...I2C总线-设备-驱动模型 2.1 i2c_driver i2c_driver表明能支持哪些设备: 使用of_match_table来判断 设备树,某个I2C控制器节点下可以创建I2C设备的节点

2.6K40

【分享】i2c地址0x80导致Linux i2c驱动的probe函数不能被执行

作者: 付汉杰 hankf@xilinx.com hankf@amd.com 测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0 在给Xilinx Versal的Linux...检查编译过程,i2c驱动被编译成了ko文件。 检查编单板的文件系统,i2c驱动已经在文件系统。 手动加载ko文件,linux报告驱动已经存在。...卸载驱动后,再手动加载ko文件,执行正常,linux没有报告错误。检查内核输出,没有probe里的printk打印,即使是err级别的打印信息。...交换能正常加载的i2c驱动和新驱动的i2c地址,新驱动的probe函数能被执行,原来能正常加载的i2c驱动的probe函数也不能被执行。这说明probe和地址有关。...检查linux内核信息,由警告说0x80是无效地址。 原来设备树根据厂商的手册,把i2c的地址设置成了0x80。0x80可能是计算了r/w位的值,真实地址是0x40。

1.7K30

I2C 子系统(八)

/kernel-5.10/include/linux/i2c.h /kernel-5.10/drivers/i2c/busses/i2c-mt65xx.c //i2c 控制器驱动 /kernel-5.10...】由普通驱动工程师负责,【i2c 核心层】由 Linux 提供,【i2c 核心层】以下由芯片原厂负责。...I2C 子系统通过 i2c-core 将 i2c 设备驱动和 i2c 总线驱动进行了分离,从而使得 i2c 设备驱动不用关心 i2c 总线传输细节,专注于 i2c 设备逻辑的实现。...其中,Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter,i2c_algorithm 只是一些 i2c 传输的实现函数合集。...在 Linux 系统中有如下节点: 2、I2C Data Structure 我们要搞懂一个 Linux 子系统,必须研究它的数据结构,搞懂每个结构体存储了什么东西,才能梳理清楚该子系统的架构。

71920

I2C 同步串行总线

开源项目gin-vue-admin成员之一,先后在CSDN等平台分享了多篇技术文章,在“战码先锋”活动作为大队长,累计培养三个小队长,带领100+队员完成Pr的提交合入。...I2C 概述 I2C(Inter Integrated Circuit)集成电路间总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线。I2C 以主从方式工作。...I2C 接口定义了完成 I2C 传输的通用方法集合,包括: I2C 控制器管理:打开或关闭 I2C 控制器; I2C 消息传输:通过消息传输结构体数组进行自定义传输 I2C 时序主要有四个元素组成:起始信号...I2C 操作流程如下: 初始化I2C 设置I2C 波特率 I2C 写操作 I2C 读操作 I2C 模块相关 API 接口名 描述 unsigned int IoTI2cInit(unsigned int...(unsigned int id, unsigned int baudrate); 设置I2C波特率 I2C 接口调用举例如下: 代码功能:定义了 I2C 接口功能以及 I2C 相关参数,GPIO_

78130

I2C通讯协议

同时有多于一个主机尝试控制总线 但不破坏报文 仲裁 是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程 同步 两个或多个器件同步时钟信号的过程 2、硬件结构 每一个I2C...这就是时钟同步,它解决了I2C总线的速度同步问题。...该字节由 7 位的外围器件地址(设备地址)和 1 位读写控制位 R/W组成(此时 R/W=0) 通常最低一位就是R/W位,,“0”表示写,“1”表示读(通常读写信号写上面有一横线,表示低电平) (3)...I2C开始和结束信号 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 ?  ...另外I2C的通信速率为100Kb,快速为400Kb

1.3K60

Linux应用开发【第十二章】I2C编程应用开发

8位数据,先传输最高有效位(MSB)传输。 12.2 在linux系统下操作I2C总线的外设 12.2.1 概述 ​ 下图是在linux系统环境里操作i2c总线上的外设流程框图。...对上要实现可以通过linux程序把数据流组织成I2C协议下发到硬件层的相应的外设传感器。 ​ 在用户空间的应用程序,应用工程师完全可以不必理会I2C协议的详细规定。...只需要按照驱动层提供给我们的操作I2C外设的操作接口函数就可以像操作linux其他普通设备文件那样轻松的操作I2C外设了。...应用程序读写I2C外设 ​ 首先通过前面的介绍,我们已经知道站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu挂载该I2C外设的I2C控制器,而这个I2C控制器在linux系统中被称为“I2C...而且众所周知,在linux系统,每一个设备都是以文件的形式存在的,所以在linux操作I2C外设就变成了操作I2C适配器设备文件。

3.3K31

I2C spec 总结

一般认为 I2C 总线上,低于 0.3Vdd 为低电平,高于 0.7Vdd 为高电平。 I2C 协议每个挂到总线上的设备都有独一无二的静态设备地址。...空闲时,I2C 总线上两根线都是高电平,因为有上拉电阻。 1、推挽结构和开漏结构 1、推挽结构:使用两个三极管或 MOSFET,以推挽方式存在于电路。...上层如何处理,是上层的事情,芯片设计时 I2C 外设控制器一定会在这个时候产生一个 ACK error。如果用的是 Linux 操作系统,可以配置在上层忽略最后的这个 ACK error 。...(如果 I2C 总线上有多个主机,则不用再一次仲裁,节省时间) 另外,在 Linux 系统,由于 i2c_msg 结构体的规定,单笔 I2C 传输最大 64KB,超过 64KB 也要再来一次 STOP...博主将 I2C spec 单独总结出来,意思是说,不管你是单片机平台,还是 FreeRTOS 平台,还是 Linux 平台,I2C spec 都是一样的,所以总结为一文方便大家查看。

99210
领券