最近(2011.9.3)、流石にSH-2Aの特設ページの更新が減っている。そんな中、今更、シリアル・ダウンローダに戻ってみる。USBで遊んでいた時に触ったけど機械的にマージしただけで中身は見ていなかったので、復習である
それにしてもルネサスはUSBのサンプルソースを公開しない。シリアル・ダウンローダにソースを付けたのは何かの手違いとも思われる
また、近頃、インタフェース誌はそれマイコンとどういう関係?と思わせる記事が多い。まぁインタフェースという名前なので何をやっても良いけど、。RXマイコンの記事がもう少し有っても良いような・・・
先にも書いたけど、CDC Classの仕様書はさっぱり分からない(大体、絵・図が少ない。英語が分からなくても図ぐらいなら・・、シーケンスすら見当たらないのは意図不明。一体誰のための仕様書なの?)。ソースでも眺めて見るかと思ったけどUSB仮想シリアル・サンプル・プロジェクトを開けても、これもさっぱり??である。ところが「usb cdc class」で検索すると結構多くのページがヒットする。もっともSHマイコンに関するページは見当たらず、専らPICを利用したページが多い。サンプルソースもあるみたい。早速、ダウンロードしようとしたが、PICの開発環境を展開するのは気が重い。そもそも問題なのは、常識では理解できないSH-2AのUSBインタフェースなのだ。だから、PICのソースを展開しても解決にはならないと、思い、思いとどまった。
じゃ、意味ないじゃん!!
そーでもない。まず、対応必要なメッセージ(CDC Class Request)は5種類であることが分かった。そもそもPICでもターゲットにはなり得るのだから、そんなに難しい訳ない。先は長いが、少し元気が出てきた!
・Send Encapsulated Command
・Get Encapsulated Response
・Set Line Coding
・Get Line Coding
・Set Control Line State
「ターゲット」のページにある方法でUSB仮想シリアル・サンプル・プロジェクトを動かしましたウンともスンとも動きません?
自分で作っておきながら、原因がよく分からないので、動いた状態を固めておきます(ポチ環境:Windows 7, 64bit, TinyMonでロード)
・TinyMonで動作させるために、最適化リンカのセクションを変更して 1C000000h番地へロードします
・起動させると、USB機器を接続したときの「ピポッ!」って音がします
・まず、エンターキー押してください。(再度、ダウンロード待ちになりますが、ダウンロードはしないでください)
・2回目のエンターキーを押すとタイムアウト(30秒ぐらい)して、USB機器を取り外した時の「ポピッ!」
たった、それだけです
プロジェクト(2010年10月14日版ベース)
セクション定義のエクスポート.hsi
USB仮想シリアル・サンプル・プロジェクトは色んなバージョンがあり、リンクの名称もバラバラで本当疲れます。右側のダウンロードのリンクも元のページに寄って、飛び先が違うようで、まぁ他人のことは言えませんが、何とかしてよって感じです。このプロジェクトもワーニングが残ったままです
追って、内部トレースを追加してPCからどういうリクエストが来ているか見るように改造します
EP(エンドポイント)のReset処理は前から何か変だなと思っていましたが、やっと確信しました
随分と難しい事をしているので、今でも何やっているか理解出来ている訳ではないですが、USB_CFG_PIPETBLを1回しかスキャンしていないのです。
Get descriptorで取得した各Endpoint descriptorを初期化するのですが、Endpoint descriptorが都合良く、SH2AのPipe属性の順と一致するとは限らないのです。
なので、少なくともEPの数分はスキャンを繰り返しuser_table(EPの要件を満足するPIPE)を探す必要があります(難しすぎて、自分でも何言っているのか??)
確かではないですが、Pipeが使用中か否かも管理されていないような、・・・ Hubのサポートが遥かに遠のきました
USB_CFG_PIPETBL VendorDefEPTbl0[ ] = { { PIPE1, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDON | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 512 ) | BUF_NUMB( 8 ), USB_NONE, USB_NONE, D0USE, // D0DMA, 2011.02.19 }, { PIPE2, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDON | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 512 ) | BUF_NUMB( 16 ), USB_NONE, USB_NONE, D0USE, //***** D0DMA, *************************// }, { PIPE3, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDON | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 512 ) | BUF_NUMB( 24 ), USB_NONE, USB_NONE, D0USE, //***** D0DMA, *************************// }, { PIPE4, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDON | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 512 ) | BUF_NUMB( 32 ), USB_NONE, USB_NONE, D0USE, //***** D0DMA, *************************// }, { PIPE5, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDON | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 512 ) | BUF_NUMB( 40 ), USB_NONE, USB_NONE, D0USE, //***** D0DMA, *************************// }, { PIPE6, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDOFF | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 64 ) | BUF_NUMB( 4 ), USB_NONE, USB_NONE, CUSE, }, { PIPE7, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDOFF | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 64 ) | BUF_NUMB( 5 ), USB_NONE, USB_NONE, CUSE, }, { PIPE8, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDOFF | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 64 ) | BUF_NUMB( 6 ), USB_NONE, USB_NONE, CUSE, }, { PIPE9, /* TYPE / BFRE / DBLB / CNTMD / SHTNAK / DIR / EPNUM */ USB_NONE | USB_NONE | DBLBOFF | CNTMDOFF | USB_NONE | USB_NONE | USB_NONE, BUF_SIZE( 64 ) | BUF_NUMB( 7 ), USB_NONE, USB_NONE, CUSE, }, { /* Pipe end */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF } };
コメントをかく