USB対応マイコンによるFTDI素子とのUSB通信

こんにちは。

Synergy (又はルネサスのUSB機能実装マイコン)で FTDI 素子を用いた機器と

通信を行いたいのですが、データの送受信を実現された方はいらっしゃいますでしょうか?

現在確認しているのは、

 CDCのClass Request(UX_HOST_CLASS_CDC_ACM_IOCTL_SET_LINE_CODING)は非対応である。

   非対応である為、上記関数を使用してボーレートやビットレートの設定は出来ない。

   従って、CDCドライバを使用して、FTDIデバイスを使用したUSB機器とデータのやり取りが出来ない。 

実現された方は、どのように対応されたのか、教えて頂けないでしょうか?

また、こうすればいいのではというご意見あれば教えて下さい。

是非、皆様のお知恵をかしてください。

よろしくお願い致します。

Parents
  • 便乗にて失礼いたします。

    RX113にて、FTDIチップ(FT232R)搭載のデバイスからシリアル通信を実現するため、
    r01an2167xx0112_usb を使用して RX113とFT232R 間のCDC通信処理を構築しています。

    現在、以下スレッドのyamayama 様の投稿時点の動作と同様、アタッチステートから変化がなく、
    GET_DESCRIPTORコマンドの送信、応答エラーのNAK割り込みが発生する状況です。

    <japan.renesasrulz.com/.../rx111-cdc-ftdi>

    48MHzのクロックを作成する件については、メインクロック16MHzからPLL回路を使用し
    UCLK 48MHzに設定しています。

    完成までの内容が判る方がおられれば、詳しく教えていただけないでしょうか。
  • GET_DESCRIPTORコマンドの件を解決した後に考える話になりますが、先述のスレッドの以下内容を読んで、以下を対応しています。

    > 1、まず、CDCドライバのクラスリクエストはFTDIチップに対応していないためクラスリクエストの処理を削除しました。
    ⇒r01an2167xx0112_usb, r_usb_hcdc_apl.c の以下処理をコメントアウト。
    - set_control_line_state()
    - set_line_coding()
    - get_line_coding()

    > 2、以下のサイトを参考にFTDIチップに対応している2つのリクエストを行う記述を追加しました。
    ⇒set_line_coding() を参考に、R_USB_Write を呼び出し。
    p_ctrl の設定内容は以下。
    [FTDI_SIO_SET_BAUDRATE]
    - type = USB_REQUEST
    - setup.type = 0x0340 (bmRequestType 0x40, bRequest = 0x03)
    - setup.value = 0x4138 (とりあえずですが、9600bps設定のイメージ)
    - setup.index = 0 (wIndex : Port)
    - setup.length = 0 (wLength : 0)

    [FTDI_SIO_SET_DATA]
    - type = USB_REQUEST
    - setup.type = 0x0440 (bmRequestType 0x40, bRequest = 0x04)
    - setup.value = 0x0008 (8bit, パリティなし, Stop 1bit, TxOff設定)
    - setup.index = 0 (wIndex : Port)
    - setup.length = 0 (wLength : 0)

    ⇒本件、GET_DESCRIPTORが解決していないため、R_USB_Write()がエラーを返し送信できません。
    無理やりデバッガでエラー条件を回避すれば、送信します。
    (USBプロトコルアナライザで見る限り、PCとFT232間の送信内容と一致)

    > 3、CDCドライバで既に用意されているデータ送信関数をそのまま流用して送信処理を行いました。
    ⇒R_USB_Write () を呼び出すのだろう、と考えております。(こちらは動作確認など出来ていません)
    RS232C通信したいデータを第2引数 *p_buf、データサイズを第3引数 size に設定する想定。
  • 取り急ぎですが以下の進展があり、自己解決しました。

    現在、FT232R へのUSB通信と、RS232Cのデータ送信を実現しており
    対向先のPC(TeraTerm)で、受信確認できています。

    [進展した内容]
    ・アタッチステートメントから変化がない件の解消
    ・クラスリクエストの送信
    - FTDI_SIO_SET_BAUDRATE
    - FTDI_SIO_SET_DATA
    ・RS232C データ送信 (受信は開発予定なしのため、見ていません)

    成功した方法は、別途まとめて連絡いたしますが、
    FTDI は Vendorクラスであることがポイントでした。

    結論としては、Vendorクラスの通信に対応できる様に、CDCドライバのコンフィグ設定と
    r01an2167xx0112_usb, r_usb_hcdc_apl.c の処理修正が必要となるようです。
  • 私の方で確認した変更点を以下にまとめました。

    1. CDCドライバのコンフィグを変更する。
    以下を除き、r_usb_basic_mini, r_usb_hcdc_mini の変更はしていません。
    - r_usb_basic_mini_config.h
    #define USB_CFG_HVND_USE を追加
    (#define USB_CFG_HCDC_USE はそのまま残します)

    - r_usb_hcdc_mini_config.h
    #define USB_CFG_HCDC_IFCLS の設定を USB_CFG_CDC から USB_CFG_VENに変更

    2. r_usb_hcdc_apl.c の処理修正 (USB オープン処理)
    - R_USB_Open () の引数 ctrl.type を USB_HCDC から USB_HVNDに変更。
    アタッチステートメントから変化があり、エニュメレーションも完了するようです。

    3. r_usb_hcdc_apl.c の処理修正 (セットアップ処理)
    - R_USB_GetEvent の戻り値の switch 判定 USB_STS_CONFIGURED の箇所
    (おそらく、エニュメレーションの完了通知に相当?)で、
    以前に記載済みの FTDI_SIO_SET_BAUDRATE クラスリクエストを送信する。
    (ctrl.type = USB_HCDC を設定)

    - R_USB_GetEvent の戻り値の switch 判定 USB_STS_REQUEST_COMPLETE で
    以前に記載済みの FTDI_SIO_SET_BAUDRATE クラスリクエストを送信する。
    (ctrl.type = USB_HCDC を設定)

    4. r_usb_hcdc_apl.c の処理修正 (データ送信処理)
    - R_USB_PipeWrite () を呼び出す。
    RS232C通信したいデータを第2引数 *p_buf、データサイズを第3引数 size に設定しました。
    (第1引数は ctrl.type = USB_HVND, ctrl.pipe = USB_CFG_HCDC_BULK_OUT を設定)
    以前、R_USB_Write () を呼び出すのだろう、とした部分です。

    5.上記以外の処理はしていません。
    USB_STS_READ_COMPLETE, USB_STS_WRITE_COMPLETE 処理は削除しました。
    ⇒データ受信が必要なシステムであれば、何か対応が必要?
    従来のクラスリクエストも処理していません。

    私の環境では上記で確認ができております。
    不手際などあるかも知れないので、あくまで参考程度でお願いします。
  • すみません。以下、訂正します。

    > 3. r_usb_hcdc_apl.c の処理修正 (セットアップ処理)
    > - R_USB_GetEvent の戻り値の switch 判定 USB_STS_CONFIGURED の箇所
    >
    > (ctrl.type = USB_HCDC を設定)

    > - R_USB_GetEvent の戻り値の switch 判定 USB_STS_REQUEST_COMPLETE で
    >
    >(ctrl.type = USB_HCDC を設定)

    どちらも、ctrl.type は USB_REQUEST 設定です。
Reply
  • すみません。以下、訂正します。

    > 3. r_usb_hcdc_apl.c の処理修正 (セットアップ処理)
    > - R_USB_GetEvent の戻り値の switch 判定 USB_STS_CONFIGURED の箇所
    >
    > (ctrl.type = USB_HCDC を設定)

    > - R_USB_GetEvent の戻り値の switch 判定 USB_STS_REQUEST_COMPLETE で
    >
    >(ctrl.type = USB_HCDC を設定)

    どちらも、ctrl.type は USB_REQUEST 設定です。
Children
No Data