- ベストアンサー
AKI-H8-USBについて
秋月のH8/3052FのUSB開発キットを使っています。 1.USBケーブルを接続しても認識されません。不明なデバイスというのであればわかるのですが、接続自体認識していないようです。どういったことが原因なのでしょうか? 2.キットに入っている説明書をそれぞれ一通り読みましたが、結局訳が分からずどういった手順を踏めばきちんと動作するのかがいまいち飲み込めませんでした・・・ 本当に初歩的な質問で申し訳ありません。 どなたかAKI-H8-USB開発キットを使ったことがある方は教えていただければ幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 そこまで理解されているなら、実はそんなに難しく考える必要はなかったりします。 何せ面倒くさいことはだいたいH8がやってくれるので、あなたはオイシイところを実装すれば良いのです。 下手な例え話ですが、リクエスト、レスポンスといったデータを「手紙」、デバイスを「あなたの家」、デバイスのUSBコントローラを「ポスト」、デバイス内で動くソフトウェアを「あなた」とします。 お話はUSBケーブルをホストとデバイスに接続した所から始まるのですが、家にはポストが最初から付いているものの、最初これには鍵がかかっていて、あなたは外界の様子を知ることができません。ホストの方でも鍵のかかったポストは相手にしません。 あなたはまずこの「鍵を開ける」事から始めます。(USBコントローラの初期設定) 鍵が開いた時点で、ホストとデバイス間での通信が可能となります。 そもそも、ホストがデバイスを認識してくれないのは、「あなたという存在に気づいていないから」であり、「通信ができないから」ではないのです。 例え話に戻りますが、首尾よく鍵が開くと、そのニュースはあっという間にホストに伝わります。 ニュースを聞いたホストは、早速あなたに手紙を書きます。「あんた誰?」と。 この手紙も、即座にあなたの家のポストに届きます。 手紙を受け取ったあなたは、「手紙をポストから取り出して」、「読んで内容を理解」した上で、 「返事を書いて」「ポストに返事を投函する」という事をしなければなりません。ここの部分を実装するわけです。 なお、JPとは違って、家のポストに投函しても、返事はちゃんとホストに届きます。 その後、あなたの返事を受け取ったホストは、次々と手紙を送りつけてきますので、あなたは先ほどの要領でそれら全てに正直に答えます。 一連の手紙のやり取りであなたの事を理解したホストは、次に「この人、もしかしてどこかで会ったことあるかな?」と考え始めます。 つまり、デバイスドライバがインストールされているかどうかです。 1.思い出した、あの人だ! → 該当デバドラをロード。使用可能状態へ 2.知らない人だ → 「不明なデバイス」表示 こんな感じだと思いますが、どうでしょうか。ますます意味不明だったらごめんなさい・・・。
その他の回答 (3)
- pyonmae
- ベストアンサー率64% (40/62)
こんにちは。 ご期待どおり、SetUpだのData0/1だのACK/NAKだのPIDの識別だのといったパケットレベルの処理は、全てH8がやってくれます。 「手紙」の例でいくと、封を切った状態で手紙が届くので、あなたはそれを読むだけです。 逆に、返事は便箋に書いて「出しといて」と言うだけで、あとはH8君が封筒に入れて宛名を書いて切手を貼ってホストに届けてくれます。 No.3の方が言われるように、パケットとトランザクションが混同されがちです。乱暴なやり方ですが、USBコントローラの初期化さえ正しくできていれば、PCに接続した時点で「何か」を受け取るはずです。(もちろん、ハードウェアが正しく作成されている事が大前提ですが)その「何か」の内容を調べる事で、H8君が一体何をしてくれたのか理解できると思います。 ブートモードについてですが、もう少し状況を詳しく書いて頂かないと原因が絞れません。(最初の質問でもそうでしたが) 相変わらずAKI-H8の事は知らないので、たぶん的外れだと思いますが、パッと思いつくのは以下のようなところです。 ・CPUのモードは正しくブートモードになっているか?(意外なDipSwの設定に左右されたりするので(FWEとか)、色々パチパチやってみましょう) ・どのポートにつないでいるか?(シリアル?USB?シリアルならどのチャンネルか?) ・PC側で、COMポートの指定を間違えていないか? ・ケーブルはクロス/ストレート間違えていないか? ・そもそもハードウェアは正しく実装されているか? 「AKI-H8 USB」でググると、トップに出てくるサイトに同じような問題を解決された方の記述があるようですが、これは違いますか?
お礼
返答が遅くなってすいません!! 流れはだいたい理解できましたし、とりあえずUSB通信のサンプルプログラムも動作させることができました。 ご回答本当にありがとうございました。
- bug_bug
- ベストアンサー率78% (36/46)
1.LCD表示等でダウンロードしたプログラムの動作確認は取れていますでしょうか。 2.キット購入直後からの流れは A.USBキット、3052ボードのパーツ実装。 B.サンプルプログラムダウンロード。 C.ホストPCにドライバをインストールし動作確認。 ここまで行ってボードに異常が無いかHWのテストを行います。 ココまで確認が取れないなら、USB開発以前の話です。 これ以降の話であれば、USBエニュメレーションに失敗してますので、 実装プログラムの検証ですね。サンプル動作プログラムからコンフィギュレーションディスクリプタを変更していたら変更内容の確認が必要かもしれません。 以下、簡易にUSB接続後の流れです。 1-1.デバイスがD信号線をLOWに引いて接続をホストに知らせる。 1-2.ホストはUSBエニュメレーションを開始。 1-3.ホストはターゲットを識別し、レジストリ情報からドライバーをロード 以下、1-2について簡易にUSBエニュメレーションの流れです。 ここはご存知の通りEndPoint0を使用したコントロール転送で行われます。 2-1.ホストはターゲットに対しコンフィギュレーションディスクリプタを一部要求する。 2-2.ターゲットはコンフィギュレーションディスクリプタを一部返答する。 2-3.ホストはターゲットに対し、アドレスを指定する。 2-4.ターゲットは指定されたアドレスを取り入れる。 2-5.ホストはターゲットに対し必要なディスクリプタを全部要求する。 2-6.ターゲットは必要なディスクリプタを全部返答する。 ここまでできれば、ホストPCにドライバがロードされUBSデバイスとして認識されます。症状から察するに、不明なデバイスとも表示されないのであれば、USBエニュメレーションが開始されていないものと思われます。 過去開発した実績のあるPCだった場合、ドライバ削除などでレジストリ情報に誤記があると何も起こらなかったりしますが、案外別UBSポートに接続するとあっさり認識したり。 USB習得時のコツですが、パケット単位のやりとりと、トランザクション単位のやりとりとの違いをしっかり意識して区別しないと混乱の元です。ターゲットの開発ではパケット単位のやりとりについてはUSBデバイスが担当してくれますのでトランザクションだけ意識する必要があります。 素人のたわごとですが、ご参考まで。
お礼
返事が遅くなってすいません!! あれからサンプルの動作は無事に確認できました。 デバイスとして認識されるまでの流れもなんとなく理解できました。 ご回答ありがとうございました。
- pyonmae
- ベストアンサー率64% (40/62)
AKI-H8は使用していませんが・・・。 「USBケーブルを接続」した時の状況が今ひとつ分かりませんが、もしかして買ってきてすぐにとにかくつないでみた、という事でしょうか。 (そうでないならこの回答は無視してください。) USBは、ケーブルをつなげば即通信ができるような甘いモノではありません。 普段何気なくPCにつないでいるUSBですが、ケーブルを接続した瞬間には、想像を遥かに上回る情報が交換されます。 簡単に言うと、ケーブルをホスト(PC)に挿すと、ホストからデバイス(H8)に「あんた誰?」と聞いてきます。 それに対して、デバイスは「私はxxxです」と答えます。 次に、ホストは「で?名前は?どこの人?何してる人?」などと矢継ぎ早に質問を浴びせ、デバイスはそれら全てに回答します。 こんなやり取りを経て、やっと初めて「不明なデバイス」と表示されるわけです。 まず、USBの通信プロトコルの勉強が必要です。(参考URL、その他ググって下さい) 1.ホストとデバイスでどのようなやり取りが行われるかを理解する 2.その上で、H8のUSBコントローラがどのような事を行ってくれるのかを理解する 3.上記を理解した上で、H8のUSBプログラムを実装する 事が必要かと思います。 1.が分かってきたら、トラ技のサイトにサンプルプログラムが落ちていると思いますので、探して参考にされてもよいと思います。
- 参考URL:
- http://www.picfun.com/
お礼
こんな初心者丸出しの質問に答えていただいて、ありがとうございます。 接続時にホストからのデバイス・リクエストがあり、そこでデバイスがディスクリプタを返すことでデバイスとして認識される。という解釈でよろしいのでしょうか。 参考書やサイトでの解説の1つ1つはまだ理解できるのですが、ケーブル接続からUSBデバイスとして認識されるまでの流れは?必要なもの(事)は?というとなんだか頭がこんがらがってしまいます・・・ そもそもケーブルをつないだだけの状態ではデバイスとして認識されないのだから、デバイス・リクエスト自体不可能なのでは・・・? と考えてしまいます。 私の学習が足りないのか解釈が間違っているのか、そのどちらかではあると思うのですが、よろしければご指摘お願いします。
お礼
いえいえ、pyonmaeさんの説明のおかげで全体の流れはだいたい理解できました。ありがとうございます。 ただいくつかまだ不明な点がありまして・・・ コントロール転送でのやりとりがどうもモヤモヤして理解しづらいのでそこを。とりあえず今の私の解釈はこんな感じです。 コントロール転送のセットアップ・トランザクションでホストがSetupパケット、DATA0(何を送信しているのかわからない!)を送信、デバイスはACKを返す。 その後のトランザクションでデバイス・リクエストとその応答がやりとりされ、すべてが終了したら(何をもって終了とするのか…?)ホストがデバイスを認識できるようになる・・・といった感じです。どうでしょうか? 実装の必要がある部分についてですが、そこにはパケットIDなどの解析も含まれているのでしょうか?できればここら辺の事までUSBコントーローラの方でやってくれないかな・・・という気持ちなのですがそれは期待しすぎですよね。。。 それともう1つ、これまた初心者丸出しのですがお聞きしてよろしいでしょうか? プログラム書き込みの際に出る「CPUからの応答がありませんでした」というエラーの原因としてはどのようなことが考えられるのでしょうか?ブートモードにするために必要なことは一応やっているつもりなのですがどうもうまくいかず・・・ USB通信についての勉強はするものの肝心のH8は動かせない、と言う状況が情けないながらもしばらく続いていまして。 何かご存知であれは教えていただければ助かります。