コーディングは苦労したのですが、結局、USBの事は分からずじまい。トホホ・・
H8SX/1655で行ったサインカーブ描画、ターゲットをSH-2Aに変更してやってみます。Visual Studioの評価期間は終わっていて、PC側は修正できません。SH-2A側の動作を忠実にH8SX/1655に合わせる必要があります
VMWare Playerで動作させています。取り外し可能デバイスにベンダIDが表示されています
Descriptorをコピーすれば簡単に動くだろうと甘く見ていたのですが、無茶苦茶苦労しました。ベースは仮想シリアルのプロジェクトです。内部トレースをガンガンに入れて調査しました
・EPが2個しか起動されない(ControlとOutバルクのみ、InバルクのEPが起動されません)
・sin()がゴミを出力 ・・・ アホでした
PC側のトランジスタ特性測定用のダイアログはデバッグの事をよく考えて出来ています
![](https://image01.seesaawiki.jp/h/8/h8h8h8/c385fa9802cdf8b4.jpg)
VMWare Playerで動作させています。取り外し可能デバイスにベンダIDが表示されています
Descriptorをコピーすれば簡単に動くだろうと甘く見ていたのですが、無茶苦茶苦労しました。ベースは仮想シリアルのプロジェクトです。内部トレースをガンガンに入れて調査しました
・EPが2個しか起動されない(ControlとOutバルクのみ、InバルクのEPが起動されません)
・sin()がゴミを出力 ・・・ アホでした
PC側のトランジスタ特性測定用のダイアログはデバッグの事をよく考えて出来ています
9割方は内部トーレースを追加しただけで、実際に意味のある修正箇所は多くないです(たぶん。忘れてしまいました)
フォルダ構成もよく意味が分かっておらず、覚えている限り、残しておきます
(編集が面倒なのでモジュール毎に大見出しを付けます)
フォルダ構成もよく意味が分かっておらず、覚えている限り、残しておきます
(編集が面倒なのでモジュール毎に大見出しを付けます)
Copyright (C) 2009. Renesas Technology Corp., All Rights Reserved.
USB起動のP_ModeInit()をP_Main()へ持っていきました。 エニュメレーションの過程を内部トレースで見る為です
USB起動のP_ModeInit()をP_Main()へ持っていきました。 エニュメレーションの過程を内部トレースで見る為です
Copyright (C) 2009. Renesas Technology Corp., All Rights Reserved.
ベースにさせて頂いた、H8SXのソースはリングバッファから1コマンド分を切り出していました。SH-2A用のHEWなのでEC++のStringを使って切り出そうとしたのですが、メインC++とCのサブルーチン呼出がアドレス解決できずリンケージエラー。挫折しました
内部トレースを見る限り、スプリットされることもなく、1コマンド分読めていたので、切り出しを止めました
sin()は折角、FPUがあるので関数を使用しました。<math.h>をincludeしなくてもエラーになってなかったので、そのままにしていたのですが、実行時に不正値が却ってきました
ベースにさせて頂いた、H8SXのソースはリングバッファから1コマンド分を切り出していました。SH-2A用のHEWなのでEC++のStringを使って切り出そうとしたのですが、メインC++とCのサブルーチン呼出がアドレス解決できずリンケージエラー。挫折しました
内部トレースを見る限り、スプリットされることもなく、1コマンド分読めていたので、切り出しを止めました
sin()は折角、FPUがあるので関数を使用しました。<math.h>をincludeしなくてもエラーになってなかったので、そのままにしていたのですが、実行時に不正値が却ってきました
Copyright (C) 2009. Renesas Technology Corp., All Rights Reserved.
Hi-Speed Descriptorは使用しませんが、残しています。バッファサイズは変更しましたが、意味はないと思います
Hi-Speed Descriptorは使用しませんが、残しています。バッファサイズは変更しましたが、意味はないと思います
Copyright (C) 2009. Renesas Technology Corp., All Rights Reserved.
これも、バッファサイズを変更しましたが、意味はないと思います
これと、これを扱うモジュールは難解です
これも、バッファサイズを変更しましたが、意味はないと思います
これと、これを扱うモジュールは難解です
これのvoid P_ResetEP()。EPの特性をSet Configurationに従って設定しているのでしょうか?何をやっているのか全く理解できません。無理やり、3回ループするように修正しました(コントロール、Outバルク、Inバルクの3回?)コメントも少なく、好きになれません
Copyright (C) 2009. Renesas Technology Corp., All Rights Reserved.
Copyright (C) 2009. Renesas Technology Corp., All Rights Reserved.
Copyright (C) 2009. Renesas Technology Corp., All Rights Reserved.
トレースを入れただけです。但し、これのusb_write_buffer()
はエラーも返さないのですが。本来「case D1_FIFO_USE:status = usb_write_buffer_d1(pipe)」を通るべき処、「default: status = usb_write_buffer_c(pipe)」を通っていました。この為、PC側はエラーダイアログ(確か、「Access Violation・・」)が出現。この調査でハマりました。疲れた
トレースを入れただけです。但し、これのusb_write_buffer()
USB_U16 usb_write_buffer(USB_U16 pipe) { USB_U16 status; USB_U16 usefifo; // int i; // Debug // const char fmt[]= // Debug // "\nusb_write_buffer(): FIFO=xxxx, status=xxxx\n"; // 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 // 0 1 2 3 4 5 6 7 8 char buff[128]; // Debug PipeIgnore[pipe] = 0; /* Ignore count clear */ usefifo = (USB_U16)(PipeTbl[pipe] & FIFO_USE); switch(usefifo){ case D0_FIFO_USE: status = usb_write_buffer_d0(pipe); break; case D1_FIFO_USE: status = usb_write_buffer_d1(pipe); break; // case D0_FIFO_DMA: // status = usb_write_dma_d0(pipe); // break; // case D1_FIFO_DMA: // status = usb_write_dma_d1(pipe); // break; default: status = usb_write_buffer_c(pipe); break; }; 略 // ***** Debug Print ***** // for ( i=0; fmt[i] != 0x00; i++) buff[i] = fmt[i]; // Debug // buff[i] = 0x00; // Debug // h2c( (char *)&usefifo, &buff[26], 2 ); // Debug // h2c( (char *)&status, &buff[39], 2 ); // Debug // trc_put(buff); // Debug return status; /* End or Err or Continue */ }
はエラーも返さないのですが。本来「case D1_FIFO_USE:status = usb_write_buffer_d1(pipe)」を通るべき処、「default: status = usb_write_buffer_c(pipe)」を通っていました。この為、PC側はエラーダイアログ(確か、「Access Violation・・」)が出現。この調査でハマりました。疲れた
コメントをかく