(57)【要約】【課題】  複数のデバイスのＤＭＡによるデータ転送のスループットを改善する。【解決手段】  バス１１１にＲＡＭ１２１及びＤＭＡＣ１２２が接続し、メモリカードＩ／Ｆ１２８を介してメモリカード１３０が接続し、ＵＳＢ  Ｉ／Ｆ１２９及びＵＳＢコントローラ１２５を介してＰＣ１３１が接続する。ＤＭＡＣ１２２は、ＲＡＭ１２１とメモリカード１３０との間のＤＭＡによるデータ転送及びＲＡＭ１２１とＰＣ１３１との間のＤＭＡによるデータ転送を制御し実行する。ＤＭＡＣ１２２は、メモリカード１３０及びＰＣ１３１のデータ転送を、転送すべきデータ量よりも少ない転送サイズで時分割で実行する。【選択図】  図１
2016051231.tif 000002
【特許請求の範囲】
【請求項１】
バスに接続し、データを一時的に記憶する記憶手段と、
前記バスに接続する第１及び第２のデバイスと、
前記バスを介した前記記憶手段と前記第１のデバイスとの間のデータ転送及び前記記憶手段と前記第２のデバイスとの間のデータ転送を制御する転送制御手段
とを有し、
前記転送制御手段は、前記第１のデバイスのデータ転送に際して、転送すべきデータ量よりも少ない転送サイズで、前記第１のデバイスのデータ転送を制御する
ことを特徴とする電子機器。
【請求項２】
前記転送制御手段は、前記転送サイズのデータ転送の合間に前記第２のデバイスからの転送要求の有無を確認し、前記第２のデバイスからの転送要求に対応するデータ転送を、前記第１のデバイスのデータ転送と交互に実行することを特徴とする請求項１に記載の電子機器。
【請求項３】
前記第１のデバイス及び第２のデバイスがブリッジ手段を介して前記バスに接続することを特徴とする請求項１又は２に記載の電子機器。
【請求項４】
更に、時間を計測するタイマを有し、
前記転送制御手段は、前記タイマを参照し、前記バスを介した前記記憶手段と前記第１のデバイスとの間のデータ転送を所定時間で一時停止し、前記第２のデバイスのデータ転送を実行する
ことを特徴とする請求項１から３の何れか１項に記載の電子機器。
【請求項５】
前記転送制御手段は、データ転送の一時停止に対して未転送データサイズを取得することを特徴とする請求項１から４の何れか１項に記載の電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子機器に関し、より具体的には、複数の接続デバイスとのデータ転送が可能な電子機器に関する。
【背景技術】
【０００２】
デバイス間のデータ転送を高速化したいとする要求がある。マスタ装置とスレーブ装置間のデータ転送技術として、マスタ装置が１つの転送要求をスレーブ装置に出力し、当該転送要求に応じたスレーブ装置のデータ転送終了後にマスタ装置が次の転送要求を出力する方式が知られている。この方式では、データ転送が要求と応答という逐次的な処理になり、データ転送効率を上げることが難しい。
【０００３】
これに対し、特許文献１には、マスタ装置の転送要求に対するスレーブ装置の応答信号でカウントアップし、データ転送完了信号でカウントダウンするカウンタを設けることで複数のスレーブ装置のデータ転送を効率化する構成が記載されている。
【０００４】
特許文献２には、１つの転送要求に対して、要求されたデータ量よりも少ない所定データ量のデータ転送を繰り返し、最後に残るデータを転送することで、当該転送要求に応じたデータ転送を完了するフロー制御技術が記載されている。
【０００５】
特許文献３には、転送を中断された動画像を再転送する場合に、中断前に転送を済んでいた部分を除いて再転送することが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２４９６６８号公報
【特許文献２】特開２０１０−２１９８９９号公報
【特許文献３】特開２００８−２０５７１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
パーソナルコンピュータ及び各種の記録媒体の普及により、同時に複数のデバイスとの間でデータ転送を行いたいとする状況が増してきている。例えば、撮像装置に装填されるメモリカードと、当該撮像装置に接続されるコンピュータとの間で画像データを高速に転送したいとする需要がある。メモリカードとコンピュータは一般的にデータ転送レート及び応答時間が異なるが、このようにデータ転送レート及び応答時間の異なるデバイス間でのデータ転送を効率的に行う技術が望まれる。
【０００８】
撮像装置（主装置）がメモリカードとコンピュータという２つのデバイス間のデータ転送に特許文献１〜３に記載の技術を適用したとしても、各デバイスの排他アクセスに伴うオーバーヘッドを抑える工夫が必要になる。特に、データ転送レート及び応答時間が異なるデバイス間のデータ転送を高速に実行できる技術が望まれる。
【０００９】
本発明は、このような要望を満たし、複数デバイス間でのデータ転送を高速に行える電子機器並びにデータ転送システム、データ転送制御装置及び方法を提示することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る電子機器は、バスに接続し、データを一時的に記憶する記憶手段と、前記バスに接続する第１及び第２のデバイスと、前記バスを介した前記記憶手段と前記第１のデバイスとの間のデータ転送及び前記記憶手段と前記第２のデバイスとの間のデータ転送を制御する転送制御手段とを有し、前記転送制御手段は、前記第１のデバイスのデータ転送に際して、転送すべきデータ量よりも少ない転送サイズで、前記第１のデバイスのデータ転送を制御することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、複数のデバイスのデータ転送を排他制御する場合のオーバーヘッドを抑えることができ、スループットを向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】実施例１に係る電子機器の一例である撮像装置の概略構成ブロック図である。
【図２Ａ】メモリカードへのデータ書込みの動作フローチャートである。
【図２Ｂ】メモリカードからのデータ読出しの動作フローチャートである。
【図３Ａ】ＵＳＢ（Universal Serial Bus）コントローラへのデータ出力の動作フローチャートである。
【図３Ｂ】ＵＳＢコントローラのデータ入力の動作フローチャートである。
【図４】ＰＣによるライブビューとメモリカードへの記録の動作フローチャートである。
【図５】図４に示すフローに従うシーケンス図である。
【図６Ａ】メモリカードからＰＣへのデータ転送のフローチャートである。
【図６Ｂ】ＰＣからメモリカードへのデータ転送のフローチャートである。
【図７Ａ】メモリカードの分割書込みの初期設定処理のフローチャートである。
【図７Ｂ】メモリカードの分割書込み処理のフローチャートである。
【図７Ｃ】メモリカードの分割書込みの終了処理のフローチャートである。
【図７Ｄ】メモリカードの分割読出しの初期設定処理のフローチャートである。
【図７Ｅ】メモリカードの分割読出し処理のフローチャートである。
【図７Ｆ】メモリカードの分割読出しの終了処理のフローチャートである。
【図８Ａ】ＵＳＢコントローラの分割出力の初期設定処理のフローチャートである。
【図８Ｂ】ＵＳＢコントローラの分割出力処理のフローチャートである。
【図８Ｃ】ＵＳＢコントローラの分割出力の終了処理のフローチャートである。
【図８Ｄ】ＵＳＢコントローラの分割入力初期設定処理のフローチャートである。
【図８Ｅ】ＵＳＢコントローラの分割入力処理のフローチャートである。
【図８Ｆ】ＵＳＢコントローラの分割入力の終了処理のフローチャートである。
【図９Ａ】図７Ａ〜図７Ｆ及び図８Ａ〜図８Ｆに示す動作に基づくメモリカードとＰＣとの間のデータ転送のシーケンス図である。
【図９Ｂ】図９Ａに続くシーケンス図である。
【図１０Ａ】メモリカードへの書込み中にＵＳＢコントローラからアクセス要求があった場合のシーケンス例である。
【図１０Ｂ】図１０Ａに続くシーケンス例である。
【図１１】実施例２に係る電子機器の一例である撮像装置の概略構成ブロック図である。
【図１２Ａ】メモリカードへの書込みの初期設定処理のフローチャートである。
【図１２Ｂ】メモリカードへの分割書込み処理のフローチャートである。
【図１２Ｃ】メモリカードへの書込みの終了処理のフローチャートである。
【図１２Ｄ】メモリカードからの読出しの初期設定処理のフローチャートである。
【図１２Ｅ】メモリカードからの分割読出し処理のフローチャートである。
【図１２Ｆ】メモリカードからの読出しの終了処理のフローチャートである。
【図１３Ａ】実施例２におけるメモリカードへのデータ書込みとＵＳＢコントローラのデータ出力を時分割で行うシーケンス例である。
【図１３Ｂ】図１３Ａに続くシーケンス例である。
【図１３Ｃ】図１３Ｂに続くシーケンス例である。
【図１３Ｄ】図１３Ｃに続くシーケンス例である。
【図１４】ＰＣ転送がキャンセルされるが、そのキャンセルが取り消される場合の実施例２の動作フローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、本発明の実施例を説明する。
【実施例１】
【００１４】
図１は、実施例１に係る電子機器の一例である撮像装置１００の概略構成ブロック図を示す。図１に示す撮像装置１００にはメモリカード１３０を装着可能であり、ＵＳＢ（Universal Serial Bus）インターフェースを介してコンピュータ（ＰＣ）１３１を接続可能である。撮像装置１００は、メモリカード１３０とコンピュータ（ＰＣ）１３１との間のデータ転送を司る電子機器として機能する。撮像装置１００は、例えば、デジタルカメラ、カメラ付き携帯電話、カメラ付き携帯機器の少なくとも一つとして動作する。
【００１５】
撮像レンズ１０１は、撮影光学系（結像光学系）のレンズであり、光軸方向に進退可能なフォーカシングレンズ及びズームレンズを具備する。レンズ駆動部１０４は、撮像レンズ１０１のフォーカシングレンズ及びズームレンズを光軸方向駆動し、絞りを駆動する。これにより、絞り調節並びにレンズの進退動作による焦点調節作用と変倍作用（ズーム機能）を実現する。
【００１６】
シャッタ１０２は、静止画撮影時に撮像素子１０３への露光秒時を調節する手段であり、例えば、フォーカルプレーンシャッタからなる。撮像素子１０３の露光秒時を調節する手段としては、フォーカルプレーンシャッタに限定されない。撮像素子１０３が電子シャッタ機能を有する場合、外部からの制御信号によりその電子シャッタ機能、特に露光秒時を調節できる。シャッタ駆動部１０５は、シャッタ１０２を駆動するための手段である。
【００１７】
撮像素子１０３は、光学像を電気信号に変換する手段である。撮像素子１０３は、外部制御に従い静止画の画像信号と動画の画像信号を出力できる。撮像素子１０３から出力されるアナログ画像信号は、ゲイン調整及びデジタル変換を行う図示しないアナログフロントエンド（ＡＦＥ）により画像データに変換され、ＣＰＵ１１０に入力する。ＣＰＵ１１０は、入力する画像データをＲＡＭ１２１に一時格納する。ＴＧ（タイミングジェネレータ）１０７は、撮像素子１０３及びＡＦＥの駆動タイミングを制御する手段である。
【００１８】
表示部１０８は、撮像素子１０３による撮像画像（静止画像及び動画像）、ライブビュー画像及びメニュー等を表示する手段である。表示部１０８は、撮像装置１００の背面等に配置される大画面の液晶表示装置、及び、画角確認用の電子ビューファインダを含む。操作部１０９は、撮影命令及び撮影条件等をＣＰＵ１１０に指示するためにユーザが操作する手段である。
【００１９】
ＣＰＵ（Central Processing Unit）１１０は、撮像装置１００を統括的に制御する。ＣＰＵ１１０は、静止画及び動画の画像補正及び圧縮符号化等の処理を行う画像処理部の機能を含む。また、ＣＰＵ１１０は、任意のタイミングで時間を計測するタイマ１１２を含む。
【００２０】
バス１１１にはＣＰＵ１１０とブロック１２０〜１２２，１２８，１２９が接続する。バス１１１は、これらブロック１１０，１２０〜１２２，１２８，１２９間でデータ及び制御信号を転送するのに使用される。
【００２１】
ＲＯＭ（Read Only Memory）１２０は、ＣＰＵ１１０によって実行される様々なプログラムを格納したメモリである。ＲＯＭ１２０は、例えば、フラッシュメモリ又はＥＥＰＲＲＯＭ等の書き換え可能で不揮発性のメモリを含む。アクセス速度が十分に問題ないレベルの記憶素子であれば、他の種類の記憶素子を利用できる。
【００２２】
ＲＡＭ（Random Access Memory）１２１は、撮像素子１０３による撮像画像データ及びＣＰＵ１１０により画像処理された画像データを記憶する画像記憶手段の機能と、ＣＰＵ１１０が動作を行う際のワークメモリの機能を兼備する。ＲＡＭ１２１は通常、ＤＲＡＭからなるが、アクセス速度が十分に問題ないレベルのその他の記憶素子をＲＡＭ１２１として使用できる。
【００２３】
ＤＭＡＣ（Direct Memory Access Controller）１２２は、ＣＰＵ１１０の介在なしにＲＡＭ１２１から他のデバイス（実施例１では、メモリカード１３０又はＵＳＢコントローラ１２５）へのデータ転送を制御し実行する。ＣＰＵ１１０は、転送指示、転送サイズ、転送データアドレス及び転送方向等をＤＭＡＣ１２２に指示し、ＤＭＡＣ１２２は、この指示に従ったデータ転送を実行する。
【００２４】
メモリカードインターフェース（メモリカードＩ／Ｆ）１２８は、メモリカード１３０をバス１１１に接続し、ＣＰＵ１１０及びＤＭＡＣ１２２によるメモリカード１３０へのアクセス（データの読み書き）を可能にする。ＤＭＡＣ１２２は、ＲＡＭ１２１からメモリカードＩ／Ｆ１２８を介してメモリカード１３０にデータをＤＭＡ転送できる。メモリカード１３０は、撮像装置１００で撮影された画像データ（静止画及び動画）を記録できる、撮像装置１００に取り外し可能な記録媒体である。
【００２５】
実施例１では、メモリカード１３０としてＣＦカード（登録商標）を想定しているが、その他の記録媒体、例えば、ＳＤカード（登録商標）、メモリースティック（登録商標）又はＭＭＣ（登録商標）でもよい。ハードディスク、不揮発性メモリ等の記録媒体を用いる構成でもよい。
【００２６】
ＵＳＢインターフェース１２９（以下、ＵＳＢ  Ｉ／Ｆ１２９）は、ＵＳＢコントローラ１２５をバス１１１に接続する。ＵＳＢ  Ｉ／Ｆ１２９及びＵＳＢコントローラ１２５は、ＵＳＢ（Universal Serial Bus）規格に準拠したものである。ＵＳＢコントローラ１２５は、ＵＳＢ規格に準拠したデータ通信を行うコントローラである。ＣＰＵ１１０及びＤＭＡＣ１２２は、ＵＳＢ  Ｉ／Ｆ１２９を介してＵＳＢコントローラ１２５にアクセスできる。ＤＭＡＣ１２２は、ＲＡＭ１２１からＵＳＢ  Ｉ／Ｆ１２９を介してＵＳＢコントローラ１２５にデータをＤＭＡ転送できる。
【００２７】
実施例１では、ＰＣ（Personal Computer）１３１が、ＵＳＢコネクタ１２７を介してＵＳＢコントローラ１２５に接続する。
【００２８】
詳細は後述するが、実施例１では、メモリカード１３０とＵＳＢコントローラ１２５との間で排他的に転送制御を行うときに、オーバーヘッドを抑え、スループットを向上させることができる。また、メモリカード１３０とＵＳＢコントローラ１２５の一方の応答時間が悪い場合に、効率的に転送を継続することもできる。以下、これらの動作を詳細に説明する。
【００２９】
図２Ａは、メモリカード１３０へのデータ書込みの動作フローチャートを示す。ステップＳ２００は書込みフロー全体を示す。
【００３０】
ステップＳ２０１で、ＣＰＵ１１０は、メモリカード１３０にデータ書込みの転送条件を設定する。具体的には、ＣＰＵ１１０は、メモリカード１３０のメモリコントローラのＡＴＡ（Advanced Technology Attachment）レジスタに転送データの書込みセクタアドレス、転送セクタ数及び書込みコマンド等を設定する。セクタはメモリカード１３０にアクセスするための最小ブロック単位であり、１セクタが５１２バイトとなる。メモリカード１３０はセクタ単位でデータを読み書きでき、書込みセクタアドレスはセクタ単位での書込みアドレスを示し、ＬＢＡ（Logical Block Addressing）と称される。ＬＢＡには２４ビットＬＢＡと４８ビットＬＢＡがあり、それぞれ、一度に指定できるセクタアドレスが２４ビットと４８ビットである。一般的に、４８ビットＬＢＡは２４ビットＬＢＡに比べて、レジスタ設定等のオーバーヘッドを抑えることができ、より高速なアクセスが可能となっている。
【００３１】
ステップＳ２０２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送条件を設定する。ステップＳ２０３で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送開始を指示する。
【００３２】
記録モードにおいて、撮像素子１０３により撮像された画像データは、一時的にＲＡＭ１２１に保存される。ＣＰＵ１１０がＤＭＡＣ１２２に転送開始を指示すると、ＤＭＡＣ１２２は、ＲＡＭ１２１からメモリカードＩ／Ｆ１２８を介してメモリカード１３０に画像データをＤＭＡ転送する。これにより、撮像された画像データが、メモリカード１３０に記録される。なお、ＣＰＵ１１０は、撮像素子１０３により撮像された画像を必要によりＲＡＷ画像データに変換し、必要により圧縮符号化するが、実施例１の特徴的な動作とは関係しないので、ここでは説明を省略している。
【００３３】
ステップＳ２０４で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８の転送終了を待機する。ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８が転送終了状態を示す転送終了レジスタを具備し、転送終了時にＣＰＵ１１０に割り込み通知する機能を有する場合には、ＣＰＵ１１０はその割込み通知で転送終了を知る。ＣＰＵ１１０が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
【００３４】
ステップＳ２０５で、ＣＰＵ１１０は、メモリカード１３０の転送終了を待機する。メモリカード１３０が割り込み信号により転送終了をＣＰＵ１１０に通知する構成でも、ＣＰＵ１１０が、メモリカード１３０のステータスレジスタをポーリングする構成でもよい。
【００３５】
ステップＳ２０６で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８の転送処理のステータスと、メモリカード１３０のステータスを確認する。ステップＳ２０７で、ＣＰＵ１１０は、ステップＳ２０６で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ２０７でエラー発生と判定した場合、ステップＳ２０８で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。メモリカード１３０でエラーが発生した場合、ＣＰＵ１１０は、メモリカード１３０で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ２０８は、データ転送のリトライ処理を含んでも良い。
【００３６】
図２Ｂは、メモリカード１３０からのデータ読出しの動作フローチャートを示す。ステップＳ２２０は読出しフロー全体を示す。
【００３７】
ステップＳ２２１で、ＣＰＵ１１０は、メモリカード１３０にデータ読出しの転送条件を設定する。具体的には、ＣＰＵ１１０は、メモリカード１３０のメモリコントローラのＡＴＡ（Advanced Technology Attachment）レジスタに転送データの読出しセクタアドレス、転送セクタ数及び書込みコマンド等を設定する。
【００３８】
ステップＳ２２２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送条件を設定する。ステップＳ２２３で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送開始を指示する。
【００３９】
再生モードでは、撮像装置１００はユーザ操作に応じて、メモリカード１３０に記録される画像の内でユーザにより指定された画像を再生表示する。ＣＰＵ１１０がＤＭＡＣ１２２に転送開始を指示すると、ＤＭＡＣ１２２は、メモリカード１３０から指定の画像データを読み出し、メモリカードＩ／Ｆを介してＲＡＭ１２１にＤＭＡ転送する。ＣＰＵ１１０は、このようにしてＲＡＭ１２１に格納された画像データを表示部１０８による表示用に変換して表示部１０８に表示させる。メモリカード１３０に記録された画像データが圧縮符号化されている場合、ＣＰＵは、ＲＡＭ１２１に格納された圧縮画像データを表示部１０８による表示用に変換して表示部１０８に表示させる。
【００４０】
ステップＳ２２４で、ＣＰＵ１１０は、メモリカード１３０の転送終了を待機する。メモリカード１３０が割り込み信号により転送終了をＣＰＵ１１０に通知する構成でも、ＣＰＵ１１０が、メモリカード１３０のステータスレジスタをポーリングする構成でもよい。
【００４１】
ステップＳ２２５で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８の転送終了を待機する。ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８が転送終了状態を示す転送終了レジスタを具備し、転送終了時にＣＰＵ１１０に割り込み通知する機能を有する場合には、ＣＰＵ１１０はその割込み通知で転送終了を知る。ＣＰＵ１１０が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
【００４２】
ステップＳ２２６で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８の転送処理のステータスと、メモリカード１３０のステータスを確認する。ステップＳ２２７で、ＣＰＵ１１０は、ステップＳ２２６で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ２２７でエラー発生と判定した場合、ステップＳ２２８で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。メモリカード１３０でエラーが発生した場合、ＣＰＵ１１０は、メモリカード１３０で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ２２８は、データ転送のリトライ処理を含んでも良い。
【００４３】
図３Ａは、ＵＳＢコントローラ１２５へのデータ出力の動作フローチャートである。ステップＳ３００は、データ出力フロー全体を示す。
【００４４】
ステップＳ３０１で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５にデータ出力の転送条件を設定する。具体的には、ＣＰＵ１１０は、ＵＳＢコントローラ１２５のレジスタに転送データの書込みアドレス、転送データサイズ及び転送コマンド等を設定する。
【００４５】
ステップＳ３０２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とＵＳＢ  Ｉ／Ｆ１２９に転送条件を設定する。ステップＳ３０３で、ＣＰＵ１１０は、ＤＭＡＣ１２２とＵＳＢ  Ｉ／Ｆ１２９に転送開始を指示する。ＣＰＵ１１０からの転送開始指示に応じて、ＤＭＡＣ１２２は、ＲＡＭ１２１からＵＳＢコントローラ１２５にデータをＤＭＡ転送する。ＲＡＭ１２１には、先に説明したように撮像素子１０３により撮像された画像データ又はメモリカード１３０から読み出された画像データが格納されており、この画像データがＲＡＭ１２１からコントローラ１２５に転送される。ＵＳＢコントローラ１２５は、ＲＡＭ１２１から転送されたデータを、ＵＳＢプロトコルに準じた形式でＰＣ１３１に転送する。
【００４６】
ステップＳ３０４で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送終了を待機する。ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９が転送終了状態を示す転送終了レジスタを具備し、転送終了時にＣＰＵ１１０に割り込み通知する機能を有する場合には、ＣＰＵ１１０はその割込み通知で転送終了を知る。ＣＰＵ１１０が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
【００４７】
ステップＳ３０５で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５の転送終了を待機する。ＵＳＢコントローラ１２５が割り込み信号により転送終了をＣＰＵ１１０に通知する構成でも、ＣＰＵ１１０がＵＳＢコントローラ１２５のステータスレジスタをポーリングする構成でもよい。
【００４８】
ステップＳ３０６で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送処理のステータスと、ＵＳＢコントローラ１２５のステータスを確認する。ステップＳ３０７で、ＣＰＵ１１０は、ステップＳ３０６で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ３０７でエラー発生と判定した場合、ステップＳ３０８で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ＵＳＢコントローラ１２５でエラーが発生した場合、ＣＰＵ１１０は、ＵＳＢコントローラ１２５で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ３０８は、データ転送のリトライ処理を含んでも良い。
【００４９】
図３Ｂは、ＵＳＢコントローラ１２５のデータ入力の動作フローチャートを示す。ステップＳ３２０は、データ入力フロー全体を示す。
【００５０】
ステップＳ３２１で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５にデータ出力の転送条件を設定する。具体的には、ＣＰＵ１１０は、ＵＳＢコントローラ１２５のレジスタに転送データの読出しアドレス、転送データサイズ及び転送コマンド等を設定する。
【００５１】
ステップＳ３２２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とＵＳＢ  Ｉ／Ｆ１２９に転送条件を設定する。ステップＳ３２３で、ＣＰＵ１１０は、ＤＭＡＣ１２２とＵＳＢ  Ｉ／Ｆ１２９に転送開始を指示する。
【００５２】
撮像装置１００ではユーザ操作により、ＰＣ１３１から撮影指示及び撮影設定の変更指示に撮像装置に供給するようにできる。また、ユーザ操作により、撮像装置１００のファームアップデータ及びレンズデータ等のデータをＰＣ１３１から撮像装置１００に送ることができる。ＵＳＢコントローラ１２５は、ＰＣ１３１から転送されたデータを受信すると、転送すべきデータの存在をＣＰＵ１１０に割り込みにより通知する。ＣＰＵ１１０は、この通知を受けてＤＭＡＣ１２２を制御して、ＵＳＢコントローラ１２５からＲＡＭ１２１にデータをＤＭＡ転送させる。ＣＰＵ１１０は、ＲＡＭ１２１に格納されたデータに基づいて対応する処理を実行する。
【００５３】
ステップＳ３２４で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５の転送終了を待機する。ＵＳＢコントローラ１２５が割り込み信号により転送終了をＣＰＵ１１０に通知する構成でも、ＣＰＵ１１０が、ＵＳＢコントローラ１２５のステータスレジスタをポーリングする構成でもよい。
【００５４】
ステップＳ３２５で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送終了を待機する。ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９が転送終了状態を示す転送終了レジスタを具備し、転送終了時にＣＰＵ１１０に割り込み通知する機能を有する場合には、ＣＰＵ１１０はその割込み通知で転送終了を知る。ＣＰＵ１１０が、転送終了レジスタを定期的にポーリングすることで、転送終了を知る方法でも良い。
【００５５】
ステップＳ３２６で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送処理のステータスと、ＵＳＢコントローラ１２５のステータスを確認する。ステップＳ３２７で、ＣＰＵ１１０は、ステップＳ３２６で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ３２７でエラー発生と判定した場合、ステップＳ３２８で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ＵＳＢコントローラ１２５でエラーが発生した場合、ＣＰＵ１１０は、ＵＳＢコントローラ１２５で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ３２８は、データ転送のリトライ処理を含んでも良い。
【００５６】
図４は、撮像装置１００で撮影する動画の、ＰＣ１３１によるライブビューとメモリカード１３０への記録を制御する動作フローチャートを示す。
【００５７】
ステップＳ４０１で、ＣＰＵ１１０は、ユーザがＰＣライブビューを指示しているかどうかを判定する。ＰＣライブビューの指示は、ＰＣ１３１からＣＰＵ１１０に入力する構成でも、撮像装置１００の操作部１０９からＣＰＵ１１０に入力する構成でもよい。
【００５８】
ＰＣライブビューを行わない場合（Ｓ４０１）、ステップＳ４０２で、ＣＰＵ１１０は、動画記録のユーザ指示の有無を確認する。動画記録の指示は、ＰＣ１３１からＣＰＵ１１０に入力する構成でも、撮像装置１００の操作部１０９からＣＰＵ１１０に入力する構成でもよい。動画記録を行う場合（Ｓ４０２）、Ｓ４０３で、ＣＰＵ１１０は、メモリカード１３０を記録先にとして動画記録を実行する。メモリカード１３０への記録動作で採用されるデータ転送は、図２Ａを参照して説明した通りであり、記録停止の指示があるまで継続される。
【００５９】
ＰＣライブビューを行う場合（Ｓ４０１）、ステップＳ４０４で、ＣＰＵ１１０は、動画記録のユーザ指示の有無を確認する。動画記録の指示は、ＰＣ１３１からＣＰＵ１１０に入力する構成でも、撮像装置１００の操作部１０９からＣＰＵ１１０に入力する構成でもよい。
【００６０】
動画記録を行う場合（Ｓ４０４）、Ｓ４０５で、ＣＰＵ１１０は、メモリカード１３０を記録先にとして動画記録を実行する。メモリカード１３０への記録動作で採用されるデータ転送は、図２Ａを参照して説明した通りであり、記録停止の指示があるまで継続される。また、ＰＣライブビューのために、Ｓ４０６で、ＣＰＵ１１０は、撮像画像データをＲＡＭ１２１からＵＳＢコントローラ１２５を介してＰＣ１３１に転送する。ＰＣ１３１は、ＵＳＢコントローラ１２５からの画像データを図示しない表示装置に表示する。ステップＳ４０６のデータ転送動作は、図３Ａを参照して説明した通りであり、ＰＣライブビュー停止の指示があるまで継続される。
【００６１】
動画記録を行わない場合（Ｓ４０４）、Ｓ４０７で、ＣＰＵ１１０は、ＰＣライブビューのために、Ｓ４０６と同様に、撮像画像データをＲＡＭ１２１からＵＳＢコントローラ１２５を介してＰＣ１３１に転送する。ＰＣ１３１は、ＵＳＢコントローラ１２５からの画像データを図示しない表示装置に表示する。ステップＳ４０７のデータ転送動作は、Ｓ４０６のそれと同じく図３Ａを参照して説明した通りであり、ＰＣライブビュー停止の指示があるまで継続される。
【００６２】
なお、メモリカード１３０へのデータ転送（Ｓ４０５）とＰＣ１３１へのデータ転送（Ｓ４０６）を同時に行える場合、同時に実行され、同時実行できない場合、時分割で交互に実行される。後者の場合、ＰＣ１３１でのライブビューに支障ないように、かつまた、メモリカード１３０への書込みを失敗することのないように、ＣＰＵ１１０は、各データ転送の量と切替えタイミングを制御する必要がある。
【００６３】
図５は、図４に示すフローに従うシーケンス図を示す。図５では、メモリカード書込み動作とＵＳＢデータ出力動作を時分割で交互に実行している。
【００６４】
メモリカード１３０とＵＳＢコントローラ１２５へのデータ転送を時分割で行うにあたり、ＰＣライブビューのフレーム更新レートを満足させるためには、大きいサイズで転送単位を分割することは好ましくない。そこで、送信すべきデータを小さいサイズの転送単位に分割し、転送を行う。他方、転送効率の面では、一般的にメモリカード１３０には大きいサイズで一度に転送した方が高い転送効率を実現できる。また、メモリカード１３０への書込みを細かい転送単位で繰り返すと、メモリカード１３０への転送設定（ステップＳ２０１）とメモリカード１３０のステータス確認（ステップＳ２０６）等のオーバーヘッド処理が多くなり、転送効率が悪くなる。実施例１では、次のような転送制御により高い転送効率を実現する。
【００６５】
図６Ａは、メモリカード１３０からＰＣ１３１へのデータ転送のフローチャートを示す。このデータ転送を実現する制御プログラムがＣＰＵ１１０及びＰＣ１３１上で動作する。
【００６６】
ステップＳ６０１で、ＣＰＵ１１０は、転送すべきデータをユーザに選択させる。例えば、メモリカード１３０に記録される画像のリストをＰＣ１３１の画面上に表示し、ユーザは、ＰＣ１３１に転送したい画像をキーボード又はマウス等により選択する。ステップＳ６０２で、ユーザは、ＰＣ１３１により、選択した画像の転送開始を撮像装置１００に指示する。
【００６７】
ステップＳ６０３で、ＣＰＵ１１０は、ステップＳ６０１で選択された画像の画像データをメモリカード１３０から読み出し、ＲＡＭ１２１に一時格納される。ここでのデータ読出し動作は、図２Ｂを参照して説明した通りである。
【００６８】
ステップＳ６０４で、ＣＰＵ１１０は、ステップＳ６０３でＲＡＭ１２１に読み出したデータを、ＵＳＢコントローラ１２５を介してＰＣ１３１に転送する。ＵＳＢコントローラ１２５を介してＰＣ１３１にデータを転送する動作は、図３Ａを参照して説明した通りである。
【００６９】
ステップＳ６０５で、ＣＰＵ１１０は、選択された画像の全データを転送し終えたかどうかを判定する。全データを転送するまで、ＣＰＵ１１０は、ステップＳ６０３，Ｓ６０４を繰り返す。
【００７０】
メモリカード１３０からＰＣ１３１へのデータ転送に充分なバッファ領域をＲＡＭ１２１に確保できない場合、メモリカード読出しサイズ（Ｓ６０３）とＵＳＢデータ出力サイズ（Ｓ６０４）を小さい転送サイズに分割する。
【００７１】
図６Ｂは、図６Ａとは逆に、ＰＣ１３１からメモリカード１３０へのデータ転送のフローチャートを示す。このデータ転送を実現する制御プログラムがＣＰＵ１１０及びＰＣ１３１上で動作する。例えば、撮像装置１００で再生時に使用する音楽データ等をＰＣ１３１から転送するケース等である。
【００７２】
ステップＳ６１１で、ＰＣ１３１のキーボード等により、ユーザが、ＰＣ１３１に記憶されるデータ中でメモリカード１３０に転送したいデータ（例えば、音楽データ）を選択する。ステップＳ６１２で、ユーザは、選択したデータの転送開始をＰＣ１３１に指示する。ＰＣ１３１は、選択されたデータの転送開始を撮像装置１００のＣＰＵ１１０に通知する。
【００７３】
ステップＳ６１３で、ＣＰＵ１１０は、ＰＣ１３１のＵＳＢポートから送られるデータを、ＤＭＡＣ１２２及びＵＳＢコントローラ１２５によりＲＡＭ１２１に転送する。ここでのＵＳＢデータ入力動作は、図３Ｂを参照して説明した通りである。
【００７４】
ステップＳ６１４で、ＣＰＵ１１０は、ステップＳ６１３でＲＡＭ１２１に一時格納されたデータをメモリカード１３０に書き込ませる。ここでのＲＡＭ１２１からメモリカード１３０へのデータ転送動作は、図２Ａを参照して説明した通りである。
【００７５】
ステップＳ６１５で、ＣＰＵ１１０は、ＰＣ１３１にも問い合わせて、ステップＳ６１１でユーザにより選択されたデータを全てメモリカード１３０に転送し終えたかどうかを判定する。全データを転送するまで、ＣＰＵ１１０は、ステップＳ６１３，Ｓ６１４を繰り返す。
【００７６】
ＰＣ１３１からメモリカード１３０へのデータ転送に充分なバッファ領域をＲＡＭ１２１に確保できない場合、ＵＳＢデータ入力サイズ（Ｓ６１３）とメモリカード書込みサイズ（Ｓ６１４）を小さい転送サイズに分割する。
【００７７】
図６Ａ及び図６Ｂに示すフローチャートで説明した動作のシーケンス例は、図５に示すものと同様になる。
【００７８】
利用状況によっては、メモリカード１３０の読み書きを小分けにした方が全体の転送効率を上げられることがある。そのためのメモリカード１３０の分割転送動作を説明する。
【００７９】
図７Ａ〜図７Ｃを参照して、メモリカード１３０の書込みを分割して実行する動作を説明する。図７Ａは分割書込みの初期設定処理（Ｓ７００）のフローチャートを示す。図７Ｂは、分割書込み処理（Ｓ７１０）のフローチャートを示す。図７Ｃは、分割書込みの終了処理（Ｓ７２０）のフローチャートを示す。
【００８０】
図７Ａに示す分割書込みの初期化設定フロー（Ｓ７００）では、ステップＳ７０１で、ＣＰＵ１１０は、メモリカード１３０にデータ書込みの転送条件を設定する。具体的には、ＣＰＵ１１０は、メモリカード１３０のメモリコントローラのＡＴＡ（Advanced Technology Attachment）レジスタに転送データの書込みセクタアドレス、転送セクタ数及び書込みコマンド等を設定する。
【００８１】
ステップＳ７０１とステップＳ２０１とでは、設定する転送セクタ数が異なる。ステップＳ２０１では、その後のステップで転送するデータのサイズを設定しており、指定又は選択されたデータのデータ転送を、図５で説明したように転送毎にステップＳ２０１を繰り返すことで実現する。これに対し、ステップＳ７０１では、最終的に転送したい合計サイズ、すなわち、分割前のデータサイズを含み得るセクタ数又はデータ量を転送セクタ数又は転送サイズとして設定する。その後、図７Ｂに示す分割書込みフローを必要回数繰り返すことで、合計サイズのデータをメモリカード１３０に書き込む。小さいサイズでデータ転送をすることで、図５で説明したような、ＰＣライブビュー時のフレーム更新レートの制約を守りつつ効率的な転送を実現できる。
【００８２】
図７Ｂに示す分割書込みフロー（Ｓ７１０）では、ステップＳ７１１で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップＳ７１２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送開始を指示する。
【００８３】
ステップＳ７１３で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８の転送終了を待機する。ＣＰＵ１１０は、Ｓ２０４で説明した方法で転送終了を知ることができる。
【００８４】
ステップＳ７１４で、ＣＰＵ１１０は、ＤＭＡＣ１２２の転送処理のステータスを確認する。図２Ａでは、Ｓ２０６でメモリカード１３０のステータスも確認しているが、図７Ｂに示すフローでは、メモリカード１３０に設定した転送サイズの転送が完了していないので、メモリカード１３０のステータスを確認しない。
【００８５】
ステップＳ７１５で、ＣＰＵ１１０は、ステップＳ７１４で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ７１５でエラー発生と判定した場合、ステップＳ７１６で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップＳ７１６は、データ転送のリトライ処理を含んでも良い。
【００８６】
転送エラーが無い場合（Ｓ７１５）、ステップＳ７１７で、ＣＰＵ１１０は、メモリカード１３０に対する書込みを一時停止する。ＵＤＭＡ対応のメモリカード１３０の場合、ホストポーズ処理を行う。ＵＤＭＡ非対応のメモリカード１３０の場合は、単純にメモリカード１３０へのアクセスを一時停止する。
【００８７】
ステップＳ７１８で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５からのアクセス要求の有無を確認する。メモリカード１３０に画像データを書き込み終えるまでＣＰＵ１１０がＵＳＢアクセス要求を待機させるとなると、ＰＣ１３１を長期に待たせることになる。これに対し、メモリカード１３０への画像データ書込みを分割して行い、その分割書込みの合間にＵＳＢアクセス要求を確認するようにすることで、このＵＳＢアクセス要求に早期に対応可能となる。
【００８８】
図７Ｃに示す分割書込み終了フロー（Ｓ７２０）では、ステップＳ７２１で、ＣＰＵ１１０は、ステップＳ２０５と同様に、メモリカード１３０の転送終了を待機する。Ｓ２０５で説明したのと同様の方法で、ＣＰＵ１１０は、Ｓ７０１で設定された合計データのメモリカード１３０への書込みの終了を知ることが出来る。
【００８９】
ステップＳ７２２で、ＣＰＵ１１０は、メモリカード１３０のステータスを確認する。ステップＳ７２３で、ＣＰＵ１１０は、ステップＳ７２２で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ７２３でエラー発生と判定した場合、ステップＳ７２４で、ＣＰＵ１１０は、エラー処理を実行し、メモリカード１３０で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ７２４は、データ転送のリトライ処理を含んでも良い。
【００９０】
図７Ｄ〜図７Ｆを参照して、メモリカード１３０からの読出しを分割して実行する動作を説明する。図７Ｄは分割読出しの初期設定処理（Ｓ７３０）のフローチャートを示す。図７Ｅは、分割読出し処理（Ｓ７４０）のフローチャートを示す。図７Ｆは、分割読出しの終了処理（Ｓ７５０）のフローチャートを示す。
【００９１】
図７Ｄに示す分割読出しの初期化設定フロー（Ｓ７３０）では、ステップＳ７３１で、ＣＰＵ１１０は、メモリカード１３０にデータ読出しの転送条件を設定する。具体的には、ＣＰＵ１１０は、メモリカード１３０のメモリコントローラのＡＴＡ（Advanced Technology Attachment）レジスタに転送データの読出しセクタアドレス、転送セクタ数及び読出しコマンド等を設定する。
【００９２】
ステップＳ７３１とステップＳ２２１とでは、設定する転送セクタ数が異なる。ステップＳ２２１では、その後のステップで転送するデータのサイズを設定しており、指定又は選択されたデータのデータ転送を、転送毎にステップＳ２２１を繰り返すことで実現する。これに対し、ステップＳ７３１では、最終的に転送したい合計サイズ、すなわち、分割前のデータサイズを含み得るセクタ数又はデータ量を転送セクタ数又は転送サイズとして設定する。その後、図７Ｅに示す分割読出しフローを必要回数繰り返すことで、合計サイズのデータをメモリカード１３０から読み出す。
【００９３】
図７Ｅに示す分割読出しフロー（Ｓ７４０）では、ステップＳ７４１で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップＳ７４２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とメモリカードＩ／Ｆ１２８に転送開始を指示する。
【００９４】
ステップＳ７４３で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はメモリカードＩ／Ｆ１２８の転送終了を待機する。ＣＰＵ１１０は、Ｓ２２５で説明した方法で転送終了を知ることができる。
【００９５】
ステップＳ７４４で、ＣＰＵ１１０は、ＤＭＡＣ１２２の転送処理のステータスを確認する。図２Ｂでは、Ｓ２２６でメモリカード１３０のステータスも確認しているが、図７Ｅに示すフローでは、メモリカード１３０に設定した転送サイズの転送が完了していないので、メモリカード１３０のステータスを確認しない。
【００９６】
ステップＳ７４５で、ＣＰＵ１１０は、ステップＳ７４４で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ７４５でエラー発生と判定した場合、ステップＳ７４６で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップＳ７４６は、データ転送のリトライ処理を含んでも良い。
【００９７】
転送エラーが無い場合（Ｓ７４５）、ステップＳ７４７で、ＣＰＵ１１０は、メモリカード１３０からの読出しを一時停止する。ＵＤＭＡ対応のメモリカード１３０の場合、ホストポーズ処理を行う。ＵＤＭＡ非対応のメモリカード１３０の場合は、単純にメモリカード１３０へのアクセスを一時停止する。ＵＤＭＡ対応のメモリカード１３０に読出しアクセスしている最中にホストポーズ処理を行い、所望のタイミングでメモリカード１３０の動作を停止することが難しい場合がある。その場合、メモリカード１３０からの読出しフローのみを従来のフロー（Ｓ２２０）と同じにするか、バッファを追加し、余分に読み出したデータを記憶するバッファを設ける等の対策を講じればよい。
【００９８】
ステップＳ７４８で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５からのアクセス要求の有無を確認する。メモリカード１３０から画像データを読出し終えるまでＣＰＵ１１０がＵＳＢアクセス要求を待機させるとなると、ＰＣ１３１を長期に待たせることになる。これに対し、メモリカード１３０からのデータ読出しを分割して行い、その分割読出しの合間にＵＳＢアクセス要求を確認するようにすることで、このＵＳＢアクセス要求に早期に対応可能となる。
【００９９】
図７Ｆに示す分割読出し終了フロー（Ｓ７５０）では、ステップＳ７５１で、ＣＰＵ１１０は、ステップＳ２２４と同様に、メモリカード１３０の転送終了を待機する。Ｓ２２４で説明したのと同様の方法で、ＣＰＵ１１０は、Ｓ７３１で設定された合計データのメモリカード１３０からの読出しの終了を知ることが出来る。なお、ステップＳ７４３で分割転送時のＣＰＵ転送が終了していることを確認できていれば、メモリカード転送終了待ちのステップＳ７５１は必然的に完了しているはずなので、ステップＳ７５１は省略可能である。
【０１００】
ステップＳ７５２で、ＣＰＵ１１０は、メモリカード１３０のステータスを確認する。ステップＳ７５３で、ＣＰＵ１１０は、ステップＳ７５２で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ７５３でエラー発生と判定した場合、ステップＳ７５４で、ＣＰＵ１１０は、エラー処理を実行し、メモリカード１３０で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ７５４は、データ転送のリトライ処理を含んでも良い。
【０１０１】
図８Ａ〜図８Ｃを参照して、ＵＳＢコントローラ１２５のデータ出力を分割して実行する動作を説明する。図８Ａは分割出力の初期設定処理（Ｓ８００）のフローチャートを示す。図８Ｂは、分割出力処理（Ｓ８１０）のフローチャートを示す。図８Ｃは、分割出力の終了処理（Ｓ８２０）のフローチャートを示す。
【０１０２】
図８Ａに示す分割出力の初期化設定フロー（Ｓ８００）では、ステップＳ８０１で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５にデータ出力の転送条件を設定する。具体的には、ＣＰＵ１１０は、ステップＳ３０１と同様に、ＵＳＢコントローラ１２５のレジスタに転送データの書込みアドレス、転送データサイズ及び転送コマンド等を設定する。
【０１０３】
ステップＳ８０１とステップＳ３０１とでは、設定する転送データサイズが異なる。ステップＳ３０１では、その後のステップで転送するデータのサイズを設定しており、指定又は選択されたデータのデータ転送を、図５で説明したように転送毎にステップＳ３０１を繰り返すことで実現する。これに対し、ステップＳ８０１では、最終的に転送したい合計サイズ、すなわち、分割前のデータサイズを転送データサイズとして設定する。その後、図８Ｂに示す分割出力フローを必要回数繰り返すことで、合計サイズのデータをＰＣ１３１に出力する。小さいサイズでデータ転送をすることで、図５で説明したような、ＰＣライブビュー時のフレーム更新レートの制約を守りつつ効率的な転送を実現できる。
【０１０４】
図８Ｂに示す分割出力フロー（Ｓ８１０）では、ステップＳ８１１で、ＣＰＵ１１０は、ステップＳ３０２と同様に、ＤＭＡＣ１２２及びＵＳＢ  Ｉ／Ｆ１２９に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップＳ８１２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とＵＳＢ  Ｉ／Ｆ１２９に転送開始を指示する。
【０１０５】
ステップＳ８１３で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送終了を待機する。ＣＰＵ１１０は、Ｓ３０４で説明した方法で転送終了を知ることができる。
【０１０６】
ステップＳ８１４で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送処理のステータスを確認する。ＵＳＢコントローラ１２５に対しては、設定した転送サイズの転送が完了していないので、ＣＰＵ１１０は、ＵＳＢコントローラ１２５のステータスを確認しない。
【０１０７】
ステップＳ８１５で、ＣＰＵ１１０は、ステップＳ８１４で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ８１５でエラー発生と判定した場合、ステップＳ８１６で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップＳ８１６は、データ転送のリトライ処理を含んでも良い。
【０１０８】
転送エラーが無い場合（Ｓ８１５）、ステップＳ８１７で、ＣＰＵ１１０は、
ＵＳＢコントローラ１２５にデータ転送を一時停止させる。
【０１０９】
ステップＳ８１８で、ＣＰＵ１１０は、上位アプリケーションからのメモリカード１３０へのアクセス要求を確認する。ＵＳＢコントローラ１２５が必要なデータ量のデータを出力し終えるまで、ＣＰＵ１１０がメモリカード１３０へのアクセス要求を待機させるとなると、その上位アプリケーションにメモリカード１３０へのアクセスを長期に待たせることになる。これに対し、ＵＳＢコントローラ１２５のデータ出力を小口に分割して行い、その分割出力の合間にメモリカードへのアクセス要求を確認するようにすることで、このアクセス要求に早期に対応可能となる。いうまでもないが、ＣＰＵ１１０がメモリカード１３０へのアクセス要求とＵＳＢコントローラ１２５へのアクセス要求を並列して処理できる場合、単に同時並列に実行すれば良い。
【０１１０】
図８Ｃに示す分割出力終了フロー（Ｓ８２０）では、ステップＳ８２１で、ＣＰＵ１１０は、ステップＳ３０５と同様に、ＵＳＢコントローラ１２５の転送終了を待機する。Ｓ３０５で説明したのと同様の方法で、ＣＰＵ１１０は、Ｓ８０１で設定された合計データのＵＳＢコントローラ１２５からの出力の終了を知ることができる。
【０１１１】
ステップＳ８２２で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５のステータスを確認する。ステップＳ８２３で、ＣＰＵ１１０は、ステップＳ８２２で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ８２３でエラー発生と判定した場合、ステップＳ８２４で、ＣＰＵ１１０は、エラー処理を実行し、ＵＳＢコントローラ１２５で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ８２４は、データ転送のリトライ処理を含んでも良い。
【０１１２】
図８Ｄ〜図８Ｆを参照して、ＵＳＢコントローラ１２５のデータ入力を分割して実行する動作を説明する。図８Ｄは分割入力初期設定処理（Ｓ８３０）のフローチャートを示す。図８Ｅは、分割入力処理（Ｓ８４０）のフローチャートを示す。図８Ｆは、分割入力の終了処理（Ｓ８５０）のフローチャートを示す。
【０１１３】
図８Ｄに示す分割入力の初期化設定フロー（Ｓ８３０）では、ステップＳ８３１で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５にデータ入力の転送条件を設定する。具体的には、ＣＰＵ１１０は、ステップＳ３２１と同様に、ＵＳＢコントローラ１２５のレジスタに転送データの読出しアドレス、転送データサイズ及び転送コマンド等を設定する。
【０１１４】
図８Ｅに示す分割入力フロー（Ｓ８４０）では、ステップＳ８４１で、ＣＰＵ１１０は、ステップＳ３２２と同様に、ＤＭＡＣ１２２及びＵＳＢ  Ｉ／Ｆ１２９に転送条件を設定する。転送サイズについては、分割転送のサイズが設定される。ステップＳ８４２で、ＣＰＵ１１０は、ＤＭＡＣ１２２とＵＳＢ  Ｉ／Ｆ１２９に転送開始を指示する。
【０１１５】
ステップＳ８４３で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送終了を待機する。
【０１１６】
ステップＳ８４４で、ＣＰＵ１１０は、ＤＭＡＣ１２２又はＵＳＢ  Ｉ／Ｆ１２９の転送処理のステータスを確認する。ＵＳＢコントローラ１２５に対しては、設定した転送サイズの転送が完了していないので、ＣＰＵ１１０は、ＵＳＢコントローラ１２５のステータスを確認しない。
【０１１７】
ステップＳ８４５で、ＣＰＵ１１０は、ステップＳ８１４で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ８４５でエラー発生と判定した場合、ステップＳ８４６で、ＣＰＵ１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップＳ８４６は、データ転送のリトライ処理を含んでも良い。
【０１１８】
転送エラーが無い場合（Ｓ８４５）、ステップＳ８４７で、ＣＰＵ１１０は、
ＵＳＢコントローラ１２５にデータ転送を一時停止させる。
【０１１９】
ステップＳ８４８で、ＣＰＵ１１０は、上位アプリケーションからのメモリカード１３０へのアクセス要求を確認する。ＵＳＢコントローラ１２５が必要なデータ量のデータを入力し終えるまで、ＣＰＵ１１０がメモリカード１３０へのアクセス要求を待機させるとなると、その上位アプリケーションにメモリカード１３０へのアクセスを長期に待たせることになる。これに対し、ＵＳＢコントローラ１２５のデータ入力を小口に分割して行い、その分割入力の合間にメモリカードへのアクセス要求を確認するようにすることで、このアクセス要求に早期に対応可能となる。いうまでもないが、ＣＰＵ１１０がメモリカード１３０へのアクセス要求とＵＳＢコントローラ１２５へのアクセス要求を並列して処理できる場合、単に同時並列に実行すれば良い。
【０１２０】
図８Ｆに示す分割入力終了フロー（Ｓ８５０）では、ステップＳ８５１で、ＣＰＵ１１０は、ステップＳ３２４と同様に、ＵＳＢコントローラ１２５の転送終了を待機する。Ｓ３２４で説明したのと同様の方法で、ＣＰＵ１１０は、Ｓ８３１で設定された合計データのＵＳＢコントローラ１２５への入力の終了を知ることができる。なお、ステップＳ８４３で分割転送時のＣＰＵ転送が終了していることを確認できている場合、ＵＳＢコントローラ１２５の設定データ量の入力は完了しているので、ステップＳ８５１は省略可能である。
【０１２１】
ステップＳ８５２で、ＣＰＵ１１０は、ＵＳＢコントローラ１２５のステータスを確認する。ステップＳ８５３で、ＣＰＵ１１０は、ステップＳ８５２で確認したステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ８５３でエラー発生と判定した場合、ステップＳ８５４で、ＣＰＵ１１０は、エラー処理を実行し、ＵＳＢコントローラ１２５で発生したエラーの種類を示すエラー情報をユーザに通知する。ステップＳ８５４は、データ転送のリトライ処理を含んでも良い。
【０１２２】
図９Ａ及び図９Ｂは、図７Ａ〜図７Ｆ及び図８Ａ〜図８Ｆに示すフローチャートに基づく、メモリカード１３０とＰＣ１３１との間のデータ転送のシーケンス図であり、図４と対応している。
【０１２３】
図４との比較では、図９Ａ及び図９Ｂに示すシーケンス例では、メモリカード分割書込みフロー（Ｓ７１０）とＵＳＢデータ分割出力フロー（Ｓ８１０）の排他制御の間にステップＳ７０１，Ｓ８０１，Ｓ７２２，Ｓ８２２等のオーバーヘッド処理が無い。これにより、図４に示すシーケンスに比べてより効率的なデータ転送を実現できている。
【０１２４】
図１０Ａ及び図１０Ｂは、メモリカード１３０のみに書込みアクセスしている場合に、途中でＵＳＢコントローラ１２５から転送要求が発生した場合のシーケンス例を示す。図１０Ａに示すシーケンスに、図１０Ｂに示すシーケンスが続く。例えば、撮像装置１００においてメモリカード１３０に動画を記録している最中に、ＰＣ１３１からライブビュー転送を要求される場合などが当てはまる。メモリカード１３０への画像データ書込みのみを行っている場合でも、メモリカード１３０への画像データ書込みを分割処理することで、ＵＳＢアクセス要求を極力早く受け付けできるようになることが分かる。
【０１２５】
以上の説明から容易に理解できるように、実施例１によれば、複数のデバイスのアクセスを排他制御するシステムにおいて、オーバーヘッドを抑えて、個々のデバイスのデータ転送を効率化することができる。
【実施例２】
【０１２６】
図１１は、実施例２に係る電子機器の一例である撮像装置１１００の概略構成ブロック図を示す。図１１に示す撮像装置１１００は、ブリッジＩ／Ｆ１１４１及びブリッジ回路１１５０を介してバス１１１にカードスロット１２６（即ち、メモリカード１３０）とＵＳＢコントローラ１２５を接続する点が、撮像装置１００と異なる。ブリッジＩ／Ｆ１１４１とブリッジ回路１１５０とを接続するバスは、例えば、パラレルバスで構成される。ブリッジ回路１１５０は、カードスロット１２６を介してメモリカード１３０と接続し、ＵＳＢコントローラ１２５及びＵＳＢコネクタ１２７を介してＰＣ１３１と接続する。
【０１２７】
ＣＰＵ１１１０がメモリカード１３０にアクセスする場合、ブリッジＩ／Ｆ１１４１とブリッジ回路１１５０は、ＣＰＵ１１１０とメモリカード１３０との間の通信を仲介するように動作する。ＣＰＵ１１１０がＵＳＢコントローラ１２５にアクセスする場合、ブリッジＩ／Ｆ１１４１とブリッジ回路１１５０は、ＣＰＵ１１１０とＵＳＢコントローラ１２５との間の通信を仲介するように動作する。
【０１２８】
ＤＭＡＣ１１２２は、ＲＡＭ１２１からメモリカード１３０へのブリッジＩ／Ｆ１１４１及びブリッジ回路１１５０を介したＤＭＡ転送を行うことができる。ＤＭＡＣ１１２２はまた、ＲＡＭ１２１からＵＳＢコントローラ１２５へのブリッジＩ／Ｆ１１４１及びブリッジ回路１１５０を介したＤＭＡ転送を行うことができる。ブリッジ回路１１５０は、ＵＳＢコネクタ１２７を介してＰＣ１３１と接続される。
【０１２９】
撮像装置１１００の、撮像装置１００と同じ作用の構成要素には同じ符号を付してあり、個々の機能の説明は省略する。
【０１３０】
図１２Ａ〜図１２Ｆを参照して、撮像装置１１００におけるメモリカード１３０の書込みと読出しの動作を説明する。図１２Ａはメモリカード１３０への書込みの初期設定処理（Ｓ１２００）のフローチャートを示す。図１２Ｂは、メモリカード１３０への分割書込み処理（Ｓ１２１０）のフローチャートを示す。図１２Ｃは、メモリカード１３０への書込みの終了処理（Ｓ１２４０）のフローチャートを示す。図１２Ｄはメモリカード１３０からの読出しの初期設定処理（Ｓ１２５０）のフローチャートを示す。図１２Ｅは、メモリカード１３０からの分割読出し処理（Ｓ１２６０）のフローチャートを示す。図１２Ｆは、メモリカード１３０からの読出しの終了処理（Ｓ１２９０）のフローチャートを示す。
【０１３１】
図１２ＡにおけるステップＳ１２０１の処理内容は、図７ＡにおけるステップＳ７０１のそれと同じである。図１２ＣにおけるステップＳ１２４１〜Ｓ１２４４の処理内容はそれぞれ、図７ＣにおけるステップＳ７２１〜Ｓ７２４のそれと同じである。図１２ＤにおけるステップＳ１２５１の処理内容は、図７ＤにおけるステップＳ７３１のそれと同じである。図１２ＦにおけるステップＳ１２９１〜Ｓ１２９４の処理内容はそれぞれ、図７ＦにおけるステップＳ７５１〜Ｓ７５４のそれと同じである。よって、これらの詳細な説明は、省略する。
【０１３２】
図１２Ｂに示すメモリカード１３０の分割書込みフロー（ステップＳ１２１０）を説明する。
【０１３３】
ステップＳ１２１１で、ＣＰＵ１１１０は、ブリッジ回路１１５０の転送条件を設定する。ＣＰＵ１１１０は、ブリッジ回路１１５０の接続先をメモリカード１３０に切り替え、ＤＭＡ転送方向（書込み）と転送サイズ等の転送条件をＤＭＡＣ１１２２に設定する。
【０１３４】
ステップＳ１２１２で、ＣＰＵ１１１０は、ブリッジ回路１１５０に転送開始を指示する。ブリッジ回路１１５０は、ＣＰＵ１１１０からの転送開始の指示に従い、転送すべきデータの入力を待つ。
【０１３５】
ステップＳ１２１３で、ＣＰＵ１１１０は、ステップＳ７１１と同様に、ＤＭＡＣ１１２２とメモリカードＩ／Ｆ１２８に転送条件を設定し、ステップＳ１２１４で、ＤＭＡＣ１１２２とメモリカードＩ／Ｆ１２８に転送開始を指示する。
【０１３６】
ステップＳ１２１５で、ＣＰＵ１１１０は、タイマ１１２をスタートさせる。ＣＰＵ１１１０は、タイマ１１２により排他制御時に各デバイスの転送時間を計測し、一方のデバイスの通信時間が想定以上にかかる場合に、他方のデバイスに通信を切り替える。
【０１３７】
ステップＳ１２１６で、ＣＰＵ１１１０は、ステップＳ７１３と同様に、ＤＭＡＣ１１２２又はメモリカードＩ／Ｆ１２８の転送終了を待機する。
【０１３８】
ステップＳ１２１６で転送が終了していない場合、ステップＳ１２１７で、ＣＰＵ１１１０は、所定時間が経過したかどうか（タイムアウト）を定期的に確認する。例えば、所定時間の経過により、タイマ１１２がＣＰＵ１１１０に割込みを掛ける。
【０１３９】
ステップＳ１２１７でタイムアウトが発生した場合、ステップＳ１２１８で、ＣＰＵ１１１０は、ブリッジ回路１１５０のうち、メモリアクセスに関連する部分のみにリセットをかける。これにより、次にＵＳＢコントローラに切り替えを行った際に、継続的に転送を続けることが可能となる。
【０１４０】
ステップＳ１２１９で、ＣＰＵ１１１０は、未転送のデータサイズを読み出し、記憶する。これにより、次回のメモリカードアクセス時に、ＣＰＵ１１１０は、転送中断したデータから転送を再開できる。
【０１４１】
ステップＳ１２１６で転送が終了していると、ステップＳ１２２０で、ＣＰＵ１１１０は、ブリッジ回路１１５０の転送終了を待つ。ＣＰＵ１１１０から転送されたデータはブリッジ回路１１５０のバッファに入り、時間差を持ってメモリカード１３０に出力されるからである。転送終了をブリッジ回路１１５０が割込みによりＣＰＵ１１１０に通知する構成でもよいし、転送終了を知らせるレジスタをブリッジ回路１１５０に設け、そのレジスタをＣＰＵ１１１０がポーリングして転送終了を知る構成でもよい。
【０１４２】
ステップＳ１２２０で転送終了しない間に、ステップＳ１２２１で、ＣＰＵ１１１０は、所定時間が経過したかどうか（タイムアウト）を定期的に確認する。例えば、所定時間の経過により、タイマ１１２がＣＰＵ１１１０に割込みを掛ける。タイムアウトが発生した場合（Ｓ１２２１）、ステップＳ１２２２で、ＣＰＵ１１１０は、ブリッジ回路１１５０のうち、メモリアクセスに関連する部分のみにリセットをかける。そして、ステップＳ１２２３で、ＣＰＵ１１１０は、未転送のデータサイズを読み出し、記憶する。
【０１４３】
ステップＳ１２２０でブリッジ回路１１５０の転送が終了すると、ステップＳ１２２４で、ＣＰＵ１１１０は、ＣＰＵ１１１０の転送ステータスとブリッジ回路１１５０の転送ステータスを確認する。ステップＳ１２２５で、ＣＰＵ１１１０は、ステップＳ１２２４で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ１２２５でエラー発生と判定した場合、ステップＳ１２２６で、ＣＰＵ１１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップＳ１２２６は、データ転送のリトライ処理を含んでも良い。
【０１４４】
転送エラーが無い場合（Ｓ１２２５）、ステップＳ１２２７で、ＣＰＵ１１１０は、Ｓ７１７と同様に、メモリカード１３０に対する書込みを一時停止する。ステップＳ１２２８で、ＣＰＵ１１１０は、ステップＳ７１８と同様に、ＵＳＢコントローラ１２５からのアクセス要求の有無を確認する。
【０１４５】
図１２Ｅに示すメモリカード１３０の分割読出しフロー（ステップＳ１２６０）を説明する。
【０１４６】
ステップＳ１２６１で、ＣＰＵ１１１０は、ブリッジ回路１１５０の転送条件を設定する。ＣＰＵ１１１０は、ブリッジ回路１１５０の接続先をメモリカード１３０に切り替え、ＤＭＡ転送方向（読出し）と転送サイズ等の転送条件をＤＭＡＣ１１２２に設定する。
【０１４７】
ステップＳ１２６２で、ＣＰＵ１１１０は、ブリッジ回路１１５０に転送開始を指示する。ブリッジ回路１１５０は、ＣＰＵ１１１０からの転送開始の指示に従い、メモリカード１３０からのデータ読出し処理に移行し、ブリッジ回路１１５０内のバッファに入る分のデータを読み出す。
【０１４８】
ステップＳ１２６３で、ＣＰＵ１１１０は、ステップＳ７４１と同様に、ＤＭＡＣ１１２２とメモリカードＩ／Ｆ１２８に転送条件を設定し、ステップＳ１２６４で、ＤＭＡＣ１１２２とメモリカードＩ／Ｆ１２８に転送開始を指示する。
【０１４９】
ステップＳ１２６５で、ＣＰＵ１１１０は、タイマ１１２をスタートさせる。ＣＰＵ１１１０は、メモリカード読出しの際も、タイマ１１２により排他制御時に各デバイスの転送時間を計測し、一方のデバイスの通信時間が想定以上にかかる場合に、他方のデバイスに通信を切り替える。
【０１５０】
ステップＳ１２６６で、ＣＰＵ１１１０は、ブリッジ回路１１５０の転送終了を待機する。転送終了をブリッジ回路１１５０が割込みによりＣＰＵ１１１０に通知する構成でもよいし、転送終了を知らせるレジスタをブリッジ回路１１５０に設け、そのレジスタをＣＰＵ１１１０がポーリングして転送終了を知る構成でもよい。
【０１５１】
ステップＳ１２６６で転送が終了していない場合、ステップＳ１２６７で、ＣＰＵ１１１０は、所定時間が経過したかどうか（タイムアウト）を定期的に確認する。例えば、所定時間の経過により、タイマ１１２がＣＰＵ１１１０に割込みを掛ける。
【０１５２】
ステップＳ１２６７でタイムアウトが発生した場合、ステップＳ１２６８で、ＣＰＵ１１１０は、ブリッジ回路１１５０のうち、メモリアクセスに関連する部分のみにリセットをかける。これにより、次にＵＳＢコントローラに切り替えを行った際に、継続的に転送を続けることが可能となる。
【０１５３】
ステップＳ１２６９で、ＣＰＵ１１１０は、未転送データサイズを読み出し、記憶する。これにより、次回のメモリカードアクセス時に、ＣＰＵ１１１０は、転送中断した個所からデータ転送を再開できる。
【０１５４】
ステップＳ１２６６で転送が終了していると、ステップＳ１２７０で、ＣＰＵ１１１０は、ステップＳ７４３と同様に、ＤＭＡＣ１１２２又はメモリカードＩ／Ｆ１２８の転送終了を待機する。
【０１５５】
ステップＳ１２７０で転送が終了していない場合、ステップＳ１２７１で、ＣＰＵ１１１０は、所定時間が経過したかどうか（タイムアウト）を定期的に確認する。例えば、所定時間の経過により、タイマ１１２がＣＰＵ１１１０に割込みを掛ける。
【０１５６】
ステップＳ１２７１でタイムアウトが発生した場合、ステップＳ１２７２で、ＣＰＵ１１１０は、ブリッジ回路１１５０のうち、メモリアクセスに関連する部分のみにリセットをかける。これにより、次にＵＳＢコントローラに切り替えを行った際に、継続的に転送を続けることが可能となる。
【０１５７】
ステップＳ１２７３で、ＣＰＵ１１１０は、未転送データサイズを読み出し、記憶する。これにより、次回のメモリカードアクセス時に、ＣＰＵ１１１０は、転送中断した個所からデータ転送を再開できる。
【０１５８】
ステップＳ１２７０で転送終了が確認されると、ステップＳ１２７４で、ＣＰＵ１１１０は、ＣＰＵ１１１０の転送ステータスとブリッジ回路１１５０の転送ステータスを確認する。ステップＳ１２７５で、ＣＰＵ１１１０は、ステップＳ１２７４で確認した各ステータスが正常終了を示すかエラー発生を示すかを判定する。ステップＳ１２７５でエラー発生と判定した場合、ステップＳ１２７６で、ＣＰＵ１１１０は、発生したエラーに応じて、各ブロックのＤＭＡ転送解除及び次の転送のための所定の復帰処理等のエラー処理を実行する。ステップＳ１２７６は、データ転送のリトライ処理を含んでも良い。
【０１５９】
転送エラーが無い場合（Ｓ１２７５）、ステップＳ１２７７で、ＣＰＵ１１１０は、Ｓ７４７と同様に、メモリカード１３０からの読出しを一時停止する。ステップＳ１２７８で、ＣＰＵ１１１０は、ステップＳ７４８と同様に、ＵＳＢコントローラ１２５からのアクセス要求の有無を確認する。
【０１６０】
撮像装置１１００における、ＵＳＢコントローラ１２５の分割データ出力フローと分割入力フローは、撮像装置１００のそれらと同じであるので、説明を省略する。
【０１６１】
図１３Ａ、図１３Ｂ、図１３Ｃ及び図１３Ｄは、撮像装置１１００においてメモリカード１３０へのデータ書込みと、ＵＳＢコントローラ１２５のデータ出力を時分割で行うシーケンス例を示す。図１３Ａに示すシーケンスに図１３Ｂに示すシーケンスが続き、図１３Ｂに示すシーケンスに図１３Ｃに示すシーケンスが続き、図１３Ｃに示すシーケンスに図１３Ｄに示すシーケンスが続く。
【０１６２】
メモリカード１３０の書込み初期設定フロー（Ｓ１２００）、及び、メモリカード１３０の分割書込みフロー（Ｓ１２１０）が記載されている。さらに、ＵＳＢコントローラのデータ出力初期設定フロー（Ｓ１３００）、及び、ＵＳＢコントローラの分割データ出力フロー（Ｓ１３１０）が記載されている。
【０１６３】
メモリカード１３０の分割書込みフロー（Ｓ１２１０）と、ＵＳＢコントローラ１２５の分割出力フロー（Ｓ１３１０）が交互に実行されている。また、メモリカード１３０へのデータ書込み最中に、メモリカード１３０からデバイスポーズ要求が合った場合の処理も例示されている。所定時間以上、デバイスポーズが発生すると、タイムアウトが発生する。このタイムアウトにより、ブリッジ回路１１５０のメモリカード１３０側のブロックが部分的にリセットされる。このような制御により、ＰＣ１３１でのライブビュー表示など、ＵＳＢコントローラ１２５の、リアルタイム性を求められる転送を実現できる。
【０１６４】
ＵＳＢコントローラ１２５がデータ出力している最中にＰＣ１３１からＮＡＣＫ信号が返ってきた場合、すなわち、ポーズ要求が返ってきた場合のタイムアウト処理が、例示されている。
【０１６５】
図１４は、ＵＳＢデータ転送中、ユーザ操作により画像の取り込みがキャンセルされ、さらにその操作がキャンセルされる場合の制御フローチャートを示す。
【０１６６】
ステップＳ１４０１で、ＣＰＵ１１１０は、ＰＣ１３１への画像データの転送を開始する。
【０１６７】
ステップＳ１４０２で、ＣＰＵ１１１０は、ユーザ操作による転送キャンセルを待機する。
【０１６８】
ユーザがキャンセル操作すると、ステップＳ１４０３で、ＣＰＵ１１１０は、本当に転送をキャンセルするか否かを問うメッセージをユーザに出力し、その回答を待つ。
【０１６９】
ステップＳ１４０３で転送取消しを確認できた場合、ステップＳ１４０４で、ＣＰＵ１１１０は、ＵＳＢコントローラ１２５内に残っているＤＭＡバッファをクリアする。
【０１７０】
ステップＳ１４０３で転送取消しを確認できなかった場合、即ち、ユーザがキャンセル操作を取り消した場合、ＰＣ１３１への転送を継続する必要がある。そこで、ステップＳ１４０５で、ＣＰＵ１１１０は、ブリッジ回路１１５０を転送タイムアウトまたはエラー状態にする。ステップＳ１４０６で、ＣＰＵ１１１０は、未転送のデータサイズを取得する。ステップＳ１４０７で、ＣＰＵ１１１０は、未転送データ以降のデータのＰＣ１３１への送信を再開する。
【０１７１】
なお、データを小口に分割してＤＭＡ転送を実行する場合でも、転送のキャンセル時には、ＤＭＡ未転送部分のデータサイズと、送信予定データの残りのデータサイズを取得できる。
【０１７２】
以上の説明から容易に理解できるように、実施例２によれば、複数のデバイスのアクセスを排他制御するシステムにおいて、オーバーヘッドを抑えて、個々のデバイスのデータ転送を効率化することができる。さらには、複数のデバイス間で応答時間に大きな差がある場合でも、データ転送を効率的に継続できる。
【０１７３】
以上、本発明の好ましい実施例を説明したが、本発明は、これらの実施例に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。
【図１】
2016051231.tif 000003
【図２Ａ】
2016051231.tif 000004
【図２Ｂ】
2016051231.tif 000005
【図３Ａ】
2016051231.tif 000006
【図３Ｂ】
2016051231.tif 000007
【図４】
2016051231.tif 000008
【図５】
2016051231.tif 000009
【図６Ａ】
2016051231.tif 000010
【図６Ｂ】
2016051231.tif 000011
【図７Ａ】
2016051231.tif 000012
【図７Ｂ】
2016051231.tif 000013
【図７Ｃ】
2016051231.tif 000014
【図７Ｄ】
2016051231.tif 000015
【図７Ｅ】
2016051231.tif 000016
【図７Ｆ】
2016051231.tif 000017
【図８Ａ】
2016051231.tif 000018
【図８Ｂ】
2016051231.tif 000019
【図８Ｃ】
2016051231.tif 000020
【図８Ｄ】
2016051231.tif 000021
【図８Ｅ】
2016051231.tif 000022
【図８Ｆ】
2016051231.tif 000023
【図９Ａ】
2016051231.tif 000024
【図９Ｂ】
2016051231.tif 000025
【図１０Ａ】
2016051231.tif 000026
【図１０Ｂ】
2016051231.tif 000027
【図１１】
2016051231.tif 000028
【図１２Ａ】
2016051231.tif 000029
【図１２Ｂ】
2016051231.tif 000030
【図１２Ｃ】
2016051231.tif 000031
【図１２Ｄ】
2016051231.tif 000032
【図１２Ｅ】
2016051231.tif 000033
【図１２Ｆ】
2016051231.tif 000034
【図１３Ａ】
2016051231.tif 000035
【図１３Ｂ】
2016051231.tif 000036
【図１３Ｃ】
2016051231.tif 000037
【図１３Ｄ】
2016051231.tif 000038
【図１４】
2016051231.tif 000039