[Armadillo:03944] Re: armadillo-500 sysfs経由でI2Cドライバ制御
日本電子システムテクノロジー/高木
email@hidden
2009年 1月 22日 (木) 17:35:10 JST
お世話になっています。
高木です。
> ここでおききしたいのですが、
> i2c_msg構造体変数のメンバbufについて、
> buf[0]にはレジスタアドレスを与えているのですが、
> i2c_transfer()がcallされた後には、
> buf[0]にはレジスタアドレス、
> buf[1]には受信データが
> 入っているという理解でよろしいでしょうか?
>
> i2c_msg構造体のメンバflagsですが、
> i2c.hのi2c_msg構造体のコメントを読んだところ、どれにも該当
> しないので0としました。
> チップアドレスは8ビットであり、
> 受信時は、マスター(armadillo)がスレーブ(弊社のセンサー)
> をよみとります。
通信の操作はターゲットとしているデバイスによって違う可能性があります。
デバイスのマニュアルを確認してください。
ちなみに私が扱ったデバイスではまず、アクセスしたいアドレスだけ送ります。
この時はflag=0でi2c_transferを実行。
次にflag=I2C_M_RDとしてi2c_transferを実行することで
buf[0]にデータが格納されました。
以下にそのときのサンプルコードをのせておきます。
ご参考になればと思います。
c->addrはデバイスが持つアドレスです。
■転送
static int XXX_i2c_write(struct i2c_client *c, unsigned char addr, unsigned char value)
{
struct i2c_msg msg[2];
char buf[2];
int ret;
buf[0] = addr;
buf[1] = value;
msg[0].addr = c->addr;
msg[0].len = 2;
msg[0].buf = buf;
msg[0].flags = 0;
ret = i2c_transfer(c->adapter, msg, 1);
if (ret >= 0)
{
return 0;
}
return ret;
}
■受信
static int XXX_i2c_read(struct i2c_client *c, unsigned char addr)
{
struct i2c_msg msg[2];
char buf[2];
int ret;
buf[0] = addr;
msg[0].addr = c->addr;
msg[0].len = 1;
msg[0].buf = buf;
msg[0].flags = 0;
ret = i2c_transfer(c->adapter, &msg[0], 1);
if (ret >= 0)
{
}
else
{
return ret;
}
msg[1].addr = c->addr;
msg[1].len = 1;
msg[1].buf = buf;
msg[1].flags = I2C_M_RD;
ret = i2c_transfer(c->adapter, &msg[1], 1);
if (ret >= 0)
{
return buf[0];
}
return ret;
}
> いつもお世話になっております。
> 山本です。
>
>> i2c_msg構造体のメンバflagsですが、
>> i2c.hのi2c_msg構造体のコメントを読んだところ、どれにも該当
>> しないので0としました。
>
> 送信時は0でよいですが、受信時は「I2C_M_RD」を使用するようです。
>
>
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
>
armadillo メーリングリストの案内