I2C-COMの実装〜start/stop/read/writeの各関数(内容が古くなりましたが記録として残します)

start/stop/read/writeの各関数を書いていきます。"tSU_STA"等は規定時間以上待つことを意味します。

void start(void)
{sda(1);
scl(1);
tSU_STA;
sda(0);
tHD_STA;
scl(0);
tLOW;}

void stop(void)
{sda(0);
scl(0);
tLOW;
scl(1);
tSU_STO;
sda(1);
tBUF;}


データ転送関数は、関数に入ってくる時の状態がバラバラなので、次の規則を設けて時間を保証することにする。考え方は、
・関数に入って出るまでにSCLがlow->high->lowの1サイクル動く。この時間をtLOW1, tHIGH1, tLOW2で表す。tLOW1>tSU_DAT, tHIGH1>=tHIGH, tLOW2>tVD_DAT、とする。
・writeは関数に入った直後、readは関数に入ってくるとき、SDAは確定していることを前提とする。そのため、関数から抜けるときに次の転送サイクルのSDAが確定しているようにする。

void write(byte data)
{sda(data);
scl(0);
tLOW1;
scl(1);
tHIGH1;
scl(0);
tLOW2;}


byte read(void)
{scl(0);
tLOW1;
scl(1);
temp=SDA;
tHIGH;
scl(0);
tLOW2;
return temp;}

ここまで

コメント

このブログの人気の投稿

i2c-tools 備忘録(内容が古くなりましたが記録として残します)

python-smbus(内容が古くなりましたが記録として残します)