図1は、実施例1に係る電子機器の一例である撮像装置100の概略構成ブロック図を示す。図1に示す撮像装置100にはメモリカード130を装着可能であり、USB(Universal Serial Bus)インターフェースを介してコンピュータ(PC)131を接続可能である。撮像装置100は、メモリカード130とコンピュータ(PC)131との間のデータ転送を司る電子機器として機能する。撮像装置100は、例えば、デジタルカメラ、カメラ付き携帯電話、カメラ付き携帯機器の少なくとも一つとして動作する。
撮像レンズ101は、撮影光学系(結像光学系)のレンズであり、光軸方向に進退可能なフォーカシングレンズ及びズームレンズを具備する。レンズ駆動部104は、撮像レンズ101のフォーカシングレンズ及びズームレンズを光軸方向駆動し、絞りを駆動する。これにより、絞り調節並びにレンズの進退動作による焦点調節作用と変倍作用(ズーム機能)を実現する。
シャッタ102は、静止画撮影時に撮像素子103への露光秒時を調節する手段であり、例えば、フォーカルプレーンシャッタからなる。撮像素子103の露光秒時を調節する手段としては、フォーカルプレーンシャッタに限定されない。撮像素子103が電子シャッタ機能を有する場合、外部からの制御信号によりその電子シャッタ機能、特に露光秒時を調節できる。シャッタ駆動部105は、シャッタ102を駆動するための手段である。
撮像素子103は、光学像を電気信号に変換する手段である。撮像素子103は、外部制御に従い静止画の画像信号と動画の画像信号を出力できる。撮像素子103から出力されるアナログ画像信号は、ゲイン調整及びデジタル変換を行う図示しないアナログフロントエンド(AFE)により画像データに変換され、CPU110に入力する。CPU110は、入力する画像データをRAM121に一時格納する。TG(タイミングジェネレータ)107は、撮像素子103及びAFEの駆動タイミングを制御する手段である。
表示部108は、撮像素子103による撮像画像(静止画像及び動画像)、ライブビュー画像及びメニュー等を表示する手段である。表示部108は、撮像装置100の背面等に配置される大画面の液晶表示装置、及び、画角確認用の電子ビューファインダを含む。操作部109は、撮影命令及び撮影条件等をCPU110に指示するためにユーザが操作する手段である。
CPU(Central Processing Unit)110は、撮像装置100を統括的に制御する。CPU110は、静止画及び動画の画像補正及び圧縮符号化等の処理を行う画像処理部の機能を含む。また、CPU110は、任意のタイミングで時間を計測するタイマ112を含む。
バス111にはCPU110とブロック120〜122,128,129が接続する。バス111は、これらブロック110,120〜122,128,129間でデータ及び制御信号を転送するのに使用される。
ROM(Read Only Memory)120は、CPU110によって実行される様々なプログラムを格納したメモリである。ROM120は、例えば、フラッシュメモリ又はEEPRROM等の書き換え可能で不揮発性のメモリを含む。アクセス速度が十分に問題ないレベルの記憶素子であれば、他の種類の記憶素子を利用できる。
RAM(Random Access Memory)121は、撮像素子103による撮像画像データ及びCPU110により画像処理された画像データを記憶する画像記憶手段の機能と、CPU110が動作を行う際のワークメモリの機能を兼備する。RAM121は通常、DRAMからなるが、アクセス速度が十分に問題ないレベルのその他の記憶素子をRAM121として使用できる。
DMAC(Direct Memory Access Controller)122は、CPU110の介在なしにRAM121から他のデバイス(実施例1では、メモリカード130又はUSBコントローラ125)へのデータ転送を制御し実行する。CPU110は、転送指示、転送サイズ、転送データアドレス及び転送方向等をDMAC122に指示し、DMAC122は、この指示に従ったデータ転送を実行する。
メモリカードインターフェース(メモリカードI/F)128は、メモリカード130をバス111に接続し、CPU110及びDMAC122によるメモリカード130へのアクセス(データの読み書き)を可能にする。DMAC122は、RAM121からメモリカードI/F128を介してメモリカード130にデータをDMA転送できる。メモリカード130は、撮像装置100で撮影された画像データ(静止画及び動画)を記録できる、撮像装置100に取り外し可能な記録媒体である。
実施例1では、メモリカード130としてCFカード(登録商標)を想定しているが、その他の記録媒体、例えば、SDカード(登録商標)、メモリースティック(登録商標)又はMMC(登録商標)でもよい。ハードディスク、不揮発性メモリ等の記録媒体を用いる構成でもよい。
USBインターフェース129(以下、USB I/F129)は、USBコントローラ125をバス111に接続する。USB I/F129及びUSBコントローラ125は、USB(Universal Serial Bus)規格に準拠したものである。USBコントローラ125は、USB規格に準拠したデータ通信を行うコントローラである。CPU110及びDMAC122は、USB I/F129を介してUSBコントローラ125にアクセスできる。DMAC122は、RAM121からUSB I/F129を介してUSBコントローラ125にデータをDMA転送できる。
実施例1では、PC(Personal Computer)131が、USBコネクタ127を介してUSBコントローラ125に接続する。
詳細は後述するが、実施例1では、メモリカード130とUSBコントローラ125との間で排他的に転送制御を行うときに、オーバーヘッドを抑え、スループットを向上させることができる。また、メモリカード130とUSBコントローラ125の一方の応答時間が悪い場合に、効率的に転送を継続することもできる。以下、これらの動作を詳細に説明する。
図2Aは、メモリカード130へのデータ書込みの動作フローチャートを示す。ステップS200は書込みフロー全体を示す。
ステップS201で、CPU110は、メモリカード130にデータ書込みの転送条件を設定する。具体的には、CPU110は、メモリカード130のメモリコントローラのATA(Advanced Technology Attachment)レジスタに転送データの書込みセクタアドレス、転送セクタ数及び書込みコマンド等を設定する。セクタはメモリカード130にアクセスするための最小ブロック単位であり、1セクタが512バイトとなる。メモリカード130はセクタ単位でデータを読み書きでき、書込みセクタアドレスはセクタ単位での書込みアドレスを示し、LBA(Logical Block Addressing)と称される。LBAには24ビットLBAと48ビットLBAがあり、それぞれ、一度に指定できるセクタアドレスが24ビットと48ビットである。一般的に、48ビットLBAは24ビットLBAに比べて、レジスタ設定等のオーバーヘッドを抑えることができ、より高速なアクセスが可能となっている。
ステップS202で、CPU110は、DMAC122とメモリカードI/F128に転送条件を設定する。ステップS203で、CPU110は、DMAC122とメモリカードI/F128に転送開始を指示する。
記録モードにおいて、撮像素子103により撮像された画像データは、一時的にRAM121に保存される。CPU110がDMAC122に転送開始を指示すると、DMAC122は、RAM121からメモリカードI/F128を介してメモリカード130に画像データをDMA転送する。これにより、撮像された画像データが、メモリカード130に記録される。なお、CPU110は、撮像素子103により撮像された画像を必要によりRAW画像データに変換し、必要により圧縮符号化するが、実施例1の特徴的な動作とは関係しないので、ここでは説明を省略している。
ステップS204で、CPU110は、DMAC122又はメモリカードI/F128の転送終了を待機する。DMAC122又はメモリカードI/F128が転送終了状態を示す転送終了レジスタを具備し、転送終了時にCPU110に割り込み通知する機能を有する場合には、CPU110はその割込み通知で転送終了を知る。CPU110が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
ステップS205で、CPU110は、メモリカード130の転送終了を待機する。メモリカード130が割り込み信号により転送終了をCPU110に通知する構成でも、CPU110が、メモリカード130のステータスレジスタをポーリングする構成でもよい。
ステップS206で、CPU110は、DMAC122又はメモリカードI/F128の転送処理のステータスと、メモリカード130のステータスを確認する。ステップS207で、CPU110は、ステップS206で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS207でエラー発生と判定した場合、ステップS208で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。メモリカード130でエラーが発生した場合、CPU110は、メモリカード130で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS208は、データ転送のリトライ処理を含んでも良い。
図2Bは、メモリカード130からのデータ読出しの動作フローチャートを示す。ステップS220は読出しフロー全体を示す。
ステップS221で、CPU110は、メモリカード130にデータ読出しの転送条件を設定する。具体的には、CPU110は、メモリカード130のメモリコントローラのATA(Advanced Technology Attachment)レジスタに転送データの読出しセクタアドレス、転送セクタ数及び書込みコマンド等を設定する。
ステップS222で、CPU110は、DMAC122とメモリカードI/F128に転送条件を設定する。ステップS223で、CPU110は、DMAC122とメモリカードI/F128に転送開始を指示する。
再生モードでは、撮像装置100はユーザ操作に応じて、メモリカード130に記録される画像の内でユーザにより指定された画像を再生表示する。CPU110がDMAC122に転送開始を指示すると、DMAC122は、メモリカード130から指定の画像データを読み出し、メモリカードI/Fを介してRAM121にDMA転送する。CPU110は、このようにしてRAM121に格納された画像データを表示部108による表示用に変換して表示部108に表示させる。メモリカード130に記録された画像データが圧縮符号化されている場合、CPUは、RAM121に格納された圧縮画像データを表示部108による表示用に変換して表示部108に表示させる。
ステップS224で、CPU110は、メモリカード130の転送終了を待機する。メモリカード130が割り込み信号により転送終了をCPU110に通知する構成でも、CPU110が、メモリカード130のステータスレジスタをポーリングする構成でもよい。
ステップS225で、CPU110は、DMAC122又はメモリカードI/F128の転送終了を待機する。DMAC122又はメモリカードI/F128が転送終了状態を示す転送終了レジスタを具備し、転送終了時にCPU110に割り込み通知する機能を有する場合には、CPU110はその割込み通知で転送終了を知る。CPU110が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
ステップS226で、CPU110は、DMAC122又はメモリカードI/F128の転送処理のステータスと、メモリカード130のステータスを確認する。ステップS227で、CPU110は、ステップS226で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS227でエラー発生と判定した場合、ステップS228で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。メモリカード130でエラーが発生した場合、CPU110は、メモリカード130で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS228は、データ転送のリトライ処理を含んでも良い。
図3Aは、USBコントローラ125へのデータ出力の動作フローチャートである。ステップS300は、データ出力フロー全体を示す。
ステップS301で、CPU110は、USBコントローラ125にデータ出力の転送条件を設定する。具体的には、CPU110は、USBコントローラ125のレジスタに転送データの書込みアドレス、転送データサイズ及び転送コマンド等を設定する。
ステップS302で、CPU110は、DMAC122とUSB I/F129に転送条件を設定する。ステップS303で、CPU110は、DMAC122とUSB I/F129に転送開始を指示する。CPU110からの転送開始指示に応じて、DMAC122は、RAM121からUSBコントローラ125にデータをDMA転送する。RAM121には、先に説明したように撮像素子103により撮像された画像データ又はメモリカード130から読み出された画像データが格納されており、この画像データがRAM121からコントローラ125に転送される。USBコントローラ125は、RAM121から転送されたデータを、USBプロトコルに準じた形式でPC131に転送する。
ステップS304で、CPU110は、DMAC122又はUSB I/F129の転送終了を待機する。DMAC122又はUSB I/F129が転送終了状態を示す転送終了レジスタを具備し、転送終了時にCPU110に割り込み通知する機能を有する場合には、CPU110はその割込み通知で転送終了を知る。CPU110が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
ステップS305で、CPU110は、USBコントローラ125の転送終了を待機する。USBコントローラ125が割り込み信号により転送終了をCPU110に通知する構成でも、CPU110がUSBコントローラ125のステータスレジスタをポーリングする構成でもよい。
ステップS306で、CPU110は、DMAC122又はUSB I/F129の転送処理のステータスと、USBコントローラ125のステータスを確認する。ステップS307で、CPU110は、ステップS306で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS307でエラー発生と判定した場合、ステップS308で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。USBコントローラ125でエラーが発生した場合、CPU110は、USBコントローラ125で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS308は、データ転送のリトライ処理を含んでも良い。
図3Bは、USBコントローラ125のデータ入力の動作フローチャートを示す。ステップS320は、データ入力フロー全体を示す。
ステップS321で、CPU110は、USBコントローラ125にデータ出力の転送条件を設定する。具体的には、CPU110は、USBコントローラ125のレジスタに転送データの読出しアドレス、転送データサイズ及び転送コマンド等を設定する。
ステップS322で、CPU110は、DMAC122とUSB I/F129に転送条件を設定する。ステップS323で、CPU110は、DMAC122とUSB I/F129に転送開始を指示する。
撮像装置100ではユーザ操作により、PC131から撮影指示及び撮影設定の変更指示に撮像装置に供給するようにできる。また、ユーザ操作により、撮像装置100のファームアップデータ及びレンズデータ等のデータをPC131から撮像装置100に送ることができる。USBコントローラ125は、PC131から転送されたデータを受信すると、転送すべきデータの存在をCPU110に割り込みにより通知する。CPU110は、この通知を受けてDMAC122を制御して、USBコントローラ125からRAM121にデータをDMA転送させる。CPU110は、RAM121に格納されたデータに基づいて対応する処理を実行する。
ステップS324で、CPU110は、USBコントローラ125の転送終了を待機する。USBコントローラ125が割り込み信号により転送終了をCPU110に通知する構成でも、CPU110が、USBコントローラ125のステータスレジスタをポーリングする構成でもよい。
ステップS325で、CPU110は、DMAC122又はUSB I/F129の転送終了を待機する。DMAC122又はUSB I/F129が転送終了状態を示す転送終了レジスタを具備し、転送終了時にCPU110に割り込み通知する機能を有する場合には、CPU110はその割込み通知で転送終了を知る。CPU110が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
ステップS326で、CPU110は、DMAC122又はUSB I/F129の転送処理のステータスと、USBコントローラ125のステータスを確認する。ステップS327で、CPU110は、ステップS326で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS327でエラー発生と判定した場合、ステップS328で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。USBコントローラ125でエラーが発生した場合、CPU110は、USBコントローラ125で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS328は、データ転送のリトライ処理を含んでも良い。
図4は、撮像装置100で撮影する動画の、PC131によるライブビューとメモリカード130への記録を制御する動作フローチャートを示す。
ステップS401で、CPU110は、ユーザがPCライブビューを指示しているかどうかを判定する。PCライブビューの指示は、PC131からCPU110に入力する構成でも、撮像装置100の操作部109からCPU110に入力する構成でもよい。
PCライブビューを行わない場合(S401)、ステップS402で、CPU110は、動画記録のユーザ指示の有無を確認する。動画記録の指示は、PC131からCPU110に入力する構成でも、撮像装置100の操作部109からCPU110に入力する構成でもよい。動画記録を行う場合(S402)、S403で、CPU110は、メモリカード130を記録先にとして動画記録を実行する。メモリカード130への記録動作で採用されるデータ転送は、図2Aを参照して説明した通りであり、記録停止の指示があるまで継続される。
PCライブビューを行う場合(S401)、ステップS404で、CPU110は、動画記録のユーザ指示の有無を確認する。動画記録の指示は、PC131からCPU110に入力する構成でも、撮像装置100の操作部109からCPU110に入力する構成でもよい。
動画記録を行う場合(S404)、S405で、CPU110は、メモリカード130を記録先にとして動画記録を実行する。メモリカード130への記録動作で採用されるデータ転送は、図2Aを参照して説明した通りであり、記録停止の指示があるまで継続される。また、PCライブビューのために、S406で、CPU110は、撮像画像データをRAM121からUSBコントローラ125を介してPC131に転送する。PC131は、USBコントローラ125からの画像データを図示しない表示装置に表示する。ステップS406のデータ転送動作は、図3Aを参照して説明した通りであり、PCライブビュー停止の指示があるまで継続される。
動画記録を行わない場合(S404)、S407で、CPU110は、PCライブビューのために、S406と同様に、撮像画像データをRAM121からUSBコントローラ125を介してPC131に転送する。PC131は、USBコントローラ125からの画像データを図示しない表示装置に表示する。ステップS407のデータ転送動作は、S406のそれと同じく図3Aを参照して説明した通りであり、PCライブビュー停止の指示があるまで継続される。
なお、メモリカード130へのデータ転送(S405)とPC131へのデータ転送(S406)を同時に行える場合、同時に実行され、同時実行できない場合、時分割で交互に実行される。後者の場合、PC131でのライブビューに支障ないように、かつまた、メモリカード130への書込みを失敗することのないように、CPU110は、各データ転送の量と切替えタイミングを制御する必要がある。
図5は、図4に示すフローに従うシーケンス図を示す。図5では、メモリカード書込み動作とUSBデータ出力動作を時分割で交互に実行している。
メモリカード130とUSBコントローラ125へのデータ転送を時分割で行うにあたり、PCライブビューのフレーム更新レートを満足させるためには、大きいサイズで転送単位を分割することは好ましくない。そこで、送信すべきデータを小さいサイズの転送単位に分割し、転送を行う。他方、転送効率の面では、一般的にメモリカード130には大きいサイズで一度に転送した方が高い転送効率を実現できる。また、メモリカード130への書込みを細かい転送単位で繰り返すと、メモリカード130への転送設定(ステップS201)とメモリカード130のステータス確認(ステップS206)等のオーバーヘッド処理が多くなり、転送効率が悪くなる。実施例1では、次のような転送制御により高い転送効率を実現する。
図6Aは、メモリカード130からPC131へのデータ転送のフローチャートを示す。このデータ転送を実現する制御プログラムがCPU110及びPC131上で動作する。
ステップS601で、CPU110は、転送すべきデータをユーザに選択させる。例えば、メモリカード130に記録される画像のリストをPC131の画面上に表示し、ユーザは、PC131に転送したい画像をキーボード又はマウス等により選択する。ステップS602で、ユーザは、PC131により、選択した画像の転送開始を撮像装置100に指示する。
ステップS603で、CPU110は、ステップS601で選択された画像の画像データをメモリカード130から読み出し、RAM121に一時格納される。ここでのデータ読出し動作は、図2Bを参照して説明した通りである。
ステップS604で、CPU110は、ステップS603でRAM121に読み出したデータを、USBコントローラ125を介してPC131に転送する。USBコントローラ125を介してPC131にデータを転送する動作は、図3Aを参照して説明した通りである。
ステップS605で、CPU110は、選択された画像の全データを転送し終えたかどうかを判定する。全データを転送するまで、CPU110は、ステップS603,S604を繰り返す。
メモリカード130からPC131へのデータ転送に充分なバッファ領域をRAM121に確保できない場合、メモリカード読出しサイズ(S603)とUSBデータ出力サイズ(S604)を小さい転送サイズに分割する。
図6Bは、図6Aとは逆に、PC131からメモリカード130へのデータ転送のフローチャートを示す。このデータ転送を実現する制御プログラムがCPU110及びPC131上で動作する。例えば、撮像装置100で再生時に使用する音楽データ等をPC131から転送するケース等である。
ステップS611で、PC131のキーボード等により、ユーザが、PC131に記憶されるデータ中でメモリカード130に転送したいデータ(例えば、音楽データ)を選択する。ステップS612で、ユーザは、選択したデータの転送開始をPC131に指示する。PC131は、選択されたデータの転送開始を撮像装置100のCPU110に通知する。
ステップS613で、CPU110は、PC131のUSBポートから送られるデータを、DMAC122及びUSBコントローラ125によりRAM121に転送する。ここでのUSBデータ入力動作は、図3Bを参照して説明した通りである。
ステップS614で、CPU110は、ステップS613でRAM121に一時格納されたデータをメモリカード130に書き込ませる。ここでのRAM121からメモリカード130へのデータ転送動作は、図2Aを参照して説明した通りである。
ステップS615で、CPU110は、PC131にも問い合わせて、ステップS611でユーザにより選択されたデータを全てメモリカード130に転送し終えたかどうかを判定する。全データを転送するまで、CPU110は、ステップS613,S614を繰り返す。
PC131からメモリカード130へのデータ転送に充分なバッファ領域をRAM121に確保できない場合、USBデータ入力サイズ(S613)とメモリカード書込みサイズ(S614)を小さい転送サイズに分割する。
図6A及び図6Bに示すフローチャートで説明した動作のシーケンス例は、図5に示すものと同様になる。
利用状況によっては、メモリカード130の読み書きを小分けにした方が全体の転送効率を上げられることがある。そのためのメモリカード130の分割転送動作を説明する。
図7A〜図7Cを参照して、メモリカード130の書込みを分割して実行する動作を説明する。図7Aは分割書込みの初期設定処理(S700)のフローチャートを示す。図7Bは、分割書込み処理(S710)のフローチャートを示す。図7Cは、分割書込みの終了処理(S720)のフローチャートを示す。
図7Aに示す分割書込みの初期化設定フロー(S700)では、ステップS701で、CPU110は、メモリカード130にデータ書込みの転送条件を設定する。具体的には、CPU110は、メモリカード130のメモリコントローラのATA(Advanced Technology Attachment)レジスタに転送データの書込みセクタアドレス、転送セクタ数及び書込みコマンド等を設定する。
ステップS701とステップS201とでは、設定する転送セクタ数が異なる。ステップS201では、その後のステップで転送するデータのサイズを設定しており、指定又は選択されたデータのデータ転送を、図5で説明したように転送毎にステップS201を繰り返すことで実現する。これに対し、ステップS701では、最終的に転送したい合計サイズ、すなわち、分割前のデータサイズを含み得るセクタ数又はデータ量を転送セクタ数又は転送サイズとして設定する。その後、図7Bに示す分割書込みフローを必要回数繰り返すことで、合計サイズのデータをメモリカード130に書き込む。小さいサイズでデータ転送をすることで、図5で説明したような、PCライブビュー時のフレーム更新レートの制約を守りつつ効率的な転送を実現できる。
図7Bに示す分割書込みフロー(S710)では、ステップS711で、CPU110は、DMAC122とメモリカードI/F128に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップS712で、CPU110は、DMAC122とメモリカードI/F128に転送開始を指示する。
ステップS713で、CPU110は、DMAC122又はメモリカードI/F128の転送終了を待機する。CPU110は、S204で説明した方法で転送終了を知ることができる。
ステップS714で、CPU110は、DMAC122の転送処理のステータスを確認する。図2Aでは、S206でメモリカード130のステータスも確認しているが、図7Bに示すフローでは、メモリカード130に設定した転送サイズの転送が完了していないので、メモリカード130のステータスを確認しない。
ステップS715で、CPU110は、ステップS714で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS715でエラー発生と判定した場合、ステップS716で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップS716は、データ転送のリトライ処理を含んでも良い。
転送エラーが無い場合(S715)、ステップS717で、CPU110は、メモリカード130に対する書込みを一時停止する。UDMA対応のメモリカード130の場合、ホストポーズ処理を行う。UDMA非対応のメモリカード130の場合は、単純にメモリカード130へのアクセスを一時停止する。
ステップS718で、CPU110は、USBコントローラ125からのアクセス要求の有無を確認する。メモリカード130に画像データを書き込み終えるまでCPU110がUSBアクセス要求を待機させるとなると、PC131を長期に待たせることになる。これに対し、メモリカード130への画像データ書込みを分割して行い、その分割書込みの合間にUSBアクセス要求を確認するようにすることで、このUSBアクセス要求に早期に対応可能となる。
図7Cに示す分割書込み終了フロー(S720)では、ステップS721で、CPU110は、ステップS205と同様に、メモリカード130の転送終了を待機する。S205で説明したのと同様の方法で、CPU110は、S701で設定された合計データのメモリカード130への書込みの終了を知ることが出来る。
ステップS722で、CPU110は、メモリカード130のステータスを確認する。ステップS723で、CPU110は、ステップS722で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS723でエラー発生と判定した場合、ステップS724で、CPU110は、エラー処理を実行し、メモリカード130で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS724は、データ転送のリトライ処理を含んでも良い。
図7D〜図7Fを参照して、メモリカード130からの読出しを分割して実行する動作を説明する。図7Dは分割読出しの初期設定処理(S730)のフローチャートを示す。図7Eは、分割読出し処理(S740)のフローチャートを示す。図7Fは、分割読出しの終了処理(S750)のフローチャートを示す。
図7Dに示す分割読出しの初期化設定フロー(S730)では、ステップS731で、CPU110は、メモリカード130にデータ読出しの転送条件を設定する。具体的には、CPU110は、メモリカード130のメモリコントローラのATA(Advanced Technology Attachment)レジスタに転送データの読出しセクタアドレス、転送セクタ数及び読出しコマンド等を設定する。
ステップS731とステップS221とでは、設定する転送セクタ数が異なる。ステップS221では、その後のステップで転送するデータのサイズを設定しており、指定又は選択されたデータのデータ転送を、転送毎にステップS221を繰り返すことで実現する。これに対し、ステップS731では、最終的に転送したい合計サイズ、すなわち、分割前のデータサイズを含み得るセクタ数又はデータ量を転送セクタ数又は転送サイズとして設定する。その後、図7Eに示す分割読出しフローを必要回数繰り返すことで、合計サイズのデータをメモリカード130から読み出す。
図7Eに示す分割読出しフロー(S740)では、ステップS741で、CPU110は、DMAC122とメモリカードI/F128に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップS742で、CPU110は、DMAC122とメモリカードI/F128に転送開始を指示する。
ステップS743で、CPU110は、DMAC122又はメモリカードI/F128の転送終了を待機する。CPU110は、S225で説明した方法で転送終了を知ることができる。
ステップS744で、CPU110は、DMAC122の転送処理のステータスを確認する。図2Bでは、S226でメモリカード130のステータスも確認しているが、図7Eに示すフローでは、メモリカード130に設定した転送サイズの転送が完了していないので、メモリカード130のステータスを確認しない。
ステップS745で、CPU110は、ステップS744で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS745でエラー発生と判定した場合、ステップS746で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップS746は、データ転送のリトライ処理を含んでも良い。
転送エラーが無い場合(S745)、ステップS747で、CPU110は、メモリカード130からの読出しを一時停止する。UDMA対応のメモリカード130の場合、ホストポーズ処理を行う。UDMA非対応のメモリカード130の場合は、単純にメモリカード130へのアクセスを一時停止する。UDMA対応のメモリカード130に読出しアクセスしている最中にホストポーズ処理を行い、所望のタイミングでメモリカード130の動作を停止することが難しい場合がある。その場合、メモリカード130からの読出しフローのみを従来のフロー(S220)と同じにするか、バッファを追加し、余分に読み出したデータを記憶するバッファを設ける等の対策を講じればよい。
ステップS748で、CPU110は、USBコントローラ125からのアクセス要求の有無を確認する。メモリカード130から画像データを読出し終えるまでCPU110がUSBアクセス要求を待機させるとなると、PC131を長期に待たせることになる。これに対し、メモリカード130からのデータ読出しを分割して行い、その分割読出しの合間にUSBアクセス要求を確認するようにすることで、このUSBアクセス要求に早期に対応可能となる。
図7Fに示す分割読出し終了フロー(S750)では、ステップS751で、CPU110は、ステップS224と同様に、メモリカード130の転送終了を待機する。S224で説明したのと同様の方法で、CPU110は、S731で設定された合計データのメモリカード130からの読出しの終了を知ることが出来る。なお、ステップS743で分割転送時のCPU転送が終了していることを確認できていれば、メモリカード転送終了待ちのステップS751は必然的に完了しているはずなので、ステップS751は省略可能である。
ステップS752で、CPU110は、メモリカード130のステータスを確認する。ステップS753で、CPU110は、ステップS752で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS753でエラー発生と判定した場合、ステップS754で、CPU110は、エラー処理を実行し、メモリカード130で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS754は、データ転送のリトライ処理を含んでも良い。
図8A〜図8Cを参照して、USBコントローラ125のデータ出力を分割して実行する動作を説明する。図8Aは分割出力の初期設定処理(S800)のフローチャートを示す。図8Bは、分割出力処理(S810)のフローチャートを示す。図8Cは、分割出力の終了処理(S820)のフローチャートを示す。
図8Aに示す分割出力の初期化設定フロー(S800)では、ステップS801で、CPU110は、USBコントローラ125にデータ出力の転送条件を設定する。具体的には、CPU110は、ステップS301と同様に、USBコントローラ125のレジスタに転送データの書込みアドレス、転送データサイズ及び転送コマンド等を設定する。
ステップS801とステップS301とでは、設定する転送データサイズが異なる。ステップS301では、その後のステップで転送するデータのサイズを設定しており、指定又は選択されたデータのデータ転送を、図5で説明したように転送毎にステップS301を繰り返すことで実現する。これに対し、ステップS801では、最終的に転送したい合計サイズ、すなわち、分割前のデータサイズを転送データサイズとして設定する。その後、図8Bに示す分割出力フローを必要回数繰り返すことで、合計サイズのデータをPC131に出力する。小さいサイズでデータ転送をすることで、図5で説明したような、PCライブビュー時のフレーム更新レートの制約を守りつつ効率的な転送を実現できる。
図8Bに示す分割出力フロー(S810)では、ステップS811で、CPU110は、ステップS302と同様に、DMAC122及びUSB I/F129に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップS812で、CPU110は、DMAC122とUSB I/F129に転送開始を指示する。
ステップS813で、CPU110は、DMAC122又はUSB I/F129の転送終了を待機する。CPU110は、S304で説明した方法で転送終了を知ることができる。
ステップS814で、CPU110は、DMAC122又はUSB I/F129の転送処理のステータスを確認する。USBコントローラ125に対しては、設定した転送サイズの転送が完了していないので、CPU110は、USBコントローラ125のステータスを確認しない。
ステップS815で、CPU110は、ステップS814で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS815でエラー発生と判定した場合、ステップS816で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップS816は、データ転送のリトライ処理を含んでも良い。
転送エラーが無い場合(S815)、ステップS817で、CPU110は、
USBコントローラ125にデータ転送を一時停止させる。
ステップS818で、CPU110は、上位アプリケーションからのメモリカード130へのアクセス要求を確認する。USBコントローラ125が必要なデータ量のデータを出力し終えるまで、CPU110がメモリカード130へのアクセス要求を待機させるとなると、その上位アプリケーションにメモリカード130へのアクセスを長期に待たせることになる。これに対し、USBコントローラ125のデータ出力を小口に分割して行い、その分割出力の合間にメモリカードへのアクセス要求を確認するようにすることで、このアクセス要求に早期に対応可能となる。いうまでもないが、CPU110がメモリカード130へのアクセス要求とUSBコントローラ125へのアクセス要求を並列して処理できる場合、単に同時並列に実行すれば良い。
図8Cに示す分割出力終了フロー(S820)では、ステップS821で、CPU110は、ステップS305と同様に、USBコントローラ125の転送終了を待機する。S305で説明したのと同様の方法で、CPU110は、S801で設定された合計データのUSBコントローラ125からの出力の終了を知ることができる。
ステップS822で、CPU110は、USBコントローラ125のステータスを確認する。ステップS823で、CPU110は、ステップS822で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS823でエラー発生と判定した場合、ステップS824で、CPU110は、エラー処理を実行し、USBコントローラ125で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS824は、データ転送のリトライ処理を含んでも良い。
図8D〜図8Fを参照して、USBコントローラ125のデータ入力を分割して実行する動作を説明する。図8Dは分割入力初期設定処理(S830)のフローチャートを示す。図8Eは、分割入力処理(S840)のフローチャートを示す。図8Fは、分割入力の終了処理(S850)のフローチャートを示す。
図8Dに示す分割入力の初期化設定フロー(S830)では、ステップS831で、CPU110は、USBコントローラ125にデータ入力の転送条件を設定する。具体的には、CPU110は、ステップS321と同様に、USBコントローラ125のレジスタに転送データの読出しアドレス、転送データサイズ及び転送コマンド等を設定する。
図8Eに示す分割入力フロー(S840)では、ステップS841で、CPU110は、ステップS322と同様に、DMAC122及びUSB I/F129に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップS842で、CPU110は、DMAC122とUSB I/F129に転送開始を指示する。
ステップS843で、CPU110は、DMAC122又はUSB I/F129の転送終了を待機する。
ステップS844で、CPU110は、DMAC122又はUSB I/F129の転送処理のステータスを確認する。USBコントローラ125に対しては、設定した転送サイズの転送が完了していないので、CPU110は、USBコントローラ125のステータスを確認しない。
ステップS845で、CPU110は、ステップS814で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS845でエラー発生と判定した場合、ステップS846で、CPU110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップS846は、データ転送のリトライ処理を含んでも良い。
転送エラーが無い場合(S845)、ステップS847で、CPU110は、
USBコントローラ125にデータ転送を一時停止させる。
ステップS848で、CPU110は、上位アプリケーションからのメモリカード130へのアクセス要求を確認する。USBコントローラ125が必要なデータ量のデータを入力し終えるまで、CPU110がメモリカード130へのアクセス要求を待機させるとなると、その上位アプリケーションにメモリカード130へのアクセスを長期に待たせることになる。これに対し、USBコントローラ125のデータ入力を小口に分割して行い、その分割入力の合間にメモリカードへのアクセス要求を確認するようにすることで、このアクセス要求に早期に対応可能となる。いうまでもないが、CPU110がメモリカード130へのアクセス要求とUSBコントローラ125へのアクセス要求を並列して処理できる場合、単に同時並列に実行すれば良い。
図8Fに示す分割入力終了フロー(S850)では、ステップS851で、CPU110は、ステップS324と同様に、USBコントローラ125の転送終了を待機する。S324で説明したのと同様の方法で、CPU110は、S831で設定された合計データのUSBコントローラ125への入力の終了を知ることができる。なお、ステップS843で分割転送時のCPU転送が終了していることを確認できている場合、USBコントローラ125の設定データ量の入力は完了しているので、ステップS851は省略可能である。
ステップS852で、CPU110は、USBコントローラ125のステータスを確認する。ステップS853で、CPU110は、ステップS852で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS853でエラー発生と判定した場合、ステップS854で、CPU110は、エラー処理を実行し、USBコントローラ125で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップS854は、データ転送のリトライ処理を含んでも良い。
図9A及び図9Bは、図7A〜図7F及び図8A〜図8Fに示すフローチャートに基づく、メモリカード130とPC131との間のデータ転送のシーケンス図であり、図4と対応している。
図4との比較では、図9A及び図9Bに示すシーケンス例では、メモリカード分割書込みフロー(S710)とUSBデータ分割出力フロー(S810)の排他制御の間にステップS701,S801,S722,S822等のオーバーヘッド処理が無い。これにより、図4に示すシーケンスに比べてより効率的なデータ転送を実現できている。
図10A及び図10Bは、メモリカード130のみに書込みアクセスしている場合に、途中でUSBコントローラ125から転送要求が発生した場合のシーケンス例を示す。図10Aに示すシーケンスに、図10Bに示すシーケンスが続く。例えば、撮像装置100においてメモリカード130に動画を記録している最中に、PC131からライブビュー転送を要求される場合などが当てはまる。メモリカード130への画像データ書込みのみを行っている場合でも、メモリカード130への画像データ書込みを分割処理することで、USBアクセス要求を極力早く受け付けできるようになることが分かる。
以上の説明から容易に理解できるように、実施例1によれば、複数のデバイスのアクセスを排他制御するシステムにおいて、オーバーヘッドを抑えて、個々のデバイスのデータ転送を効率化することができる。
図11は、実施例2に係る電子機器の一例である撮像装置1100の概略構成ブロック図を示す。図11に示す撮像装置1100は、ブリッジI/F1141及びブリッジ回路1150を介してバス111にカードスロット126(即ち、メモリカード130)とUSBコントローラ125を接続する点が、撮像装置100と異なる。ブリッジI/F1141とブリッジ回路1150とを接続するバスは、例えば、パラレルバスで構成される。ブリッジ回路1150は、カードスロット126を介してメモリカード130と接続し、USBコントローラ125及びUSBコネクタ127を介してPC131と接続する。
CPU1110がメモリカード130にアクセスする場合、ブリッジI/F1141とブリッジ回路1150は、CPU1110とメモリカード130との間の通信を仲介するように動作する。CPU1110がUSBコントローラ125にアクセスする場合、ブリッジI/F1141とブリッジ回路1150は、CPU1110とUSBコントローラ125との間の通信を仲介するように動作する。
DMAC1122は、RAM121からメモリカード130へのブリッジI/F1141及びブリッジ回路1150を介したDMA転送を行うことができる。DMAC1122はまた、RAM121からUSBコントローラ125へのブリッジI/F1141及びブリッジ回路1150を介したDMA転送を行うことができる。ブリッジ回路1150は、USBコネクタ127を介してPC131と接続される。
撮像装置1100の、撮像装置100と同じ作用の構成要素には同じ符号を付してあり、個々の機能の説明は省略する。
図12A〜図12Fを参照して、撮像装置1100におけるメモリカード130の書込みと読出しの動作を説明する。図12Aはメモリカード130への書込みの初期設定処理(S1200)のフローチャートを示す。図12Bは、メモリカード130への分割書込み処理(S1210)のフローチャートを示す。図12Cは、メモリカード130への書込みの終了処理(S1240)のフローチャートを示す。図12Dはメモリカード130からの読出しの初期設定処理(S1250)のフローチャートを示す。図12Eは、メモリカード130からの分割読出し処理(S1260)のフローチャートを示す。図12Fは、メモリカード130からの読出しの終了処理(S1290)のフローチャートを示す。
図12AにおけるステップS1201の処理内容は、図7AにおけるステップS701のそれと同じである。図12CにおけるステップS1241〜S1244の処理内容はそれぞれ、図7CにおけるステップS721〜S724のそれと同じである。図12DにおけるステップS1251の処理内容は、図7DにおけるステップS731のそれと同じである。図12FにおけるステップS1291〜S1294の処理内容はそれぞれ、図7FにおけるステップS751〜S754のそれと同じである。よって、これらの詳細な説明は、省略する。
図12Bに示すメモリカード130の分割書込みフロー(ステップS1210)を説明する。
ステップS1211で、CPU1110は、ブリッジ回路1150の転送条件を設定する。CPU1110は、ブリッジ回路1150の接続先をメモリカード130に切り替え、DMA転送方向(書込み)と転送サイズ等の転送条件をDMAC1122に設定する。
ステップS1212で、CPU1110は、ブリッジ回路1150に転送開始を指示する。ブリッジ回路1150は、CPU1110からの転送開始の指示に従い、転送すべきデータの入力を待つ。
ステップS1213で、CPU1110は、ステップS711と同様に、DMAC1122とメモリカードI/F128に転送条件を設定し、ステップS1214で、DMAC1122とメモリカードI/F128に転送開始を指示する。
ステップS1215で、CPU1110は、タイマ112をスタートさせる。CPU1110は、タイマ112により排他制御時に各デバイスの転送時間を計測し、一方のデバイスの通信時間が想定以上にかかる場合に、他方のデバイスに通信を切り替える。
ステップS1216で、CPU1110は、ステップS713と同様に、DMAC1122又はメモリカードI/F128の転送終了を待機する。
ステップS1216で転送が終了していない場合、ステップS1217で、CPU1110は、所定時間が経過したかどうか(タイムアウト)を定期的に確認する。例えば、所定時間の経過により、タイマ112がCPU1110に割込みを掛ける。
ステップS1217でタイムアウトが発生した場合、ステップS1218で、CPU1110は、ブリッジ回路1150のうち、メモリアクセスに関連する部分のみにリセットをかける。これにより、次にUSBコントローラに切り替えを行った際に、継続的に転送を続けることが可能となる。
ステップS1219で、CPU1110は、未転送のデータサイズを読み出し、記憶する。これにより、次回のメモリカードアクセス時に、CPU1110は、転送中断したデータから転送を再開できる。
ステップS1216で転送が終了していると、ステップS1220で、CPU1110は、ブリッジ回路1150の転送終了を待つ。CPU1110から転送されたデータはブリッジ回路1150のバッファに入り、時間差を持ってメモリカード130に出力されるからである。転送終了をブリッジ回路1150が割込みによりCPU1110に通知する構成でもよいし、転送終了を知らせるレジスタをブリッジ回路1150に設け、そのレジスタをCPU1110がポーリングして転送終了を知る構成でもよい。
ステップS1220で転送終了しない間に、ステップS1221で、CPU1110は、所定時間が経過したかどうか(タイムアウト)を定期的に確認する。例えば、所定時間の経過により、タイマ112がCPU1110に割込みを掛ける。タイムアウトが発生した場合(S1221)、ステップS1222で、CPU1110は、ブリッジ回路1150のうち、メモリアクセスに関連する部分のみにリセットをかける。そして、ステップS1223で、CPU1110は、未転送のデータサイズを読み出し、記憶する。
ステップS1220でブリッジ回路1150の転送が終了すると、ステップS1224で、CPU1110は、CPU1110の転送ステータスとブリッジ回路1150の転送ステータスを確認する。ステップS1225で、CPU1110は、ステップS1224で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS1225でエラー発生と判定した場合、ステップS1226で、CPU1110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップS1226は、データ転送のリトライ処理を含んでも良い。
転送エラーが無い場合(S1225)、ステップS1227で、CPU1110は、S717と同様に、メモリカード130に対する書込みを一時停止する。ステップS1228で、CPU1110は、ステップS718と同様に、USBコントローラ125からのアクセス要求の有無を確認する。
図12Eに示すメモリカード130の分割読出しフロー(ステップS1260)を説明する。
ステップS1261で、CPU1110は、ブリッジ回路1150の転送条件を設定する。CPU1110は、ブリッジ回路1150の接続先をメモリカード130に切り替え、DMA転送方向(読出し)と転送サイズ等の転送条件をDMAC1122に設定する。
ステップS1262で、CPU1110は、ブリッジ回路1150に転送開始を指示する。ブリッジ回路1150は、CPU1110からの転送開始の指示に従い、メモリカード130からのデータ読出し処理に移行し、ブリッジ回路1150内のバッファに入る分のデータを読み出す。
ステップS1263で、CPU1110は、ステップS741と同様に、DMAC1122とメモリカードI/F128に転送条件を設定し、ステップS1264で、DMAC1122とメモリカードI/F128に転送開始を指示する。
ステップS1265で、CPU1110は、タイマ112をスタートさせる。CPU1110は、メモリカード読出しの際も、タイマ112により排他制御時に各デバイスの転送時間を計測し、一方のデバイスの通信時間が想定以上にかかる場合に、他方のデバイスに通信を切り替える。
ステップS1266で、CPU1110は、ブリッジ回路1150の転送終了を待機する。転送終了をブリッジ回路1150が割込みによりCPU1110に通知する構成でもよいし、転送終了を知らせるレジスタをブリッジ回路1150に設け、そのレジスタをCPU1110がポーリングして転送終了を知る構成でもよい。
ステップS1266で転送が終了していない場合、ステップS1267で、CPU1110は、所定時間が経過したかどうか(タイムアウト)を定期的に確認する。例えば、所定時間の経過により、タイマ112がCPU1110に割込みを掛ける。
ステップS1267でタイムアウトが発生した場合、ステップS1268で、CPU1110は、ブリッジ回路1150のうち、メモリアクセスに関連する部分のみにリセットをかける。これにより、次にUSBコントローラに切り替えを行った際に、継続的に転送を続けることが可能となる。
ステップS1269で、CPU1110は、未転送データサイズを読み出し、記憶する。これにより、次回のメモリカードアクセス時に、CPU1110は、転送中断した個所からデータ転送を再開できる。
ステップS1266で転送が終了していると、ステップS1270で、CPU1110は、ステップS743と同様に、DMAC1122又はメモリカードI/F128の転送終了を待機する。
ステップS1270で転送が終了していない場合、ステップS1271で、CPU1110は、所定時間が経過したかどうか(タイムアウト)を定期的に確認する。例えば、所定時間の経過により、タイマ112がCPU1110に割込みを掛ける。
ステップS1271でタイムアウトが発生した場合、ステップS1272で、CPU1110は、ブリッジ回路1150のうち、メモリアクセスに関連する部分のみにリセットをかける。これにより、次にUSBコントローラに切り替えを行った際に、継続的に転送を続けることが可能となる。
ステップS1273で、CPU1110は、未転送データサイズを読み出し、記憶する。これにより、次回のメモリカードアクセス時に、CPU1110は、転送中断した個所からデータ転送を再開できる。
ステップS1270で転送終了が確認されると、ステップS1274で、CPU1110は、CPU1110の転送ステータスとブリッジ回路1150の転送ステータスを確認する。ステップS1275で、CPU1110は、ステップS1274で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップS1275でエラー発生と判定した場合、ステップS1276で、CPU1110は、発生したエラーに応じて、各ブロックのDMA転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップS1276は、データ転送のリトライ処理を含んでも良い。
転送エラーが無い場合(S1275)、ステップS1277で、CPU1110は、S747と同様に、メモリカード130からの読出しを一時停止する。ステップS1278で、CPU1110は、ステップS748と同様に、USBコントローラ125からのアクセス要求の有無を確認する。
撮像装置1100における、USBコントローラ125の分割データ出力フローと分割入力フローは、撮像装置100のそれらと同じであるので、説明を省略する。
図13A、図13B、図13C及び図13Dは、撮像装置1100においてメモリカード130へのデータ書込みと、USBコントローラ125のデータ出力を時分割で行うシーケンス例を示す。図13Aに示すシーケンスに図13Bに示すシーケンスが続き、図13Bに示すシーケンスに図13Cに示すシーケンスが続き、図13Cに示すシーケンスに図13Dに示すシーケンスが続く。
メモリカード130の書込み初期設定フロー(S1200)、及び、メモリカード130の分割書込みフロー(S1210)が記載されている。さらに、USBコントローラのデータ出力初期設定フロー(S1300)、及び、USBコントローラの分割データ出力フロー(S1310)が記載されている。
メモリカード130の分割書込みフロー(S1210)と、USBコントローラ125の分割出力フロー(S1310)が交互に実行されている。また、メモリカード130へのデータ書込み最中に、メモリカード130からデバイスポーズ要求が合った場合の処理も例示されている。所定時間以上、デバイスポーズが発生すると、タイムアウトが発生する。このタイムアウトにより、ブリッジ回路1150のメモリカード130側のブロックが部分的にリセットされる。このような制御により、PC131でのライブビュー表示など、USBコントローラ125の、リアルタイム性を求められる転送を実現できる。
USBコントローラ125がデータ出力している最中にPC131からNACK信号が返ってきた場合、すなわち、ポーズ要求が返ってきた場合のタイムアウト処理が、例示されている。
図14は、USBデータ転送中、ユーザ操作により画像の取り込みがキャンセルされ、さらにその操作がキャンセルされる場合の制御フローチャートを示す。
ステップS1401で、CPU1110は、PC131への画像データの転送を開始する。
ステップS1402で、CPU1110は、ユーザ操作による転送キャンセルを待機する。
ユーザがキャンセル操作すると、ステップS1403で、CPU1110は、本当に転送をキャンセルするか否かを問うメッセージをユーザに出力し、その回答を待つ。
ステップS1403で転送取消しを確認できた場合、ステップS1404で、CPU1110は、USBコントローラ125内に残っているDMAバッファをクリアする。
ステップS1403で転送取消しを確認できなかった場合、即ち、ユーザがキャンセル操作を取り消した場合、PC131への転送を継続する必要がある。そこで、ステップS1405で、CPU1110は、ブリッジ回路1150を転送タイムアウトまたはエラー状態にする。ステップS1406で、CPU1110は、未転送のデータサイズを取得する。ステップS1407で、CPU1110は、未転送データ以降のデータのPC131への送信を再開する。
なお、データを小口に分割してDMA転送を実行する場合でも、転送のキャンセル時には、DMA未転送部分のデータサイズと、送信予定データの残りのデータサイズを取得できる。
以上の説明から容易に理解できるように、実施例2によれば、複数のデバイスのアクセスを排他制御するシステムにおいて、オーバーヘッドを抑えて、個々のデバイスのデータ転送を効率化することができる。さらには、複数のデバイス間で応答時間に大きな差がある場合でも、データ転送を効率的に継続できる。
以上、本発明の好ましい実施例を説明したが、本発明は、これらの実施例に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。