I2C设备初始化方法3--侦测一个指定的I2C设备

介绍了在缺乏详细信息的情况下,如何通过实现detect()方法来探测I2C设备,并自动完成初始化的过程。这种方式通常用于硬件监控芯片等设备的识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(本文的部分内容翻译自Documentation/i2c/instantiating-devices)


方式3:侦测一个指定的I2C设备

有时候,你对一个I2C设备没有足够的相关信息,甚至不能调用i2c_new_probed_device()。典型的例子是电脑主板上的硬件监控芯片。有几十个型号,可以存放在25个不同的地址。鉴于有大量的主板,它几乎是不可能建立一个详尽的监测芯片硬件列表。幸运的是,这些芯片的都有制造商和设备ID寄存器,所以他们可以被识别探测。

 

在这种情况下,I2C设备既不声明,也不明确初始化。相反,一旦驱动程序被加载,i2c-core将探测设备,如果被发现,任何一个I2C器件将自动初始化。为了防止这种机制的任何不当行为,适用下列限制:

 

*  I2C设备驱动程序必须实现detect()方法,  通过读取专用寄存器表示一个可支持的设备;

* 只有在总线,很可能存在一个支持的设备并同意探测才回去侦测探测。例如,这样就避免了监控电视适配器上的硬件探测芯片(好绕口啊。。。)。

 

例如:

请参阅在drivers/hwmon/lm90.clm90_driverlm90_detect()

 

当侦测到的设备被删除时或是所在总线注销时,成功侦测并且初始化的I2C设备最后要被首先自动销毁。

 

方式3 与之前所熟悉的2.4内核和早期的2.6内核的i2c子系统所做的工作本质上及其相似

两个显着的区别是:

 

* 现在,探测是I2C设备初始化的唯一方法,而这是当时唯一的办法。在可能的情况下,方法12应该是首选。  在没有别的办法时才可应用于方法3,因为它可以有  不良的副作用。

* 当所有I2C总线被探测到默认的返回时,I2C总线现在必须明确地说,它可以探测I2C驱动程序类。默认是一个空的类,这意味着没有探测发生。位域的目的是为了限制产生上述不良作用。

 

最后,方法3应尽可能避免。明确设备实例(方法12)是首选,因为它是更安全更快。(有一点不明白,手册推荐的i2c初始化的方法是方式1和方式2,但网上的文章都说更习惯使用方式3,这还需要更多实践检验)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值