|
本帖最后由 jiang11 于 2012-3-5 18:45 编辑
TQ2440,自带了一个I2C的测试程序,文件为:apps/IIC_RW/i2c_rw.c
这个程序测试正常
现在有个应用,想通过I2C向另外一个设备发送数据,使用上述代码之后,发现有个问题:
比如想发送的数据为:0xFF 0xFE 两个字节,则接收到的数据为:0x00 0xFF 0x01 0xFE四个字节
其中1、3是eeprom的内部地址,2,4是发送的数据。
如果只想收到发送的数据,即0xFF 0xFE,该如何修改?
相关的代码如下(摘自测试程序i2c_rw.c):
int eeprom_write_byte(struct eeprom *e, __u16 mem_addr, __u8 data)
{
int r;
__u8 command = mem_addr & 0x00ff;
union i2c_smbus_data i2cdata;
i2cdata.byte = data;
r = i2c_smbus_access(e->fd, I2C_SMBUS_WRITE, command, I2C_SMBUS_BYTE_DATA, &i2cdata);
if(r < 0)
printf("iic write error");
usleep(10);
return r;
}
static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command, int size, union i2c_smbus_data *data)
{
struct i2c_smbus_ioctl_data args;
args.read_write = read_write;
args.command = command;
args.size = size;
args.data = data;
return ioctl(file, I2C_SMBUS, &args);
}
|
|