UPWE 1 UPWE 0 UPDRV 1 UPDRV 0 - - DPI DMI
21. USB装置動作
21.9. 分離 (切り離し)
USB装置制御(UDCON)レジスタの分離(DETACH)ビットのリセット値は 1です。
単にDETACHビットを設定(1)し、そして解除(0)することによって装 置を再列挙(再認識)することが可能です(信号線放電時間を考慮 しなければなりません)。
・ USB装置制御器が全速(Full-speed)動作の場合、DETACHビッ トの設定(1)はD+上のプルアップを切断します。その後のDETACH ビットの解除(0)はD+上のプルアップを接続します。
図21-3. 全速動作での装置分離
分離(Detach)、
その後の取り付け(Attach) EN=1
DETACH=1 (UDCON.0)
D+
D-UVREF
EN=1
DETACH=0 (UDCON.0)
D+
D-UVREF
21.10. 遠隔起動復帰
遠隔起動復帰(Remote Wake-up: または上方向再開(Upstream resume))要求は、装置によって自発的に送ることが許された唯一の 操作です。とにかく、それを行うため、装置は最初にホストからDEVICE_REMOTE_WAKEUP要求が受信されるべきです。
・ 最初にUSB制御器は信号線の休止(Suspend)状態を検知しなければなりません。遠隔起動復帰は休止(Suspend)割り込み(SUSPI)フ ラグが設定(1)されている場合にだけ送ることができます。
・ ファームウェアはその後に上方向再開(Upstream resume)列を送るためにUSB装置制御(UDCON)レジスタの遠隔起動(RMWKUP)ビットを 設定(1)できます。これはUSB信号線の5ms非活性後、制御器によって自動的に行われます。
・ 制御器が上方向再開(Upstream resume)送信を始めると、上方向再開割り込み(UPRSMI)フラグが設定(1)され、(許可されていれば) 割り込みが起動されます。SUSPIが設定(1)されていた場合、SUSPIはハードウェアによって解除(0)されます。
・ 上方向再開(Upstream resume)の最後でRMWKUPビットがハードウェアによって解除(0)されます。
・ 制御器がホストからの良好な再開終了(End Of Resume)を検知すると、(許可されていれば)再開終了割り込み(EORSMI)が起動され ます。
21.11. 不能応答
(STALL)要求
各エンドポイントに対する不能応答(STALL)管理は2ビット(と1フラグ)を使用して行われます。
・ STALLRQ (不能応答要求(STALL Request)許可)
・ STALLRQC (不能応答要求(STALL Request)禁止)
・ STALLEDI (不能応答送信(STALL sent)割り込み)
次の要求で不能応答(STALL)ハンドシェークを送るにはエンドポイントX制御(UECONX)レジスタのSTALLRQビットが設定(1)されなければなり ません。後続する全ての要求はSTALLRQCビットが設定(1)されるまで、不能応答(STALL)でハンドシェークされます。
STALLRQCの設定(1)はSTALLRQビットを自動的に解除(0)します。STALLRQCビットもソフトウェアによって設定(1)された後、ハードウェアに よって直ちに解除(0)されます。従ってファームウェアはこのビットを決して設定(1)として読まないでしょう。
不能応答(STALL)ハンドシェークが送られる度にエンドポイントX割り込み要求(UEINTX)レジスタのSTALLEDIフラグがUSB制御器によって設 定(1)され、(許可されていれば)エンドポイントn(=X)割り込み(EPINTn)が起動されます。
到着パケットは破棄されます(OUTデータ受信割り込み要求(RXOUTI)と読み書き可(RWAL)フラグは設定(1)されません)。
130
ATmega8U2/16U2/32U2
21.11.1. 制御エンドポイントに対する特別な考慮 SETUP要求は常に肯定応答(ACK)で応答されます。
不能応答(STALL)要求が制御エンドポイントで設定され、SETUP要求が起きると、そのSETUP要求はACKで応答されなければならず、
不能応答(STALL)ハンドシェーク要求(STALLRQ)ビットと不能応答(STALL)ハンドシェーク送信完了割り込み要求(STALLEDI)フラグは自動的 にリセット(=0)されます(SETUP受信割り込み要求(RXSTPI)=1,送信可割り込み要求(TXINI)=0,不能応答(STALL)ハンドシェーク送信完了割 り込み要求(STALLEDI) =0,...)。
この管理は列挙管理処理を簡単にします。命令が未支援または異常を含む場合、ファームウェアは不能応答(STALLRQ)ビットを設定(1)し て次のSETUP要求を待つ主作業へ戻ることができます。
この機能はGET_DESCRIPTORに対する追加状態送信し得る第8節の検査に適合します。ファームウェアは状態受信後、直ちに不能応答 要求(STALLRQ)ビットを設定(1)します。全ての追加状態は以降のSETUP要求まで、自動的に不能応答(STALL)にされます。
21.11.2. 不能応答(STALL)ハンドシェークと再試行機構
再試行機構は不能応答(STALL)ハンドシェークよりも高い優先順位を持ちます。不能応答(STALL)ハンドシェークは不能応答(STALL)ハンド シェーク要求(STALLRQ)ビットが設定(1)され、且つ再試行の必要がない場合に送信されます。
21.12. 制御エンドポイント管理
SETUP要求は常に肯定応答(ACK)で応答されます。新規のSETUPパケットが受信されると、(許可されているならば)SETUP受信割り込 み要求(RXSTPI)が起動されます。OUT受信割り込み要求(RXOUTI)は起動されません。
エンドポイントX割り込み要求(UEINTX)レジスタのFIFO制御(FIFOCON)ビットと読み書き可(RWAL)フラグは制御エンドポイントに無関係です。
従ってファームウェアはこのエンドポイントでそれらを決して使用してはなりません。読むとそれらの値は常に0です。
制御エンドポイントは以下のビットによって管理されます。
・ 新規SETUPパケットが受信されると、RXSTPIが設定(1)されます。パケットの応答とエンドポイント バンクの解除のため、これはファームウェアに よって解除(0)されるべきです。
・ 新規OUTデータが受信されると、RXOUTIが設定(1)されます。パケットの応答とエンドポイント バンクの解除のため、これはファームウェアに よって解除(0)されるべきです。
・ バンクが新規INパケット受け入れ準備可の時に送信可割り込み要求(TXINI)が設定(1)されます。パケットの送信とエンドポイント バンクの解 除のため、これはファームウェアによって解除(0)されるべきです。
制御エンドポイントは割り込みで管理されるのではなく、単に状態ビットのポーリングによって管理されるべきです。
21.12.1. 制御出力
次図は制御出力転送を示します。状態段階中、制御器は最初のIN指示票(トークン)で否定応答(NAK)を送信する必要はありません。
・ ファームウェアが読まなければならない記述子の正確なバイト数を知っているなら、その後の状態段階が予測でき、次のIN指示子に対し て0長パケット(ZLP)を送信できます。
・ またはバイトを読み、全バイトがホストによって送信されてしまったことを知らせる、NAK(否定応答)INパケット受信割り込み要求(NAKINI) のポーリングができ、処理単位(Transaction)は既に状態段階です。
図21-4. 制御出力の流れ
SETUP OUT IN
設定(Setup)段階 データ(Data)段階 状態(Status)段階
OUT IN
HW↑ NAK
HW↑ HW↑
↓SW
↓SW ↓SW
↓SW USB信号線
RXSTPI RXOUTI TXINI
21.12.2. 制御入力
次図は制御入力転送を示します。USB制御器はCPUとホストから同時に起こる書き込み要求を管理しなければなりません。
図21-5. 制御出力の流れ
SETUP IN OUT
設定(Setup)段階 データ(Data)段階 状態(Status)段階
IN OUT
HW↑ NAK
HW↑
HW↑
↓SW
↓SW
↓SW USB信号線
RXSTPI RXOUTI
TXINI ↓SW HW↑
ホスト書き込み許可 CPU書き込み許可
否定応答(NAK)ハンドシェークが状態段階命令の最初で常に生成されます。
制御器が状態段階を検知すると、CPUによって書かれた全データが消去され、送信可割り込み要求(TXINI)の解除(0)は無効です。
ファームウェアは送信が完了か、または受信が完了かを調べます。
OUT再試行は常に肯定応答(ACK)で応答されます。この受信は次の通りです。
・ OUT受信割り込み要求(RXOUTI)フラグが設定(1)されます。 (OUTデータ受信)
・ 送信可割り込み要求(TXINI)フラグが設定(1)されます。 (データ送信、新規データ受け入れ可) ソフトウェアでの手順は次の通りです。
・ 送信可状態設定
・ 待機 (送信完了または受信完了)
・ 受信完了ならフラグ解除後復帰、送信完了なら継続へ
一旦OUT状態段階が受信されてしまうと、USB制御器はSETUP要求を待ちます。SETUP要求は他の何れの要求よりも高い優先順位 を持ち、肯定応答(ACK)で応答しなければなりません。これはSETUPが受信された時に、FIFOがリセットされ、他の何れのフラグも解除 (0)されるべきことを意味します。
警告: バイト計数器は0長OUTパケットが受信された時にリセットされます。ファームウェアはこれに充分注意しなければなりません。
21.13. OUTエンドポイント管理
OUTパケットはホストによって送られます。受け取りを知らせる、または空でないバンクの全てのデータはCPUによって読むことができます。
21.13.1. 概要
エンドポイントが先に形成設定されなければなりません。
現在のバンクが一杯になる毎にOUT受信割り込み要求(RXOUTI)とFIFO制御(FIFOCON)ビットが設定(1)されます。これはOUT受信割 り込み許可(RXOUTE)ビットが設定(1)なら、割り込みを起動します。ファームウェアはRXOUTIビットの解除(0)によってUSB割り込みに応答 できます。ファームウェアは現在のバンクを開放するためにデータを読み、FIFOCONビットを解除(0)してください。OUTエンドポイントが2重バンク で構成されている場合、FIFOCONビットの解除(0)は次のバンクに切り替えます。そしてRXOUTIとFIFOCONビットは新しいバンクの状態 に応じてハードウェアよって更新されます。
RXOUTIは常にFIFOCONの解除(0)に先立って解除(0)されるべきです。
読み書き可(RWAL)フラグは常に現在のバンクの状態を反映します。このフラグはファームウェアがバンクからデータを読める時に設定(1)され、
バンクが空の場合にハードウェアによって解除(0)されます。
図21-6. 1つのOUTデータ バンク例
OUT DATA (バンク0へ) ACK OUT ACK
HW↑
HW↑
↓SW
↓SW RXOUTI
FIFOCON
↓SW HW↑
CPUからのバンク0 データ読み出し
DATA (バンク0へ)
CPUからのバンク0 データ読み出し NAK
図21-7. 2つのOUTデータ バンク例
OUT DATA (バンク0へ) ACK OUT ACK
HW↑
HW↑
↓SW
SW↓
RXOUTI FIFOCON
↓SW HW↑
CPUからのバンク0 DATA (バンク1へ)
CPUからのバンク1
132
ATmega8U2/16U2/32U2
21.13.2. 詳細内容
データは以下の流れに従い、CPUによって読まれます。
・ ホストによってバンクが満たされると、エンドポイントn(=X)割り込み(EPINTn)が起動され、許可(OUT受信割り込み許可(RXOUTE)=1)され ていればOUT受信割り込み要求(RXOUTI)フラグが設定(1)されます。CPUはソフトウェア構造に応じてRXOUTIフラグまたはFIFO制御 (FIFOCON)ビットのポーリングもできます。
・ CPUはRXOUTIの解除(0)によって割り込みに応答します。
・ CPUは現在のバンク内のバイト数(N)を読めます(N=BYCT)。
・ CPUは現在のバンクからデータを読めます(UEDATXのN回読み出し)。
・ 全データが読まれる(以下条件)と、CPUはFIFOCONビットの解除(0)によってバンクを開放できます。
・ UEDATXのN回読み出し後
・ 読み書き可(RWAL)フラグがハードウェアによって解除(0)された直後
エンドポイントが2つのバンクを使用する場合、現在のバンクがCPUによって読まれる一方、2つ目のバンクがホストによって満たされ得ます。
その後、CPUがFIFOCONを解除(0)すると、次(2つ目)のバンクが既に(読み出し)の準備が整っているかもしれず、(その場合、)RXOUT Iが直ちに設定(1)されます。
21.14. INエンドポイント管理
INパケットはホストからのIN要求でUSB装置制御器によって送られます。受け取りを知らせる、または一杯でないバンクの全てのデータは CPUによって書くことができます。
21.14.1. 概要
エンドポイントが先に形成設定されなければなりません。
21.14.1.1. "手動"動作
現在のバンクが自由になると、ハードウェアによって送信可割り込み要求(TXINI)が設定(1)されます。これは送信可割り込み許可(TXINE) ビットが設定(1)なら、割り込みを起動します。FIFO制御(FIFOCON)ビットが同時に設定(1)されます。CPUはFIFO内にデータを書き、デー タの送信をUSB制御器に許すためにFIFOCONビットを解除(0)してください。INエンドポイントが2重バンクで構成されている場合、これは次 のバンクへの切り替えも行います。TXINIとFIFOCONビットは次のバンクの状態に関してハードウェアよって更新されます。
TXINIは常にFIFOCONの解除(0)に先立って解除(0)されるべきです。
読み書き可(RWAL)フラグは常に現在のバンクの状態を反映します。このビットはファームウェアがバンクへデータを書ける時に設定(1)され、バン クが一杯の場合にハードウェアによって解除(0)されます。
図21-8. 1つのINデータ バンク例
IN DATA (バンク0から) ACK IN
HW↑
HW↑
↓SW
↓SW TXINI
FIFOCON
↓SW HW↑
CPUからのバンク0 データ書き込み
DA
CPUからのバンク0 データ書き込み NAK
HW↑ ↓SW
図21-9. 2つのINデータ バンク例
IN DATA (バンク0から) ACK IN ACK
HW↑
HW↑
↓SW
SW↓
TXINI FIFOCON
↓SW HW↑
CPUからのバンク0 データ書き込み
DATA (バンク1から)
CPUからのバンク1 データ書き込み HW↑ ↓SW
ACK
SW↓ CPUからのバンク0
データ書き込み
HW↑
HW↑ SW↓ HW↑
21.14.2. 詳細内容
データは以下の流れに従い、CPUによって書かれます。
・ バンクが空のとき、エンドポイントn(=X)割り込み(EPINTn)が起動され、許可(送信可割り込み許可(TXINE)=1)されていれば送信可割り込 み要求(TXINI)が設定(1)されます。CPUはソフトウェア構造の選択に応じてTXINIまたはFIFO制御(FIFOCON)のポーリングもできます。
・ CPUはTXINIの解除(0)によって割り込みに応答します。
・ CPUは現在のバンク内にデータを書けます(UEDATXの書き込み)。
・ 全データが書かれる(以下条件)と、CPUはFIFOCONの解除(0)によってバンクを開放できます。
・ UEDATXのN回書き込み後
・ 読み書き可(RWAL)フラグがハードウェアによって解除(0)された直後
エンドポイントが2つのバンクを使用する場合、現在のバンクがCPUによって書かれる一方、2つ目のバンクがホストによって読まれ得ます。そ の後、CPUがFIFOCONを解除(0)すると、次(2つ目)のバンクが既に準備が整っている(空)かもしれず、(その場合、)TXINIが直ちに設 定(1)されます。
21.14.3. 失敗中止(Abort)
いくつかの状態でホストによって失敗中止(Abort)段階が生成され得ます。
・ 制御転送でIN段階中に0長データOUTパケットが受信された場合
・ 等時(Isochronous)転送に於いてINエンドポイントでのIN段階中にOUTエンドポイントでの0長データOUTパケットが受信された場合
・ その他 ...
バンク消去(KILLBK)ビットは最後に書かれたバンクを消す(無効にする)のに使用されます。この失敗中止を管理する最良の方法は次の 操作を実行することです。
図21-10. 失敗中止の流れ図
エンドポイント失敗中止(Abort)
UEIENXレジスタのTXINE=0 TXINI割り込み禁止
失敗中止(Abort)は何も送ってはならないことを 意味し、どのバンクも動作中でないという事実に 基づきます。
最後に書かれたバンクを消去(無効化)
無効化処置完了待機 UESTA0X
レジスタのNBUSYBK1,0
=00 ? YES
NO
失敗中止(Abort)実行終了
エンドポイント リセット UEINTXレジスタのKILLBK=1
UEINTXレジスタ のKILLBK=1 ?
YES NO
21.15. 等時