「USB CDC IN トランザクション(0) 」で受信した Get_Descriptor ( device ) に対するデータステージについて、経験したことを紹介します。 <PICデバイス=18F2550> ターゲットは秋月電子通商さんの USBマイコンボード 完成品(PIC18F2550) +α の RRP2550-0 です。
前回記事の最後に以下の SETUP ステージ を受信しています。
BDステータス = 34 ( bit2~bit5 がSETUPを示す)
受信バッファ = 80 06 00 01 00 00 12 00
2byte目 06 は Get_Descriptor()
4byte目 01 は 標準device
7byte目 12 は データ・ステージのbyte数( 18byte )
これに続くデータステージを完了するまでに試行錯誤を繰り返しましたが、以下の方法でデータステージ及び、ステータスステージを完了しています。 下図は標準デバイス・ディスクリプタとして準備したデータです。
エンドポイント0 のバッファ長に合わせて 8byte 毎にラベルを付けています。
処理は以下の手順で行います。
<<< 1~8byte目送信 >>>
先の Get_Descriptor ( device ) 転送完了割り込みの中で以下の通りバッファとBDステータス等を設定して次フレームの IN トランザクションを待ちます。
エンドポイント0 IN 側バッファに上図 usbdevdb に続く 8byte を転送
BD ステータスレジスター(アドレス404H) 値 C8H
BDアドレスカウンターレジスター(アドレス405H) 値 08H
BD ステータスレジスター(アドレス400H) 値 88H
BDアドレスカウンターレジスター(アドレス401H) 値 08H
UCON<PKTDIS> をクリア
<<< 9~16byte目送信 >>>
上のデータを読み出す IN トランザクションの転送完了割り込みの中で、以下の通りバッファとBDステータス等を設定して次フレームの IN トランザクションを待ちます。
エンドポイント0 IN 側バッファに上図 usbdevdb1 に続く 8byte を転送
BD ステータスレジスター(アドレス404H) 値 88H
BDアドレスカウンターレジスター(アドレス405H) 値 08H
BD ステータスレジスター(アドレス400H) 値 88H
BDアドレスカウンターレジスター(アドレス401H) 値 08H
UCON<PKTDIS> をクリア
<<< 17~18byte目送信 >>>
上のデータを読み出す IN トランザクションの転送完了割り込みの中で、以下の通りバッファとBDステータス等を設定して次フレームの IN トランザクションを待ちます。
エンドポイント0 IN 側バッファに上図 usbdevdb2 に続く 2byte を転送
BD ステータスレジスター(アドレス404H) 値 C8H
BDアドレスカウンターレジスター(アドレス405H) 値 02H
BD ステータスレジスター(アドレス400H) 値 88H
BDアドレスカウンターレジスター(アドレス401H) 値 08H
UCON<PKTDIS> をクリア
以上で、データステージを完了し、続くステータスステージは前々回同様に割り込み無しで完了します。 詳しくは前々回記事をご覧下さい。
次の SETUP ステージでは以下の通り Get_Descriptor ( config ) を受信しました。
BDステータス = 34 ( bit2~bit5 がSETUPを示す)
受信バッファ = 80 06 00 02 00 00 09 00
2byte目 06 は Get_Descriptor()
4byte目 01 は 標準構成( Configuration )
7byte目 09 は データ・ステージのbyte数
USB関連記事のインデックスは右記事の末尾にあります。→ USB CDC
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
空
「USB CDC IN トランザクション(1)」の次の記事なのに番号が小さくなったのには訳があります。 今回は前回記事で受信したSETUPステージ( Set_Address() )に対するステータスステージに当たる、空の IN トランザクションについて説明してみます。 空の意味で (0) です。 <PICデバイス=18F2550> ターゲットは秋月電子通商さんの USBマイコンボード 完成品(PIC18F2550) +α の RRP2550-0 です。
受信した Set_Address() は以下の通りでした。
BDステータス = 34 (bit2~bit5 がSETUPを示す)
受信バッファ = 00 05 02 00 00 00 00 00
2byte目 05 は Set_Address()
3byte目 02 は デバイス・アドレス
受信したら、エンドポイント0の OUT 側の再設定と、UCON<PKTDIS> クリアを行います。
Set_Address() はデータステージが無い為、次のフレームでは空の IN トランザクションに対応する必要があります。 この IN トランザクション完了の直後に、受信済みのデバイス・アドレスを UADDR に書き込むんで次の SETUP ステージを正常に受け取れるように備えます。
具体的には Set_Address() 受信直後に、空の IN トランザクションに応答する為に、エンドポイント0の IN 側に以下の設定をして転送完了割り込みを受けて、UADDR に受信していたデバイス・アドレスを書き込みます。
BD ステータスレジスター(アドレス404H) 値 C8H
BDアドレスカウンターレジスター(アドレス405H) 値 00H
Set_Address() 受信直後に、次の SETUP ステージに備えてエンドポイント0の OUT 側も忘れずに設定し、UCON<PKTDIS> をクリアします。
BD ステータスレジスター(アドレス400H) 値 88H
BDアドレスカウンターレジスター(アドレス401H) 値 08H
そして次の SETUP ステージで再び Get_Descriptor ( device ) を受信しました。
BDステータス = 34 ( bit2~bit5 がSETUPを示す)
受信バッファ = 80 06 00 01 00 00 12 00
2byte目 06 は Get_Descriptor()
4byte目 01 は 標準device
7byte目 12 は データ・ステージのbyte数
最初に受信した Get_Descriptor ( device ) と比べると7byte目の値が異なります。
USB CDC 実現の取り組みは長期化が予想される為、ブレッドボードを小型のものに変え、電源もPICkit3からの供給に切り替えました。 他の実験と切り離してじっくり取り組みたいと思います。
USB関連記事のインデックスは右記事の末尾にあります。→ USB CDC
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
受信した Set_Address() は以下の通りでした。
BDステータス = 34 (bit2~bit5 がSETUPを示す)
受信バッファ = 00 05 02 00 00 00 00 00
2byte目 05 は Set_Address()
3byte目 02 は デバイス・アドレス
受信したら、エンドポイント0の OUT 側の再設定と、UCON<PKTDIS> クリアを行います。
Set_Address() はデータステージが無い為、次のフレームでは空の IN トランザクションに対応する必要があります。 この IN トランザクション完了の直後に、受信済みのデバイス・アドレスを UADDR に書き込むんで次の SETUP ステージを正常に受け取れるように備えます。
具体的には Set_Address() 受信直後に、空の IN トランザクションに応答する為に、エンドポイント0の IN 側に以下の設定をして転送完了割り込みを受けて、UADDR に受信していたデバイス・アドレスを書き込みます。
BD ステータスレジスター(アドレス404H) 値 C8H
BDアドレスカウンターレジスター(アドレス405H) 値 00H
Set_Address() 受信直後に、次の SETUP ステージに備えてエンドポイント0の OUT 側も忘れずに設定し、UCON<PKTDIS> をクリアします。
BD ステータスレジスター(アドレス400H) 値 88H
BDアドレスカウンターレジスター(アドレス401H) 値 08H
そして次の SETUP ステージで再び Get_Descriptor ( device ) を受信しました。
BDステータス = 34 ( bit2~bit5 がSETUPを示す)
受信バッファ = 80 06 00 01 00 00 12 00
2byte目 06 は Get_Descriptor()
4byte目 01 は 標準device
7byte目 12 は データ・ステージのbyte数
最初に受信した Get_Descriptor ( device ) と比べると7byte目の値が異なります。
USB CDC 実現の取り組みは長期化が予想される為、ブレッドボードを小型のものに変え、電源もPICkit3からの供給に切り替えました。 他の実験と切り離してじっくり取り組みたいと思います。
USB関連記事のインデックスは右記事の末尾にあります。→ USB CDC
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
記事検索
最新記事
内部リンク
人気記事
アンケートに御協力下さい
外部リンク
アーカイブ
楽々PIC 宛てBlogMail
--- ご了承下さい ---
注意して記事を書いていますが、記事及びリンク先の情報による不利益について、一切責任を負い(負え)ません。
--- ご了承下さい ---
注意して記事を書いていますが、記事及びリンク先の情報による不利益について、一切責任を負い(負え)ません。
QRコード
アクセスカウンター
バナーを作成
プロフィール
jyosou_robot