Linux从用户空间 i2c,用户空间操作I2C

#include 这两个头文件中定义了之后需要用到的结构体和宏。

然后就可以打开设备节点了。但是打开哪一个呢?因为适配器的编号并不固定。为此我们在中端中运行以下命令:

[root@zlg /]# cat /sys/class/i2c-dev/i2c-0/name

PNX4008-I2C0

[root@zlg /]# cat /sys/class/i2c-dev/i2c-1/name

PNX4008-I2C1

[root@zlg /]# cat /sys/class/i2c-dev/i2c-2/name

USB-I2C

如果我们想打开第二个适配器,刚好它的编号是1,对应的设备节点是/dev/i2c-1。那么可以用下面的方法打开它:

int fd;

if ((fd = open("/dev/i2c-1",O_RDWR)) < 0) {

/* 错误处理 */

exit(1);

}

打开适配器对应的设备节点,i2c-dev为打开的线程建立一个i2c_client,但是这个i2c_client并不加到i2c_adapter的client链表当中。当用户关闭设备节点时,它自动被释放。

1.2 IOCTL控制

查看include/linux/i2c-dev.h文件,可以看到i2c-dev支持的IOCTL命令。如程序清单 1.1所示。

程序清单 1.1 i2c-dev IOCTL命令

#define I2C_RETRIES 0x0701 /* 设置收不到ACK时的重试次数 */

#define I2C_TIMEOUT 0x0702 /* 设置超时时限的jiffies */

#define I2C_SLAVE 0x0703 /* 设置从机地址 */

#define I2C_SLAVE_FORCE 0x0706 /* 强制设置从机地址 */

#define I2C_TENBIT 0x0704 /* 选择地址位长:=0 for 7 bit , != 0 for 10 bit */

#define I2C_FUNCS 0x0705

/* 获取适配器支持的功能 */

#define I2C_RDWR 0x0707

/* Combined R/W transfer (one STOP only) */

#define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */

#define I2C_SMBUS 0x0720 /* SMBus transfer */

下面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值