MatrixQuest(マトリックスクエスト)

MatrixQuestUSB/ex

技術サポート情報

USB/exを購入したお客様からの、技術サポートに寄せられるよくあるご質問に回答します。

ターゲットボードについて
サンプルアプリケーションについて
ユーザーアプリケーションについて
OSのコンフィグレーションについて

ターゲットボードについて

CQ出版 Interface 6月号付属基板(SH7262)で動作させたい
  • まずは、ご使用の環境でサンプルアプリケーションが正しく動作する事をご確認ください。
  • 動作検証を行っていないボードについては、ボードの差異による障害が発生する可能性があります。
  • ボードの差異による障害の場合は、動作保証の対象外とさせていただいておりますので、あらかじめご了承ください。できれば、「M3A-HS64G50」を入手いただき動作確認いただければと思います。
動作検証プラットフォームに記載されていないターゲットボードで動作させたい
  • まずは、ご使用の環境でサンプルアプリケーションが正しく動作する事をご確認ください。
  • 動作検証を行っていないボードについては、ボードの差異による障害が発生する可能性があります。
  • ボードの差異による障害の場合は、動作保証の対象外とさせていただいておりますので、あらかじめご了承ください。できれば、「環境について」に記載しておりますターゲットボードを入手いただき動作確認いただければと思います。

サンプルアプリケーションについて

usblInit( USBEX_PRI )が0xFFFFFFF7 (-9)で終了してしまう
  • usblInit()が既に正常終了していた場合の戻り値になります。
  • usblInit()は、1度正常終了している為、問題ありません。
usblInit( USBEX_PRI )が0xFFFFFFFF (-1)で終了してしまう
  • OSのコンフィグレーションをご確認ください。
サンプルアプリケーションが起動しない
  • この現象は、VER1.00以前のバージョンをお使いのお客様が対象になります。
    最新のバージョンを案内いたしますので、弊社営業までお問合わせください。
  • 原因は、SCIF,USBのモジュールストップコントロールレジスタがコード上で初期化されていない為です。初期化を行うようにコードを追加いただく事で対応可能です。
実装例: smp7203_usbex.c ini_pio()
#if !defined(NORTiSIM)
                    :
                    :
                #ifdef USE_USB_EX
                    /* SCIF and USB module clock enable (before init sio) */
                #ifdef USE_AP_SH2A_1A /* use SCIF3 */
                    sfr_clr(SYS_STBCR4, 0x10);
                #else /* use SCIF0 */
                    sfr_clr(SYS_STBCR4, 0x80);
                #endif /* USE_AP_SH2A_1A */
                    sfr_clr(SYS_STBCR6, 0x01); /* START USB */
                #endif /* USE_USB_EX */
                
                #endif
                
フォーマット済みUSBメモリへのアクセスが遅い
  • ボリュームラベルを指定してフォーマットして下さい。
    もしくはホストPCにおいて、一旦ファイルを書き込んで下さい。

※補足1

USBメモリの「空きクラスタサイズ領域」の値によるものと考えられます。これは、FAT32の仕様、弊社ファイルシステムの動作、およびUSBメモリのフォーマッタに関係があります。まず、FAT32の仕様として空きクラスタサイズを管理する領域があります。通常、ファイルの生成/更新/削除や、フォーマットでこの領域が更新されます。ここで、この領域には「空きクラスタサイズが計算されていない」という値が設定される事(※)があります。

※ WindowsXP SP3 でUSBメモリをフォーマットした場合、設定されるようです。

次に、弊社ファイルシステムについてです。USBメモリに対する初回アクセスで、この領域から空きクラスタサイズを取得します。その際、取得した値が「空きクラスタサイズが計算されていない」だった場合、USBメモリの全てのクラスタを走査し、空きクラスタサイズを計算します。この処理に時間がかかっていると考えられます。ホストPCにおいて一旦ファイルを書き込むことで、この空きクラスタサイズが更新される為、時間がかかる事がなくなります。

※補足2

弊社ファイルシステムでは、空きクラスタサイズが「計算されていない」という値だった場合、ファイルの更新を行っても、空きクラスタサイズを更新しません。これは、「計算されていない」という値を設定しているのは何かしらの理由がある、という考えで、勝手に変更しないようにしている為です。

ですので、以下の手順を行った場合、

  1. WindowsXP SP3でフォーマット
  2. USBメモリ接続
  3. USB/exを用いてファイル生成
  4. USBメモリ切断
  5. USBメモリ接続
  6. USB/exを用いてファイル更新

3.と 6.で空きクラスタサイズの計算が行われます。

ユーザーアプリケーションについて

catFsUsbGetMountDevName() がエラーになってしまう

デバイスがマウントされるまでに実行した為と考えられます。

catFsUsbGetMountDevName()までに少し時間を置いて実行していただくか、catFsUsbGetMountDevName()でエラーだった場合、ディレイをいれて再度確認していただくことでOKが返ると考えられます。

実装例
                int status,nLoop;
                unsigned char devName[32];
                
                for(nLoop = 0; nLoop < 10000; nLoop++)
                {
                    dly_tsk(100/MSEC);
                    status = catFsUsbGetMountDevName( 0, devName );
                    if(status != -1)
                    {
                        break;
                    }
                }
k_read()を繰り返すとハングアップしてしまう

JTAGのトレースモードからAUDCKを使用せず、TCKを使用するようにICE上で設定する。

※ターゲットボード:AP-SH2A-1A + ICE:ビットラン社のDR-01の環境で確認。

ファイルの作成に時間がかかってしまう

1ディレクトリあたり126ファイルまでを目安としてください。

詳細については「MatrixQuestUSB/ex プログラマーズガイド パフォーマンスに配慮したアプリケーション設計のガイドライン」をご参照ください。

MSCデバイスのマウントに時間がかかってしまう

この現象は、VER1.01以前のバージョンをお使いのお客様が対象になります。最新のバージョンを案内いたしますので、弊社営業までお問合わせください。

原因は、接続時にGET_MAX_LUNを複数回実行する事により、デバイスが無応答になる為です。この現象が発生するかどうかは、ご使用のデバイスに依存します。

ROMから起動するとパフォーマンスが落ちてしまう

この現象は、VER1.00以前のバージョンをお使いのお客様が対象になります。最新のバージョンを案内いたしますので、弊社営業までお問合わせください。

原因は、キャッシュが有効になっていない為です。リンク順の指定で、vecXXXXh.objが先頭になるようリンク順を変更いただく事で対応可能です。

USBメモリの空き容量サイズを取得しようとするとエラーになってしまう

USBメモリの空き容量サイズを取得する際、k_ioctl(fd, K_IONFREE, &pFreeSize)を使用して取得することができます。

K_IONFREE の詳細については、「MatrixQuestUSB/ex ユーザーズガイド 5.2.3 K_IONFREE --- ボリュームの空き領域サイズの取得」をご参照ください。

但し、K_IONFREE はUSBメモリの空き容量サイズが 2GB 以上の場合、エラーになります。2GB 以上の空き容量サイズを取得する場合は K_IOFSTATFSGET を使用してください。K_IOFSTATFSGET の詳細については、「MatrixQuestUSB/ex ユーザーズガイド 5.2.10 K_IOFSTATFSGET --- ファイルシステム情報の取得」をご参照ください。

実装例
int smpGetFreeCapacity (
                    char *dirname      /* base dir name */
                ) {
                    int fd;
                    int ret;
                    K_STATFS_ST *pStat;
                
                    pStat = k_malloc ( sizeof (K_STATFS_ST) );
                    if ( pStat == NULL ) {
                        k_printf( "MALLOC ERROR\n" );
                    }
                
                    fd = k_open( dirname, K_O_RDONLY, 0 );
                    if ( fd == K_ERROR ) {
                        k_free ( pStat );
                        return ( K_ERROR );
                    }
                
                    k_printf( "OPEN SUCCESS\n" );
                
                    ret = k_ioctl (fd, K_IOFSTATFSGET, (int)pStat);
                    if ( ret == K_ERROR ) {
                        k_free ( pStat );
                        k_close( fd );
                        return ( K_ERROR );
                    }
                
                    k_printf ( "f_bfree : %d, f_bsize : %d\n",              
                       pStat->f_bfree, pStat->f_bsize );
                
                    k_free ( pStat );
                    k_close ( fd );
                    return ( K_OK );
                }

K_IOFSTATFSGET で取得できる K_STATFS_ST 構造体のメンバの f_bfree には「総空きブロック数」が格納され、f_bsize には「ブロックサイズ」が格納されます。

この2つから空き容量サイズを算出することができます。
f_bfree(総空きブロック数) * f_bsize(ブロックサイズ) = 空き容量サイズ

なお、f_bfree(総空きブロック数)が変化しない場合、以下の手順を行って再度空き容量サイズを取得してください。USBメモリを接続した際、
「USBメモリをスキャンして修復しますか?」
という内容のウィンドウが表示される場合、修復処理を行い、任意のファイルを書き込みます。Windows XP の場合は以下の処理を行って、再度空き容量サイズを取得してください。

  1. WindowsでUSBメモリをフォーマットします。
  2. 任意のファイルをUSBメモリへ書き込みます。
  3. コマンドプロンプトでCHKDSKの結果を取得して修復の必要があれば、修復します。

OSのコンフィグレーションについて

ISTKSZの最小値

リリース版(rel.lib)を使用される場合 : 568、デバッグ版(deb.lib)を使用される場合 : 1008 になります。

SEMID_MAXの最小値

16 になります。

MTXID_MAXの最小値

28 になります。

TSKID_MAXの最小値

2 になります。

TPRI_MAXの最小値

15 になります。

HEAP_SIZEの最小値

184kになります。
ただし、シェルを動作させる場合は、259k必要になります。

※記載されている製品・システム名は、各社の商標または登録商標です。

ページのトップへ