プロセッサの周辺機能として実装されることを前提と します。
プロセッサは USB 通信に関してはデータ転送に集中し 通信の実行に当たってはホストコントローラがそのほ とんどを自動的に行うようにします。
ホストコントローラはプロセッサに対して次のことを 行います。
プロセッサは通信の設定を行いホストコントローラの メモリにデータを転送してから通信を起動して通信の 終了を待つ繰り返しになります。
コントローラは手続きとして提供されます。転送デー タを格納するメモリをコントローラ内に実装する場合 は図のようなチップになります。
プロセッサがホストコントローラにデータ転送をさせ るには予定表にデータ転送を割り当てる必要がありま す。 USB ではデータ転送の間隔や転送量を保証する必要が ありますが予定表によってこれを実現します。
予定表の実際は上図です。 フレームは USB の呼称ですがセグメントとチャネルは 当コントローラ独自の名称と意味付けです。
USB ではフレームを単位にデータ転送を行います。 ホストコントローラはこれを8分割してそのひとつをセ グメントとします。 セグメントは指定枠であり実体を割り当てないとデー タ転送は行われません。
セグメントに割り当てる実体とはチャネルのことです 。 チャネルはエンドポイントとその情報を持っています 。 これはプロセッサの通信設定で設置されるものです。
番号の若いセグメント位置のチャネルからデータ転送 されます。 ホストコントローラは割り当てられたチャネルのデー タ量がフレームに納まることを検査していません、プ ロセッサはこれを考慮してチャネルの割り当てを行い ます。
ホストコントローラのレジスタは図のようになってい ます。
各レジスタは8ビットで USB の端子を8個、チャネルを 8個もてます。
チャネルを指定して通信の開始を要求します。 ビットの位置でチャネルを指定します。最下位はチャ ネル0で最上位はチャネル7です。
該当チャネルのビット位置にチャネルの通信が終了し たことを示します。 ビット位置は最下位はチャネル0で最上位はチャネル7 です。
該当端子のビット位置にデバイスが接続されたことを 示します。 ビット位置は最下位は端子0で最上位は端子7です。
該当端子のビット位置のデバイスが切断されたことを 示します。 ビット位置は最下位は端子0で最上位は端子7です。
割り込みの許可とマスクなどの割り込み制御が上位4ビ ットにあります。 割り込み元を下位4ビットに示します。
チャネルレジスタで操作対象にするチャネルの番号を 指定します。
セグメントレジスタで操作対象にする端子の番号を指 定します。
指定したチャネルの送信データを書き込んだり受信デ ータを読み取ったりします。
各種ポインタの操作と下位のデータポインタの読み出 しを行います。
上位のデータポインタの読み出しを行います。
データ転送の対象は端子とその先にあるデバイスのエ ンドポイントです。 エンドポイントの通信の仕様に基づいてデータ転送を 行いますが、これらの情報をチャネルレジスタに登録 します。
データ転送の対象の端子とその先にあるエンドポイン トの番号を指定します。
インタラプト転送での転送間隔を指定します。 この指定値はエンドポイントの通信仕様に基づきます 。
インタラプト転送以外では本レジスタ値は使われませ ん。
I/O | 転送形式 | 意味 |
---|---|---|
- | 0 | コントロール転送 |
入出力 | 1 | インタラプト転送 |
〃 | 2 | バルク転送 |
〃 | 3 | アイソクロナス転送 |
IOを1にしたときホストからデバイスに向けてのデータ 転送になります。 IOを0にしたときデバイスからホストへのデータ転送に なります。
転送形式の選択は表のようになります。
代表値 | 数値 | 代表値 | 数値 | 代表値 | 数値 |
---|---|---|---|---|---|
0 | 0 | 4 | 8 | 8 | 128 |
1 | 1 | 5 | 16 | 9 | 256 |
2 | 2 | 6 | 32 | 10 | 512 |
3 | 4 | 7 | 64 | 11 | 1024 |
数値は代表値を設定します。
Token パケットに使うデバイスのアドレスを設定しま す。
パケット数 はコントローラの動作には影響を与えません。 コントローラは該当チャネルのトランザクションが終 るとこの数値を減数します。
Token選択 はホストからデバイスのデータ転送する場合に Token を SETUP か OUT のどちらかに選択します。 SETUPはコントロール転送の場合にだけ使います。
結果 | 値 |
---|---|
ACK | 1 |
NAK | 2 |
STALL | 3 |
タイムアウト | 4 |
ステータス ステージ |
5 |
通信結果 は該当チャネルの最近のトランザクションの結果を示 します。
端子は1msの時間に分割されてそのひとつがフレームで す。 ホストコントローラはフレームを8分割してチャネルを 割り当てる対象にします。
図は端子ひとつ分のセグメントレジスタです。
rs | 種類 | |
---|---|---|
5 | 4 | |
0 | 0 | 一般レジスタ |
0 | 1 | チャネルレジスタ |
1 | 0 | セグメントレジスタ |
1 | 1 |
レジスタを選択するビットは6個あります。 上位の2ビットがレジスタの大枠を分けます。
rs | レジスタ | ||||
---|---|---|---|---|---|
3 | 2 | 1 | 0 | ||
0 | 0 | 0 | 0 | REQR | 通信要求レジスタ |
0 | 0 | 0 | 1 | RDYR | 通信済みレジスタ |
0 | 0 | 1 | 0 | DETAR | 接続検出レジスタ |
0 | 0 | 1 | 1 | DETDR | 切断検出レジスタ |
0 | 1 | 0 | 0 | IR | 割り込みレジスタ |
0 | 1 | 0 | 1 | CHSEL | チャネル選択レジスタ |
0 | 1 | 1 | 0 | TMSEL | 端子選択レジスタ |
0 | 1 | 1 | 1 | DATA | データレジスタ |
1 | 0 | 0 | 0 | POINT | ポイントレジスタ |
rs | レジスタ | ||||
---|---|---|---|---|---|
3 | 2 | 1 | 0 | ||
0 | 0 | 0 | 0 | CHR0 | 設定レジスタ0 |
0 | 0 | 0 | 1 | CHR1 | 設定レジスタ1 |
0 | 0 | 1 | 0 | CHR2 | 設定レジスタ2 |
0 | 0 | 1 | 1 | CHCNR | コントロールレジスタ |
ひとつのチャネルは4個のレジスタを持っています。 操作できるのはチャネル選択レジスタで選択されたチ ャネルのレジスタです。
rs | レジスタ | ||||
---|---|---|---|---|---|
3 | 2 | 1 | 0 | ||
0 | 0 | 0 | 0 | SEGR0 | レジスタ0 |
0 | 0 | 0 | 1 | SEGR1 | レジスタ1 |
0 | 0 | 1 | 0 | SEGR2 | レジスタ2 |
0 | 0 | 1 | 1 | SEGR3 | レジスタ3 |
0 | 1 | 0 | 0 | SEGR4 | レジスタ4 |
0 | 1 | 0 | 1 | SEGR5 | レジスタ5 |
0 | 1 | 1 | 0 | SEGR6 | レジスタ6 |
0 | 1 | 1 | 1 | SEGR7 | レジスタ7 |
ひとつの端子は8個のレジスタを持っています。 操作できるのは端子選択レジスタで選択された端子の レジスタです。