参数msgset是一个指针,指向一个i2c_rdwr_ioctl_data类型的结构体,该结构体的功能就是让应用程序可以向内核传递消息,其成员包括:struct i2c_msg __ user *msgs; 和表示i2c_msgs 个数的 __u32 nmsgs,它也决定了在硬件I2C总线的硬件通信中有多少个开始信号。由于I2C适配器与外设通信是以消息为单位的,所以struct...
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 ...
读寄存器 ①创建消息结构体 i2c控制器和从设备之间通讯的消息,通常是储存在一个结构体中,首先,定义了一个i2c_rdwr_ioctl_data结构体,用于存储i2c通信相关的消息,我们需要规定好消息的数量,以及给这个消息申请一块空间。 ②写寄存器地址 设置要写入数据的相关信息: (一)work_queue.nmsgs被设置为1,表示只有一个消息...
i2c_rdwr_ioctl_data结构体的源码如下 struct i2c_rdwr_ioctl_data { /* pointers to i2c_msgs */ struct i2c_msg __user *msgs; /* number of i2c_msgs */ __u32 nmsgs; }; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 这个结构中nmsgs是指要发送的消息的数量,其次是i2c_msg,...
代码为:ioctl(file,I2C_RDWR,(struct i2c_rdwr_ioctl_data *)msgset); 它可以进行连续的读写,中间没有间歇。只有当适配器支持I2C_FUNC_I2C此命令才有效。参数msgset是一个指针,指向一个i2c_rdwr_ioctl_data类型的结构体,该结构体的功能就是让应用程序可以向内核传递消息,其成员包括:struct i2c_msg user...
编写完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; ...
针对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; /* number of i2c_msgs */ }; struct i2c_msg { ...
所以我们经常会使用i2cdev_ioctl函数的I2C_RDWR,在分析i2cdev_ioctl函数之前,我们需要了解一个结构体: /* This is the structure as used in theI2C_RDWR ioctl call */ structi2c_rdwr_ioctl_data { structi2c_msg __user *msgs;/* pointersto i2c_msgs */ ...
参数msgset是一个指针,指向一个i2c_rdwr_ioctl_data类型的结构体,该结构体的功能就是让应用程序可以向内核传递消息,其成员包括:struct i2c_msg __ user *msgs; 和表示i2c_msgs 个数的 __u32 nmsgs,它也决定了在硬件I2C总线的硬件通信中有多少个开始信号。由于I2C适配器与外设通信是以消息为单位的,所以...
(一)首先,定义函数func_set_opt,用于设置i2c通信的超时时间和重试次数。它通过ioctl函数调用I2C_TIMEOUT和I2C_RETRIES命令来设置超时和重试次数。 (二)第二部分定义了函数func_write_regs,用于向设备写入寄存器数据。该函数首先创建了一个i2c_rdwr_ioctl_data类型的结构体变量work_queue,用于存储i2c通信的信息。然后,...