FITModulesを使ったデバイスディスクリプタの情報取得について

お世話になっております。

プログラミング初心者ですが、質問させていただきます。

 

FITModulesを使用して、USBのデバイスディスクリプタ(iSerialNumber)を取得したいと思っております。

R_USB_Openを使ってUSBモジュール起動まではできのですが、、、

プログラミング、USB共に初心者レベルなため、その先どのようにしたら良いかわからない状態です。

質問の内容がざっくりしすぎているとは思いますが、

分かる方がいらっしゃいましたらご教授いただきたいと思います。

 

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

  • まずはサンプルプログラムを見つけて動かすのが得策です。
    どのようなものを作りたいかにより、デバイスクラスを見定める必要があります。(Mass storage, Communication, Human Interface等)
    以下のFITのページの一番下から、使用しているRXの型番を選ぶとUSBのサンプルにたどり着けます。

    www.renesas.com/.../fit.html
  • ZXRRさん、こんにちは。NoMaYと申します。

    うまく回答出来ているか気がかりですが、以下の情報で足りますでしょうか?

    例えば、サンプルプログラムであるr01an2238では以下のようにiSerialNumberが記述されています。ですので、このサンプルプログラムから派生させたプログラムの場合はg_cdc_string_descriptor6を読めば良い、ということになる筈です。

    demo_src\r_usb_pcdc_descriptor.c

    /* Standard Device Descriptor */
    uint8_t g_apl_device[USB_PCDC_DD_LEN + ( USB_PCDC_DD_LEN % 2)] =
    {
        USB_PCDC_DD_LEN,                                    /*  0:bLength */
        USB_DT_DEVICE,                                      /*  1:bDescriptorType */
        (USB_BCDNUM & (uint8_t) 0xffu),                     /*  2:bcdUSB_lo */
        ((uint8_t) (USB_BCDNUM >> 8) & (uint8_t) 0xffu),    /*  3:bcdUSB_hi */
        USB_IFCLS_CDCC,                                     /*  4:bDeviceClass */
        0,                                                  /*  5:bDeviceSubClass */
        0,                                                  /*  6:bDeviceProtocol */
        (uint8_t) USB_DCPMAXP,                              /*  7:bMAXPacketSize(for DCP) */
        (USB_VENDORID & (uint8_t) 0xffu),                   /*  8:idVendor_lo */
        ((uint8_t) (USB_VENDORID >> 8) & (uint8_t) 0xffu),  /*  9:idVendor_hi */
        ((uint16_t) USB_PRODUCTID & (uint8_t) 0xffu),       /* 10:idProduct_lo */
        ((uint8_t) (USB_PRODUCTID >> 8) & (uint8_t) 0xffu), /* 11:idProduct_hi */
        (USB_RELEASE & (uint8_t) 0xffu),                    /* 12:bcdDevice_lo */
        ((uint8_t) (USB_RELEASE >> 8) & (uint8_t) 0xffu),   /* 13:bcdDevice_hi */
        1,                                                  /* 14:iManufacturer */
        2,                                                  /* 15:iProduct */
        6,                                                  /* 16:iSerialNumber */
        USB_CONFIGNUM /* 17:bNumConfigurations */
    };

     

    /* iSerialNumber */
    uint8_t g_cdc_string_descriptor6[STRING_DESCRIPTOR6_LEN + ( STRING_DESCRIPTOR6_LEN % 2)] =
    {
        STRING_DESCRIPTOR6_LEN, /*  0:bLength */
        USB_DT_STRING,          /*  1:bDescriptorType */
        '0', 0x00,              /*  2:wLANGID[0] */
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '0', 0x00,
        '1', 0x00,
    };

     

  • Hidetakaさん
    返事が遅くなってしまい申し訳ありません。
    アドバイスありがとうございます。

    デバイスディスクリプタのiSerialNumberから
    ストリングディスクリプタの値を取得したいだけなのです。

    助言いただいた通りサンプルプログラムを探しコードを追っていますが、
    如何せん、、、プログラム初心者レベルなので、なかなか苦戦しております。
  • NoMaYさん
    ありがとうございます。

    ホスト側から取得するものだと思い込んでいましたが、ペリフェラル側からなのですね。
    プログラムを見る限りご提示いただいたサンプルプログラムを使えば出来る気がします。(出来てほしい(笑))

    プログラムと睨めっこしながら頑張ってみます。
  • ZXRRさん、こんにちは。NoMaYです。

    ちなみに、ホスト側から取得することも出来ます。(値が定義されている場所はペリフェラル側ですが。) ただ、そのやり方は、ホスト側がパソコンであればOSのAPIで取得することになりますし、ホスト側がマイコンであればマイコンのUSBライブラリの流儀によります(APIで取得するのかも知れませんし変数を読んで取得するのかも知れませんし)。

    それで、正直に言うと、FITModuleでのUSBホストは使用経験がなくて、つい多少なりとも使用経験のあるUSBペリフェラルだと思い込んでリプライしてしまったのですが、ひょっとしてFITModuleでのUSBホストの話でしたか?

  • NoMaYさん
    おはようございます。ZXRRです。

    返信いただきありがとうございます。
    ホスト側からも取得出来ると聞いて安心しました。
    昨夜あれからサンプルコードを見ていたんですが、「これ、ペリフェラル側から取得してる!?」と気づき、ホスト側からだとどうなのだろう・・・って思っていたところでした。

    >ひょっとしてFITModuleでのUSBホストの話でしたか?
     FITModuleでのUSBホストの話でした。ちなみに、ホスト側はマイコン(RX65N)です。
  • ZXRRさん
    ほやです。

    ちなみに、FITのUSBモジュールの動作がうまく行かない時に「何がいけないのか」を教えてくれるツールがあるのですが、知ってました?

    [QE for USB] https://www.renesas.com/qe-usb

    e2 studio用なんですけどね...

  • ほやさん
    こんにちは。ZXRRです。

    そんなツールがあったなんて、、、知らなかったです。
    今回は、USBの機能をガッツリ使うわけではないので使用はしないと思いますが、
    これからUSBの業務を行う際には是非とも参考にさせてもらいます。
    貴重な情報ありがとうございます。
  • 返信していただいた皆様

    ストリングディスクリプタの値を取得する事に成功しました。
    色々なアドバイス、情報を提供していただき大変感謝しております。ありがとうございます。