USBメモリーの使い方について

24 Apr 2017

mbed_officialのUSBHostのライブラリをインポートしたのですが ライブラリ自体にエラーがあるみたいでコンパイルが通りませんでした。 調べたのですが対処法が分からなかったので、こちらに書き込みしました。 対処法を教えていただけないでしょうか? よろしくお願いします。

エラー項目 ・Error: Member "mbed::FileBase::_name" (declared at <a href="#" onmousedown="mbed_doc_goto('/DMXextras/mbed_97feb9bacc10/drivers/FileBase.h', '55'); return false;">/extras/mbed_97feb9bacc10/drivers/FileBase.h:55</a>) is inaccessible in "USBHost/FATFileSystem/FATFileSystem.cpp", Line: 69, Col: 73

・Error: Member "mbed::FileBase::_name" (declared at <a href="#" onmousedown="mbed_doc_goto('/DMXextras/mbed_97feb9bacc10/drivers/FileBase.h', '55'); return false;">/extras/mbed_97feb9bacc10/drivers/FileBase.h:55</a>) is inaccessible in "USBHost/FATFileSystem/FATFileSystem.cpp", Line: 51, Col: 69

30 Apr 2017

このエラーは、 USBHost ライブラリで使用されている FatFileSystem ライブラリのバージョンが古く、mbed ライブラリとの互換性がないために発生するエラーです。

適切なバージョンを含んだ USBHost ライブラリをパブリッシュしましたので、お手数ですが再度インポートするかアップデートしてご使用ください。

https://developer.mbed.org/users/mbed_official/code/USBHost/

なお、最新版の mbed ライブラリ(Rev 141)では、FileSystem クラスの互換性の問題で、LocalFileSystem, SDFileSystem, USBHostMSD が動作しない不具合があります。
https://github.com/ARMmbed/mbed-os/issues/3983
https://github.com/ARMmbed/mbed-os/issues/4151

実行時に問題となる場合は、mbed ライブラリを Rev 137 以前のバージョンに戻してご使用ください。

01 May 2017

対応、ありがとうございました。 不明な点などありましたら、こちらに書き込みさせていただきます。

よろしくお願いします。

02 May 2017

たびたびすいません。 USBHostのライブラリを最新版にしました。 USBHostMSDを使うので、mbedのライブラリをRev137にしました。

以下にテストプログラムを載せます。

  1. include "mbed.h"
  2. include "USBHostMSD.h"

USBHostMSD msd("usb");

int main() {

printf("\nTesting file write:\n");

FILE *fp = fopen( "/usb/test.txt", "w");

if ( fp == NULL ) {

error("Could not open file for write\n");

}

fprintf(fp, "Hello mass storage!");

fclose(fp);

printf("\n - OK\n");

}

Tera Termに出力されるのは

Testing file write:

- OK

のはずですが

Testing file write:

で止まってしまいます。

プログラムのミス、配線のミスなど考えられる原因がありましたら

教えていただけないでしょうか?

よろしくお願いします。

03 May 2017

コメントやポストにコードを含める場合は、<<code>><</code>> で括ると整形表示されます。

頂いたテストプログラムを実行すると、ご連絡頂いたように "- OK" が表示されず、USBメモリにもファイルは作成されませんでした。

USBHostMSD クラスのサンプルコードの例のように USBHostMSD::connect() 関数を使用して、MSD デバイスの接続確認処理を追加することによって、正常に動作しましたのでお試し下さい。

https://developer.mbed.org/handbook/USBHostMSD

#include "mbed.h"
#include "USBHostMSD.h"

USBHostMSD msd("usb");

int main()
{
    while(!msd.connect()) {
        wait(1);
    }

    printf("\nTesting file write:\n");

    FILE *fp = fopen( "/usb/test.txt", "w");
    if ( fp == NULL ) {
        error("Could not open file for write\n");
    }

    fprintf(fp, "Hello mass storage!");
    fclose(fp);
    printf("\n - OK\n");

}
04 May 2017

対応、ありがとうございます。

動作の確認が出来ました。

ありがとうございました。

コードを載せる際には<<code>><</code>>で括るようにします。