1、读写协议:
(1)读协议
(2)写协议
2、读写代码接口函数
int i2c_ri_eeprom_read_data(int file,int address,int command,unsigned long len,unsigned char *buf)
{
int nmsgs = 2, nmsgs_sent=0, i;
struct i2c_rdwr_ioctl_data rdwr;
unsigned char str[5];
if(buf == NULL)
{
printf(" %s: input parameter ptr is NULL. \n", __FUNCTION__);
return -1;
}
str[1] = command & 0xFF;
str[0] = (command >> 8) & 0xFF;
struct i2c_msg msgs[] = {
{
.addr = address,
.flags = 0,
.len = 2,
.buf=str,
},
{
.addr = address,
.flags = I2C_M_RD, //I2C_M_RD 1
.len = len + 1,
.buf= buf,
},
};
rdwr.msgs = msgs;
rdwr.nmsgs = nmsgs;
nmsgs_sent = ioctl(file, I2C_RDWR, &rdwr);
if (nmsgs_sent < 0)
{
//fprintf(stderr, "Error: Sending messages failed: %s\n", strerror(errno));
printf("%s:%dread: nmsgs_sent = %d\n",__func__,__LINE__,nmsgs_sent);
return -1;
}
//printf("Call I2C_BP_eeprom_read_data!\n");
usleep(1000);
/*for ( i = 0; i < len; i++)
{
printf("buf[%d] = %x\n", i,buf[i]);
}*/
return 0;
}
int i2c_ri_eeprom_write_data(int file,int address,int command, int buffer[],unsigned long len)
{
char buf[64];
int nmsgs = 1,nmsgs_sent,i;
struct i2c_rdwr_ioctl_data rdwr;
buf[1] = command & 0xFF; //偏移地址
buf[0] = (command >> 8) & 0xFF; //偏移地址
for ( i = 0; i < len; i++)
{
buf[i+2] = buffer[i]; //要写入的数据
//printf("data[%d] = %x\n",i,buffer[i]);
}
//printf("len = %d\n",len);
struct i2c_msg msgs[] = {
{
.addr = address,
.flags = 0, //I2C_M_WR 0
.len = len + 2,
.buf= buf,
},
};
rdwr.msgs = msgs;
rdwr.nmsgs = nmsgs;
nmsgs_sent = ioctl(file, I2C_RDWR, &rdwr);
if (nmsgs_sent < 0)
{
fprintf(stderr, "Error: Sending messages failed: %s\n", strerror(errno));
return -1;
}else{
//printf(" 寄存器写入成功!\n");
}
return 0;
}