首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux -在使用i2c设备之前需要注册(实例化)它们吗?

Linux -在使用i2c设备之前需要注册(实例化)它们吗?
EN

Stack Overflow用户
提问于 2016-12-22 17:10:45
回答 1查看 1.2K关注 0票数 0

我对使用Linux的i2c dev接口的用户空间程序如何能够注册(实例化?)感到困惑。i2c设备。

根据我的理解,通过阅读:https://www.kernel.org/doc/Documentation/i2c/instantiating-devices,我们似乎需要:

  1. 使用i2c_board_info设备的名称和地址定义i2c结构,执行i2c_register_board_info()
  2. 有一个装置树条目,如: i2c1: i2c@400a0000 { /* .主属性跳过. */时钟频率= <100000>;flash@50 {兼容= "atmel,24c256";reg = <0x50>;};pca9532: gpio@60 {兼容= "nxp,pca9532";gpio-控制器;#gpio-单元= <2>;reg = <0x60>;};
  3. 通过定义i2c_board_info结构显式地实例化异常,然后在i2c设备驱动程序的init中调用i2c_new_device()

但是,对于使用这里描述的i2c-dev界面的用户空间程序,https://www.kernel.org/doc/Documentation/i2c/dev-interface是如何做到的呢?

我没有devicetree条目,当我将i2c_board_info、i2c_register_board_info()或i2c_new_device()的代码grep时,我什么也找不到。但是下面的代码仍然有效,怎么做?

代码语言:javascript
运行
复制
#include <linux/i2c-dev.h>

void read_from_device(uint8_t *read_data)
{
  int result;

  file_desc = open("/dev/i2c-2", O_RDWR);

  ioctl(file_desc, I2C_SLAVE, device_address);

  i2c_smbus_write_byte_data(file_desc, DEVICE_PAGE_ADDRESS, page_number);

  result = i2c_smbus_read_byte_data(file_desc, device_register_address);

  *read_data = result;

  close(file_desc);
}

这是否意味着我们不必注册(实例化) i2c设备才能使用它们?这既适用于i2c驱动程序,也适用于使用i2c-dev接口的用户空间程序吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-25 00:30:22

i2c-dev驱动程序绑定到总线(i2c_adapter),而不是特定的i2c设备(i2c_client)。因此,您只需要创建使用i2c-dev的总线设备,而不必为客户端添加设备。实际上,除非使用I2C ioctl,否则i2c-dev将不允许您使用绑定到另一个驱动程序的I2C_SLAVE_FORCE地址。

这与spidev驱动程序相反,该驱动程序绑定到特定的spi从设备,而不是整个总线。I2C早于现代的Linux设备模型,有些东西与其他地方不同。

如果您希望内核驱动程序控制I2C设备,那么需要有一个驱动程序可以绑定到的设备。异常将是所谓的“旧样式”I2C驱动程序,它探测一组地址并绑定到设备(如果有的话),如果找到正确的类型的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41288441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档