rx111におけるCDCドライバを使用したFTDIチップ搭載デバイスとのシリアル通信について

以下に状況

私は今、rx111においてrenesasで配信されているan_r01an2293jj0102_usb.zipファイルの

USB Host Communications Device class Driver for USB Mini Firmware Using Firmware Integration Technology Modules

を使用してFTDIチップ搭載デバイスとシリアル通信を行う製品を開発しています。

bspの設定をマイボードに設定しサンプルコードをそのまま使用するようにしています。

ソフトを動かせるところまでいけたのですが、通信が正常に行われているかわかりません。

アプリケーションステートのアタッチステートから一向に変化がありません。

以下に質問等

・FTDIチップに対してRenesasのCDCドライバで通信を行うことができるのでしょうか?

・アプリケーションをうまく動作させるためにはどうすればいいでしょうか?

・renesas製のCDCドライバを使って仮想シリアル通信をするためにはどういったコツが必要なのでしょうか?

以上よろしくお願いします。

Parents
  • こんにちは
    USBは詳しくないのですが、renesas製のCDCドライバはCDC仕様しかサポートしていないのではないのでしょうか?
    FTDI仕様はサポートしていないのではないでしょうか?
  • SAさん返信ありがとうございます。
    私が調べた限りではFTDI仕様対応と明記されているものはありませんでした。
    現在正常に動作してない部分がUSB全体に共通な標準コマンドに対する応答なので
    CDCでFTDIチップ搭載デバイスを動作させることができるのかという検証はできてない状況です。
  • 新しい追記です。
    データラインの周波数が使用上フルスピードが12Mbpsになっているのですが、オシロスコープで波形をモニタしていたところ約8Mbpsしか出ていませんでした。
    このことについても情報をもっている方がいらっしゃいましたら教えていただければと思います。
  • 新しい追記です。
    私調べではUSBフルスピード通信の周波数は12Mbps±0.25%の精度が必要でした。
    rx111でフルスピード通信を行うには48MHzのクロックが必要らしく
    rx111のUSBクロックはセレクタで選択したクロックソースをそのまま利用しているので
    rx111オンチップオシレータのみでは48MHzのクロックを作り出すことができない?
    外部発振子を接続し分周器とPLL回路で48MHzのクロックを作り出し、
    クロックソースをPLL回路に設定することで正常に通信できることを確認できました。
    32MHzのオシレータで8MHz、48MHzのPLLで12MHzだったので最終的に1/4分周して使用するみたいです。
    まだ、標準コマンドの応答が正常に行われていることを確認しているだけなので
    ルネサスのCDCドライバでFTDIチップ搭載マイコンとの通信を行うことができるのかという検証はできていません。
    なので、今後も情報を追記していきます。
    みなさまにも情報を提供していただければ幸いです。
  • yamayamaさん、こんにちは。

    FTDIチップがスタンダードなCDC-ACMプロトコルで制御出来るかどうかFTDI社の
    ウェブサイトに資料がないか見てみたのですが見付けられませんでした。そこで、
    困った時のオープンソースプロジェクトとばかりに、Arduinoとmbedのフォーラムを
    調べてみました。まだ、ちらっと見ただけですが、FTDIチップはスタンダードな
    CDC-ACMプロトコルから若干外れているような印象です。(英文を斜め読みした
    印象ですので、もし読み間違えていたら申し訳ありません。)

    forum.arduino.cc/
    USB HOST FTDI CDC で検索。参考になりそうなものとして以下がありました。
    forum.arduino.cc/index.php?topic=62310.0

    [検索画面コピー]



    developer.mbed.org/forum/
    USB HOST FTDI CDC で検索。参考になりそうなものとして以下がありました。
    developer.mbed.org/questions/668/How-can-I-send-and-receive-USB-Host-Seri/

    [検索画面コピー]



    取っ掛かりになりそうだと思ったのが以下のGitHubのオープンソースプロジェクト
    です。もっとも、当たるも八卦、当たらぬも八卦、と口上を述べる占い師のごとく
    思われそうな気もしますが、仮に自分の仕事だとしても、このURLは取り敢えず
    メモを残しておくだろうと思ったURLです。

    github.com/felis/UHS30
    github.com/felis/UHS30/.../UHS_CDC_ACM/examples/.../acm_terminal.ino
    github.com/felis/UHS30/.../UHS_CDC_ACM/examples/.../buffered_acm_terminal.ino

Reply Children
  • わわいさん、NoMayさん返信ありがとうございます。
    お二人の意見を読ませていただいた限り、そのままCDCドライバで動作させるのは難しそうですね。
    NoMayさんにいただいた情報も含めて私のほうでさらに調べていこうと思います。
    GitHubとmbedというサイトは利用したことはなかったのでこういったサイトも教えていただけると助かります。
    情報ありがとうございます。
  • 状況が進展したので報告させていただきます。
    現在、マイコン側がからFTDIチップ搭載デバイスへデータを送信するところまで成功しました。
    成功した方法を以下にまとめます。
    1、まず、CDCドライバのクラスリクエストはFTDIチップに対応していないためクラスリクエストの処理を削除しました。
    2、以下のサイトを参考にFTDIチップに対応している2つのリクエストを行う記述を追加しました。
    osdn.net/.../ftdi_sio.h
    www.ftdichip.com/.../AN232B-05_BaudRates.pdf
    ビット数、パリティ、ストップビットの設定を行うリクエストのFTDI_SIO_SET_DATA(0x04)を追加
    ボーレートの設定を行うリクエストのFTDI_SIO_SET_BAUDRATE_REQUEST (0x03)を追加
    コマンドの詳細はサイトを参考にしていただければと思います。
    3、CDCドライバで既に用意されているデータ送信関数をそのまま流用して送信処理を行いました。
    以上が成功した方法です。
    今回私が使用したのはFTDIチップのFT232Rという型番のため、他の型番で動作するかはわかりません。
    まだ受信の確認ができていないため、また進捗があれば報告させていただきます。
  • 状況が進展したので報告させていただきます。
    FTDIチップ搭載デバイスからのデータ受信に成功し、仮想シリアル通信機能を完成させることができました。
    ご協力いただいた皆様に感謝いたします。
  • yamayamaさん、こんにちは。
    昔の投稿ですが、
    ビット数、パリティ、ストップビットの設定を行うリクエストのFTDI_SIO_SET_DATA(0x04)を追加
    ボーレートの設定を行うリクエストのFTDI_SIO_SET_BAUDRATE_REQUEST (0x03)を追加
    とは具体的にどのような処理をされ、FTDIチップとのデータ送受信を実現したのでしょうか?
    よろしくお願いします。