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

linux i2c控制器

I2C(Inter-Integrated Circuit)控制器是一种用于实现微控制器和其外围设备之间通信的硬件模块。在Linux系统中,I2C控制器通过软件框架与外接的I2C设备进行通信,主要优势包括简单性、有效性和节省引脚资源。

I2C控制器的基础概念

  • I2C控制器:芯片内的硬件模块,用于控制GPIO口模拟I2C时序,实现与外接I2C设备的通信。
  • I2C总线驱动:控制I2C适配器产生start、stop、ACK等信号,由芯片厂商实现。
  • I2C设备驱动:实现I2C设备和I2C驱动的交互,遵循Linux总线框架。

相关优势

  • 简单性:I2C协议仅需两根线路(SDA和SCL)即可完成通信,相对于其他通信协议而言,可以节省引脚资源的使用。
  • 有效性:I2C总线被非常广泛地应用在eeprom,实时钟,小型lcd等设备与CPU的接口中。
  • 节省空间:由于只需要两根线,大大节省了电路板上的空间。

类型和应用场景

  • 类型:I2C协议支持多种不同的设备,从简单的温度传感器到复杂的PLC控制器。
  • 应用场景:广泛应用于传感器数据采集、存储器扩展、LED驱动控制、触摸屏控制等领域。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux系统驱动之I2C协议

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 I2C协议 参考资料: i2c_spec.pdf 1....硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。 2....传输数据类比 怎么通过I2C传输数据,我们需要把数据从主设备发送到从设备上去,也需要把数据从从设备传送到主设备上去,数据涉及到双向传输。...下图:白色背景表示"主→从",灰色背景表示"从→主" 3.3 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。

2.9K20

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

Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...I2C适配器 经过上面的介绍,知道有I2C驱动和I2C设备,我们需要通过I2C驱动去和I2C设备通讯,这其中就需要一个I2C设配器,I2C设配器对应的就是SOC上的I2C控制器。...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...I2C驱动:对应的就是I2C设备的驱动程序。 I2C设备:是具体硬件设备的一个抽象。 I2C适配器:用于I2C驱动和I2C设备间的通用,是SOC上I2C控制器的一个抽象。...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

3.1K20
  • 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 Controller Driver 芯片I2C控制器的驱动程序(称为adapter) 使用GPIO模拟的I2C控制器驱动程序(i2c-gpio.c) 3.2 对于单片机/裸机 从上到下

    2.3K40

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

    第一时间看干货文章 1 Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...I2C适配器 经过上面的介绍,知道有I2C驱动和I2C设备,我们需要通过I2C驱动去和I2C设备通讯,这其中就需要一个I2C设配器,I2C设配器对应的就是SOC上的I2C控制器。...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...I2C驱动:对应的就是I2C设备的驱动程序。 I2C设备:是具体硬件设备的一个抽象。 I2C适配器:用于I2C驱动和I2C设备间的通用,是SOC上I2C控制器的一个抽象。...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe

    2.8K20

    Linux的I2C驱动框架分析

    Linux总线设备框架的工作原理 如果想要弄清楚I2C驱动框架,必须深刻的理解Linux的总线设备框架。之所以会形成这样的框架,很重要的原因是为了代码的复用性。...为了提高驱动的可移植性,Linux抽象出一套管理资源的函数。设备是存在的硬件,在设备里包含自己的属性,也包含需要用到的资源。...3.Linux下I2C驱动程序的体系结构 ---- 对于Linux下的I2C驱动,其体系结构的组成主要分为三个部分 (1)I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法...主控制器所支持访问接口,如I2C_FUNC_SMBUS_BYTE,查看是否支持smbus单字节读取和写操作 u32 (*functionality) (struct i2c_adapter *...主控制器所支持访问接口,如I2C_FUNC_SMBUS_BYTE,查看是否支持smbus单字节读取和写操作 u32 (*functionality) (struct i2c_adapter *

    4.9K11

    Linux驱动之I2C子系统剖析

    一般在驱动中无需关心具体时序,只需操作SoC中的I2C控制器即可,只有在裸机下需要用GPIO模拟I2C通信时才需用到,所以笔者在本文不阐述I2C时序(其实就是懒 O__O “…)。...核心层分析可知,I2C总线是根据id_table进行匹配,所以这里并不会按照常规的Linux驱动模型进行match后probe,况且这个驱动里也没有probe方法。...*/ // 初始化I2C控制器 ret = s3c24xx_i2c_init(i2c); if (ret !...); 把关注点放在初始化I2C控制器的s3c24xx_i2c_init函数和申请IRQ上。...该函数还设置了I2C控制器的从地址,该地址用来在控制器作为从地址时使用,但是这种情况的出现微乎其微。除此之外使能Tx/Rx Interrupt和ACK信号,配置了I2C的时钟频率。

    6.7K20

    Linux TWI开发指南

    ​ 表 2-2: 软件术语 相关术语 相关术语 Sunxi 全志科技使用的 linux 开发平台 I2C_dapter linux 内核中 I2C 总线适配器的抽象定义.IIC 总线的控制器,在物理上连接若干个...I2C 设备 I2C_algorithm linux 内核中 I2C 总线通信的抽象定义。...描述 I2C 总线适配器与 I2C 设备之间的通信方法 I2C Client linux 内核中 I2C 设备的抽象定义 I2C Driver linux 内核中 I2C 设备驱动的抽象定义 2.3...twi_drv_used = ; //使用DMA传输数据 status = "disabled"; //TWI0控制器是否使能 }; 在 linux-5.4 中,TWI 的配置与 linux.../i2c/ ├── busses │   ├── i2c-sunxi.c // Sunxi平台的I2C控制器驱动代码 │   ├── i2c-sunxi.h // 为Sunxi平台的I2C控制器驱动定义了一些宏

    2.5K30

    15_具体芯片的I2C_Adapter驱动分析

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 具体芯片的I2C_Adapter驱动分析 参考资料: Linux内核真正的I2C控制器驱动程序 IMX6ULL: Linux-4.9.88\drivers\i2c\busses...\i2c-imx.c STM32MP157: Linux-5.4\drivers\i2c\busses\i2c-stm32f7.c 芯片手册 IMXX6ULL:IMX6ULLRM.pdf Chapter...I2C控制器内部结构 1.1 通用的简化结构 1.2 IMX6ULL的I2C控制器内部结构 1.3 STM32MP157的I2C控制器内部结构 2....I2C控制器操作方法 使能时钟、设置时钟 发送数据: 把数据写入tx_register,等待中断发生 中断发生后,判断状态:是否发生错误、是否得到回应信号(ACK) 把下一个数据写入tx_register

    55230

    Linux版本控制器Git【Ubuntu系统】

    一、版本控制器 为了能够更方便我们管理这些不同版本的文件,便有了版本控制器。所谓的版本控制器,就是能让你了解到一个文件的历史,以及它的发展过程的系统。...目前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的文件,例如 doc、excel、dwg、dgn、rvt等等。...Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。...到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。...这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。

    7910

    Linux系统驱动之无需编写驱动直接访问设备_I2C-Tools介绍

    视频观看 百问网驱动大全 无需编写驱动直接访问设备_I2C-Tools介绍 参考资料: Linux驱动程序: drivers/i2c/i2c-dev.c I2C-Tools-4.2: https://...无需编写驱动程序即可访问I2C设备 APP访问硬件肯定是需要驱动程序的, 对于I2C设备,内核提供了驱动程序drivers/i2c/i2c-dev.c,通过它可以直接使用下面的I2C控制器驱动程序来访问...所以使用I2C-Tools时也需要指定: 哪个I2C控制器(或称为I2C BUS、I2C Adapter) 哪个I2C设备(设备地址) 数据:读还是写、数据本身 3.1 交叉编译 3.2 用法 //...使用一句话概括I2C传输:APP通过I2C Controller与I2C Device传输数据。 在APP里,有这几个问题: 怎么指定I2C控制器?...控制器下的设备 怎么指定I2C设备?

    1.7K42

    I2C总线架构 之 I2C核心

    引言 在之前的 「《I2C总线架构 之 设备驱动》」 和 「《I2C总线架构 之 总线驱动》」 中一再提到i2c核心,本篇文章就总结一下i2c核心的主要功能。...分层思想 在之前的篇章中,大致能够了解i2c核心功能主要是为i2c设备驱动和i2c总线驱动的注册操作提供API。这种设计的好处在于实现:高内聚,低耦合。...i2c总线与i2c设备相互独立,互无联系;两者都是通过调用i2c核心提供的API实现匹配。即两者只与i2c核心有联系,这样也就可以实现一个固定i2c总线驱动可以和任一符合条件的设备驱动匹配。...然后将i2c_client注册到Linux。 bus_for_each_drv:匹配机制。...pinctrl-0 = ; }; }; 以上设备树代码记录i2c2总线下挂接的2个硬件设备信息;linux

    2.7K21

    Linux驱动之SPI子系统剖析

    I2C选择总线上挂接的一个从设备是使用从地址来区分的,而SPI采用的是CS片选线 SPI子系统框架 SPI核心层: drivers/spi/spi.c SPI总线驱动层(主机控制器驱动层):drivers...具体的分离策略详细分析可参考Linux驱动之I2C子系统剖析中内核对I2C子系统框架的阐述。笔者在这与I2C子系统类比,列出数据结构名。...I2C SPI 主机适配器(控制器) struct i2c_adapter struct spi_master 机控制器的操作方法 struct i2c_algorithm struct spi_bitbang...等总线类似,所以不会在一些重复部分展开,具体分析可以参考的Linux驱动之I2C子系统剖析中的分析方法。...要注意的是SPI与I2C提供的通用设备驱动不同,其设备节点的生成并不是在注册主机控制器中完成的,而是在通用设备中完成的,这一段从之后设备驱动层的分析可以看出。

    4.6K10

    【分享】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.9K30

    firefly-rk3288开发板Linux驱动——AT24C02 E2PROM驱动

    一、Linux I2C设备体系 Linux源码中I2C驱动目录介绍: 目录/文件 介绍 i2c-core.c I2C核心功能以及proc/bus/i2c*接口 i2c-dev.c I2C适配器的设备文件...busses文件夹 包含不同芯片的I2C主机控制器的驱动 algos文件夹 实现了一些I2C适配器的通信方法 Linux I2C的设备体系主要分为3个部分: 1.I2C核心 I2C核心提供了I2C总线驱动和设备驱动注册...(struct i2c_client *temp_client, struct i2c_driver *driver) 2.I2C总线驱动 I2C总线驱动就是SOC中I2C控制器(在Linux...驱动源码位置:kernel/drivers/i2c/busses/i2c-rk3x.c rk3x_i2c结构体包含了RK3288 I2C控制器的所有私有数据(时钟,寄存器,i2c信息块,i2c状态) struct...* The control bit is located in the GRF register space. */ /*I2C引脚配置在GRF控制器中,所以也需要把GRF控制器地址映射出来

    7200
    领券