linux下已经集成了iic驱动,我想拿eeprom读写操作来做个应用试试(代码如下)。
算法:“先定义一个字符串,写进去,读出来,看一下是不是成功写入”
但是发现走到ioctl就会返回-1,是怎么回事啊? 请用过linux下IIC的兄弟进来帮忙指点一下,跪谢
#define EEPROM_SLAVE_ADD 0xA0
int main(void)
{
int ret1 = 0;
int ret2 = 0;
int r = 0;
char null_buf[8]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 0};
char outbuf[8]={'Z','Z','Z','Z', 0,0,0,0};
int fd = open("/dev/i2c/0",O_RDWR); //can read and write
printf("open(/dev/i2c/0) return:(%d) \n", fd);
if (fd == -1)
{
printf("can't open device /dev/i2c/0. \n");
exit(1);
}
if( ( r = ioctl(fd, I2C_SLAVE_FORCE, EEPROM_SLAVE_ADD)) < 0)
//这里的命令字换成I2C_SLAVE也是返回-1
{
printf("ioctl failed.r:(%d).\n", r);
return -1;
}
ret1 = write(fd,null_buf,8);
printf("write returned.ret1:(%d). \n", ret1);
if( !ret1 )
{
printf("write failed.ret1:(%d). \n", ret1);
exit(1);
}
ret2 = read(fd,outbuf,8);
printf("read returned.ret2:(%d). \n", ret2);
if( !ret2 )
{
printf("read failed.ret2:(%d). \n", ret2);
exit(1);
}
printf("outbuf: %s\n", outbuf);
close(fd);
}