(57)【要約】【課題】  メモリカード等の外部メモリデバイスへのアクセスＩＦ（インタフェース）ドライバ開発において、ドライバのエラーに対する堅牢性及び信頼性を向上させるためのサポートを容易に行う。【解決手段】  対象の外部メモリデバイスへのアクセスが行われた場合に、アクセス時の外部メモリデバイスのステートに基づき、外部メモリデバイスの仕様上、発生可能性のあるエラーを特定し、そのエラーを強制的に発生させるという単純な仕組みで、エラーのエミュレートを実現する。このエラーエミュレートを網羅的に行い、それらを正常にハンドリングすることで、あらゆる状況で発生するエラーを正確にハンドリング可能となり、ドライバの信頼性、及び完成度を容易に向上することができる。また、テストの項目の実施成功／失敗、及び未実施等の情報を、メモリ領域から取得可能とすることで、デバッグサポートを行い、開発効率を向上する。【選択図】  図１
2007034925.tif 000002
【特許請求の範囲】
【請求項１】
着脱可能な外部メモリデバイスにおいて、
通常の外部メモリデバイスとして動作するノーマルモードと、前記デバイスドライバからのアクセスに対してエラーを発生させて動作するテストモードの少なくとも2種類の動作モードを持ち、
前記テストモードにおいては、
前記デバイスドライバの制御により実行された前記外部メモリデバイスへのアクセス動作に対して、アクセス時の前記外部メモリデバイスのステートに応じて、前記外部メモリデバイスの仕様上、発生可能なエラーを特定するターゲットエラー特定手段と、
前記ターゲットエラー特定手段により特定されたエラーを強制的に発生させ、該エラーをエミュレートするエラーエミュレート手段と、
前記エラーエミュレート手段によりエミュレートしたエラーに対し、前記デバイスドライバが、前記外部メモリデバイスの仕様に則った動作を行えるか否かを判定する正常ハンドリング判定手段と、
前記正常ハンドリング判定手段により判定した結果を、記録するエラーエミュレート結果記録手段と、
前記エラーエミュレート結果記録手段により記録されたエラーエミュレートの結果を、前記メモリデバイスのメモリ領域に出力するエラーエミュレート結果出力手段と
を有することを特徴とする外部メモリデバイス
【請求項２】
請求項１記載の外部メモリデバイスにおいて、
前記エラーエミュレート結果記録手段により記録された結果を基に、一度エミュレートに成功したエラーは選択しないという特徴をさらに有する前記ターゲットエラー特定手段により、発生可能なエラーを特定することを特徴とする外部メモリデバイス。
【請求項３】
請求項１記載の外部メモリデバイスにおいて、
前記エラーエミュレート結果記録手段により記録された結果を基に、一度エミュレートしたエラーは選択しないという特徴をさらに有する前記ターゲットエラー特定手段により、発生可能なエラーを特定することを特徴とする外部メモリデバイス。
【請求項４】
請求項１記載の外部メモリデバイスにおいて、
前記エラーエミュレート結果記録手段により記録されたエラーエミュレートの結果を、破棄するエミュレート結果破棄手段
を有することを特徴とする外部メモリデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部メモリデバイスIF（インタフェース）ドライバ開発のサポートに関する。
【背景技術】
【０００２】
従来から、パーソナルコンピュータ等の情報機器には、機能拡張のためSCSI（Small Computer System Interface）やPCカード等の外部デバイスIFが搭載されてきた。そして近年では、パーソナルコンピュータに留まらず、PDA、携帯電話、デジタルスチルカメラ等の情報機器においても、USB（Universal Serial Bus）、SDメモリカード、赤外線等の外部デバイスIFが搭載されている。
【０００３】
外部デバイスIFは、より速くデータ転送を行うことができ、より利便性に優れるものが求められており、現在でもワイヤレスUSB等の新たなIFの仕様が数多く策定されている。そのため、情報機器のソフト開発においても、新たな外部デバイスIFのドライバ開発を迅速かつ正確に行うことが求められている。
【０００４】
しかし、外部デバイスIFドライバを開発する場合、実機テストでは製品として販売されている外部デバイスをターゲットとしてテストを行うこととなる。これらの外部デバイスは、めったにエラーを発生することが無いため、実機テストではドライバのエラーハンドリングの信頼性をテストすることができない。これに対しては、プロトコルジェネレータ等の機器を用い、エラーを発生させることでテストを行っていた。
【０００５】
又、従来例としては、例えば特許文献１と特許文献２をあげることが出来る。
【特許文献１】特開2003-22199号公報
【特許文献２】特開2003-157165号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、プロトコルジェネレータは、プロトコルを全て理解し、また波形を取得可能とするため、機器もIF部分も非常に大きい作りとなり、また複雑であるがために非常に高価となっている。そのため、例えばデジタルカメラにおけるメモリデバイスのように、メモリデバイススロットカバーがついている等の理由で、利用可能なメモリデバイス形状が大きく制限され、IF部分の形状が大きいプロトコルジェネレータは利用できないという状況が発生するという問題があった。また、外部デバイスIFの仕様は、移り変わりが激しいため、非常に高価なプロトコルジェネレータは開発コストが高くなってしまうという問題点もあった。
【課題を解決するための手段】
【０００７】
これに対し、本発明では、外部メモリデバイスにおいて、該デバイスの仕様から想定できる全てのエラーを容易にエミュレート可能で、かつ通常のメモリデバイスと同形状のメモリデバイスを提案する。該メモリデバイスは、動的に変化するデバイスの内部ステート情報を持ち、該ステート遷移を基に予め用意されたエラーエミュレートのプログラムを実行するという非常に単純な仕組みで、エラーエミュレーションを実現する。
【０００８】
本発明に係る第一の発明は、
着脱可能な外部メモリデバイスにおいて、
通常の外部メモリデバイスとして動作するノーマルモードと、前記デバイスドライバからのアクセスに対してエラーを発生させて動作するテストモードの少なくとも2種類の動作モードを持ち、
前記テストモードにおいては、
前記デバイスドライバの制御により実行された前記外部メモリデバイスへのアクセス動作に対して、アクセス時の前記外部メモリデバイスのステートに応じて、前記外部メモリデバイスの仕様上、発生可能なエラーを特定するターゲットエラー特定手段と、
前記ターゲットエラー特定手段により特定されたエラーを強制的に発生させ、該エラーをエミュレートするエラーエミュレート手段と、
前記エラーエミュレート手段によりエミュレートしたエラーに対し、前記デバイスドライバが、前記外部メモリデバイスの仕様に則った動作を行えるか否かを判定する正常ハンドリング判定手段と、
前記正常ハンドリング判定手段により判定した結果を、記録するエラーエミュレート結果記録手段と、
前記エラーエミュレート結果記録手段により記録されたエラーエミュレートの結果を、前記メモリデバイスのメモリ領域に出力するエラーエミュレート結果出力手段と、
を有することを特徴とする。
【発明の効果】
【０００９】
本発明で提案する非常に単純な仕組みでエラーをエミュレート可能で、かつ通常の外部メモリデバイスと同形状の外部メモリデバイスを、外部デバイスIFドライバ開発の実機テストで利用することにより、エラーハンドリングのテストを低コストで実現でき、かつ利用する実機がメモリデバイスのスロットカバーがついていて、プロトコルジェネレータ等では、接続不可能な実機であっても同じように利用することができ、外部デバイスIFドライバの堅牢性及び信頼性をより短期間で向上させ、さらにテストを網羅的に行うことで完成度を高めることができる。また、網羅テストにおいては、各テスト項目に対する実施成功、実施失敗、及び未実施等の情報を、外部メモリデバイスのメモリ領域にファイルとして格納し、提供することで、より迅速にデバッグ可能となり、開発効率をあげることができる。
【発明を実施するための最良の形態】
【００１０】
図１は、本発明の第一の実施例におけるカード型不揮発メモリデバイスの構成を表すブロック図である。図１において、１はコントローラであり、該メモリデバイスの制御を行う。２はROM（Read Only Memory）、コントローラ１が通常動作するためのプログラム、エラーエミュレートするためのプログラム、及びプログラムで使用するデータ等が格納されている。３はRAM（Random Access Memory）で、コントローラ１がROM２のプログラムにより動作する際のワーク領域として利用される。４はメモリデバイスとして外部からのデータを格納するためのフラッシュメモリであり、コントローラ１の制御下でリード、及びライトされる。６はテストステータスメモリであり、不揮発性のメモリで構成され、該メモリデバイスが行ったエラーエミュレートテストのステータスが収められている。５は外部IFであり、該メモリデバイスが装着された情報機器からアクセスデータの受信、及び該メモリデバイスから情報機器への送信データの発行の役割を果たす。８は内部バスで、コントローラ１が、ROM２、RAM３、フラッシュメモリ４、外部IF５へアクセスするために利用される。テストステータスメモリ６へアクセスする場合は、専用線９を用いるため、高速アクセスが可能となっている。
【００１１】
該メモリデバイスは、ドライバ開発現場で用いられ、ドライバの動作確認テストのため、簡単なハードウェア構成の機器に接続され利用される。該機器を、以下テスト実機と呼ぶ。
【００１２】
該メモリデバイスは、ノーマルモードとテストモードの２つの動作モードを持ち、動的に切替えることができる。ノーマルモードとは、同カード型の不揮発メモリデバイスと同様に動作するモードで、テストモードとはエラーをエミュレートし、エラーエミュレートテストを行う動作モードである。該メモリデバイスは、ノーマルモードで動作中は、メモリ総容量３２ＭＢ、最小書き込みサイズ５１２バイト、消去ブロックサイズ３２ＫＢのメモリデバイスとして動作する。まず、ノーマルモードにおける該メモリデバイスの動作について説明する。ノーマルモードでは、テスト実機からの制御命令及びデータを、外部IF５が受け取り、それをコントローラ１が処理し、必要であればデータをフラッシュメモリ４に書き込み、また読み出したデータを外部IF５を通してテスト実機に送信する。
【００１３】
より詳細にノーマルモードでの該メモリデバイスの動作について説明する。該メモリデバイスは、装着されたテスト実機からの制御命令に応じて、（A.１）メモリデバイスの初期化、（A.２）フラッシュメモリからのデータリード、及び（A.３）フラッシュメモリへのデータライトの、少なくとも３つの動作を行う。本実施例においては、該（A.１）のノーマルモードでの挙動について説明した後、該動作をテストモードで行った場合の挙動について説明する。
【００１４】
図２に、テスト実機による前記（A.１）の制御手順をフローチャート図で示す。図２を説明する。まず、該メモリデバイスがパワーオン、及びリセット制御命令を受けリセットする（ステップ２０１）と、テスト実機はステップ２０２で動作電圧を設定する動作電圧設定制御命令を発行する。該制御命令は、外部IF５を通してコントローラ１が処理する。コントローラ１は、制御命令を正常に処理完了した場合は、正常終了の旨をレスポンスとしてテスト実機に通知する。ただし、制御命令の処理中にエラーが発生した場合は発生したエラーをレスポンスとしてテスト実機に通知する。また、発行された命令が外部IF５に到達する前に破壊され、外部IF５が正常な形で制御命令を取得できなかった場合は、これを無視する。これ以降特に明記しない場合、テスト実機から発行された制御命令は全てコントローラ１が上記の通りに処理するものとする。
【００１５】
テスト実機がステップ２０２で前記動作電圧設定制御命令を発行すると、該制御命令を受けたコントローラ１は、要求された動作電圧で動作準備を開始し、レスポンスを返す。もし、要求された動作電圧で動作不可能である場合は、設定電圧範囲エラーの旨をレスポンスと共に通知する。テスト実機は、ステップ２０３でメモリデバイスからのレスポンスを見て、エラーが無いかを判定する。もし、前記動作電圧設定制御命令が、正常な形で外部IF５に到達できずコントローラ１に無視されてしまった場合は、レスポンスが返ってこないため、タイムアウトする。テスト実機は、ステップ２０４でエラー及びタイムアウトを検知しなかった場合、ステップ２０４で動作電圧設定状況を参照する動作電圧設定状況参照制御命令を発行する。該制御命令を受けたコントローラ１は、該制御命令を処理し、現在の動作準備ステータスも通常のレスポンスと一緒に通知する。テスト実機は、ステップ２０５で、ステップ２０３と同じようにエラー及びタイムアウトがないかを判定し、エラー及びタイムアウトを検知しなかった場合は、さらにステップ２０６でレスポンスに含まれる動作準備完了ステータスを参照し、メモリデバイスの準備が完了しているかを調べる。準備が完了していなかった場合は、ステップ２０７で動作電圧設定状況を参照する制御命令を１００回以上発行したかを判断し、発行していた場合は異常終了（ステップ２１２）する。１００回以上発行していなかった場合は、ステップ２０４に戻り、再度前記動作電圧設定状況参照制御命令を発行する。ここで、１００回の該制御命令の発行は、該メモリデバイスの仕様で決められていることである。テスト実機は、ステップ２０６で前記動作準備ステータスが準備完了を示していると判定した場合は、ステップ２０８でメモリデバイスの属性情報を取得する属性情報取得制御命令を発行する。属性情報とは、テスト実機がメモリデバイスを利用するために必要な情報であり、メモリ容量（３２ＭＢ）、最小書き込みサイズ（５１２バイト）、消去ブロックサイズ（３２ＫＢ）等である。該制御命令を受けたコントローラ１は、該制御命令を処理し、属性情報をレスポンスと一緒に通知する。テスト実機は、ステップ２０９で、ステップ２０３と同じようにエラー及びタイムアウトがないかを判定し、エラー及びタイムアウトを検知しなかった場合は、さらにステップ２１０でデバイスアドレスを設定するアドレス設定制御命令を発行する。該制御命令を受けたコントローラ１は、受信したアドレスを設定し、該制御命令を処理する。テスト実機は、ステップ２１１で、ステップ２０３と同じようにエラー及びタイムアウトがないかを判定し、エラー及びタイムアウトを検知しなかった場合は、前記（A.１）の制御を終了（ステップ２１３）し、初期化が完了する。これ以降、メモリデバイスは、前記（A.２）、及び（A.３）の制御を受けることが可能となる。ステップ２０３、２０５、２０９、２１１でエラー及びタイムアウトを検知した場合は、異常終了（ステップ２１２）する。
【００１６】
テストモードにおけるメモリデバイスの前記（A.１）の動作時のエラーエミュレートテスト手段について説明する前に、テストステータスメモリ６の構造、コントローラ１が保持しているステータス情報、及び該ステータス情報を利用したノーマルモード及びテストモードのモード切替え手段について説明する。
【００１７】
図３はテストステータスメモリ６の構造を示した図である。図３における３０１は一つのテストステータスアイテムで、サイズは２バイトである。テストステータスメモリ６は、全体サイズが６５,５３６バイトで、テストステータスアイテムが３２,７６８（＝０ｘ８０００）個存在し、先頭の３０１から順にアドレスが割り付けられている。また、各テストステータスアイテムには、エラーエミュレートテスト項目が一つ対応づけられており、テストステータスアイテムには各テスト項目に関する情報が格納されている。図４は、テストステータスアイテムの内部データ構造を示した図である。図４において、４０１はテスト実施フラグで、１ビットで構成されており、値が０の場合はテスト未実施、値が１の場合はテスト実施済みを示している。また４０２はテスト成功フラグで、同じく１ビットで構成されており、値が０の場合は前回テスト実施時にテストに失敗したことを、値が１の場合は前回テスト実施時にテストに成功したことを示している。４０３はテスト実行ステート番号で、６ビットで構成されており、テストを実行すべきコントローラ１のデバイスステートを示している。該デバイスステートの詳細については後述する。４０４はテスト番号で、８ビットで構成されており、テスト項目に一意に与えられた番号を示している。コントローラ１は、該テスト番号から、テスト番号に対応するエラーエミュレートテストのプログラム格納場所を特定し、実行することができる。
【００１８】
次にコントローラ１が保持しているステータス情報について説明する。コントローラ１は、（B.１）デバイスステート、（B.２）テストモード予約フラグ、（B.３）テストモードフラグの少なくとも３つのステータス情報を保持している。前記（B.１）デバイスステートは、メモリデバイスの内部ステート情報であり、６ビットで構成されている。該デバイスステートは、テスト実機からの一つもしくは複数の制御命令の正常完了、もしくはコントローラ１の内部処理完了によって変化する。
【００１９】
図５は、前記（A.１）動作時の、該デバイスステートの遷移を示したステートチャート図である。図５について説明する。まず、テスト実機がメモリデバイスを、パワーオンすることにより、初期状態５０１からリセット状態５０２へデバイスのステートが遷移する。この遷移により前記デバイスステートは０になる。リセット状態５０２は、コントローラ１がリセット作業を行っており、該リセット作業が完了すると、リセット完了状態５１２へ遷移する。この遷移により前記デバイスステートは２になる。該リセット完了状態５１２は内部ステートを持ち、内部ステートの初期状態５０３からは無条件で、リセット後初期状態５０４へ遷移する。以後、前記リセット完了状態５１２の内部ステートの状態遷移を説明するが、いずれの内部ステートであってもテスト実機より前記リセット制御命令を正常受信した場合、前記リセット状態５０２へ遷移する（同時に前記デバイスステートは０になる）。また、前記リセット状態５０２及び前記リセット完了状態５１２の全ての内部ステートにおいて、処理不能の制御命令を受信した場合は、該制御命令を無視する。
【００２０】
前記リセット後初期状態５０４では、前記動作電圧設定制御命令を処理することができる。該制御命令を受信（図２の２０２）し正常に処理完了した場合は、電圧設定を開始し、動作電圧設定状態５０５へ遷移する。この遷移により前記デバイスステートは３になる。該動作電圧設定状態５０５では、前記電圧設定状況参照制御命令を処理することができる。該制御命令を受信（図２の２０４）し正常に処理完了した場合は、電圧設定中の旨をレスポンスと共に通知し、動作電圧設定＆設定状況通知完了状態５１１へ遷移する。この遷移により前記デバイスステートは４になる。前記動作電圧設定状態５０５、及び前記動作電圧設定＆設定状況通知完了状態５１１では、コントローラ１は動作電圧設定作業中であり、該作業が完了すると、動作電圧設定完了状態５０６へ遷移する。この遷移により前記デバイスステートは５になる。また、前記動作電圧設定＆設定状況通知完了状態５１１で、前記電圧設定状況参照制御命令を受信した場合、電圧設定中の旨をレスポンスと共に通知するが、ステートは変化しない。
【００２１】
前記動作電圧設定完了状態５０６では、前記電圧設定状況参照制御命令を処理することができる。該制御命令を受信（図２の２０４）し正常に処理完了した場合は、電圧設定完了の旨をレスポンスと共に通知し、動作電圧設定完了＆設定状況通知完了状態５０７へ遷移する。この遷移により前記デバイスステートは６になる。
【００２２】
前記動作電圧設定完了＆設定状況通知完了状態５０７では、前記属性情報取得制御命令を処理することができる。該制御命令を受信（図２の２０８）し正常に処理完了した場合は、前記属性情報をレスポンスと共に通知し、属性情報通知完了状態５０８へ遷移する。この遷移により前記デバイスステートは７になる。
【００２３】
前記属性情報通知完了状態５０８では、アドレス設定制御命令を処理することができる。該制御命令を受信（図２の２１０）し正常に処理完了した場合は、アドレス設定を行い、前記リセット完了状態５１２の内部ステートにおける最終状態５０９に遷移し、同時に前記リセット完了状態５１２から、初期化完了状態５１３へ遷移する。この遷移により前記デバイスステートは８になる。初期化完了状態５１３からは、前記（A.２）フラッシュメモリからのデータリード、及び前記（A.３）フラッシュメモリへのデータライト等の動作で遷移するが、本実施例では説明を省略する。
【００２４】
前記リセット完了状態５１２の内部ステート、５０４、５０５、５０６、５０７、及び５０８で、制御命令の処理でエラーが発生した場合、初期化失敗状態５１０へ遷移する。この遷移により前記デバイスステートは１になる。
【００２５】
続いて、前記（B.２）テストモード予約フラグ、及び前記（B.３）テストモードフラグにより、ノーマルモード及びテストモードの切替えを行うモード切替え手段について説明する。前記テストモード予約フラグは、テストモードでの起動の予約を示すフラグでテストモード予約設定制御命令によりセット、及びテストモード予約解除制御命令によりリセットされる。該テストモード予約フラグがセットされている状態で、メモリデバイスがリセット制御命令を正常受信すると、テストモードでの起動が行われる。このとき、テストモード移行のためのテストモード初期化動作が行われ、該テストモード初期化動作完了後、該テストモード予約フラグは、自動的にリセットされ、同時に前記テストモードフラグがセットされる。該テストモード初期化動作とは、すべての前記テストステータスアイテムの前記テスト実施フラグと前記テスト成功フラグを参照し、該テスト実施フラグが実施、該テスト成功フラグが失敗を示している場合、該テスト実施フラグを０へクリアするという動作である。これは、テストモードでは、一度エラーエミュレートテストを実行したテスト項目は、成功しても失敗しても二度は実行しないためである。もし、失敗したテストを繰り返し実行してしまうと、該テストで失敗し続け、網羅テストを完了することができないためである。そのため、ノーマルモードからテストモードへ移行する場合に、一度だけ該テストモード初期化動作を行い、以降のリセット時は（前記テストモード予約フラグがセットされていない限り）、該テストモード初期化動作を行わず、エラーエミュレートテストで失敗したテスト項目があっても、網羅テストを完了できるようにする。
【００２６】
図６はメモリデバイスのリセット動作を示したフローチャート図である。図６について説明する。図６において、メモリデバイスが初期化される（ステップ６０１）と、コントローラ１はステップ６０２で前記テストモード予約フラグを参照し、セットされているかを判断する。セットされている場合は、前記テストモード初期化動作を行う。ステップ６０５〜ステップ６１０がこれにあたる。まず、ステップ６０５で、前記テストステータスアイテムの先頭のアイテムをリードする。ステップ６０６で前記テスト実施フラグを、ステップ６０７で前記テスト成功フラグを参照し、テスト実施フラグがセットされていて、かつテスト成功フラグがセットされていないアイテムを発見した場合は、ステップ６０８でテスト実施フラグをリセットする。ステップ６０９でまだリードしていないテストステータスアイテムが存在するかを判定し、存在する場合は、ステップ６１０で次のテストステータスアイテムをリードし、ステップ６０６へ戻る。ステップ６０９でもうリードしていないテストステータスアイテムが存在しないと判定した場合、前記テストモード初期化動作を完了し、ステップ６１１へ進む。ステップ６１１では、前記テストモードフラグをセットし、さらにステップ６１２で前記テストモード予約フラグをリセットし、テストモードで起動（ステップ６１３）する。ステップ６０２で、前記テストモード予約フラグがセットされていないと判定した場合は、ステップ６０３で、前記テストモードフラグがセットされているかを判定する。該テストモードフラグは、前記テストモード初期化動作が行われた場合にセットされ、以降のリセット時に、該テストモード初期化動作を行わずに、テストモードで起動するために利用される。ステップ６０３で該テストモードフラグがセットされていると判定した場合は、テストモードで起動（ステップ６１３）し、されていないと判定した場合は、ノーマルモードで起動（ステップ６０４）する。
【００２７】
図７は、前記テストモード予約フラグ及び前記テストモードフラグの変化要因と設定状態を示した表である。該テストモード予約フラグは、リセット制御命令を正常受信した場合にのみ参照されるため、（前記テストモード予約設定制御命令により）セットしただけでは、モードが切り替わるわけではない。また、該テストモード予約フラグ、及び該テストモードフラグは、メモリデバイスに対する電力供給が切断されると、自動的にリセット状態となるため、テストモードからノーマルモードへの切替えは、メモリデバイスの挿抜を行うことでも実現できる。
【００２８】
以下、エラーエミュレートテスト手段について説明する。該エラーエミュレートテスト手段とは、メモリデバイスがテストモードで起動した場合に、想定できるエラーを強制的に発生させ、該エラーをテスト実機が正常にハンドリングできたかをテストする手段である。発生するエラーはすべて該メモリデバイスの仕様から想定可能であるため、エラー発生時のコントローラ１の挙動を示すプログラムは、ROM２に格納されている。しかし、毎回リセット後に全てのエラーをエミュレートしてしまうと、リセットしなければ復帰できないエラーが存在した場合、該エラー以降のステップに進むことができない。前記テストモード初期化動作によりテストモードへ移行した場合には、テストステータスメモリ６において、成功したテストステータスアイテムにのみ、前記テスト実施フラグがセットされていることが保証されているため、エミュレートするエラーは、該テスト実施フラグセットされていないものから選択し発生させ、テスト終了時には、正常/異常に関わらず、該テスト実施フラグをセットすることで、エラーエミュレートの網羅テストを実現する。
【００２９】
以下、（C.１）いずれのエラーをいずれのタイミングで発生させるかを決定するターゲットエラー特定手段、（C.２）エラーエミュレート手段、（C.３）テスト実機が正常な対応を行ったかを判定する正常ハンドリング判定手段、及び（C.４）正常/異常に関わらず、エラーエミュレートテスト完了時にコントローラ１が判定結果を記録するエラーエミュレート結果記録手段について説明する。
【００３０】
まず、本発明の第１の特徴であるコントローラ１の前記（C.１）ターゲットエラー特定手段について説明する。エミュレートするエラーを決定するタイミングは、前記デバイスステートが遷移した時である。そして、発生させるエラーは、前述したように、テストステータスメモリ６に格納されている前記テストステータスアイテムから、前記テスト実施フラグがセットされていないものを選択する。図８は、コントローラ１の前記（C.１）ターゲットエラー特定手段の実現動作を示したフローチャート図である。図８を説明する。８０１でコントローラ１が前記デバイスステートの遷移を検知すると前記ターゲットエラー特定手段が実行される。ステップ８０２でテストステータスメモリ６から先頭アドレス（＝０x００００）の前記テストステータスアイテムをリードする。続いて、コントローラ１はステップ８０３で該テストステータスアイテムの前記テスト実行ステートが遷移したデバイスステートの値と等しいかを判定し、等しいと判定した場合は、ステップ８０４でさらに該テストステータスアイテムの前記テスト実施フラグがセットされているかを判定する。セットされていると判定した場合は、該テストステータスアイテムに関連づけられているエラーを発生させるべきであると判断し終了（ステップ８０８）する。ステップ８０３で等しくないと判定した場合と、ステップ８０４でセットされていると判定した場合は、ステップ８０５でまだリードしていないテストステータスアイテムが存在するかを判定する。存在すると判定した場合は、ステップ８０６で次のテストステータスアイテムをリードし、ステップ８０３に戻る。ステップ８０５でもう存在しないと判定した場合は、現在のデバイスステートではエミュレートすべきエラーは存在しないと判断し、終了（ステップ８０８）する。
【００３１】
続いて、本発明の第２の特徴である前記（C.２）エラーエミュレート手段、及び第３の特徴である前記（C.３）正常ハンドリング判定手段について説明する。エラーエミュレートテストは、メモリデバイスの仕様で決められているエラー全てがターゲットとなるが、本実施例では、前記（A.１）メモリデバイスの初期化時に、発生する３つのエラーを説明し、残りは省略する。３つのエラーとは、（D.１）テスト実機より、図２のステップ２０２で発行される前記動作電圧設定制御命令が示している動作電圧が、メモリデバイスが動作可能な電圧の範囲外であるために発生し、レスポンスで通知される設定電圧範囲エラー、（D.２）テスト実機からの前記動作電圧設定制御命令（図２、ステップ２０２）が前記外部IF５に到着する前に破壊され、コントローラ１により無視された場合に発生するタイムアウトエラー、及び（D.３）コントローラ１の前記デバイスステートが図５の５０４リセット後初期状態である場合に、動作電圧設定制御命令以外の命令を受信することで発生し、レスポンスで通知される処理不能制御命令エラーである。
【００３２】
前記（D.１）設定電圧範囲エラーについて説明する。該設定電圧範囲エラーの前記エラーエミュレート手段は、正常に受信した前記動作電圧設定制御命令に対して、指定された電圧範囲では動作不可能であるものとし、設定電圧範囲エラーの旨をレスポンスと共に通知することで実現する。該設定電圧範囲エラーをレスポンスから取得した場合、テスト実機上のドライバは、初期化が失敗（図２のステップ２１２）したと判断するため、もう一度初期化を行うためには、リセット制御命令を発行する必要がある。そのため、該設定電圧範囲エラーにおける、前記正常ハンドリング判定手段は、該制御命令に対するレスポンス送信後、最初に受信する制御命令がリセット制御命令であるかを判定することで実現する。
【００３３】
次に、前記（D.２）タイムアウトエラーについて説明する。該タイムアウトエラーの前記エラーエミュレート手段は、正常に受信した前記動作電圧設定制御命令を破棄することで実現する。破棄してしまうと、レスポンス待ちをしているテスト実機はいずれタイムアウトエラーと判断し、エラー処理を行う。タイムアウトエラーが発生した場合、コントローラ１の前記デバイスステートは変化しないため、再度該制御命令を受信することが可能であるが、テスト実機上のドライバは、初期化は失敗（図２のステップ２１２）したと判断するため、もう一度初期化を行うためには、リセット制御命令を発行する必要がある。そのため、該タイムアウトエラーにおける、前記正常ハンドリング判定手段は、該制御命令を破棄した後、タイムアウトと判定されるべき所定クロック数以上の次の命令を受信することなく、さらに、最初に受信する制御命令がリセット制御命令であるかを判定することで実現する。
【００３４】
前記（D.３）処理不能制御命令エラーについて説明する。該処理不能制御命令エラーの前記エラーエミュレート手段は、正常に受信した前記動作電圧設定制御命令を処理不能の制御命令であるとし、処理不能制御命令である旨をレスポンスと共に通知することで実現する。処理不能制御命令を受信した場合でも、コントローラ１の前記デバイスステートは、図５に示すように、リセット後初期状態５０４から変化しないため、テスト実機上のドライバは、再度前記動作電圧設定制御命令を発行する必要がある。そのため、該処理不能制御命令エラーにおける、前記正常ハンドリング判定手段は、該制御命令に対するレスポンスを送信後、最初に受信する制御命令が前記動作電圧設定制御命令であるかを判定することで実現する。
【００３５】
続いて、本発明の第４の特徴である前記（C.４）エラーエミュレート結果記録手段について説明する。前記（C.３）正常ハンドリング判定動作により、エラーを正常にハンドリングできたかの判定が完了した後、該エラーのハンドリングが正常、及び異常であったかに関わらず、該エラーを次に前記テストモード初期化動作が行われるまでは、発生させないようにするため、該エラーに関連付けられている、テストステータスメモリ６内の前記テストステータスアイテムに対して、前記テスト実施フラグと、前記テスト成功フラグを該正常ハンドリング判定動作の結果に基づき設定しなければならない。
【００３６】
図９は、該エラーエミュレート結果記録手段の実現動作をフローチャートで示した図である。図９について説明する。コントローラ１は、前記正常ハンドリング判定手段の動作を完了（ステップ９０１）すると、ステップ９０２で、該正常ハンドリング判定動作手段で正常にハンドリングできたかを判定し、正常にハンドリングできたと判定した場合は、ステップ９０３で前記テスト成功フラグをセットし、さらに、ステップ９０４で前記テスト実施フラグをセットし、終了（ステップ９０５）する。ステップ９０２で正常にハンドリングできなかったと判断した場合も、ステップ９０４で前記テスト実施フラグはセットし、終了（ステップ９０５）する。
【００３７】
以下、本発明の第５の特徴であるエラーエミュレート結果破棄手段について説明する。該エラーエミュレート結果破棄手段とは、一度成功したテストももう一度全てエミュレートさせたい場合に、現在のテストステータスメモリ６内のデータを全て破棄する手段である。該エラーエミュレート結果破棄手段は、テスト実機からのエラーエミュレート結果破棄制御命令を正常に受信した場合に実行される。図１０は、該エラーエミュレート結果破棄手段の実行動作を示すフローチャート図である。図１０について説明する。まず、テスト実機からエラーエミュレート結果破棄制御命令を受信（ステップ１００１）すると、コントローラ１は、ステップ１００２でテストステータスメモリ６の先頭の前記テストステータスアイテムをリードする。次に、リードしたテストステータスアイテムに対し、ステップ１００３で前記テスト実施フラグを、ステップ１００４で前記テスト成功フラグを、それぞれリセットし、ステップ１００５でテストステータスメモリに書き戻す。このステップ１００３〜ステップ１００５の動作を全てのテストステータスアイテムに対し実行するため、ステップ１００６でまだ該動作を実行していないテストステータスアイテムが存在するかを判断し、存在する場合にはステップ１００７で次のテストステータスアイテムをリードし、該動作を繰り返す。ステップ１００６でもう存在しないと判断した場合は、終了（ステップ１００８）する。
【００３８】
以下、本発明の第６の特徴であるエラーエミュレート結果出力手段について説明する。エラーエミュレート結果出力手段とは、現在の前記エラーエミュレートテストの実施結果、及び成功/失敗結果を、メモリデバイス内の前記フラッシュメモリ４へ出力する手段である。該手段により、出力されたデータは、前記フラッシュメモリ４に存在するため、ノーマルモードで起動しアクセスすることができる。該手段は、テスト実機からのエラーエミュレート結果出力制御命令を正常受信した場合に実行される。
【００３９】
該制御命令を受信すると、コントローラ１は、フラッシュメモリ４がフォーマットされているかを確認し、フォーマットされていない場合は、フォーマットする。次に、テストステータスメモリ６内の前記テストステータスアイテムを一つ一つ読み出し、データ領域の先頭から、前記テスト項目番号、前記テスト実施フラグ、前記テスト成功フラグを、図１２に示すASCII文字変換テーブルに従い、それぞれ２バイト（テスト項目番号の１６進表示）、１バイト（テスト実施フラグ）、１バイト（テスト成功フラグ）のASCII文字に変換し、該テスト項目番号、及び該テスト実施フラグの後には『スペース文字（０ｘ２０）』を、該テスト成功フラグの後には『改行文字（０ｘ０Ａ）』を置き、出力データを作成する。すべてのテストステータスアイテムを同じように処理し、最終的な出力データを作成したら、ファイルとしてフラッシュメモリ４に書き込む。
【００４０】
図１１に以上説明した、前記エラーエミュレート出力手段の実現動作のフローチャート図を示す。図１１について説明する。まず、テスト実機からエラーエミュレート結果出力制御命令を受信（ステップ１１０１）すると、コントローラ１は、ステップ１１０２でフラッシュメモリ４がフォーマットされているかを確認し、されていない場合は、ステップ１１０３でフォーマットする。次に、ステップ１１０４で、テストステータスメモリ６の先頭の前記テストステータスアイテムをリードする。次に、ステップ１１０５でリードしたテストステータスアイテムの前記テスト項目番号をASCII変換し、続いて、ステップ１１０６で前記テスト実施フラグを、ステップ１１０７で前記テスト成功フラグを、それぞれASCII変換する。ステップ１１０８では、変換したデータにスペースを間に、改行を最後に挿入し、今まで作成しデータと連結する。このステップ１１０５〜ステップ１１０８の動作を全てのテストステータスアイテムに対し実行するため、ステップ１１０９でまだ該動作を実行していないテストステータスアイテムが存在するかを判断し、存在する場合にはステップ１１１０で次のテストステータスアイテムをリードし、該動作を繰り返す。ステップ１１０９でもう存在しないと判断した場合は、ステップ１１１１で作成したデータをフラッシュメモリ４にファイルとして書き込み、終了（ステップ１１１２）する。
【００４１】
以上説明した特徴を持つメモリデバイスを、開発中の該メモリデバイスのデバイスドライバによって、テスト実機上で動作させることで、エラーが発生した場合に、該エラーを正常にハンドリングし、正確に処理できたかを容易にシミュレートすることができ、短期間で信頼性を向上させるサポートをすることができる。また、前記エラーエミュレート出力手段により、エラーエミュレートテストの実施項目と、実施結果をファイルとして取得できることで、不具合の原因となる箇所を特定するサポートを行うことができる。
【００４２】
本実施形態においては、モード切替え方法として、テストモード予約設定/解除制御命令による実現方法を例にとり説明したが、例えば、外部スイッチによる物理的な切替え方法等、いずれの切替え方法であっても本発明を適用できることは言うまでもない。
【００４３】
さらに、本実施形態においては、テストステータスデータの破棄、及び出力処理を、制御命令により実現する方法を例にとり説明したが、例えば、特定のメモリアドレスにレジスタを割り当て、該アドレスに特定の値を書き込むことを該処理のトリガーとする方法等、いずれの方法であっても本発明を適用できることは言うまでもない。
【００４４】
さらに、本実施形態においては、メモリデバイスのコントローラへのアクセス方法を、制御命令により実現する方法を例にとり説明したが、特定のメモリアドレスへのアクセスにより実現する方法等、いずれの方法であっても本発明を適用できることは言うまでもない。
【図面の簡単な説明】
【００４５】
【図１】本発明の第一の実施例におけるカード型不揮発メモリデバイスの構造を示すブロック図である。
【図２】図１のメモリデバイスのノーマルモードにおける初期化動作を示すフローチャート図である。
【図３】図１のテストステータスメモリの構造を示す構造図である。
【図４】図３のテストステータスアイテムの構造を示す構造図である。
【図５】図１のメモリデバイスのノーマルモードにおける初期化動作中のステート遷移を示すステートチャート図である。
【図６】図１のメモリデバイスのテストモードにおけるリセット動作を示すフローチャート図である。
【図７】テスト実施フラグ、及びテスト成功フラグの変化要因と変化を示す表である。
【図８】本発明の第１の特徴であるターゲットエラー特定手段の実現動作を示すフローチャート図である。
【図９】本発明の第４の特徴であるエラーエミュレート結果記録手段の実現動作を示すフローチャート図である。
【図１０】本発明の第5の特徴であるエラーエミュレート結果破棄手段の実現動作を示すフローチャート図である。
【図１１】本発明の第６の特徴であるエラーエミュレート結果出力手段の実現動作を示すフローチャート図である。
【図１２】ASCII文字とバイトデータの変換テーブルである。
【符号の説明】
【００４６】
１  コントローラ
２  ROM
３  RAM
４  フラッシュメモリ
５  外部IF
６  テストステータスメモリ
８  内部バス
【図１】
2007034925.tif 000003
【図２】
2007034925.tif 000004
【図３】
2007034925.tif 000005
【図４】
2007034925.tif 000006
【図５】
2007034925.tif 000007
【図６】
2007034925.tif 000008
【図７】
2007034925.tif 000009
【図８】
2007034925.tif 000010
【図９】
2007034925.tif 000011
【図１０】
2007034925.tif 000012
【図１１】
2007034925.tif 000013
【図１２】
2007034925.tif 000014