Linux 用户区应用中的I2C读取
I2c设备与OMAP L138相连,用于读取I2c数据。其中OMAP L138是主设备,i2c设备作为从设备,i2c设备发送2字节的数据。我可以使用ioctl()和read函数读取两个i2c数据字节。在第一次尝试中,我能够读取前两个字节,但在第二次尝试中,一个字节被丢弃,接下来的两个字节被读取。该结果在i2c设备的每次连续读取中重复。如何确保每次连续读取都应该读取每个字节而不删除任何一个字节 代码:Linux 用户区应用中的I2C读取,linux,linux-kernel,embedded-linux,i2c,Linux,Linux Kernel,Embedded Linux,I2c,I2c设备与OMAP L138相连,用于读取I2c数据。其中OMAP L138是主设备,i2c设备作为从设备,i2c设备发送2字节的数据。我可以使用ioctl()和read函数读取两个i2c数据字节。在第一次尝试中,我能够读取前两个字节,但在第二次尝试中,一个字节被丢弃,接下来的两个字节被读取。该结果在i2c设备的每次连续读取中重复。如何确保每次连续读取都应该读取每个字节而不删除任何一个字节 代码: void i2cread() { int i2c_fd; ssize_t b
void i2cread()
{
int i2c_fd;
ssize_t byte;
char buffer[32];
i2c_fd=open("/dev/i2c-1",O_RDWR);
if(i2c_fd<0) {
printf("File I2C Device Can't be Opened\n");
return -1;
}
else {
printf("File I2C Device is Opened\n");
}
if(ioctl(i2c_fd,I2C_SLAVE,0x48)<0) {
printf("I2C Device Can't be Opened\n");
close(i2c_fd);
return -1;
}
else {
printf("I2C Device is Opened\n");
}
byte=read(i2c_fd,buffer,2);
printf("%d. ",byte);
if(byte<0){
printf("\n");
}
else {
for(byte=0;byte<2;byte++)
printf("%d ",buffer[byte]);
printf("\n");
}
}
void i2cread()
{
int i2c_fd;
ssize_t字节;
字符缓冲区[32];
i2c_fd=打开(“/dev/i2c-1”,O_RDWR);
if(i2c\u fd)不确定是否解决了问题,但您是否查看了?为什么在i2cread()
中打开(“/dev/i2c-1”)
?尝试打开一次,然后调用i2cread()
两次,以便每次读取2个字节。读取时(i2c\u fd,缓冲区,2);两次未关闭,观察到一个字节仍被丢弃。我如何避免它?如果我将更改读取(i2c_fd,缓冲区,4);则我能够成功读取四个字节,并且再次尝试读取(i2c_fd,缓冲区,4);然后删除一个字节,然后读取下四个字节。原因可能是什么?有人能解释一下吗?刚刚在eeprom上尝试了这个方法,它工作正常。硬件可以信任吗?它是什么类型的设备?