上記課題を解決するための本発明の通信システムは、通信イベントの起動決定権を有したホスト装置と、該ホスト装置に接続される該ホスト装置の通信対象となる周辺装置とを含み、通信イベントを実行命令するためのコマンドをホスト装置から周辺装置に向けて順次発行する一方、発行されたコマンドを受領した周辺装置が当該コマンドに対応するデータ処理を逐次実行し、その実行結果に応じた応答情報をホスト装置側に返信するようになっており、かつ、コマンドの発行方向がホスト装置側から周辺装置側への一方向に規制された主通信プロトコルを有する通信システムにおいて、
周辺装置に設けられ、予め定められた内容の対象通信イベントの起動をホスト装置に促すための周辺装置側トリガを、該周辺装置側でのユーザー操作に基づいて発生させる周辺装置側トリガ発生手段と、
ホスト装置側に設けられ、周辺装置における周辺装置側トリガの発生を監視するために、周辺装置側トリガの発生の有無を反映したトリガ発生報告情報を応答情報として要求するためのトリガ報告要求コマンドを、主通信プロトコルに従い周辺装置に向けて発行するトリガ報告要求コマンド発行手段と、
周辺装置側に設けられ、トリガ発生報告情報を応答情報としてホスト装置に主通信プロトコルに従い返信するトリガ発生報告情報返信手段と、
ホスト装置側に設けられ、トリガ発生報告情報を周辺装置から受領する報告情報受領手段と、
当該トリガ発生報告情報の内容に基づいて周辺装置側トリガの有無を判定し、該周辺装置側トリガがありと判定された場合に、対象通信イベントを起動させる対象通信イベント起動手段とを有し、
周辺装置が、少なくともデータの読出しに係るデータアクセスが可能とされた記憶媒体が着脱可能に装着され、通信イベントにより該記憶媒体に対してデータアクセスを行なう記憶装置として構成され、さらに、
周辺装置に設けられ、データアクセスを行うデータファイルのファイル種別を選択するファイル種別選択手段と、
ホスト装置側に設けられ、ファイル種別選択手段によって選択されたファイル種別のファイル種別情報を要求するためのファイル種別要求コマンドを、主通信プロトコルに従い、周辺装置に向けて発行するファイル種別要求コマンド発行手段と、
周辺装置側に設けられ、ファイル種別要求コマンドを受領すると、ファイル種別情報をホスト装置に主通信プロトコルに従い返信するファイル種別報告情報返信手段と、
ホスト装置側に設けられ、ファイル種別情報を受領し、該ファイル種別情報に従って、データアクセスを行うファイル種別を設定するファイル種別設定手段とを有し、
周辺装置側トリガとしての記憶媒体の周辺装置への装着を、周辺装置からのトリガ発生報告情報によりホスト装置側で把握するに伴い対象通信イベントとして、ファイル種別設定手段によって設定されたファイル種別のデータファイルを周辺装置にて記憶媒体から読み出し、当該データファイルのデータをホスト装置へ送信するデータアクセス通信処理が実行されることを前提とする。
また、本発明の周辺装置は、上記発明の通信システムを構成する周辺装置であって、予め定められた内容の対象通信イベントの起動をホスト装置に促すための周辺装置側トリガを、該周辺装置側でのユーザー操作に基づいて発生させる周辺装置側トリガ発生手段と、
周辺装置側に設けられ、ホスト装置からのトリガ報告要求コマンドに対応するトリガ発生報告情報を応答情報としてホスト装置に主通信プロトコルに従い返信するトリガ発生報告情報返信手段と、
を有してなることを特徴とする。
上記本発明によると、ホスト装置は、ファイル種別要求コマンドを周辺装置に発行して、周辺装置からユーザーが周辺装置にて選択したファイル種別のファイル種別情報を受領し、データアクセスを行うファイル種別を設定することができる。そして対象通信イベントの起動をホスト装置に促すための周辺装置側トリガをユーザーが記憶媒体を周辺機器に装着することにより発生させ、ホスト装置側では、周辺装置における周辺装置側トリガの発生を監視するためのトリガ報告要求コマンドを、主通信プロトコルに従い周辺装置に向けて発行する。これを受けた周辺装置からのトリガ発生報告情報をホスト装置側で受領し、当該トリガ発生報告情報の内容から周辺装置側トリガがありと判定された場合に、対象通信イベントを起動させる。これにより、通信イベントの実行を司るコマンドの発行方向が、ホスト装置側から周辺装置側への一方向に規制されているにも拘わらず、特定の通信イベントを周辺装置側でのユーザー操作により(ホスト装置側にて)自発的に起動することが可能となる。そして通信イベントとして、ファイル種別設定手段によって設定されたファイル種別のデータファイルを周辺装置にて記憶媒体から読み出し、当該データファイルのデータをホスト装置へ送信するデータアクセス通信処理が実行される。つまり、ホスト装置から離れた場所に配置された周辺装置に記憶媒体を装着した場合、周辺機器側でのユーザー操作によりデータファイルのデータをホスト装置へ送信でき、周辺装置がホスト装置から離れて接続されている場合でも、該データファイル送信を周辺装置側からの遠隔操作により行なうことができる。
主通信プロトコルとしては、本発明においてはSCSIプロトコル(SCSI−1、SCSI−2及びSCSI−3のいずれか:特に、現在も多くのOSカーネルで使われつづけているSCSI−2)を採用することができる。
ファイル種別選択手段は、周辺装置に設けられた手動操作部を含むように構成することができる。これにより、周辺装置にてユーザーが手動操作部を操作してデータアクセス通信処理を実行するファイル種別を選択することができる。具体的には、例えば、手動操作部は、ロータリースイッチとして構成することができる。このようにすれば、ロータリースイッチを回転させることにより、その停止位置に関連付けられたファイル種別をデータアクセス通信処理の対象として選択することができる。
トリガ報告要求コマンド発行手段は、トリガ報告要求コマンドを周辺装置に対し予め定められた時間間隔で繰り返し継続的に発行するものとすることができる。トリガ報告要求コマンドを繰り返し継続的に発行することで、周辺装置側トリガがどのようなタイミングで発生しても、ホスト装置側でこれを確実に取得することができる。
なお、本発明では、周辺装置との間でピア・ツー・ピア通信が可能な別プロトコルに準拠した通信インターフェース(例えば、IEEE1394ないし1394b)をホスト装置側に組み込み、その通信インターフェースの端子に周辺装置を接続する構成も可能である。このハードウェア構成では、周辺装置側から上記通信インターフェース(すなわち、ホスト装置)に通信処理用のコマンドを発行することができるので、トリガ報告要求コマンド発行手段(ホスト装置側)やトリガ発生報告情報返信手段(周辺装置側)などの主通信プロトコルに従う機能を省略した、本発明に属さない参考技術態様へのシフトが一応可能ではある。ただし、この参考技術態様は、ホスト装置側のシステムに上記ピア・ツー・ピア通信を可能とするための別プロトコルを取り扱うモジュールも組み入れねばならず、通信インターフェースの高コスト化も免れ得ない欠点があるので現実的ではない。
他方、本発明においては、周辺装置とホスト装置とを、ホスト装置側からの周辺装置のポーリングは可能であって、該周辺装置側からのホスト装置の逆ポーリングが不能なシリアル通信機構を介して接続し、通信イベントを実行するためのホスト装置と周辺装置との間における情報転送を、ホスト装置が周辺装置をポーリングする形式にてシリアル通信により実行されるものとして構成できる。この構成では、周辺装置側からホスト装置をポーリングすることができない(つまり、周辺装置側に通信開始の決定権が与えられない)形になるので、本発明の効果がより有効に発揮されるばかりでなく、周辺装置を直接接続するためのホスト装置側の通信インターフェースが大幅に簡略化され、システム構成の軽量・低コスト化を図ることができる。このようなシリアル通信の規格として、USB(Universal Serial Bus)を例示できる。また、本明細書では、主通信プロトコルとしてSCSIプロトコルが採用され、かつ、ホスト装置とUSBプロトコルに従うシリアル通信バスにより接続される周辺機器のことを、USB/SCSI型周辺機器とも称する。
より具体的には、周辺装置側のシリアル通信部が、ホスト装置からのシリアル通信バスを接続する通信バス接続端子と、シリアル通信バスと送受信部との間でコマンド及び応答情報の転送通信処理を実行する通信制御部とを備え、該通信制御部が、通信バス接続端子に接続される通信処理のプロトコルエンジン部と、該プロトコルエンジン部にFIFOメモリからなる制御用の双方向エンドポイントを介して接続され、転送通信処理の制御を司る制御指令部とを備えたものとして構成できる。そして、送受信部は上記プロトコルエンジン部に対し、FIFOメモリからなる該プロトコルエンジン部への入力用エンドポイントと、FIFOメモリからなる該プロトコルエンジン部からの出力用エンドポイントとを介して入出力経路が分離された形で接続することができる。また、通信制御部は、ホスト装置側から、データアクセスの対象となる送受信部の特定情報と、該送受信部に対応するエンドポイントの特定情報とを受信して、各送受信部をターゲットデバイスとしてポーリングするものとなるように構成することができる。送受信のデータバッファとなるエンドポイントを送信側と受信側とで独立して設け、ポーリング時にいずれのエンドポイントを指定するかによって、データの転送方向も容易に特定することができる。
また本発明は、ホスト装置側に設けられ、対象通信イベントにて周辺装置から受信したデータファイルを該ホスト装置側に設けられたホスト装置側記憶装置上の予め定められた保存領域に保存するデータファイル保存手段を有するように構成することもできる。これにより、記憶媒体のデータファイルのホスト装置側への送信及び保存処理処理を、周辺機器側でのユーザー操作により実行でき、周辺機器がホスト装置から離れて接続されている場合でも、該データファイルの保存処理を周辺機器側からの遠隔操作により行なうことができる。
ホスト装置側に、データファイルの保存領域への保存環境を設定する保存環境設定手段が設けられているように構成することもできる。これにより、ホスト装置側でデータファイルの保存環境を設定でき、周辺機器側からの遠隔操作により行なう保存処理をユーザーが望む環境(あるいは条件)にて実行することができる。
保存環境設定手段は、データファイルの保存領域を設定・変更するための保存領域設定変更手段を有するものとして構成できる。これにより、周辺機器側からの遠隔操作により、記憶媒体中のデータファイルをホスト装置側記憶装置内の所望の保存領域に保存することができる。
データファイルの移動(ムーブ)処理を可能とする前述の構成では、保存環境設定手段は、ファイルムーブ制御手段によるファイルムーブイベントの起動が禁止されるファイルコピーモードと、ファイルムーブイベントの起動が許可されるファイルムーブモードとを切り替えるファイル保存モード切替手段を有するものとすることができる。これにより、周辺機器側からの遠隔操作により記憶媒体中のデータファイルの保存モードを、コピーとムーブとの間で切り替え設定することができる。なお、コピー制限の付与されたファイルが検出された場合、自動的にムーブモードが選択されるように構成してもよい。
次に、トリガ報告要求コマンドは、周辺装置に対し該周辺装置自身に対する調査報告処理を要求する調査要求コマンドとすることができる。ホスト装置は、調査要求コマンドの発行に伴い、調査報告指示内容を示す予め定められたフレームフォーマットを有するとともに当該フレームの予め定められたフィールドに周辺装置側トリガの発生報告指示が書き込まれた調査指示データを作成する調査指示データ作成手段と、作成された調査指示データを周辺装置に送信する調査指示データ送信手段を有するものとして構成できる。また、周辺装置は、該調査指示データを受けて、予め定められたフレームフォーマットを有する調査報告データを生成する調査報告データ生成手段と、該調査報告データの予め定められたフィールドにトリガ発生報告情報を書き込むトリガ発生報告情報書き込み手段と、当該トリガ発生報告情報が書き込まれた調査報告データを応答情報としてホスト装置に送信する調査報告データ送信手段とを有するものとできる。
上記のように、ホスト装置側で周辺装置に調査要求コマンドを自発的に発行し、さらに、該調査要求コマンドの発行に続いて、所定のフレームフォーマットを有した調査指示データの予め定められたフィールドに周辺装置側トリガの発生報告指示を書き込んで、周辺装置に送り付けるようにする。そして、周辺装置側では、該調査指示データを受けて、予め定められたフレームフォーマットを有する調査報告データを生成するとともに、該調査報告データの予め定められたフィールドにトリガ発生報告情報を書き込んでホスト装置側に送り返す。これにより、種々の報告事項が規定される調査報告処理において、周辺装置側トリガの発生報告指示を周辺装置側に適確に伝えることができ、また、周辺装置側での周辺装置側トリガを調査報告データ中のトリガ発生報告情報により確実に把握することができる。
調査指示データ作成手段は調査指示データにおいて、格納するべき主格納情報として発生報告指示情報以外の情報が格納されるよう主通信プロトコルに規定されたフィールドに、発生報告指示情報を主格納情報に兼用させる形で書き込むものとすることができる。主通信プロトコルがSCSIプロトコルのごとく既製の通信規格に従う場合などにおいては、本発明において初めて発生する技術概念である(トリガ)発生報告指示情報用の専用フィールドを、調査指示データのフレーム内に新たに設定できる余地が存在しない場合がある。このとき、上記のように本来発生報告指示情報とは全く別の主格納情報用に用意されたフィールドに、発生報告指示情報(を含む付加情報)を当該主格納情報に兼用させる形で書き込むようにすれば、上記のごとく専用フィールドを設ける余裕がない場合でも発生報告指示情報を問題なく書き込むことができる。
例えば、周辺装置が、少なくともデータの読出しに係るデータアクセスが可能とされた記憶媒体が着脱可能に装着され、通信イベントにより該記憶媒体に対してデータアクセスを行なう記憶装置として構成される場合、調査指示データにおいて、主通信プロトコルに従い記憶媒体に対するデータの読み出し又は書き込みに係る通信イベントを実行する際に、該読み出し処理又は書き込み処理に割り当てられる当該記憶媒体上のメモリ領域のアロケーション長を設定するためのフィールドをアロケーション長設定フィールドとして確保することができる。この場合、アロケーション長情報作成手段は、該アロケーション長設定フィールドにおいてアロケーション長情報を主格納情報とする形で、該アロケーション長情報に兼用される発生報告指情報を書き込むものとできる。このようにすると、アロケーション長情報に兼用させる形で、主通信プロトコルに規定されていない固有の付加情報を周辺装置側へ送信することが可能となり、周辺装置側トリガの発生報告指示情報を周辺装置側へ問題なく送信できる。
主通信プロトコルにおいて、アロケーション長設定フィールドのサイズが一定ビット長に定められる場合、アロケーション長設定フィールドに上記付加情報を書き込む空き領域を形成するために、次のような巧妙な方法が存在する。すなわち、アロケーション長として設定可能な最大値をバイト単位にて表わしたときのビット数を、アロケーション長設定フィールドの総ビット数未満に設定する。そして、上記最大値を超えるアロケーション長がアロケーション長設定フィールドに記述された場合には、記述されたアロケーション長値とは無関係に上記最大値をアロケーション長の実設定値として定める。そして、該最大値を超える冗長なアロケーション長記述値に一義的に対応付ける形で、発生報告指示情報を含む、異なる付加情報内容を定義することができる。例えば、SCSIプロトコルにおける後述のInquiryコマンドのCDBを調査指示データとして使用する場合、このCDBはSCSIプロトコル制御用に割り振られたフィールドばかりからなり、ユーザーが新たなデータを書き込むための余裕は一見全く存在しないように見える。しかし、本来はSCSIプロトコルの主格納情報であるアロケーション長の設定フィールドにおいて、上記のごとくアロケーション長として設定可能な最大値をアロケーション長設定フィールドの総ビット数未満に設定することで、該最大値を超える冗長なアロケーション長の設定記述値に、発生報告指示情報を含む付加情報としての意味をもたせることができる。
次に、SCSIプロトコル等の場合、調査要求コマンドにはいくつかの種別が用意されている場合がある。この場合、どのような種別の調査要求コマンドをトリガ報告要求コマンドとして使用するかが問題になる場合がある。例えば、周辺装置が、データの読出し及び書込の双方に係るデータアクセスが可能とされた記憶媒体が着脱可能に装着され、通信イベントにより該記憶媒体に対してデータアクセスを行なう記憶装置として構成される場合、周辺装置には、記憶媒体の交換がなされた場合に当該記憶媒体の交換をホスト装置に通知するための交換通知情報を保持する交換通知情報保持手段と、ホスト装置から予め定められた第一種コマンドを受信した場合には、該コマンドの実行後に交換通知情報保持手段に保持されている交換通知情報をクリアし、同じく第一種コマンド以外の第二種コマンドを受信した場合は、該コマンドの実行後においても交換通知情報保持手段による交換通知情報の保持状態を保留する交換通知情報保持制御手段とが設けられる場合がある。この場合、トリガ報告要求コマンドとして使用する調査要求コマンドとしては、第二種コマンドの使用が強く推奨される。なぜならば、このような目的に第一種コマンドを使用した場合、交換通知情報を特に必要としないトリガ報告要求イベントであるにも拘わらず、処理終了時には交換通知情報がクリアされてしまい、ホスト装置側でこの交換通知情報を本来必要とするシステムコンポーネント(例えばファイルシステム)が、これを取得できなくなってしまう状況が発生し、記憶媒体の記憶内容が破壊されたりするといったトラブルにつながる場合があるためである。
調査要求コマンドとしては、例えば、周辺装置に対し該周辺装置自身の構成及び属性を特定する情報である構成/属性特定情報の報告を指示する構成/属性調査要求コマンドを採用することができる。このような周辺装置自身の構成及び属性の特定に係る通信イベントは、主通信プロトコル上では、例えばどのような種別の周辺装置(デバイス:SCSIの場合、ターゲット)が接続されているのかを、装置立ち上げ時に認識するために実行する目的で使用されることが多いが、これを本発明では、周辺装置における周辺装置側トリガの発生を監視用に、装置立ち上げ後においても所定のタイミングで繰り返し発行する。該構成/属性調査要求コマンドにより規定される通信イベントは、本来的には(装置使用中においては不変となる)周辺装置のいわば「素性」を認識することのみが目的であり、例えば、コマンドの発生の前後で記憶媒体の交換があった場合において、交換通知情報の保持状態等に不要な影響を与えるべきではないので、上記の第二種コマンドして用意することが望ましいのである。これを周辺装置側トリガの発生監視用に流用することで、該コマンドを何度繰り返し発行しても交換通知情報の保持状態には影響が及ばず、前述のトラブルを防ぐことができる。
主通信プロトコルがSCSIプロトコルである場合、上記の調査要求コマンドとしてInquiry(照会)コマンドを使用することが望ましい。この場合、ホスト装置(イニシエータ)から周辺装置(ターゲット)に送られる調査指示データは、Inquiryコマンドの詳細内容を記述する、CDB(Command Descriptor Block:コマンド記述ブロック、コマンド毎にフレーム形式がSCSIプロトコルにて詳細に規定されている)であり、周辺装置(ターゲット)からホスト装置(イニシエータ)に返される調査報告データはInquiryデータ(フレーム形式がSCSIプロトコルにて詳細に規定されている)である。表1はInquiryコマンドに対応するCDBの形式を示すものである。
SCSIプロトコルでは、ホスト装置(イニシエータ)側で周辺装置(ターゲット)から返されるInquiryデータの種別を指定することができる。具体的には、Inquiryコマンドに対応するCDBには、EVPD(Enable Vital Product Data)と称されるフィールド(1ビット)と、ページコード(8ビット)と称されるフィールドが形成されている。表2に示すごとくEVPDフィールドに「0」が記述されているCDB(以下、CDB(0)と略記する)に対しては、Inquiryデータとして、表3に示すような、周辺装置の仕様に関係なく形式及び内容が共通に定められたスタンダードInquiryデータ(以下、S/Iデータと略称する)が返される。S/Iデータのうち、SCSIプロトコルによる通信制御に直接使用しない空き領域を、トリガ発生報告情報等、本発明特有の応答情報(以下、特有応答情報という)の記述フィールドとして使用することができる。
例えば、S/Iデータでは、デバイスのベンダに固有の情報を記述するための一定長のフィールド(以下、ベンダ固有領域という)が設けられており、このフィールドに空き領域がある場合は、これを本発明特有の応答情報の記述フィールドとして使用することができる。また、ビット数は僅少であるが、次のような空き領域も、本発明特有の応答情報の記述フィールドとして利用することができる。すなわち、8ビットに設定された追加データ長フィールド(S/Iデータのバイト5以降のデータ長)は、S/Iデータにおけるデータフレーム長の上限から、最大データ長が8ビットに満たないことがある。この場合、追加データ長フィールドに上記最大データ長を超えるデータ長が指定されている場合、追加データ長フィールドの記述内容によらず、最大データ長が指定されることとなる。その結果、最大データ長を超えるビット値の範囲は、実質的に特有応答情報を記述するための「空き領域」として活用できる。
一方、表4のごとく、EVPDフィールドに「1」が記述されているCDB(以下、CDB(1)と略記する)は、ホスト装置(イニシエータ)により詳細な、あるいはデバイス固有の情報を提供するための、表5のようなVPD(Vital Product Data)と称される特殊なInquiryデータが返される。
VPDにはいくつかの種類が規定されており、どの種別のVPDを指定するかをCDBのページコードフィールドに記述する(具体的には、ページコードリスト(ページコード:00h)、FRU ASCII情報(ページコード:01h〜7Fh)、ユニットシリアル番号(ページコード:80h)、動作モード定義(ページコード:81h)、ASCII動作モード定義(ページコード:82h)、及びベンダ固有の形式(ページコード:C0h〜FFh))。周辺装置はページコードフィールドで指定された種類のVDPを作成し、ホスト装置に返信する。特に、FRU ASCII情報形式及びASCII動作モード定義形式のVPDは、ページ長フィールドに続いて、必要なASCII情報を書き込むフィールドのデータ長のフィールドと、そのデータ長で指定されるASCII情報フィールドとが形成されるが、以降のフィールドはベンダ固有領域として、特有応答情報を記述するための「空き領域」として活用できる。例えば、ASCII動作モード定義形式のVPDにおいて、ASCII情報フィールドを、デバイスのバージョン情報などを記述するためのバイト数の小さい(例えば1〜3バイト)のフィールドとして定義すれば、ベンダ固有領域となる残りのフィールドの長さを比較的大きく確保することができ、ある程度サイズの大きい特有応答情報を書き込むことが可能となる。
SCSIプロトコルでは、ターゲット(周辺装置)、あるいはこれに含まれる1又は複数のロジカルユニット(周辺装置が記憶装置である場合は、1又は複数の記憶媒体装着スロットである)上で事象や状態の変化が、ホスト装置(イニシエータ)の動作とは非同期に発生した場合、これを該イニシエータに通知するためのユニット・アテンション・コンディションを生成する機能が設けられている。周辺装置にて記憶媒体の交換が発生した場合、その交換通知情報が生成されるユニット・アテンション・コンディションに反映されることとなる。SCSIプロトコルでは、そのようなユニット・アテンション・コンディションを保留中の周辺装置に向けてInquiryコマンドが発行された場合、該周辺装置は保留中のユニット・アテンション・コンディションをクリアせずに(ただし、Copy Aborded(CA)状態の生成前に限る)、発行されたInquiryコマンドが実行される(Inquiryデータの作成・返信)。従って、トリガ発生報告情報など特有応答情報の返信要求イベントを起動する際にあっては、Inquiryコマンドを用いることで、記憶媒体の交換がなされた場合も、その交換通知情報を含むユニット・アテンション・コンディションが保持され、交換通知情報の喪失を防ぐことができる。Inquiryコマンドが前述の第二種コマンドに該当するものであることは明らかである。
なお、SCSIプロトコルでは、Request Senseコマンドと称される別の調査要求コマンドも使用が可能である。Request Senseコマンドは、周辺装置(ターゲット)に例えばエラー原因や種類などを報告するためのセンスデータを要求するコマンドであり、調査報告データとして該センスデータが規定フォーマットのフレームに記述されて返される。本発明においては、このセンスデータの空き領域を利用してトリガ発生報告情報など特有応答情報を書き込み、ホスト装置に返すことも原理的には可能である。しかし、SCSIプロトコルでは、ユニット・アテンション・コンディションを保留中の周辺装置に向けてRequest Senseコマンドが発行された場合、該周辺装置は保留中のユニット・アテンション・コンディションをクリアするように(ただし、Copy Aborded(CA)状態の生成前に限る)決められており、記憶媒体の交換がなされた場合に、その交換通知情報を含むユニット・アテンション・コンディションがクリアされ、交換通知情報が喪失する惧れがある。つまり、Request Senseコマンドは前述の第一種コマンドに該当するものである。
以下、適宜図面を参照して本発明の第1の実施形態に係る通信システム1について説明する。図1は通信システム1に適用されるマルチリーダライタ2(記憶装置:周辺装置の一例)の斜視図、図2はマルチリーダライタ2の概略構成を示すブロック図、図3は通信システム1に適用されるPC3(ホスト装置の一例)の概略構成を示すブロック図である。なお、以下に説明する通信システム1の構成は、本発明を具現化するための単なる一例であり、本発明の要旨を変更しない範囲で構成を適宜変更できることは当然である。
図1(a)に示すように、マルチリーダライタ2は、その前面に着脱可能な記憶媒体として、第1メモリーカード11(例えばCF)を挿入するための第1スロット16と、第2メモリーカード12(例えばSM)を挿入するための第2スロット17と、第3メモリーカード13(例えばMS)を挿入するための第3スロット18と、第4メモリーカード14(例えばSD)を挿入するための第4スロット19とを備えている。また、本体側面部にロータリースイッチ22を備える。ロータリースイッチ22は、回転操作可能なダイアル操作部22aを有し、ダイアル操作部2の外周面をユーザーが手で回転操作させると、その停止位置に応じた出力をなすものである。なお、本実施形態では、周辺装置としてマルチリーダライタ2を例示して説明するが、シングルスロットタイプのリーダライタにも適用可能である。また、CFやSMなどのメモリーカードに代えてCD−ROM、DVD−ROMあるいはリムーバブルハードディスクなどのディスク記録メディアとする場合は、該ディスク記録メディアを単数あるいは複数着脱可能に挿入可能な挿入部を備えてなる、いわゆるチェンジャー型ドライブ周辺装置となる。該周辺装置を備えて構成された通信システムにも本発明は適用可能である。
マルチリーダライタ2はUSB/SCSI型周辺機器として構成され、その背面には、図1B及び図2に示すように、USBケーブルを接続するためのUSB端子24が設けられている。また、本実施形態では、主通信プロトコルとしてSCSI−2のプロトコルが採用されているものとする。図2に示すように、マルチリーダライタ2は、その内部に、各構成部を制御するCPU27と、制御プログラムや種々のデータ等を格納するROM28と、CPU27による演算の作業領域となるRAM29と、入出力制御LSI31と、USBチップ32とを備え、これらがバス33を介して相互にデータ転送が可能なように接続されている。マルチリーダライタ2は、該マルチリーダライタ2が接続されるPC3との間で、SCSIプロトコルに従うデータ通信を行なう。
具体的には、ROM28には、SCSIプロトコルに基づいて作成された通信制御プログラムと、PC3から送信されたデータ(CDB)を解析するために用いられる解析データのテーブルリストが格納され、CPU27は、リーダライタ2がSCSI対応機器のターゲットとして機能するための、受信したSCSIコマンドに対応した通信イベントの実行制御処理を行なう。また、各スロット16〜19に着脱可能に装着される各第1〜第4メモリーカード11〜14は、例えば、コンパクトフラッシュ(CF:登録商標)、スマートメディア(SM:登録商標)、メモリースティック(MS:登録商標)、SDメモリーカード(SD:登録商標)など、PC3によるデータの書き込み、書き換え、消去、読出し、メディア装着確認等のデータアクセスが可能なフラッシュメモリを搭載したカード型記憶メディアである。なお、記憶デバイスとしては、CD−ROM、DVD−ROM、リムーバブルハードディスク等の読出し専用の記憶媒体からデータの読出しを行なうドライブ装置を用いることもできる。
マルチリーダライタ2の本体側面部に備えられたロータリースイッチ22は、入力制御LSI30に接続され、ダイアル操作部22aをユーザーが回転操作して、所定の位置で停止させることにより、その停止位置に対応した出力をなすものである。ダイアル操作部22aの複数の停止位置が、後述するように、転送するファイル種別の選択に用いられる。
SCSIプロトコルに従い、PC3はホスト装置として通信イベントの起動決定権が与えられ、該PC3(ホスト装置:イニシエータ)に接続されるマルチリーダライタ2は、PC3(ホスト装置)の通信対象(ターゲット)となる。そして、通信イベントを実行命令するためのSCSIコマンドがPC3(ホスト装置)からマルチリーダライタ2(周辺装置)に向けて順次発行される一方、発行されたコマンドを受領したマルチリーダライタ2(周辺装置)が当該SCSIコマンドに対応するデータ処理を逐次実行し、その実行結果に応じた応答情報をホスト装置側に返信する。また、SCSIコマンドの発行方向は、PC3(ホスト装置)側からマルチリーダライタ2(周辺装置)側への一方向に規制されている。
次に、マルチリーダライタ2には、予め定められた内容の対象通信イベントの起動をホスト装置に促すための周辺装置側トリガを、該周辺装置側でのユーザー操作に基づいて発生させる周辺装置側トリガ発生手段の機能が具備されている。具体的には、スロット16〜19にメモリーカード(記憶媒体)11〜14の非装着状態から装着状態への移行を検出し、その検出信号を周辺装置側トリガとして発生させる、周辺装置側トリガ発生手段を構成する記憶媒体装着検出信号発生手段が設けられている。スロット16〜19にメモリーカード11〜14を装着することで、記憶媒体装着検出信号のレベルが変化する。この記憶媒体装着検出信号を周辺装置側トリガ信号として利用できる。
記憶媒体装着検出信号は外部メモリ入出力制御部51〜54に入力され、さらに外部メモリ入出力制御部51〜54からデータバス上に出力されたトリガ検出データ信号は、後述のInquiryコマンド実行時に参照され、トリガ検出データが「トリガあり」の状態を示していれば作成されるInquiryデータに「トリガあり」の内容で書き込まれる。つまり、スロット16〜19にメモリーカード11〜14が操作されているか否かの検出は、PC3からの指示に従って行われる。なお、Inquiryデータ作成後は、トリガ検出データ信号はリセットされる。
次に、USBチップ32には、各外部メモリ入出力制御部51〜54に共通して設けられたコマンド・データ・ステータス送受信部(以下、単に「送受信部」という;転送要素送受信部)341と、USB端子(通信バス接続端子)24に接続されたUSBプロトコルエンジン(プロトコルエンジン部)321と、転送通信処理の制御を司るUSBコントロール部(制御指令部)331とが集積されてなる。
ここで、USBプロトコルエンジン(プロトコルエンジン部)321と、USBコントロール部(制御指令部)331とで構成される部分が通信制御部に該当し、また、この通信制御部と、USB端子(通信バス接続端子)24とで構成される部分がシリアル通信部に該当する。
各USBコントロール部331は、対応するUSBプロトコルエンジン321にFIFOメモリからなる制御用の双方向エンドポイントを介して接続されている。また、送受信部341は、USBプロトコルエンジン321に対し、FIFOメモリからなるUSBプロトコルエンジン321への入力用エンドポイントと、FIFOメモリからなるUSBプロトコルエンジン321からの出力用エンドポイントとを介して入出力経路が分離された形で接続されている。
USBプロトコルエンジン321とUSBコントロール部331とで構成される通信制御部は、それぞれ、PC3側から、対象となる送受信部341の特定情報と、該送受信部341に対応するエンドポイントの特定情報とを受信して、送受信部341をターゲットデバイスとしてポーリングすることにより、データアクセス先となる外部メモリ入出力制御部51〜54とデータ送受信の方向とを特定する。なお、当然のことであるが、ターゲットデバイスとなる送受信部341側からホスト装置であるPC3を逆ポーリングすることは、USBプロトコルでは許されていない。
送受信部(転送要素送受信部)341は、USBプロトコルエンジン321との間でSCSIプロトコルに従う送受信するものである。ここで、転送要素とは、PC3との間でUSBバスを介してやり取りされる、通信イベントの内容を特定するコマンド(SCSIコマンド)と、通信イベント処理実行に対応して周辺装置側から返信される応答情報(ステータス)とを含む(SCSIコマンドに特定された処理内容が、メモリーカードに記憶されたデータの送受信に関係するデータアクセス処理であった場合は、そのデータも転送要素となる)。
また、送受信部341は、図3に示すように、コントロールレジスタ81(図4参照)、ステータスレジスタ82(図5参照)、コマンドバッファ83、SCSIステータスバッファ84、SCSIデータDMAアドレスレジスタ85、SCSIデータDMAカウントレジスタ86を有する。これらの詳細については後述する。
CPU27は、対象となる送受信部341が受信したSCSIコマンドを解析するコマンド解析ステップと、該SCSIコマンドに特定された内容の通信イベントを、対象となる外部メモリ入出力制御部51〜54(つまり、リーダライタ2をターゲットとした場合、それに含まれている複数のロジカルユニット)との間で行なうイベント実行ステップと、ステータスを送受信部341に送信させるステータス送信ステップと、をこの順序で実行する。
マルチリーダライタ2では、挿入されたメモリーカードに対してデータの読み書きを行なう場合は、該メモリーカードからデータを読み出すために使用するメモリ領域あるいは該メモリーカードにデータを記憶するために使用するメモリ領域の割り当てが行われる。この割り当てられるメモリ領域のデータ長はアロケーション長と呼ばれている。一般に、該アロケーション長はマルチリーダライタ2にアクセスするPC3からの指定されたデータ長に設定されるが、本実施形態では、マルチリーダライタ2で設定可能なアロケーション長の最大値が、PC3側から指定し得る最大数値未満に設定されている。
PC3は、図6に示すように、各構成部を制御するCPU41と、ROM42と、RAM43と、各種ソフトウェアプログラムやデータが格納されたHDD44と、ビデオコントロールLSI45と、USBチップ46と、ビデオ端子47と、複数の入出力ポートを有するUSB端子48などを備え、これらがバス49を介して相互にデータ転送が可能なように接続されている。これら各部はいわゆるマザーボードと呼ばれるメイン制御基板に一体的に組み込まれている。ビデオ端子47にはビデオケーブルを介してディスプレイ56が接続されている。USB端子48はUSBハブ機能を有する。このUSB端子48には、キーボード57及びマウス58等の入力手段が接続されており、さらに、マルチリーダライタ2が接続されている。
ROM42には、マルチリーダライタ2へ送信されるデータであって、マルチリーダライタ2のCPU27に所定の処理を実行させる指示データが格納されている。該指示データはテーブルリスト化された状態でHDD44又はROM42に格納されている。また、HDD44のプログラム格納領域には、PC3のオペレーションシステムであるWindows2000(登録商標)のSP3(以下「Win2000」と称する)や、マルチリーダライタ2へのデータの書き込み及び読み出しを可能とするためのR/Wアプリケーションなどのソフトウェアプログラムが格納されている。これらソフトウェアプログラムがCPU41によって読み出されて所定の演算処理がなされることにより、各アプリケーションがPC3において動作可能となる。また、上記プログラム格納領域には、マルチリーダライタ2との間でSCSIプロトコルに従うデータ通信プログラムが格納されている。本実施形態では、Win2000が搭載されたPC3を例示して説明するが、Linuxシリーズ、MacOSシリーズなどのOSが搭載されたものであってもよい。もちろん、Windows2000のSP3をSP4やWindowsXPに代替することも可能である。
さらにHDD44のプログラム格納領域には、マルチリーダライタ2から読み出されたデータを開くための各種アプリケーションソフト(例えば、静止画データを閲覧するための画像閲覧ソフト、音楽データを再生する音楽再生ソフト)が格納されている。
上記R/Wアプリケーション、PC3側のデータ通信プログラム及びリーダライタ2側の制御プログラムは、互いに協働して、以下の各手段を機能的に実現する処理を行なう。
・ファイル種別要求コマンド発行手段:PC3(ホスト装置)側のR/Wアプリケーションにより機能実現され、リーダライタ2(周辺装置)におけるロータリースイッチ22のダイアル操作部22aの停止位置を監視するために、SCSIプロトコル(主通信プロトコル)に従い、ファイル種別報告情報を応答情報として要求するためのファイル種別要求コマンドを、Inquiryコマンド、具体的には前述のCDB(1)を用いたInquiryコマンド(以下、Inq(1)コマンドという)として、リーダライタ2(周辺装置)に向けて発行する。
・ファイル種別報告情報返信手段:リーダライタ2側の制御プログラム(ROM28内)により機能実現され、ロータリースイッチ22のダイアル操作部22aの停止位置を反映したファイル種別報告情報を応答情報としてPC3(ホスト装置)にSCSIプロトコルに従い返信する。
・ファイル種別設定手段:R/Wアプリケーションにより機能実現され、ファイル種別報告情報をリーダライタ2から受領して、選択されたファイル種別を読み出し対称として設定する。
・トリガ報告要求コマンド発行手段:PC3(ホスト装置)側のR/Wアプリケーションにより機能実現され、リーダライタ2(周辺装置)においてボタン(手動操作部)3が操作されるに伴い発生する周辺装置側トリガを監視するために、SCSIプロトコル(主通信プロトコル)に従い、トリガ発生報告情報を応答情報として要求するためのトリガ報告要求コマンドを、Inquiryコマンド、具体的には前述のCDB(1)を用いたInquiryコマンド(以下、Inq(1)コマンドという)として、リーダライタ2(周辺装置)に向けて発行する。
・トリガ発生報告情報返信手段:リーダライタ2側の制御プログラム(ROM28内)により機能実現され、周辺装置側トリガの発生の有無を反映したトリガ発生報告情報を応答情報としてPC3(ホスト装置)にSCSIプロトコルに従い返信する。
・報告情報受領手段:R/Wアプリケーションにより機能実現され、トリガ発生報告情報をリーダライタ2から受領する。
・対象通信イベント起動手段:R/Wアプリケーションにより機能実現され、受け取ったトリガ発生報告情報の内容に基づいて周辺装置側トリガの有無を判定し、該周辺装置側トリガがありと判定された場合に、対象通信イベント、具体的には、リーダライタ2に装着されたメモリーカード11〜14に格納されたデータファイルの中から選択されたファイル種別のデータファイルを読み出す。
・アプリ起動手段:メモリーカード11〜14から読み出されたデータファイルのデータを開くために、そのデータに対応するアプリケーションソフトを起動する。
まず、図7を用いて、SCSIコマンドに基づいて、PC3と、USB−I/F78を介して該PC3とUSB接続されたリーダライタ2との間で行われるデータ通信の概略について説明する。OS70は、GUI(Graphical User Interface)71とファイルシステム72とOSカーネル73を備えてその基幹システムが構成されている。GUI71は、コンピュータグラフィックスとマウスなどのポインティングデバイスを用いてユーザーの入力操作を実現するユーザインターフェースであり、ファイルシステム72は、コンピュータ内部でファイルやフォルダを用いてデータを管理する方式及びその管理システムである。また、OSカーネル73はアプリケーションや周辺機器を監視する等の基本機能を実装したソフトウェアである。なお、PC3には、リーダライタ2へのアクセスが可能なようにドライバソフト74が予めインストールされており、該ドライバソフト74はモジュール化された状態でOSカーネル73に実装されている。
例えば、リーダライタ2へアクセスするためのアプリケーションの一例であるエクスプローラ75とR/Wアプリケーション76とがPC3上で起動されたとする。エクスプローラ75は周知のごとく、ファイルやフォルダを管理するためのものである。エクスプローラ75はOS70のシステムに準拠して作成されており、一般には、OS70の一機能として認識されている。従って、エクスプローラ75はファイルシステム72を介してリーダライタ2と通信する。一方、R/Wアプリケーション76は、例えばリーダライタ2の製造メーカが開発した独自のアプリケーションソフトであって、リーダライタ2に挿入された記録メディアに対してデータを書き込む処理あるいはデータを読み出す処理を行なうものである。一般に、R/Wアプリケーション76は、ファイルシステム72の仕様が公開されていないため、OS70には準拠せずに作成される。
まず、エクスプローラ75からリーダライタ2にアクセスする場合について説明する。OS70が起動され、エクスプローラ75が起動されると、エクスプローラ75によって、Inquiryコマンドがファイルシステム72を介してOSカーネル73に発行される。なお、Inquiryコマンドを含む全てのSCSIコマンドは、OSカーネル73において仮想的に設けられたSCSIコマンド処理入口79に対して発行されるようになっている。上記Inquiryコマンドが発行されると、リーダライタ2へは対応するCDB(ここではCDB(0);表2)が送信され、リーダライタ2は応答情報として、その型式やデバイス名、SCSI−ID、LUN(Logical Unit Number:ロジカルユニット番号)の有無、メモリーカードの種別などの構成情報を含むInquiryデータ(この場合、S/Iデータ(表3))を作成し、PC3に返信する。これにより、リーダライタ2が認識される。
リーダライタ2が認識されると、GUI71によってエクスプローラ75上にリーダライタ2のドライブアイコンが生成される。そして、ユーザーがマウスなどを用いて上記ドライブアイコンにアクセスするなどして、データの読出指示が入力されると、エクスプローラ75はファイルシステム72に働きかけて、OSカーネル73に対してReadコマンド(SCSIコマンドの一例)を発行させる。一方、同様に、書込指示を入力すると、OSカーネル73に対してWriteコマンド(SCSIコマンドの一例)を発行させる。これらのコマンドデータがUSBなどのI/Fを介してリーダライタ2に転送され、該コマンドに従った読み出し若しくは書き込みがリーダライタ2側で実行される。なお、上記InquiryコマンドはPC3にリーダライタ2が接続されたときや、リーダライタ2が接続された状態でPC3の電源がリセットされたときにも発行される。
次に、R/Wアプリケーション76からリーダライタ2にアクセスする場合について説明する。R/Wアプリケーション76が起動されると、OSカーネル73に対してR/Wアプリケーションにのみデータバスを開放する要求が出される。OSカーネル73はこの要求を受けてR/Wアプリケーション76にデータバスを占有させる。換言すれば、ファイル72からSCSIコマンド処理入口79に対して発行されたSCSIコマンドを該SCSIコマンド処理入口79で受け入れないようにする。従って、R/Wアプリケーション76の起動中は、ファイルシステム72はリーダライタ2へアクセスできなくなる。また、R/Wアプリケーション76が起動されると、GUI71によってR/Wアプリケーション76でプログラムされた入力画面(ユーザインターフェース画面)がディスプレイ上に表示される。また、ドライバソフト74によって、InquiryコマンドがOSカーネル73に発行されて、その応答情報であるInquiryデータ(この場合、表3のS/Iデータ)の返信により、リーダライタ2の型式やデバイス名などの構成情報が取得される。これにより、リーダライタ2が認識される。その後、ドライバソフト74によってOSカーネル73に対して出されたReadコマンドやWriteコマンドに従って、リーダライタ2側でデータの読み出し若しくは書き込みが実行される。
なお、リーダライタ2の認識は次のようにして行われる。すなわち、まず、OSカーネル73に対してInquiryコマンドを発行した際に生成されるCDB(0)(表2)をリーダライタ2に送信する。該CDB(0)を受信したリーダライタ2側では、CDB(0)に含まれる種々の情報を参照して、該情報に従った構成情報を生成し、該構成情報を含むS/Iデータ(表3)をPC3へ返信する。この返信されたS/Iデータに基づき、リーダライタ2が認識される。
なお、リーダライタ2(ターゲット:周辺装置)上のいずれかのスロット(あるいは外部メモリ入出力制御部:ロジカルユニット)上で、メモリーカードの交換(つまり、事象や状態の変化)がなされると、PC3(イニシエータ)に通知するためのユニット・アテンション・コンディションが生成される。PC3のファイルシステムは、このユニット・アテンション・コンディションを参照してメモリーカードの交換を認識し、FAT(ファイル・アロケーション・テーブル)等のファイル情報の更新を行なう。このようなユニット・アテンション・コンディションを保留中のロジカルユニットに向けてInquiryコマンドが発行された場合、該ロジカルユニットは保留中のユニット・アテンション・コンディションをクリアせずに、Inquiryコマンドを実行する。つまり、Inquiryコマンドが実行された場合でも、該ユニット・アテンション・コンディションに反映されているメモリーカードの交換通知情報は消去されずに保持されるので、PC3のファイルシステムは、交換後のメモリーカードに対するアクセスを問題なく行なうことができる。
次に、リーダライタ2のより具体的な動作について、図8のフローチャートを用いて説明する。なお、以下の説明では、1つのスロットに対する処理についてのみ行っている。複数のスロットに対しては、当該処理が割り込み処理により並列して行われる。CPU27は、PC3からUSBケーブルを介して供給される電源(バスパワー)によりONされると(T1)、USBチップ32からの割り込みを許可する状態となる(T2)。USBチップ32では、PC3側からUSBバス上を伝送してきたコマンドを、USBプロトコルエンジン321及びUSBコントロール部331の動作によって送受信部341に転送する。なお、ここではまだ、コマンドを受け取ったことを示すレスポンスを返さない。
送受信部341は、コマンドを受け取ると、ステータスレジスタ82の「コマンド受信完了」bitを1にし、CPU27に割り込みを掛ける。この場合、CPU27は、ステータスレジスタ82を参照することで何のための割り込みなのかを把握することができる。また、受け取ったコマンドは、コマンドバッファ83に格納される。
CPU27は、割り込みがあり(T3:YES)、SCSIコマンドの受信が完了すると(T4:YES)、送受信部341が受け取ったコマンドの解釈を行なう(T5)。すなわち、CPU27は、送受信部341のステータスレジスタ82を参照し、送受信部341がコマンドを受け取ったことを知ると、コマンドバッファ83からコマンドを取得して、それを解釈する。これにより、CPU27は、SCSIデータの有無や伝送方向、大きさを把握する。
CPU27は、コマンドの解釈によって、SCSIデータが無いと把握した場合(例えば、InquiryコマンドやTest Unit Readyコマンドの場合)およびSCSIデータの伝送方向がデバイス→PC(送信)であると把握した場合(例えば、Readコマンドの場合)には(T6:YES)、送受信部341のコントロールレジスタ81の「コマンド受付完了」bitと「ステータスレジスタクリア」bitに1を書き込む(T7)。
送受信部341は、T7で「コマンド受付完了」bitに1が書き込まれた時点で、PC3に対してコマンドを受け取ったことを示すレスポンスを返す。ここで、PC3側は、レスポンスを受け取ると、SCSIデータが無い場合には次がSCSIステータスの受信で、SCSIデータの伝送方向がデバイス→PCである場合には次がSCSIデータの受信であるので、デバイス待ちの状態に遷移する。
他方、CPU27は、コマンドの解釈によって、SCSIデータの伝送方向がPC→デバイス(受信)であると把握した場合(例えば、Writeコマンドの場合)には(T6:NO)、PC3からのSCSIデータを受信する準備をする(T8)。具体的には、RAM29上に受信に必要な領域を確保し、その先頭アドレスをSCSIデータDMAアドレスレジスタ85に書き込み、受信するバイト数をSCSIデータDMAカウントレジスタ86に書き込む。その後、送受信部341のコントロールレジスタ81の「コマンド受付完了」bitと「ステータスレジスタクリア」bitに1を書き込む(T9)。
送受信部341は、T9で「コマンド受付完了」bitに1が書き込まれた時点で、PC3に対してコマンドを受け取ったことを示すレスポンスを返す。ここで、PC3側は、レスポンスを受け取ると、デバイス側でコマンドを解釈してSCSIデータを受け取る準備が出来たと認識して、SCSIデータの送信を開始する。
そして、送受信部341は、SCSIデータDMAカウントレジスタ86が0になった時点で、ステータスレジスタ82の「データ受信完了」bitを1にし、CPU27に割り込みを掛ける。
CPU27は、割り込みがあると(T10:YES)、送受信部341のコントロールレジスタ81の「データ受取完了」bitと「ステータスレジスタクリア」bitに1を書き込んで、SCSIデータの受信を完了する(T11:YES)。ここで、PC3側は、SCSIデータがデバイスに到達されたことが通知され、次がSCSIステータスの受信であるので、デバイス待ちの状態に遷移する。
T7およびT11(YES)の後には、CPU27は、コマンドを実行する(T12)。例えばTest Unit Readyコマンドなら、第1〜第4メモリーカード11〜14が挿入されているか否かを判断する。例えばReadコマンドなら、第1〜第4メモリーカード11〜14からデータを読み出す。例えばWriteコマンドなら、この時点で書き込むべきデータをPC3から受け取っているので(上述のT8〜T11)、それを第1〜第4メモリーカード11〜14に書き込む。
次に、CPU27は、SCSIデータの伝送方向がデバイス→PC(送信)である場合(例えば、Readコマンドの場合)には(T13:YES)、読み出したデータをPC3へ送信する準備をする(T14)。具体的には、RAM29上に送信に必要な領域を確保して読み出したデータを格納するとともに、その先頭アドレスをSCSIデータDMAアドレスレジスタ85に書き込み、受信するバイト数をSCSIデータDMAカウントレジスタ86に書き込む。そして、送受信部341のコントロールレジスタ81の「データ送信開始」bitに1を書き込む。
送受信部341は、T14で「データ送信開始」bitに1が書き込まれた時点で、PC3へSCSIデータの転送を開始する。そして、送受信部341は、SCSIデータの転送が終わったら、ステータスレジスタ82の「データ送信完了」bitを1にし、CPU27に割り込みを掛ける。
CPU27は、割り込みがあると(T15:YES)、SCSIデータの転送が終わったことを把握するので、送受信部341のコントロールレジスタ81の「ステータスレジスタクリア」bitに1を書き込んで、SCSIデータの送信を完了する(T16:YES)。
T13(NO)およびT16(YES)の後には、CPU27は、SCSIステータスの送信を開始する(T17)。具体的には、CPU27は、上記処理の中で、PC3に返すべきステータスを既に決定しているので、そのステータスをSCSIステータスバッファ84に書き込み、送受信部341のコントロールレジスタ81の「ステータス送信開始」bitに1を書き込んで、SCSIステータスの送信を開始する。
送受信部341は、T17で「ステータス送信開始」bitに1が書き込まれた時点で、PC3へSCSIステータスの送信を開始する。そして、送受信部341は、PC3側からSCSIステータスを受け取ったレスポンスを受けると、ステータスレジスタ82の「ステータス送信完了」bitを1にし、CPU27に割り込みを掛ける。
CPU27は、割り込みがあると(T18:YES)、SCSIステータスの送信が終わったことを把握するので、送受信部341のコントロールレジスタ81の「ステータスレジスタクリア」bitに1を書き込んで、SCSIデータの送信を完了する(T19:YES)。これにより、送受信部341のステータスレジスタ82がクリアされて、元の状態に戻る。
次に、本通信システム1において、Inquiryデータを用いた本発明の主要機能に係るデータ通信処理の流れの一例について説明する。なお、各ステップにおける処理(請求項に記載した機能実現手段)は、PC3のCPU41あるいはマルチリーダライタ2のCPU27によって各構成部が制御されることにより行われる。図9は、主処理の流れを示すフローチャートである。すなわち、PC3にマルチリーダライタ2が接続され、各装置に電源が投入されると、まず、PC3に接続されている不明なデバイスに対してドライブを割り当てるドライブ割当処理(S1)が実行される。本実施形態では、デバイスとしてマルチリーダライタ2だけが接続されているため、これのみにドライブが割り当てられる。
次に、ユーザーによって選択されたドライブを通信相手として設定するドライブ設定処理(S2)が行われる。ドライブが設定されると、設定されたドライブに対応するデバイス(本実施形態ではマルチリーダライタ2)が通信相手として認識される。そして、マルチリーダライタ2へのメモリーカードの装着状態、つまり、周辺装置側トリガの発生を監視するための周辺装置側トリガ監視処理(S3)が実施される。該周辺装置側トリガ監視処理(S3)を含む主処理ルーチンは、起動管理タイマールーチンから定期的に出される起動トリガを用いる等により、一定の時間間隔(例えば100ms〜1000ms:例えば500ms)で繰り返し定常的に実行される。
図10は、PC3においてCPU41により実行されるドライブ割当処理(S1)の詳細を示すものである。まず、参照されるドライブ(以下「参照ドライブ」と称する)がAドライブに初期設定される(S101)。該参照ドライブは、PC3側で割り当て可能なドライブのことを意味するものであって、該ドライブが複数存在する場合はドライブの割り当て処理時に昇順で参照される。参照ドライブは、PC3のOS2000のOSカーネルで管理されている。本実施形態では、割り当て可能なドライブ数をA〜Zの26個としている。
参照ドライブが設定されると、次に、CPU41によって、ドライブが割り当てられるデバイスからS/Iデータを返信させるためのInquiryコマンド(以下「Inq(0)コマンド」と称する)が参照ドライブに対して発行される(S102)。実際には、CPU41によって該Inq(0)コマンドがOSカーネルに対して発行され、該OSカーネルにおいて該Inq(0)コマンドが参照ドライブに発行されたものとして取り扱われる。そして、OSカーネルにより、EVPD領域が“0”に設定されたCDB(0)が生成されて、参照ドライブに関連づけられた不明デバイスに送信される。SCSI規格では、EVPD領域が“0”に設定されている場合はS/Iデータを返信するよう定義されている。CDB(0)の具体例は、前述のごとく表2に示している。なお、表2のデータ欄には、各データが16進数表記で示されている。本明細書において特に明示しない限り、データ欄はすべて16進数表記で示すものとする。
参照ドライブに関連づけられたデバイスが存在する場合であって、該デバイスがSCSIコマンドを処理することができるデバイス(SCSIコマンド対応デバイス)である場合は、該デバイスからS/Iデータが返信される。一方、デバイスが存在しない場合、あるいは存在していても該デバイスがSCSIコマンドを処理することができない場合(SCSIコマンド非対応デバイス)は、該デバイスからS/Iデータは返信されない。S103では、S/Iデータの返信の有無に基づいてCPU41によってエラー判定が行われる(S103)。具体的には、S/Iデータの返信がない場合はエラーと判定される(S103のYes側)。この場合、その後の処理はステップS107に進む。また、S/Iデータの返信がある場合はエラーと判定されない(S103のNo側)。すなわち、当該参照ドライブに関連づけられたデバイスが存在すると判定される。この場合、その後の処理はステップS104に進む。
S103においてエラーでないと判定されると、返信されたS/Iデータに基づいて、参照ドライブに関連づけられたデバイスが通信対象となり得るデバイスであるかどうか、すなわち、通信可能なデバイスであるかどうかが判定される。本実施形態では、当該ステップは、参照ドライブに関連付けられたデバイスがマルチリーダライタ2であるかどうかを判定するために行われる。また、本実施形態では、マルチリーダライタ2から、表3に示すS/IデータがPC3へ返信されるようになっており、当該ステップにおける判定処理は、返信されたS/Iデータのバイト0の領域やバイト1の領域のデータ、あるいは、バイト8〜15の領域のベンダIDや、バイト16〜31の領域のプロダクトIDなどが、PC3側で予め登録しておいたID情報等と一致しているかどうかによって行われる。当該ステップで、通信可能なデバイスであると判定されると(S104のYes側)、処理はステップS105に進み、通信可能なデバイスではないと判定されると(S104のNo側)、処理はS107に進む。なお、表3中のバイト0領域のデータ「0x00」はダイレクトアクセスデバイスを示し、バイト1の領域のデータ「0x80」は可換記憶媒体を示すものである。上述の各バイト領域に記述される内容については、SCSI規格で定義されているため、詳細については、当該規格書を参照されたい。
処理がS105に進むと、ここでは、返信されたS/Iデータに基づいて、当該参照ドライブのLUNが“0”であるかどうかがCPU41によって判定される。かかる判定は、S/Iデータにおけるベンダ固有領域のバイト54の領域のデータに基づいて行われる。本実施形態では、上述したように、マルチリーダライタ2から、表3に示すS/IデータがPC3へ返信されるようになっている。また、表3のバイト54領域の備考欄にも記載しているように、マルチリーダライタ2では、S/Iデータを返信する際に、バイト54の領域の上位4ビットに該マルチリーダライタ2の物理的I/Fを示す情報(本実施形態ではUSBであることを示す情報)が格納され、下位4ビットにLUNの番号を格納するようにプログラミングされている。従って、CPU41は、バイト54の領域のデータを参照すれば、LUNの情報を取得することができる。これにより、当該ステップの判定処理を行なうことができる。例えば、バイト54の領域に「0x10」が格納されている場合は、物理的I/FがUSB接続コネクタであって、LUNが0であることが取得され、「0x23」が格納されている場合は、物理的I/FがSCSI接続コネクタであって、LUNが3であることが取得される。
S105で、LUNが“0”であると判定されると(S105のYes側)処理はS106に進み、LUNが“0”でないと判定されると(S105のNo側)処理はS107に進む。なお、OS2000がインストールされたPC3と接続されている場合は、マルチリーダライタ2側でバイト54の領域に、例えばLUN=1の情報を格納したとしても、PC3側ではLUN=0として認識するようになっている。そのため、当該S105の処理は必ずYes側に進むことになる。この場合は、S105の判定処理は意味を成さないため省略してもよい。
S106では、現在の参照ドライブを対応ドライブリストに追加する処理が実行される。対応ドライブリストは、最終的にドライブが割り当てられる参照ドライブをリストアップしたものである。詳細には、該対応ドライブリストがRAM43の所定の記憶領域に展開されており、該当する参照ドライブが該記憶領域に書き込まれる。その後、処理はS107に進む。
S107では、参照ドライブがZドライブであるかどうかがCPUS41によって判定される。例えば、カウンタメモリなどにドライブの参照順をカウントさせておき、そのカウンタ値をCPU41が監視することにより、現在の参照ドライブがZドライブであるかどうかの判定が可能である。かかる判定は、設定された参照ドライブが最後であるかどうかを判定するために行われる。ここで、参照ドライブがZドライブであると判定されると、参照可能なドライブが存在しないため、続く処理はS109に進む。参照ドライブがZドライブではないと判定されると、参照ドライブを次順のドライブに設定した後に(S108)、S102からの処理がS107においてYesと判定されるまで繰り返し行われる。
処理がS109に進むと、ここでは、対応ドライブリストに基づいてドライブの割り当てがなされる。これにより、一連のドライブ割当処理(S1)が終了する。なお、本実施形態では、外部ストレージデバイスとしてマルチリーダライタ2のみが接続されているため、Aドライブに対してマルチリーダライタ2が割り当てられ、他のドライブには何ら割り当てられないものとする。
続いて、図11は、ドライブ設定処理(S2)の詳細を示すものである。S201では、前記ドライブ割当処理(S1)によって割り当てられたドライブ(以下「対応ドライブ」と称する)が存在するかどうかが判定される(S201)。すなわち、PC3で割当可能なドライブのいずれかに所定のデバイスが割り当てられたかどうかが判定される。本実施形態では、マルチリーダライタ2が割り当てられたAドライブが存在するため、対応ドライブがあると判定される。その後、対応ドライブが1つであるかどうかが判定される(S202)。一方、S201で、対応ドライブが存在しないと判定されると(S201のNo側)、通信対象が存在しないため、処理が終了する。
S202で対応ドライブが1つであると判定されると(S202のYes側)、当該対応ドライブが通信対象として設定される(S205)。すなわち、当該対応ドライブに関連付けられたデバイスが通信対象に設定される。なお、本実施形態では、Aドライブが通信対象として設定される。換言すれば、マルチリーダライタ2が通信対象のデバイスとして設定される。
一方、対応ドライブが複数存在すると判定された場合は(S202のNo側)、対応ドライブを示すアイコンをダイアログ表示させる(S203)。その後、ユーザーからいずれかのアイコンが選択されることによって所望の対応ドライブが選択されると(S204)、選択された対応ドライブが通信対象として設定される(S205)。なお、いずれのアイコンも選択されない場合であっても、例えば、対応ドライブごとに優先度が設定されている場合は、最も優先度の高い対応ドライブが通信対象に自動的に設定される。これにより、一連のドライブ設定処理(S2)が終了する。
次に、図12は、周辺装置側トリガ監視処理(S3)の詳細を示すものである。
まず、PC3側において、ロータリースイッチ22のダイアル操作部22aの停止位置を取得するためマルチリーダライタ2から該マルチリーダライタ2のVPD(Vital Product Data)を返信させるためのInquiryコマンド(以下「Inq(1)コマンド」と称する)がAドライブに対して発行される(S301)。実際には、該Inq(1)コマンドが、OSカーネル73に対して発行され、該OSカーネル73によってAドライブに対して発行されたものとして取り扱われる。上記Inq(1)コマンドが発行されると、OSカーネル73によって、EVPD領域が“1”に設定されたCDB(1)が生成されて、Aドライブに関連づけられたマルチリーダライタ2にUSBケーブル25を介して送信される。このとき生成されるCDB(1)を表4に示す。すなわち、該CDB(1)のバイト2の領域にはページコード「0xE0」が記述されている。
CDB(1)のバイト4の領域、すなわちアロケーション長領域には「0x10」(2進数表記では「00010000」)が格納されている。本来、アロケーション長領域には、接続されたデバイスに要求するデータ長が格納される。本実施の形態では、マルチリーダライタ2のアロケーション長の最大値が予め固定長(ここでは、仮に15バイトとしているが、これに限定されるものではない)に設定されている。この“15”という数は下位4ビットで表現できる。SCSI規格に従えば、マルチリーダライタ2において設定された上記最大値以上の数値がアロケーション長として指定されたとしても、マルチリーダライタ2のアロケーション長は上記最大値、すなわち、15バイトに設定される。従って、アロケーション長領域に「0x10」が記述されていても、また、「0x11」以上が記述されていても、アロケーション長は15バイトに設定される。これは、アロケーション長領域のデータのうち、上位4ビットのいずれかのビットが「1」である場合は、該アロケーション長領域のデータを(アロケーション長の設定値に兼用された)任意のデータ(付加情報)として自由に使用することができるということを意味する。すなわち、上位4ビットのいずれかのビットを「1」とすることにより、アロケーション長領域における当該ビット以外のビットを、いわば仮想的な空き領域として確保することができる。このように確保された仮想的な空き領域に任意のデータを付加することで、PC3とマルチリーダライタ2との間で、上記付加情報に係るデータ通信が可能となるのである。
なお、上記アロケーション長は常に固定長(ここでは15バイト)に設定されるのではなく、CDB(1)のページコードに応じてその最大値が設定されるようにしてもよい。例えば、ページコード「0xE0」の場合は、アロケーション長の最大値が15バイトの固定長に設定され、ページコード「0xE2」の場合は、9バイトの固定長に設定される。かかる設定処理は、CDB(1)を受信したマルチリーダライタ2のCPU27によってページコードの内容が読み取られ、読み取られた内容に応じて、予めROM28に格納しておいた固定長対応リストから該当する固定長を選定することにより行われる。もちろん、15バイトあるいは9バイトと定めた上記アロケーション長は任意に設定することができる。
表6に、上記アロケーション長領域に確保された空き領域に付加される通信データを類別して示す。各表のデータ内容欄に示すように、各データには、それ自体が何を意味するものであるのかが定義づけられている。具体的には、データ内容欄の記載を参照されたい。なお、表6はページコードが「0xE0」の場合に送信される通信データであるが、CDB(調査指示データ)において、このページコード(調査指示データ種別識別情報)を変更すれば、アロケーション長最大値や付加情報内容の異なる別の調査指示データフォーマットを生成することができる。
表6の左欄には、アロケーション長領域に記述されるデータそのものが、右欄にはそのデータの意味する内容が示されている。PC3側からマルチリーダライタ2に上記左欄のデータが送信されると、マルチリーダライタ2側では、CPU27により、受信したCDB(1)からアロケーション長領域のデータが抽出され、抽出されたデータの内容が解析され、そして、解析されたデータの内容に従った処理が実行される。なお、表6に示す内容は、テーブルリスト化されて、PC3のHDD44又はROM42と、マルチリーダライタ2のROM28に予め格納されている。
上記S301でInq(1)コマンドが発行されて生成されたCDB(1)には、アロケーション長領域に「0x11」が記述される(表4は、後述するアロケーション長領域に「0x10」が記述された例を示している)。従って、Inq(1)コマンドは、PC3からマルチリーダライタ2に対して、ロータリースイッチ22のダイアル操作部22aの停止位置に対応したファイル種別情報を読み出させるための命令であることを意味する。一方、マルチリーダライタ2側では、送信されたCDB(1)が受信される。その後、CPU27によって、CDB(1)内のアロケーション長領域のデータ「0x11」が抽出され、そして、該データに従って、ロータリースイッチ22のダイアル操作部22aの停止位置を検出する処理が行われる(S302)。
ロータリースイッチの停止位置の検出が終了すると、その検出結果がVPDにロータリースイッチの位置情報(ファイル種別情報に対応する)として書き込まれ(S303)、CPU27によってPC3へ返信される(S304)。該返信処理は、具体的には、CDB(1)の受信後に生成されてPC3へ返信されるVPD(表7参照)に上記検出結果を書き込むことにより行われる(S304)。より詳細には、表7に示すように、バイト8の領域にロータリースイッチの停止位置が書き込まれる。ロータリースイッチ22のダイアル操作部22aの停止位置とファイル種別との対応関係は、予めPC3上にてユーザーによって設定されており、ロータリースイッチ22の位置情報は、ファイル種別情報となる。本実施形態では、ダイアル操作部22aが静止画を送信する停止位置にセットされている場合は「0x00」が書き込まれ、動画、音楽ファイルを送信する停止位置の場合は「0x01」が書き込まれ、テキストファイルを送信する停止位置の場合は、「0x02」が書き込まれる。なお、表7は動画、音楽ファイルの場合のVPDを示す。
続いて、PC3側では、マルチリーダライタ2から返信されるVPDを受信して、該VPDのバイト8の領域を参照することにより、ロータリースイッチ22のダイアル操作部22aの停止位置(すなわちファイル種別)が判定される(S305)。
次に、PC3側において、メモリーカード11〜14装着の有無を取得するためマルチリーダライタ2から該マルチリーダライタ2のVPD(Vital Product Data)を返信させるためのInquiryコマンド(以下「Inq(1)コマンド」と称する)がAドライブに対して発行される(S306)。具体的には、前述のステップと同様の処理が行われる。すなわちEVPD領域が“1”に設定されたCDB(1)が生成されて、Aドライブに関連づけられたマルチリーダライタ2に送信される。このとき表4に示されたCDB(1)が生成される。すなわち、該CDB(1)のバイト2の領域にはページコード「0xE0」が記述されている。
CDB(1)のバイト4の領域、すなわちアロケーション長領域には「0x10」(2進数表記では「00010000」)が格納されている。本実施の形態では、マルチリーダライタ2のアロケーション長の最大値が予め固定長(ここでは、仮に15バイトとしているが、これに限定されるものではない)に設定されており、前述のステップ同様に、上位4ビットのいずれかのビットを「1」とすることにより、アロケーション長領域における当該ビット以外のビットを、いわば仮想的な空き領域として確保することができる。なお、上記アロケーション長は常に固定長(ここでは15バイト)に設定されるのではなく、CDB(1)のページコードに応じてその最大値が設定されるようにしてもよい。
上記S306でInq(1)コマンドが発行されて生成されたCDB(1)には、表4に示すように、アロケーション長領域に「0x10」が記述されている。従って、Inq(1)コマンドは、表6に示すようにPC3からマルチリーダライタ2に対してメモリーカード11〜14の装着状態に対応したトリガ検出データ信号を読み出させるための命令であることを意味する。一方、マルチリーダライタ2側では、送信されたCDB(1)が受信される。その後、CPU27によって、CDB(1)内のアロケーション長領域のデータ「0x10」が抽出され、そして、該データに従って、装着状態(トリガ検出データ信号のレベル)を検出する処理が行われる(S307)。
メモリーカード11〜14の装着状態検出が終了すると、その検出結果がVPDに装着発生有無情報として書き込まれ(S308)、CPU27によってPC3へ返信される(S309)。該返信処理は、具体的には、CDB(1)の受信後に生成されてPC3へ返信されるVPD(表7参照)に上記検出結果を書き込むことにより行われる。より詳細には、表7に示すように、バイト7の領域にメモリーカード装着のありなし(トリガ検出データ信号のありなし)が書き込まれる。本実施形態では、操作なしの場合は「0x00」が書き込まれ、操作ありの場合は「0x01」が書き込まれる。なお、表7は操作ありの場合のVPDを示す。
続いて、PC3側では、マルチリーダライタ2から返信されるVPDを受信して、該VPDのバイト7の領域を参照することにより、メモリーカード11〜14の装着状態が判定される(S310)。メモリーカード11〜14の装着ありと判定されると(S311のYes側)、このあと説明する装着連動ファイル処理ルーチン(図13)に、マルチリーダライタ2に装着されたメモリーカード(記憶媒体)のデータファイルに対する、該データファイル受信を含む予め定められたファイル処理(通信イベント)を指令する(S312)。
図13は、上記装着連動ファイル処理ルーチンを示すフローチャートである(このルーチンは、定期的に繰り返し実行されるものである)。S401では、ユーザー入力による設定カスタマイズコマンドがあるかどうかを調べる。設定カスタマイズコマンドがある場合はS407の設定カスタマイズ処理に移る。
図14は、設定カスタマイズ処理の流れを示すもので、S501ではマルチリーダライタ2からのファイル転送モードを、マウス53あるいはキーボード52により入力・選択する。ファイル転送モードには、メモリーカード11〜14から転送されたデータファイルを、HDD44(データファイル保存手段)上の予め定められたフォルダ(保存領域)にコピーする(この場合、メモリーカード2からデータファイルは削除されない)コピーモードと、同じくムーブ(移動:メモリーカード11〜14からデータファイルが削除される)するムーブモードとがあり、上記の入力内容に従い、S502〜S506で、そのいずれかが選択可能される。また、S507では、データファイルの格納先を指定する入力を行なう。データファイルの格納先の指定は、例えば、周知のごとくディスプレイ51に、ファイルディレクトリ構造をフォルダツリー形式で表示し、マウス53によるクリックにより、格納先とするフォルダを選択することができる。S508で選択されたフォルダがファイル格納先として設定される。
図13に戻り、S401で設定カスタマイズコマンドのない場合は、上記のように設定された条件に従い、ファイル処理が行なわれる(設定カスタマイズが実施されていない場合は、デフォルト設定に従う)。具体的にはS402に進み、前述の「装着あり」検出に対応するファイル処理の起動指令を受けたかどうかを確認する。受けた場合はS403に進み、OSのファイルシステムを用いてメモリーカードのデータファイルを読み出す通信イベントを起動する。そしてS404で、受信したデータファイルを保存先として指定されているHDD42内のフォルダに書き込む。次いでS405に進み、コピーモードが選択されている場合はここでファイル処理を終了するが、ムーブモードが選択されている場合はさらにS406に進み、メモリーカードの送信元となるデータファイルを削除する通信イベントを起動し、削除完了のステータスを受領する。そして、S408にてPC3に送信されたデータファイルのファイル種別に対応するHDD44(アプリ記憶手段)に記憶されたアプリケーションソフトを起動し、そのアプリケーションソフト上にて送信されたデータファイルを開き、再生、閲覧等が行われる。ロータリースイッチ22のダイアル操作部22aの停止位置と起動されるアプリケーションソフトとの対応関係が予めユーザーによって設定されていることにより、例えば、静止画のデータファイルがメモリーカード11〜14からPC3へ送信された場合は、画像閲覧ソフトが起動され、音楽のデータファイルが送信された場合は、音楽再生ソフトが起動される。