USB ホストコントローラ 概要

プロセッサの周辺機能として実装されることを前提と します。

プロセッサは USB 通信に関してはデータ転送に集中し 通信の実行に当たってはホストコントローラがそのほ とんどを自動的に行うようにします。

ホストコントローラはプロセッサに対して次のことを 行います。

プロセッサは通信の設定を行いホストコントローラの メモリにデータを転送してから通信を起動して通信の 終了を待つ繰り返しになります。

構成

FG05L21B.jpg(26515 byte)

コントローラは手続きとして提供されます。転送デー タを格納するメモリをコントローラ内に実装する場合 は図のようなチップになります。


データ転送

プロセッサがホストコントローラにデータ転送をさせ るには予定表にデータ転送を割り当てる必要がありま す。 USB ではデータ転送の間隔や転送量を保証する必要が ありますが予定表によってこれを実現します。

FG05J13C.jpg(12359 byte)

予定表の実際は上図です。 フレームは USB の呼称ですがセグメントとチャネルは 当コントローラ独自の名称と意味付けです。

USB ではフレームを単位にデータ転送を行います。 ホストコントローラはこれを8分割してそのひとつをセ グメントとします。 セグメントは指定枠であり実体を割り当てないとデー タ転送は行われません。

セグメントに割り当てる実体とはチャネルのことです 。 チャネルはエンドポイントとその情報を持っています 。 これはプロセッサの通信設定で設置されるものです。

番号の若いセグメント位置のチャネルからデータ転送 されます。 ホストコントローラは割り当てられたチャネルのデー タ量がフレームに納まることを検査していません、プ ロセッサはこれを考慮してチャネルの割り当てを行い ます。

レジスタ

ホストコントローラのレジスタは図のようになってい ます。

一般レジスタ

各レジスタは8ビットで USB の端子を8個、チャネルを 8個もてます。

FG05H24A.jpg(32475 byte)
通信要求レジスタ

チャネルを指定して通信の開始を要求します。 ビットの位置でチャネルを指定します。最下位はチャ ネル0で最上位はチャネル7です。

通信済みレジスタ

該当チャネルのビット位置にチャネルの通信が終了し たことを示します。 ビット位置は最下位はチャネル0で最上位はチャネル7 です。

接続検出レジスタ

該当端子のビット位置にデバイスが接続されたことを 示します。 ビット位置は最下位は端子0で最上位は端子7です。

切断検出レジスタ

該当端子のビット位置のデバイスが切断されたことを 示します。 ビット位置は最下位は端子0で最上位は端子7です。

割り込みレジスタ

割り込みの許可とマスクなどの割り込み制御が上位4ビ ットにあります。 割り込み元を下位4ビットに示します。

チャネル選択レジスタ

チャネルレジスタで操作対象にするチャネルの番号を 指定します。

端子選択レジスタ

セグメントレジスタで操作対象にする端子の番号を指 定します。

データレジスタ

指定したチャネルの送信データを書き込んだり受信デ ータを読み取ったりします。

下ポイントレジスタ

各種ポインタの操作と下位のデータポインタの読み出 しを行います。

上ポイントレジスタ

上位のデータポインタの読み出しを行います。

チャネルレジスタ

FG05J13A.jpg(22220 byte)

データ転送の対象は端子とその先にあるデバイスのエ ンドポイントです。 エンドポイントの通信の仕様に基づいてデータ転送を 行いますが、これらの情報をチャネルレジスタに登録 します。


CHR0

データ転送の対象の端子とその先にあるエンドポイン トの番号を指定します。

CHR1

インタラプト転送での転送間隔を指定します。 この指定値はエンドポイントの通信仕様に基づきます 。

インタラプト転送以外では本レジスタ値は使われませ ん。

CHR2
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

数値は代表値を設定します。



CHR3

Token パケットに使うデバイスのアドレスを設定しま す。

CHCNR

パケット数 はコントローラの動作には影響を与えません。 コントローラは該当チャネルのトランザクションが終 るとこの数値を減数します。

Token選択 はホストからデバイスのデータ転送する場合に Token を SETUP か OUT のどちらかに選択します。 SETUPはコントロール転送の場合にだけ使います。

結果
ACK 1
NAK 2
STALL 3
タイムアウト 4
ステータス
ステージ
5

通信結果 は該当チャネルの最近のトランザクションの結果を示 します。



セグメントレジスタ

FG05J13B.jpg(21577 byte)

端子は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個のレジスタを持っています。 操作できるのは端子選択レジスタで選択された端子の レジスタです。