メインloopではtransactionの流れを記述します。ここでtransactionとは、start条件>slave addressとR/W bit送出>バイト転送>・・・>stopまたはrepeated start条件、のことを指します。
===
(1) startを待つ(SCL=1のとき、SDA=fallになるのを待つ)
(2) 7bit slave addressと、1bitのR/~Wを受信する。具体的にはSCL=riseでSDAを取り込む。次のバイト転送の向きを決めるためR/~W bitの状態を覚えておく。
(3) ACKを返す。具体的にはSCL=highのときSDA=0とする。
(4) Wサイクルだったら8bit受信してACKを返す。Rサイクルだったら8bit送信してACK/NACKを待つ。
(5) 次のサイクルが何かを判定する。具体的には、SCL=riseを待つ>SCL=highの間中SDAが変化しなければ1bit転送が成功したということ。次の7bitの転送は(4)に戻って続ける、SCL=highの間にSDA=riseになったらstop条件なので(1)に戻る、同じくSDA=fallになったらrepeated start条件であり(2)に戻る。
===
以降、必要な関数をいくつか定義していきます。
ここまで