常用设置设置I2c从机地址为0xA0,如果选用at24c08设备,那么从机是7 bit地址,所以要右移1位,指定从机地址为7 bit, ioctl(fd,I2C_TENBIT,0)。 ioctl(fd,I2C_SLAVE,0xA0>>1); read()与write()函数的使用 假设子地址为12,向有子地址的器件写进7个字节: unsigned char buf[8]={12,'s','j','s','u'...
i2c_adapter结构体即i2c适配器即i2c主控制器,对于不同的硬件需要有不同的配置。然后向通过i2c核心添加这个适配器。 strlcpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name)); i2c->adap.owner = THIS_MODULE; i2c->adap.algo = &s3c24xx_i2c_algorithm;//指定adapter的通信算法结构体 i2c->adap...
i2c设备驱动有两种模式:一种是用户模式设备驱动,这种驱动依赖于i2c子系统中i2c-dev驱动,这种驱动对应用程序员的要求很高,要求应用程序员了解硬件的一些东西,了解时序、地址等;另一种是普通的设备驱动,应用程序员在使用的时候就像读写文件一样。 在linux驱动中/drivers/i2c/目录下有i2c-dev.c提供了I2C设备的通用驱动...
voidi2c1_8bit_send(unsignedchari2c_addr,unsignedlongreg_addr,unsignedcharsend_data){constchari2c_path[50]="/dev/i2c-1";inti2cFd;i2cFd=open(i2c_path,O_RDWR);if(i2cFd<0){printf("Can't open\n");exit(1);}if(ioctl(i2cFd,I2C_SLAVE,i2c_addr)<0){printf("fail to set i2c device sla...
int fd; if ((fd = open("/dev/i2c-1",O_RDWR))< 0) { /* 错误处理 */ exit(1); } 打开适配器对应的设备节点,i2c-dev为打开的线程建立一个i2c_client,但是这个i2c_client并不加到i2c_adapter的client链表当中。当用户关闭设备节点时,它自动被释放。
(fd, cmd, (unsigned long) sgio); if (err >= 0) { void __user *datap; if (copy_in_user(&sgio32->pack_id, &sgio->pack_id, sizeof(int)) || get_user(datap, &sgio->usr_ptr) || put_user((u32)(unsigned long)datap, &sgio32->usr_ptr) || copy_in_user(&sgio32-...