0
我需要寫一個I2C程序,它可以使用I2C_RDWR ioctl將數據寫入32位和16位寄存器地址。將32位寄存器地址傳遞給I2C_RDWR
據我所知,設備地址和數據被一起傳遞到使用在結構i2c_msg同一緩衝區buf在linux I2C驅動定義的設備:
struct i2c_msg {
__u16 addr; slave address
__u16 flags;
#define I2C_M_TEN 0x10 we have a ten bit chip address
#define I2C_M_RD 0x01
#define I2C_M_NOSTART 0x4000
#define I2C_M_REV_DIR_ADDR 0x2000
#define I2C_M_IGNORE_NAK 0x1000
#define I2C_M_NO_RD_ACK 0x0800
__u16 len; msg length
__u8 *buf; pointer to msg data
};
目前我傳球32位寄存器地址如下:
buf[3] = reg_addr & 0xff;
buf[2] = (reg_addr >> 8) & 0xff;
buf[1] = (reg_addr >> 16) & 0xff;
buf[0] = (reg_addr >>24) & 0xff;
//buf[4,5...] = data;
msg.buf = buf;
如果16位,下面的代碼被執行寄存器地址:
buf[1] = (reg_addr & 0xff);
buf[0] = (reg_addr >> 8);
buf[2] = data;
// buf[2,3...] = data;
如何讓設備知道有多少個緩衝區數組包含地址?
此外,這段代碼是否正確?
不幸的是我目前沒有任何I2C設備來測試。
任何幫助,歡迎。
Thanx。
保存了我的一天。很多謝謝。 – zacurry 2012-03-26 12:41:53