« A/D変換のはなし | トップページ | TRでGateのはなし »

2010年5月13日 (木)

I2C ACK のはなし

I2C の ACK とは
I2Cプロトコルでは、スレーブ側が応答として DATA ラインを使って ACK応答を返します。その詳細を書いてみます。
ハード的には
I2Cのはなしにも書きましたが、I2Cラインはオープンドレイン出力+プルアップで構成されています。特にDATA ラインはACK受信のため頻繁に送信ラインと受信ラインを切り替えています。ハードではオープンドレインポートと入力ポートからなっていますので、マスター側がACKを確認するにはオープンドレインを OFF ( 出力オープン状態)にしてプルアップ抵抗による High 状態にします。スレーブがACKとして Lowを返すと DATAラインが Lowになりますので、確認できます。I2cack
ここで注意したいのは、DATAラインを変化できるのは CLOCK ラインが Lowの期間だけ というきまりがあることです。マスター側もスレーブ側も CLOCKの Lowのタイミングで信号を変化させているのが判るかと思います。 スレーブが反応しなくて ACK を返さない時は DATAラインをマスター側が受信状態にして High にしますが、ACKがないので DATAラインは Highのままです。
ACKがある場合は DATAラインは受信に切り替えた時にすこし High側に上がっていきますが、スレーブ側の ACKによって途中で Lowにされ、ひげのような信号が見えます。(プルアップ抵抗の値や、通信速度で見えない時もあります)。マスター側が CLOCKを Lowにするタイミングでスレーブは ACKを停止してLowにするのをやめます。
ソフト的には
DATAライン、CLOCKラインを制御する時にバイト単位で同一のポートを使う場合、ビット操作が瞬間他のビットに影響を与えるような時は、バイト単位で操作しないと CLOCKが一瞬 Lowになってしまったりして、CLOCKが余分に送られてしまう場合があります。また、受信に切り替える時にも同様の事が起こると LowにしていたつもりのCLOCKがHighになって、同様なトラブルが起きます。
 RENESASではI2Cバスのいろいろなトラブルについてのページが用意されていますので、参考にされると良いかと思います。
本ブログの I2Cトラブルのはなし も参照ください。

 

|

« A/D変換のはなし | トップページ | TRでGateのはなし »

DIGITAL」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: I2C ACK のはなし:

« A/D変換のはなし | トップページ | TRでGateのはなし »