struct i2c_rdwr_ioctl_data work_queue; unsigned int slave_address,reg_address,dat; int i,ret; unsigned char val; unsigned int fd; if(argc != 3) { printf("usage:./eeprom_ioctl address data\n"); return 0; } fd=open("/dev/i2c/0",O_RDWR); if(!fd) { printf("error on opening ...
编写完msg后,还需要创建i2c_rdwr_ioctl_data结构体,写清楚本次i2c通信要处理几个msg,然后用ioctl函数触发一次i2c通信。 structi2c_rdwr_ioctl_data data; data.msgs =&msg; data.nmsgs =1;intret =ioctl(fd, I2C_RDWR,&data);if(ret <0)printf("i2c write failed");returnret; 4. 从i2c总线读 从德州...
union i2c_smbus_data __user *data; //数据 }; 下面以一个实例讲解操作的具体过程。通过S3C2410操作AT24C02 e2prom。实现在AT24C02中任意位置的读、写功能。 首先在内核中已经包含了对s3c2410 中的i2c控制器驱动的支持。提供了i2c算法(非smbus类型的,所以后面的ioctl的命令是I2C_RDWR) static const struct i2c_...
最后在说明一点,千万不要忘记给i2c_rdwr_ioctl_data结构体中的最重要最重要最重要的结构i2c_msg中的buf分配内存。
structi2c_rdwr_ioctl_data {structi2c_msg __user *msgs;/*pointers to i2c_msgs*/__u32 nmsgs;/*number of i2c_msgs*/}; 一个该结构表示一次传输,一次传输可以包含若干个消息,nmsgs用于指定消息数量。一般来说一次写数据包含一个消息,一次读数据包含2个消息,因此写数据时nmsgs的值为1,msgs指向一个消息...
ioctl()函数则用来向用户提供一些命令以控制具体芯片设备,因为不同芯片实现数据传递需要的时序是不同的,针对具体的芯片,应用程序需要通过构造i2c_rdwr_ioctl_data结构体来给内核传递一条或数条I2C消息,从而实现控制数据传输的读写周期。 I2C总线由于具有电路结构简单、使用方便、通信速率高等优点,已在嵌入式系统中得到...
编写完msg后,还需要创建i2c_rdwr_ioctl_data结构体,写清楚本次i2c通信要处理几个msg,然后用ioctl函数触发一次i2c通信。 代码语言:javascript 复制 structi2c_rdwr_ioctl_data data;data.msgs=&msg;data.nmsgs=1;int ret=ioctl(fd,I2C_RDWR,&data);if(ret<0)printf("i2c write failed");returnret; ...
1. static noinline int i2cdev_ioctl_rdrw(struct i2c_client *client, 2. unsigned long arg) 3. { 4. struct i2c_rdwr_ioctl_data rdwr_arg; //包括i2c_msg和它的个数 5. struct i2c_msg *rdwr_pa; 6. u8 __user **data_ptrs;
最常用的是ioctl()方法。ioctl()方法可以实现上面所有的情况(两种数据格式、以及I2C算法和smbus算法)。针对i2c的算法,需要熟悉struct i2c_rdwr_ioctl_data 、struct i2c_msg。使用的命令是I2C_RDWR。 struct i2c_rdwr_ioctl_data { struct i2c_msg __user *msgs; /* pointers to i2c_msgs */ __u32 nmsgs...
用户态是通过ioctl(handle-fd, I2C_RDWR, &data)i数与i2c从设备进行数据交互。主要有2个步骤:首先是写入需要读取的寄存器的地址,然后从寄存器中读取数据。需要 2个数据包。如下: 7、int i2c_readtint fdd unsigned char addrt unsigned char eg, unsigned char *val) -int ret;struct I2c_rdwr_tcctl._data...