随笔分类 -  I2C/SMBus Subsystem

摘要:结构及宏定义 struct i2c { unsigned int scl; unsigned int sda; }; #define I2C_ACK 0 /* PD_SDA level to ack a byte */ #define I2C_NOACK 1 /* PD_SDA level to n 阅读全文
posted @ 2022-12-02 15:10 闹闹爸爸 阅读(1319) 评论(0) 推荐(0) 编辑
摘要:注意:只有当你在处理内核2.6中发现的一些旧代码时,这一节才有用。如果您使用的是最新的内核,您可以安全地跳过这一节。 直到内核2.6.32,许多I2C驱动程序都使用 <linux/i2c.h> 提供的帮助宏,它创建了标准模块参数,让用户控制驱动程序探测I2C总线和连接到设备的方式。这些参数被称为pr 阅读全文
posted @ 2021-08-20 11:11 闹闹爸爸 阅读(186) 评论(0) 推荐(0) 编辑
摘要:I2C协议支持两种设备地址:普通的7位地址和扩展的10位地址集。地址集不相交:7位地址0x10与10位地址0x10不相同(尽管单个设备可以对两者都作出响应)。为了避免歧义,用户看到10位地址映射到不同的地址空间,即0xa000-0xa3ff。前导0xa(= 10)表示10位模式。用于在sysfs中创 阅读全文
posted @ 2021-08-20 10:56 闹闹爸爸 阅读(854) 评论(3) 推荐(0) 编辑
摘要:Linux I2C slave接口描述 如果使用的I2C控制器具有slave功能,那么Linux也可以成为I2C slave控制器。为此,需要总线驱动程序中的slave支持以及提供实际功能的独立于硬件的软件后端。后者的一个例子是slave-eeprom驱动程序,它充当双内存驱动程序。总线上的另一个I 阅读全文
posted @ 2021-08-19 19:28 闹闹爸爸 阅读(3244) 评论(0) 推荐(0) 编辑
摘要:Linux I2C 故障注入 可以将基于GPIO的I2C总线master驱动程序配置为提供故障注入功能。然后,它被连接到另一个I2C总线,该总线由测试中的I2C总线master驱动程序驱动。GPIO故障注入驱动程序可以在总线上创建特殊的状态,其他I2C总线master驱动程序应该优雅地处理这些状态。 阅读全文
posted @ 2021-08-19 16:52 闹闹爸爸 阅读(1293) 评论(0) 推荐(0) 编辑
摘要:介绍 因为不是每个I2C或SMBus适配器都实现了I2C规范中的所有内容,当client被赋予附加到适配器的选项时,它不能相信它需要的所有东西都实现了:client需要一些方法来检查适配器是否具有所需的功能。 功能常量 关于最新的功能常量列表,请查看<uapi/linux/i2c.h>! I2C_F 阅读全文
posted @ 2021-08-19 15:48 闹闹爸爸 阅读(938) 评论(0) 推荐(0) 编辑
摘要:本文总结了在I2C/SMBus堆栈中使用故障代码的最重要约定。 “Fault”并不总是“Error” 并非所有的fault报告都含有errors,“page faults”应该是一个熟悉的例子。软件在出现短暂故障(faults)后,经常会重试幂等操作。在某些情况下,可能存在一些更奇特的恢复方案,例如 阅读全文
posted @ 2021-08-18 19:13 闹闹爸爸 阅读(514) 评论(0) 推荐(0) 编辑
摘要:由于I2C是低速总线,其上传输的大部分消息都很小,因此不认为它是DMA访问的主要用户。在撰写本文时,只有10%的I2C总线master驱动程序实现了DMA支持。而且绝大多数事务都很小,因此为其设置DMA可能会比普通的PIO传输增加更多的开销。 因此,并不强制要求I2C消息的缓冲区是DMA安全的。当这 阅读全文
posted @ 2021-08-18 18:40 闹闹爸爸 阅读(1465) 评论(0) 推荐(0) 编辑
摘要:通常,I2C设备是由内核驱动程序控制的。但是也可以通过/dev接口从用户空间访问适配器上的所有设备。为此,您需要加载模块i2c-dev。 每个注册的I2C适配器获得一个从0开始计数的数字。您可以检查/sys/class/i2c-dev/以查看哪个适配器对应哪个数字。或者,您可以运行“i2cdetec 阅读全文
posted @ 2021-08-18 18:18 闹闹爸爸 阅读(1464) 评论(0) 推荐(2) 编辑
摘要:对于那些想要为I2C或SMBus设备编写内核驱动程序,使用Linux作为协议host/master(而不是slave)的人来说,这是一个小指南。 要设置一个驱动程序,您需要做几件事。有些是可选的,有些事情可以做得稍微不同或完全不同。把它作为指导,而不是规则手册! 备注 尽量保持内核名称空间的整洁。最 阅读全文
posted @ 2021-08-17 18:06 闹闹爸爸 阅读(1153) 评论(0) 推荐(0) 编辑
摘要:概述 由于I2C MUX (I2C多路复用器)的存在,I2C拓扑会变得很复杂。Linux内核将MUX通道抽象为逻辑I2C总线号。然而,从I2C总线物理编号和MUX拓扑 到 逻辑I2C总线编号的映射还存在认知差距。本文档旨在填补这一空白,以便读者(例如硬件工程师和新软件开发人员)通过了解物理I2C拓扑 阅读全文
posted @ 2021-08-17 11:59 闹闹爸爸 阅读(1945) 评论(0) 推荐(0) 编辑
摘要:描述 i2c-mux-gpio 是一个i2c mux驱动程序,提供从主i2c总线和通过GPIO管脚控制的硬件MUX访问i2c总线段。 例如: Bus segment 1 - - - - - | | SCL/SDA | | | | | | | | | | | | Bus segment 2 | | | 阅读全文
posted @ 2021-08-16 18:56 闹闹爸爸 阅读(945) 评论(0) 推荐(0) 编辑
摘要:构建更复杂的I2C拓扑,而不是带有一个适配器和一个或多个设备的直观的I2C总线,有几个原因。 在总线上可能需要一个多路交换器来防止地址冲突。 总线可能可以从一些外部总线主机访问,并且可能需要仲裁来确定是否可以访问总线。 一个设备(特别是射频调谐器)可能想要避免来自I2C总线的数字噪声,至少在大多数时 阅读全文
posted @ 2021-08-16 18:45 闹闹爸爸 阅读(2440) 评论(0) 推荐(0) 编辑
摘要:与PCI或USB设备不同,I2C设备不在硬件级别枚举。相反,软件必须知道每个I2C总线段上连接了哪些设备,以及这些设备使用的地址。由于这个原因,内核代码必须显式地实例化I2C设备。根据上下文和需求,有几种方法可以实现这一点。 方法一:静态声明I2C设备 当I2C总线是系统总线时(如许多嵌入式系统的情 阅读全文
posted @ 2021-08-16 16:34 闹闹爸爸 阅读(869) 评论(0) 推荐(0) 编辑
摘要:下面是SMBus协议的概要。它适用于协议的所有版本(1.0、1.1和2.0)。在本文的最后对某些协议特性进行了简要描述,这些特性是本软件包不支持的。 有些适配器只理解SMBus(系统管理总线)协议,它是I2C协议的一个子集。幸运的是,许多设备只使用相同的子集,这使得将它们放在SMBus上成为可能。 阅读全文
posted @ 2021-08-16 15:01 闹闹爸爸 阅读(4529) 评论(0) 推荐(0) 编辑
摘要:符号注解 S Start 条件 P Stop 条件 Rd/Wr (1 bit) 读/写位。Read等于1, Write等于0。 A, NA (1 bit) 确认(ACK)和不确认(NACK)位 Addr (7 bits) I2C 7位地址。注意,这可以像往常一样进行扩展,以获得10位I2C地址。 C 阅读全文
posted @ 2021-08-16 11:23 闹闹爸爸 阅读(520) 评论(0) 推荐(0) 编辑
摘要:I²C(发音:I方C,在内核文档中写成I2C)是由Philips开发的协议。它是一个慢的两线协议(变速,高达400khz),具有高速扩展(3.4 MHz)。它提供了一种廉价的总线,用于连接不频繁或低带宽通信需求的许多类型的设备。I2C广泛应用于嵌入式系统。有些系统使用的变体不符合品牌要求,因此不被宣 阅读全文
posted @ 2021-08-16 10:32 闹闹爸爸 阅读(2334) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示