I2C_RDWR ioctlを使用して、32ビットおよび16ビットのレジスタアドレスにデータを書き込むことができるI2Cプログラムを作成する必要があります。
私が知っていることから、デバイスアドレスとデータは、Linuxi2cドライバーで定義された構造i2c_msgの同じバッファーbufを使用してデバイスに一緒に渡されます。
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デバイスはありません。
どんな助けでも大歓迎です。
ありがとう。