我对使用Linux的i2c dev接口的用户空间程序如何能够注册(实例化?)感到困惑。i2c设备。
根据我的理解,通过阅读:https://www.kernel.org/doc/Documentation/i2c/instantiating-devices,我们似乎需要:
但是,对于使用这里描述的i2c-dev界面的用户空间程序,https://www.kernel.org/doc/Documentation/i2c/dev-interface是如何做到的呢?
我没有devicetree条目,当我将i2c_board_info、i2c_register_board_info()或i2c_new_device()的代码grep时,我什么也找不到。但是下面的代码仍然有效,怎么做?
#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接口的用户空间程序吗?
发布于 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驱动程序,它探测一组地址并绑定到设备(如果有的话),如果找到正确的类型的话。
https://stackoverflow.com/questions/41288441
复制相似问题