PIND 6 PIND 5 PIND 4 PIND 3 PIND 2 PIND 1
26. TWI - 2線直列インターフェース ( 2-wire Serial Interface )
26.7. 転送種別
TWIは以下の4つの主な動作種別の1つで動けます。
・ 送信主装置(MT)
・ 受信主装置(MR)
・ 送信従装置(ST)
・ 受信従装置(SR)
これら種別の多くは同じ応用に使用できます。例えば、TWI方式のEEPROM内にデータを書くのにTWIはMT動作を、EEPROMから データを読み戻すのにMR動作を使用できます。システム内に他の主装置が存在する場合、それらのいくつかがTWIにデータを送信する かもしれず、するとSR動作が使用されるでしょう。どの動作種別が適正かを決めるのは応用ソフトウェアです。
次項はこれら動作種別の各々を記述します。起こり得る状態符号は各動作種別のデータ伝送詳細図に沿って示されます。これらの図 は次の略号を使用します。
S 開始(START)条件
Rs 再送開始(REPEATED START)条件 R 読み出し指定ビット (SDA=High) W 書き込み指定ビット (SDA=Low) A 確認応答(ACK)ビット (SDA=Low) A 非確認応答(NACK)ビット (SDA=High) Data 8ビット データ バイト
P 停止(STOP)条件 SLA 従装置アドレス
各図に於いて、楕円(訳注:原文は円)はTWI制御レジスタ(TWCR)のTWI割り込み要求フラグ(TWINT)が設定(1)されたことを示すのに使 用されます。この楕円内の番号は前置分周選択ビットが0で遮蔽されたTWI状態レジスタ(TWSR)に保持した状態符号を表します。これ ら位置での動きはTWI転送の継続または完了が応用(ソフトウェア)によって行われなければなりません。TWI転送はソフトウェアによって TWINTフラグが解除(0)されるまで一時停止されます。
TWI割り込み要求フラグ(TWINT)が設定(1)される時のTWI状態レジスタ(TWSR)の状態符号は適切なソフトウェア動作を決めるのに使用さ れます。各状態符号に対する必要なソフトウェア動作や後続の直列転送の詳細は各動作の状態表の下で与えられます。これらの表に 於いて前置分周選択ビットが0で遮蔽されていることに注意してください。
26.7.1. 送信主装置動作
送信主装置(MT)動作では何バイトかのデータが受信従装置へ送信されます(下図をご覧ください)。主装置動作へ移行するには開始条 件が送出されなければなりません。それに続くアドレス パケットの形式がMTまたは受信主装置(MR)のどちらへ移行すべきかを決めま す。SLA+Wが送信されるとMT動作へ移行し、SLA+Rが送信されるとMR動作へ移行します。本項で言及する全ての状態符号は前置 分周選択ビットが0か、または0で遮蔽されることが前提です。
図26-11. 送信主装置動作でのデータ転送
装置1 (送信主装置)
装置2
(受信従装置) 装置3 装置n R1 R2
VCC
SCL SDA
~ SCL
SDA
開始条件はTWCR=1x10x10x形式の値をTWI制御レジスタ(TWCR)に書くことによって送出されます。
・ TWI許可(TWCR.TWEN)ビットは2線直列インターフェース(TWI)を許可するために1を書かれなければなりません。
・ 開始条件生成許可(TWCR.TWSTA)ビットは開始条件を送出するために1を書かれなければなりません。
・ TWI割り込み要求(TWCR.TWINT)フラグはこのフラグを解除(0)するために1を書かれなければなりません。
その後にTWIは2線直列バスを検査し、バスが開放になると直ぐに開始条件を生成します。開始条件が送出されてしまった後、TWINT フラグがハードウェアによって設定(1)され、TWI状態レジスタ(TWSR)の状態符号が$08になります(以降の状態符号表をご覧ください)。送信 主装置へ移行するにはSLA+Wが送信されなければなりません。これはTWIデータ レジスタ(TWDR)にSLA+Wを書くことによって行いま す。その後、転送を継続するためにTWCR.TWINTビットは(そこへ1を書くことによって)解除(0)されるべきです。これはTWCR=1x00x10 x形式の値をTWCRに書くことによって達成されます。
SLA+Wが送信されて応答ビットが受信されてしまうと、TWINTが再び設定(1)され、TWSRの状態符号の数値が利用可能になります。
主装置動作で可能性のある状態符号は$18,$20,$38です。これら状態符号の各々に対する適切な動作は以降の状態符号表で詳述 されます。
SLA+Wが正常に送信されてしまうと、データ パケットが送信されるべきです。これはTWDRにデータ バイトを書くことによって行われます。
TWDRはTWINTが1の時にだけ書かれなければなりません。さもなければ、そのアクセスは破棄され、TWCRで上書き発生(TWWC)フラ グが設定(1)されます。TWDR更新後、転送を継続するためにTWINTビットは(そこへ1を書くことによって)解除(0)されるべきです。これ はTWCR=1x00x10x形式の値をTWCRに書くことによって達成されます。
最後のバイトが送られてしまうまでこの手順が繰り返され、この転送は停止条件または再送開始条件のどちらかを生成することによっ て終了されます。再送開始条件は通常の開始条件値(TWCR=1x10x10x)を書くことによって達成されます。停止条件はTWCR=1x01x 10x形式の値を書くことによって生成されます。
再送開始条件(状態符号$10)後、2線直列インターフェースは停止条件を送出せずに再び同じ従装置または新しい従装置にアクセスできま す。再送開始条件は主装置がバスの制御を失わずに送信主装置、受信主装置間の切り替えを可能にします(訳注:原文では従装置 も含まれていますが、基本動作に対して不適切なため削除しました)。
図26-12. 送信主装置動作の形式と状態
受信従装置への転送成功
再送開始条件による次転送
従装置アドレス後の非確認応答受信
データ バイト後の非確認応答受信
アドレス バイトかデータ バイトでの バス競合調停敗退
調停敗退で自身の従装置呼び出し検出
A 08
S SLA W Data A P
18 28
Rs SLA W
R A P
A P
A/A A/A
A
主装置受信 20
10
30
38 38
78 68 B0
他の主装置転送 他の主装置転送
他の主装置転送 主装置送信
状態に従った従装置動作
主装置⇒従装置 従装置⇒主装置 Data A 何組かのデータと確認応答 nn 16進状態符号(TWSR) 表26-2. 送信主装置動作の状態符号 (注: TWSRの前置分周選択ビットは0の前提)
状態符号
(TWSR) TWDR操作 TWCR設定によるハードウェア動作
$08 開始条件送信 再送開始条件送信
X
$18
X X TWSTO TWINT TWEA
0 0
1 SLA+W送信 1
ACK受信
X X 0
0
1 1 直前の動作と
バスの状態
ソフトウェアの対応 TWCR設定 TWSTA
SLA+W設定 0 0 1 0 0
0 1
SLA+W送信、ACKかNACK受信
$10 SLA+W設定
SLA+R設定
SLA+W送信、ACKかNACK受信 SLA+R送信、受信主装置動作へ移行
データ設定 データ送信、ACKかNACK受信
再送開始条件送信 X
1 1
0
なし 停止条件送信、TWSTO=0
X
1 1
1 停止条件→開始条件送信、TWSTO=0
$20
X X 0
0
1 SLA+W送信 1
NACK受信
0 1
データ設定 データ送信、ACKかNACK受信
再送開始条件送信 X
1 1
0
なし 停止条件送信、TWSTO=0
X
1 1
1 停止条件→開始条件送信、TWSTO=0
$28
X X 0
0
1 データ バイト送信 1
ACK受信
0 1
データ設定 データ送信、ACKかNACK受信
再送開始条件送信 X
1 1
0
なし 停止条件送信、TWSTO=0
X
1 1
1 停止条件→開始条件送信、TWSTO=0
$30
X X 0
0
1 データ バイト送信 1
NACK受信
0 1
データ設定 データ送信、ACKかNACK受信
再送開始条件送信 X
1 1
0
なし 停止条件送信、TWSTO=0
X
1 1
1 停止条件→開始条件送信、TWSTO=0
SLA+W, データ バイトで
バス競合調停敗退 X
X
0 1
1 0
0 1
$38 なし バス開放、未指定従装置動作へ移行
バス開放時に開始条件送信
26.7.2. 受信主装置動作
受信主装置(MR)動作では何バイトかのデータが送信従装置から受信されます(次図をご覧ください)。主装置動作へ移行するには開始 条件が送出されなければなりません。それに続くアドレス パケットの形式が送信主装置(MT)またはMRのどちらへ移行すべきかを決めま す。SLA+Wが送信されるとMT動作へ移行し、SLA+Rが送信されるとMR動作へ移行します。本項で言及する全ての状態符号は前置 分周選択ビットが0か、または0で遮蔽されることが前提です。
図26-13. 受信主装置動作でのデータ転送
装置1 (受信主装置)
装置2
(送信従装置) 装置3 装置n R1 R2
VCC
SCL SDA
~ SCL
SDA
開始条件はTWCR=1x10x10x形式の値をTWI制御レジスタ(TWCR)に書くことによって送出されます。
・ TWI許可(TWCR.TWEN)ビットは2線直列インターフェース(TWI)を許可するために1を書かれなければなりません。
・ 開始条件生成許可(TWCR.TWSTA)ビットは開始条件を送出するために1を書かれなければなりません。
・ TWI割り込み要求(TWCR.TWINT)フラグはそこへ1を書くことによって解除(0)されなければなりません。
その後にTWIは2線直列バスを検査し、バスが開放になると直ぐに開始条件を生成します。開始条件が送出されてしまった後、TWINT フラグがハードウェアによって設定(1)され、TWSRの状態符号が$08になります(以降の状態符号表をご覧ください)。MR動作へ移行するに はSLA+Rが送信されなければなりません。これはTWDRにSLA+Rを書くことによって行います。その後、転送を継続するためにTWIN Tフラグは(そこへ1を書くことによって)解除(0)されるべきです。これはTWCR=1x00x10x形式の値をTWCRに書くことによって達成され ます。
SLA+Rが送信されて応答ビットが受信されてしまうと、TWINTが再び設定(1)され、TWSRの状態符号の数値が利用可能になります。主 装置動作で可能性のある状態符号は$38,$40,$48です。これら状態符号の各々に対する適切な動作は以降の状態符号表で詳述さ れます。ハードウェアによってTWINTフラグが設定(1)されると、受信したデータがTWDRから読めます。この手順は最後のバイトが受信され てしまうまで繰り返されます。最後のバイトが受信されてしまった後、受信主装置は最後に受信したデータ バイト後のNACK送信によって 送信従装置へ通知すべきです。この転送は停止条件または再送開始条件を生成することによって終了されます。再送開始条件は TWCR=1x10x10x形式の値を再びTWCRに書くことによって送出されます。停止条件はTWCR=1x01x10xを書くことによって生成され ます。
再送開始条件(状態符号$10)後、2線直列インターフェースは停止条件を送出せずに再び同じ従装置または新しい従装置にアクセスできま す。再送開始条件は主装置がバスの制御を失わずに送信主装置、受信主装置間の切り替えを可能にします(訳注:原文では従装置 も含まれていますが、基本動作に対して不適切なため削除しました)。
表26-3. 受信主装置動作の状態符号 (注: TWSRの前置分周選択ビットは0の前提) 状態符号
(TWSR) TWDR操作 TWCR設定によるハードウェア動作
$08 開始条件送信 再送開始条件送信
X
$38 X
X TWSTO TWINT TWEA
0 0
1 1 SLA+Rで調停敗退
またはNACK受信
X X 0
0
1 1 直前の動作と
バスの状態
ソフトウェアの対応 TWCR設定 TWSTA
SLA+R設定
0 0 1 0 0
0 1
SLA+R送信、ACKかNACK受信
$10 SLA+R設定
SLA+W設定
SLA+R送信、ACKかNACK受信 SLA+W送信、送信主装置動作へ移行
なし バス開放、未指定従装置動作へ移行
バス開放時に開始条件送信
$40 0
1 0
0
1 1 SLA+R送信
ACK受信
0
なし 0 データ受信、NACK応答
データ受信、ACK応答
$48
X X 0
1
1 SLA+R送信 1
NACK受信
1 0
再送開始条件送信
なし 停止条件送信、TWSTO=0
X
1 1
1 停止条件→開始条件送信、TWSTO=0
$50 0
1 0
0
1 1 データ バイト受信
ACK応答
0
データ取得 0 データ受信、NACK応答
データ受信、ACK応答 X
0 1
1 再送開始条件送信
X
1 1
0
データ取得 停止条件送信、TWSTO=0
データ バイト受信 NACK応答
X
1 1
1
$58
停止条件→開始条件送信、TWSTO=0 図26-14. 受信主装置動作の形式と状態
従装置からの受信成功
再送開始条件による次転送
従装置アドレス後の非確認応答受信
アドレス バイトかデータ バイトでの バス競合調停敗退
調停敗退で自身の従装置呼び出し検出
A 08
S SLA R Data A P
40 50
Rs SLA R
W A P
A A/A
A
主装置送信 48
10
38 38
78 68 B0
他の主装置転送 他の主装置転送
他の主装置転送 主装置受信
状態に従った従装置動作
主装置⇒従装置 従装置⇒主装置 Data A 何組かのデータと確認応答 nn 16進状態符号(TWSR) Data A
58
26.7.3. 送信従装置動作
送信従装置(ST)動作では下図で示されるように、何バイトかのデータが送信主装置へ送信されます。本項で言及する全ての状態符号 は前置分周選択ビットが0か、または0で遮蔽されることが前提です。
図26-15. 送信従装置動作でのデータ転送
装置1 (送信従装置)
装置2
(受信主装置) 装置3 装置n R1 R2
VCC
SCL SDA
~ SCL
SDA
ST動作を始めるにはTWI(従装置)アドレスレジスタ(TWAR)とTWI制御レジスタ(TWCR)が次のように初期化されなければなりません。
TWARの上位7ビット(TWAR.TWA6~0)は主装置によってアドレス指定される時に2線直列インターフェースが応答するアドレスです。TWARの 最下位(TWAR.TWGCE)ビットが1を書かれた場合、TWIは一斉呼び出し($00)に応答し、さもなければ一斉呼び出しアドレスを無視しま す。
TWCRはTWCR=0100010x形式の値を保持しなければなりません。TWENは2線直列インターフェース(TWI)を許可するために1を書かれ なければなりません。TWCR.TWEAは装置自身の従装置アドレスまたは一斉呼び出しアドレスの確認応答(ACK)を許可するために1を書 かれなければなりません。TWCR.TWSTAとTWCR.TWSTOは0を書かれなければなりません。
TWARとTWCRが初期化されてしまうと、TWIは自身の従装置アドレス(または許可ならば一斉呼び出しアドレス)とそれに続くデータ方向 ビットによってアドレス指定されるまで待機します。方向ビットが1(R)ならばTWIは送信従装置で動作し、さもなくば(0(W)ならば)受信従装 置へ移行されます。自身の従装置アドレスとRビットが受信されてしまった後、TWINTフラグが設定(1)され、TWSRから有効な状態符号が 読めます。この状態符号は適切なソフトウェア動作を決めるのに使用されます。各状態符号に対して行うべき適切な動作は以降の状態 符号表で詳述されます。ST動作はTWIが主装置動作の間で調停に敗れた場合にも移行されるかもしれません(状態符号$B0をご覧 ください)。
転送中にTWCR.TWEAビットが0を書かれると、TWIは転送の最後のバイトを送信します。受信主装置が最終バイト後にACKまたは NACKのどちらを送信するかによって状態$C0か$C8へ移行します。TWIはアドレス指定されていない従装置動作に切り替えられ、主 装置が転送を続ける場合、その主装置を無視します。従って受信主装置は直列データとして全て1を受信します。従装置が最後のバイ トを送信(TWEAが0で主装置からのNACKを予測)したとしても、主装置が(ACK送信によって)追加データ バイトを要求すると状態$C8へ 移行します。
TWCR.TWEAが0の間中、TWIは自身の従装置アドレスに応答しませんが、2線直列バスは未だ監視され、アドレス認証はTWEAの設定 (1)によって何時でも再開できます。これはTWEAビットがTWIを2線直列バスから一時的に隔離するのに使用できることを意味します。
アイドル動作を除く休止形態ではTWIへのクロック系がOFFにされます。TWEAビットが設定(1)されていると、このインターフェースはクロック元とし て2線直列バス クロック(SCL)を使用することにより、自身の従装置アドレスと一斉呼び出しに未だ確認応答できます。その後デバイスが休 止形態から起動し、TWIは起動中からTWINTフラグが(それへ1を書くことによって)解除(0)されるまでSCLクロックをLowに保ちます。その 後のデータ受信はAVRクロックが通常通り走行することで通常通りに行われます。AVRが長い起動時間に設定されていると、SCL信号線 が長時間Lowに保持され、他のデータ送信を阻止するかもしれないことに気付いてください。
注: (アイドル動作を除く)これらの休止形態から起動すると、2線直列インターフェース データ レジスタ(TWDR)はバスで渡す最後のバイトを反映 しません。