(57)【要約】【課題】  データの転送（展開）時にＣＰＵにかかる負荷をさらに低減することが可能なデータ転送装置及びデータ転送方法を提供する。【解決手段】  データ転送に必要なパラメータを記憶媒体に記録し、データ転送装置がその記録場所に関する情報を保持し、データ転送時に、データ転送に必要なパラメータをデータ転送装置が直接取得する。これにより、データ転送に必要なパラメータをＣＰＵがデータ転送装置に設定する必要が無く、ＣＰＵにかかる負荷を低減することが可能となる。【選択図】図２
2006331221.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶媒体と、第２の記憶媒体と、主制御部とを備えるデータ処理装置に設けられるデータ転送装置であって、
少なくとも転送対象データの転送元アドレスを含む転送条件パラメータ群を記憶するための記憶手段と、
前記転送条件パラメータ群を取得し、前記記憶手段に格納する格納手段と、
前記転送条件パラメータ群に従って前記転送対象データを転送する転送手段と、
を備えることを特徴とする、データ転送装置。
【請求項２】
さらに、前記転送手段による転送の完了を通知する通知手段を備えることを特徴とする、請求項１に記載のデータ転送装置。
【請求項３】
前記格納手段が前記転送条件パラメータ群を格納し、その後前記転送手段が前記転送を実行し、
前記格納及び前記転送を複数回繰り返した後に、前記通知手段は前記転送の完了を通知することを特徴とする、請求項２に記載のデータ転送装置。
【請求項４】
前記記憶手段は第１の記憶手段及び第２の記憶手段を含み、
前記転送条件パラメータ群は第１の転送条件パラメータ群及び第２の転送条件パラメータ群を含み、
前記格納手段は前記第１の転送条件パラメータ群を前記第１の記憶手段に、前記第２の転送条件パラメータ群を前記第２の記憶手段にそれぞれ格納する、
ことを特徴とする、請求項１又は２に記載のデータ転送装置。
【請求項５】
さらに、
前記データ処理装置に電力が供給されたことを検知する検知手段と、
前記検知をトリガーとして、前記格納手段による前記転送条件パラメータ群の格納及び前記転送手段による前記転送を開始するように制御する制御手段と、
を備えることを特徴とする、請求項２乃至４のいずれか１項に記載のデータ転送装置。
【請求項６】
前記第１の記憶媒体は前記データ処理装置の前記主制御部が実行するプログラムデータを保持し、
前記転送条件パラメータ群は、前記プログラムデータのうち可変変数データの転送を指示することを特徴とする、請求項１乃至５のいずれか１項に記載のデータ転送装置。
【請求項７】
前記第１の記憶媒体は不揮発性ＲＯＭであり、前記第２の記憶媒体はＲＡＭであることを特徴とする、請求項１乃至６のいずれか１項に記載のデータ転送装置。
【請求項８】
前記転送条件パラメータ群は、転送元アドレス、前記転送元アドレスの変化量、転送先アドレス、及び前記転送先アドレスの変化量に関する情報を含み、
前記転送条件パラメータ群は第１の転送条件パラメータ群及び第２の転送条件パラメータ群を含み、
前記第１の転送条件パラメータ群の前記転送元アドレスの変化量はインクリメントであり、前記第２の転送条件パラメータ群の前記転送元アドレスの変化量は不変であることを特徴とする、請求項１乃至７のいずれか１項に記載のデータ転送装置。
【請求項９】
主制御部と、データ転送装置とを備えるデータ処理装置であって、
前記データ転送装置は、
少なくとも転送対象データの転送元アドレスを含む転送条件パラメータ群を記憶するための記憶手段と、
前記転送条件パラメータ群を取得し、前記記憶手段に格納する格納手段と、
前記転送条件パラメータ群に従って前記転送対象データを転送する転送手段と、
を備えることを特徴とする、データ処理装置。
【請求項１０】
さらに、
データを受信する受信手段と、
前記データから前記転送条件パラメータ群を抽出する抽出手段と、
前記転送条件パラメータ群を前記記憶手段に格納する格納手段と、
を備えることを特徴とする、請求項９に記載のデータ処理装置。
【請求項１１】
第１の記憶媒体と、第２の記憶媒体と、主制御部と、少なくとも転送対象データの転送元アドレスを含む転送条件パラメータ群を記憶するための記憶部を有するデータ転送装置と、を備えるデータ処理装置においてデータを転送するデータ転送方法であって、
前記転送条件パラメータ群を取得し、前記記憶部に格納する格納工程と、
前記転送条件パラメータ群に従って前記転送対象データを転送する転送工程と、
を備えることを特徴とする、データ転送方法。
【請求項１２】
第１の記憶媒体と、第２の記憶媒体と、主制御部と、少なくとも転送対象データの転送元アドレスを含む転送条件パラメータ群を記憶するための記憶部を有するデータ転送装置と、を備えるデータ処理装置においてデータを転送するデータ転送方法をコンピュータが実行するコンピュータプログラムであって、
前記転送条件パラメータ群を取得し、前記記憶部に格納する格納工程を実行するプログラムコードと、
前記転送条件パラメータ群に従って前記転送対象データを転送する転送工程を実行するプログラムコードと、
を備えることを特徴とする、コンピュータプログラム。
【請求項１３】
請求項１２に記載のプログラムを記憶したコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ転送装置及びデータ転送方法に関し、特に、主制御部（ＣＰＵ）の負荷を低減するＤＭＡ転送を行なうデータ転送装置及びデータ転送方法に関する。
【背景技術】
【０００２】
近年、多くのデータ処理装置（例えば、デジタルカメラ）はＣＰＵ（マイクロプロセッサ）を有し、ＣＰＵがファームウェアと呼ばれるその装置に特化した制御プログラムを実行することによって動作する。ファームウェアは通常、装置に搭載した不揮発性ＲＯＭ（例えばフラッシュＲＯＭ）等に記録されており、システムの起動時にその動作を開始する。
【０００３】
ファームウェアはその開発環境に応じて、様々なソフトウェア記述言語、例えばＣ＋＋やPerl、FORTRAN等で記述されるが、多くのデータ処理装置において最も一般的なソフトウェア記述言語の一つはＣ言語である。現在Ｃ言語はその可読性や開発環境、習得環境の充実等の理由により、非常に多くのデータ処理装置用ファームウェアの作成に使用されている。
【０００４】
Ｃ言語で記述されたファームウェアのソースコードはコンパイラを用いて機械語に変換し、装置が搭載する不揮発ＲＯＭに書き込まれる。Ｃ言語で記述され、コンパイル及びリンクを含むビルド処理で機械語に変換されたファームウェアのバイナリコードは、テキストセグメント領域、データセグメント領域、ｂｓｓセグメント領域の３つの領域で構成される。テキストセグメント領域はファームウェアの実行コードを格納する。データセグメント領域はファームウェアの実行時に用いる変数（主にグローバル変数）のうち、予め初期化されているものを格納する。ｂｓｓセグメント領域はファームウェアの実行時に用いるグローバル変数のうち、初期化されていないものを格納する。
【０００５】
ファームウェアはそれが搭載されている装置の電源がオフの状態でもデータを保持するために、不揮発性ＲＯＭに記録される。しかし、データセグメント領域、ｂｓｓセグメント領域のような変数領域はプログラム実行中に書き換えられる可能性があるため、フラッシュＲＯＭのような読み出し専用のメモリ上で利用することができない。そのため、これらのデータをデータ処理装置の起動時に書き換え可能なＳＤＲＡＭ等のランダムアクセスメモリに展開（コピー）しておく必要がある。
【０００６】
図１は、フラッシュＲＯＭ２のデータセグメント領域１０２とｂｓｓセグメント領域１０３をＤＲＡＭ３に展開する様子を示す図である。Ｃ言語によって作成・ビルドされたファームウェアは、テキストセグメント領域１０１、データセグメント領域１０２、ｂｓｓセグメント領域１０３の順に、フラッシュＲＯＭ２の低アドレスから配置されるように書き込まれている。
【０００７】
データ処理装置のシステムが起動すると、データ処理装置のＣＰＵがテキストセグメント領域１０１上の転送プログラムを実行する。転送プログラムは、データセグメント領域１０２をＤＲＡＭ３上のデータセグメント展開領域１０４にコピーし、また、ｂｓｓセグメント領域１０３に相当するサイズの領域をＤＲＡＭ３上にｂｓｓセグメント展開領域１０５として確保してその領域を０で埋める。一般的にＣ言語で取り扱う未初期化変数はシステムの起動時に０で初期化するからである。
【０００８】
システム起動後の制御プログラム（ファームウェア）は、ＤＲＡＭ３上にコピーしたデータセグメント展開領域１０４と０で初期化したｂｓｓセグメント展開領域１０５のデータ（変数）にアクセスすることにより、変数の値を書き換えることが可能である。
【０００９】
ここでテキストセグメント領域１０１に記録されている実行コードについてはシステム動作中に書き換えることがないためＤＲＡＭ３に展開する必要は無いが、例えば動作中の命令処理のパフォーマンスを上げるためにアクセススピードの速いＤＲＡＭ３へ展開して実行してもよい。ただし、この展開によりシステム起動時に時間がかかるため、テキストセグメント領域１０１の実行コードを展開するか否かは、システム起動時間とシステム動作中のコード処理速度とのトレードオフとなる。本実施例はデータセグメント展開領域１０４とｂｓｓ領域１０５のみを初期化し、テキストセグメント領域１０１をＤＲＡＭ３に展開しない場合を想定するが、展開する場合はテキストセグメント領域１０１自身に含まれる転送プログラムを利用する。この転送プログラムは後述する本発明の転送手段で実現することも可能である。
【００１０】
上記の展開作業はデータ処理装置のＣＰＵ資源を消費し、システム起動に時間がかかるという問題がある。特に、展開するデータサイズはそのファームウェアで取り扱う変数のデータサイズに依存するため、使用変数量が多いとそれだけシステム起動に要する時間が長くなる。この展開はＣ言語ベースで作成したファームウェアが変数を利用して動作するための準備として必須であり、この処理をシステムの起動時以外に予め行なうことは困難である。
【００１１】
一部のデータ処理装置では、電源投入後のシステム起動時間の短縮が求められている。例えば、デジタルカメラなどはユーザが撮影したいときに電源を投入して瞬時にカメラ撮影ができなければならない。
【００１２】
そこで、上記の問題を解決するためにＤＭＡ転送によるデータ展開方法が考えられている。この方法ではシステム起動時に専用のコントローラ（ＤＭＡコントローラ）がデータの展開を行なうため、ＣＰＵの負荷を低減できるという利点がある。
【００１３】
また、特許文献１は、主に電源オフ時のハイバネーション処理に際して、ＤＭＡ転送を利用してシステム領域のデータを外部の記憶装置へ転送する方法を開示している。
【特許文献１】特開平１１−３３８６４０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、データの展開にＤＭＡ転送を利用する場合でも、ＣＰＵはシステム起動時に、データ転送元であるデータセグメント領域１０２の先頭アドレス、データセグメント領域１０２のサイズ、データ転送先であるデータセグメント展開領域１０４の先頭アドレス、等の転送条件パラメータ群をＤＭＡコントローラに格納（設定）しなければならない。この展開作業は依然としてＣＰＵに負荷をかけ、システムの起動時間を長くする要因となり、例えばデジタルカメラの使用時にシャッターチャンスを逃すなどの原因となりうる。
【００１５】
本発明はこのような状況に鑑みてなされたものであり、データの展開（転送）時にＣＰＵにかかる負荷をさらに低減することが可能なデータ転送装置及びデータ転送方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記課題を解決するために、本発明のデータ転送装置は、第１の記憶媒体、第２の記憶媒体、及び主制御部を備えるデータ処理装置に設けられるデータ転送装置であって、少なくとも転送対象データの転送元アドレスを含む転送条件パラメータ群を記憶するための記憶手段と、前記転送条件パラメータ群を取得し、前記記憶手段に格納する格納手段と、前記転送条件パラメータ群に従って前記転送対象データを転送する転送手段と、を備えることを特徴とする。
【００１７】
また、本発明のデータ転送方法は、第１の記憶媒体、第２の記憶媒体、主制御部、及び少なくとも転送対象データの転送元アドレスを含む転送条件パラメータ群を記憶するための記憶部を有するデータ転送装置、を備えるデータ処理装置においてデータを転送するデータ転送方法であって、前記転送条件パラメータ群を取得し、前記記憶部に格納する格納工程と、前記転送条件パラメータ群に従って前記転送対象データを転送する転送工程と、を備えることを特徴とする。
【００１８】
なお、その他の本発明の特徴は、添付図面及び以下の発明を実施するための最良の形態の記載によっていっそう明らかになるものである。
【発明の効果】
【００１９】
以上の構成により、本発明のデータ転送装置及びデータ転送方法によれば、データの展開時にＣＰＵにかかる負荷をさらに低減することが可能となる。
【発明を実施するための最良の形態】
【００２０】
以下、添付図面を参照して、本発明の好適な実施形態を説明する。
【００２１】
［第１の実施形態］
本実施形態では、デジタルカメラなどのデータ処理装置に、本発明におけるデータ転送装置を搭載する形態について説明する。なお、本実施形態では主に、データ処理装置に設けられた図１のフラッシュＲＯＭ２からＤＲＡＭ３にデータを転送するものとして説明するが、転送元及び転送先は任意の記憶媒体における任意の領域とすることができる。また、本実施形態ではデータ処理装置の電源投入時のデータ転送処理について説明するが、本発明におけるデータ転送装置はこれ以外のタイミングでもデータ転送を行ない得る。
【００２２】
＜システム構成＞
図２は、本実施形態におけるデータ処理装置及びデータ転送装置のシステム構成を示す図である。このデータ処理装置は、ＣＰＵ１、フラッシュＲＯＭ２、ＤＲＡＭ３、データバス４、ＣＰＵバス５、データ転送装置６、電源装置１６を備える。
【００２３】
ＣＰＵ１はフラッシュＲＯＭ２に保持されるファームウェアを実行することにより、データ処理装置を制御する。フラッシュＲＯＭ２は前述の通り、ＣＰＵ１が実行するファームウェアを保持する。ＤＲＡＭ３は前述の通り、ファームウェアの変数領域を展開する領域である。ＤＲＡＭ３はまた、データ処理装置が処理するデータ（例えば画像データ）の一時記憶領域などにも使用することができる。
【００２４】
データ転送装置６は、これを制御する制御部７と、制御プログラムなどを格納するＲＯＭ８を備える。データ転送装置６はまた、データの転送元アドレスを格納する転送元ポインタ設定レジスタ９、転送元アドレスの変化量を格納する転送元ポインタ転送方向設定レジスタ１０、転送するデータのサイズを格納する転送データサイズ設定レジスタ１１、転送先アドレスを格納する転送先ポインタ設定レジスタ１２、転送先アドレスの変化量を格納する転送先ポインタ転送方向設定レジスタ１３を備える。データ転送装置６はさらに、データ転送の開始を示す転送開始レジスタ１４、データ転送の完了を示す転送完了レジスタ１５を備える。
【００２５】
ここで、転送元（転送先）アドレスの変化量について説明する。ある特定のアドレスＡを転送元とし、そこに格納されるデータをある特定のアドレスＢに転送する。通常のコピーであれば、次の転送元アドレスは（Ａ＋１）となり、転送先アドレスは（Ｂ＋１）となる。この場合の「＋１」（アドレスインクリメント）が転送元（転送先）アドレスの変化量である。また、例えば転送元アドレスＡを固定し、そこに格納されるデータで転送先のメモリの一定の領域を埋める場合もある。この場合、転送元アドレスの変化量は固定、転送先アドレスの変化量はアドレスインクリメントとなる。
【００２６】
なお、以下では、転送元ポインタ設定レジスタ９乃至転送先ポインタ転送方向設定レジスタ１３に格納されるべき値（パラメータ）の集合（又は集合の一部）を、「転送条件パラメータ群」と呼ぶものとする。
【００２７】
また、電源装置１６はデータ転送装置６に接続されており、電源投入と同時にデータ転送を開始するためのトリガーとなる。
【００２８】
電源装置１６に電源が投入されると、ＣＰＵ１はＣＰＵバス５を介してフラッシュＲＯＭ２に格納されるファームウェアの実行コードをフェッチする。この段階では、変数操作を伴うコードは実行できず、変数操作を伴わない所定の初期化作業のみを行なう（詳細は後述）。ＣＰＵ１の処理と並行して、データ転送装置６はフラッシュＲＯＭ２の変数領域（データセグメント領域１０２及びｂｓｓセグメント領域１０３）をＤＲＡＭ３に展開する（詳細は後述）。展開が完了すると、ＣＰＵ１は変数操作を伴う処理を実行可能となり、実行コードの内容に応じてＤＲＡＭ３からのデータ取得、書き込みを、データバス４を介して行なう。
【００２９】
＜フラッシュＲＯＭ２の構成＞
図３は、フラッシュＲＯＭ２に格納されるデータの構成を示す図である。フラッシュＲＯＭ２のアドレス領域は予め定義されたメモリマップ上にアサインされており、ＣＰＵ１やデータ転送装置６はフラッシュＲＯＭ２のコントローラ（不図示）を介して自由にアクセスできる。
【００３０】
本実施形態において、図３に示すように、フラッシュＲＯＭ２のアドレス領域はメモリマップ上でpStartAddressから連続的に始まるものとする。また、ビルド済みのファームウェアはアドレスpTextから始まるテキストセグメント領域１０１、pDataから始まるデータセグメント領域１０２、pBssで始まるｂｓｓセグメント領域１０３を含む。
【００３１】
ここで、データセグメント領域１０２のデータサイズSizeOfDataSegmentは、
SizeOfDataSegment = pBss - pData
で求めることができ、ｂｓｓセグメント領域１０３のデータサイズSizeOfBssSegmentは、
SizeOfBssSegment = pEnd - pBss
で求めることができる。なお、pEndは、ファームウェアの最後尾を示すアドレスである。
【００３２】
ここで、それぞれのアドレスやデータサイズは、Ｃ言語等で作成したソースコードのビルド時に決定する。したがって、ビルドの構成によってこれらのパラメータは変化しうる。
【００３３】
また、フラッシュＲＯＭ２は、データセグメント領域転送情報格納領域１０６及びｂｓｓセグメント領域転送情報格納領域１０７を有する。データセグメント領域転送情報格納領域１０６はアドレスpDataSegmentInfoから始まり、データセグメント領域１０２をＤＲＡＭ３に展開するための転送条件パラメータ群を保持する。ｂｓｓセグメント領域転送情報格納領域１０７はアドレスpBssSegmentInfoから始まり、ｂｓｓセグメント領域１０３をＤＲＡＭ３に展開するための転送条件パラメータ群を保持する。
【００３４】
なお、pDataSegmentInfo及びpBssSegmentInfoは、転送条件パラメータ群を格納するのに十分な領域を確保できるアドレスであれば、任意のアドレスにすることができ、システムの設計時に決定する固定のアドレスである。また、データ転送装置６がアクセス可能であれば、フラッシュＲＯＭ２以外の記憶領域を示すアドレスでもよい。
【００３５】
＜ＤＲＡＭ３の構成＞
図４は、データが展開されるＤＲＡＭ３の構成を示す図である。本実施形態において、図４に示すように、ＤＲＡＭ３のアドレス領域はメモリマップ上でpRamStartAddressから連続的に始まるものとする。また、データセグメント展開領域１０４は開始アドレスpRamDataから、ｂｓｓセグメント展開領域１０５は開始アドレスpRamBssから、連続した領域に配置されている。pRamBssはデータセグメント領域１０２のサイズに依存し、
pRamBss = pRamData + SizeOfDataSegment
で得ることができる。
【００３６】
＜転送条件パラメータ群の記録＞
次に、転送条件パラメータ群の記録について説明する。このセクションで説明する処理は、データ処理装置の起動時ではなく、製造時やファームウェアのアップデート時に行なわれることに注意されたい。転送条件パラメータ群の各パラメータの値は、データ処理装置やファームウェアの設計に依存するからである。
【００３７】
データ処理装置においてフラッシュＲＯＭ２からＤＲＡＭ３へデータの展開を行なう際には、それぞれのデータが格納されているアドレスやデータサイズなどの情報を知る必要がある。これらの情報は、ファームウェアのビルド時及び、ビルド済みファームウェアをフラッシュＲＯＭ２に書き込む際に確定する。ここで確定する情報は次に挙げるものである。
(データセグメント領域転送情報)
フラッシュＲＯＭ２のデータセグメント領域１０２の開始アドレス：pData
フラッシュＲＯＭ２のデータセグメント領域１０２のサイズ：SizeOfDataSegment
ＤＲＡＭ３のデータセグメント展開領域１０４の開始アドレス：pRamData
(ｂｓｓセグメント領域転送情報)
フラッシュＲＯＭ２のｂｓｓセグメント領域１０３のサイズ：SizeOfBssSegment
ＤＲＡＭ３のｂｓｓセグメント展開領域１０５の開始アドレス：pRamBss
ファームウェアプログラムをフラッシュＲＯＭ２に書き込む際に、併せて、これらの確定した情報（転送条件パラメータ群）を、データセグメント領域転送情報格納領域１０６(アドレスpDataSegmentInfo)、ｂｓｓセグメント領域転送情報格納領域１０７(アドレスpBssSegmentInfo)に書き込む。
【００３８】
また、併せて、データ転送装置６のＲＯＭ８にpDataSegmentInfo及びpBssSegmentInfoを記録する。これにより、データ転送装置６がデータを転送する際に、pDataSegmentInfo及びpBssSegmentInfoを参照し、転送条件パラメータ群を取得することが可能となる。
【００３９】
なお、pDataSegmentInfo及びpBssSegmentInfoの記録場所はＲＯＭ８に限定されるものではなく、データ転送装置６が転送条件パラメータ群を取得することが可能な形式であればどのような場所に記録しても構わない。
【００４０】
また、一般的にファームウェアはアップデートにより書き換えられる可能性のあるものである。ファームウェアはユーザがＣ言語などの高級言語で記述した場合には専用のコンパイラを用いて実行可能なデータ形式に変換（ビルド）する必要がある。前述のように転送条件パラメータ群はファームウェアのビルド時及び、ビルド済みファームウェアをフラッシュＲＯＭ２に書き込む際に確定する。したがって、ファームウェアのアップデートにより、pDataSegmentInfo及びpBssSegmentInfoに記録されるべき転送条件パラメータ群が変化する可能性がある。そこで本実施形態では、ファームウェアプログラムを受信したデータ処理装置がそのプログラムを解析し、転送条件パラメータ群をフラッシュＲＯＭ２に書き込む構成とする。
【００４１】
ここで、データ処理装置が転送条件パラメータ群を取得する方法を説明する。コンパイラがファームウェアをビルドする時に、シンボルファイルと呼ばれるデータを生成するが、実際のシステムとしてデバッグ情報を付加しない状態でのファームウェアを生成する際には、これらの情報はリンクによるシンボル解決後削除してしまうので、ファームウェアバイナリそのものから転送条件パラメータ群を抽出することはできない。
【００４２】
したがって、本実施例形態においてファームウェアをビルドする際は、中間的に生成されるデバッグ情報付きフォーマットファイルから転送パラメータ群を抽出し、最終的なファームウェアバイナリを生成後、その末尾に付加する。ファームウェアバイナリ中には転送条件パラメータ群が存在することを示すシグネチャなどを併せて付加する。
【００４３】
ファームウェアのアップデートを行なう際は、ＣＰＵ１がシグネチャの解析を行なうことにより、pDataSegmentInfo、pBssSegmentInfo等、フラッシュＲＯＭ２中の所定の領域に転送条件パラメータ群を書き込むことができる。
【００４４】
なお、ファームウェアプログラムバイナリの生成方法、及びアップデート方法は上記の方法に限定されるものではなく、例えば、デバッグ情報を残したままのファームウェアプログラムバイナリを生成し、ＣＰＵ１が直接それを解析して転送条件パラメータ群を取得する構成とすることも可能である。
【００４５】
図５は、データ処理装置がファームウェア及び転送条件パラメータ群をフラッシュＲＯＭ２に書き込む処理の流れを示すフローチャートである。
【００４６】
ステップＳ５０１でＣＰＵ１がファームウェア書き込み指示を受信すると、ステップＳ５０２で、ＣＰＵ１はコンパクトフラッシュ（登録商標）などの記憶媒体などからファームウェアプログラムを受信する。
【００４７】
ステップＳ５０３では、ＣＰＵ１は受信したファームウェアから転送条件パラメータ群を抽出する。前述のように、ＣＰＵ１はファームウェアバイナリに付加された情報から転送条件パラメータ群を取得してもよいし、デバッグ情報の残ったファームウェアバイナリを使用する場合はそこから直接抽出してもよい。
【００４８】
ステップＳ５０４では、ＣＰＵ１はメモリコントローラ（不図示）を介して、受信したファームウェアをフラッシュＲＯＭ２に書き込む。
【００４９】
ステップＳ５０５では、ＣＰＵ１はメモリコントローラ（不図示）を介して、抽出した転送条件パラメータ群をフラッシュＲＯＭ２のデータセグメント領域転送情報格納領域１０６及びｂｓｓセグメント領域転送情報格納領域１０７に書き込む。それぞれの領域を示すアドレス（pDataSegmentInfo及びpBssSegmentInfo）は、例えばデータ転送装置６のＲＯＭ８から取得する構成とすることが可能である。また、前述のように、転送条件パラメータ群の格納場所（pDataSegmentInfo及びpBssSegmentInfoが示すアドレス）は、データ転送装置６がアクセス可能であれば、フラッシュＲＯＭ２以外の記憶領域を示すアドレスでもよい。
【００５０】
以上のようにして、ファームウェアの書き込みが完了する。
【００５１】
＜データ転送（展開）処理の流れ＞
図６は、データ処理装置の起動時にデータ転送装置６がフラッシュＲＯＭ２からＤＲＡＭ３にデータを展開する処理の流れを示すフローチャートである。
【００５２】
ステップＳ６０１で電源装置１６に電源が投入されると、電源回路（不図示）を介してデータ転送装置６に電力が供給される。並行して、ＣＰＵ１はファームウェアの実行コードにフェッチを開始する。前述のように、この段階では、ＣＰＵ１は変数操作を伴うコードは実行できず、変数操作を伴わない所定の初期化作業のみを行ない、所定の初期化作業終了後はデータ転送装置６によるデータ転送の終了を待つ（詳細は図７を参照して後述）。
【００５３】
データ転送装置６の話に戻る。データ転送装置６が電力の供給を受けると、ステップＳ６０２で、図２のデータ転送装置６が起動する。データ転送装置６が起動すると、制御部７がＲＯＭ８に格納されているデータ転送装置６の制御プログラムを実行する。以下、図６の説明において、特に断らなければ動作の主体は制御部７であるものとする。
【００５４】
ステップＳ６０３では、データ転送装置６はＲＯＭ８から図３のデータセグメント領域転送情報格納領域１０６のアドレスpDataSegmentInfoを取得し、そのアドレスを参照して、データセグメント領域１０２の転送に関する転送条件パラメータ群を取得する。
【００５５】
データセグメント領域転送情報格納領域１０６(pDataSegmentInfo)には前述のように、以下に挙げる情報が格納されている。
(データセグメント領域転送情報)
フラッシュＲＯＭ２のデータセグメント領域１０２の開始アドレス：pData
フラッシュＲＯＭ２のデータセグメント領域１０２のサイズ：SizeOfDataSegment
ＤＲＡＭ３のデータセグメント展開領域１０４の開始アドレス：pRamData
データセグメント領域転送情報格納領域１０６から取得した転送条件パラメータ群はそれぞれ、転送元ポインタ設定レジスタ９(pData)、転送データサイズ設定レジスタ１１(SizeOfDataSegment)、転送先ポインタ設定レジスタ１２(pRamData)に記録される。
【００５６】
また、ＲＯＭ８には、転送元ポインタ転送方向設定レジスタ１０及び転送先ポインタ転送方向設定レジスタ１３に記録されるべき値が格納されている。これらのレジスタは、データ転送を行なう上で転送元、転送先それぞれのポインタ更新をインクリメント/ディクリメント/一定（不変）に設定するためのものである。ここではテキストセグメント領域１０１のすべてのアドレスをデータセグメント展開領域１０４にコピーするため、転送元ポインタ転送方向設定レジスタ１０及び転送先ポインタ転送方向設定レジスタ１３は共にインクリメントになるように、ＲＯＭ８に情報が格納されている。ステップＳ６０３で制御部７は、これらの値を転送元ポインタ転送方向設定レジスタ１０及び転送先ポインタ転送方向設定レジスタ１３に記録する。
【００５７】
なお、この情報はフラッシュＲＯＭ２のデータセグメント領域転送情報格納領域１０６など、他の場所に格納してもよい。また、本実施形態において転送条件パラメータ群は主としてフラッシュＲＯＭ２及びＲＯＭ８に分散して格納されるように説明しているが、一方にまとめてもよいし、データ転送装置６がＣＰＵ１に負荷をかけずにアクセス可能な領域であれば、これら以外のメモリに記録してもよい。
【００５８】
まとめると、ステップＳ６０３における処理により、データ転送装置６の各レジスタには以下のように転送条件パラメータ群が設定された状態となる。
転送元ポインタ設定レジスタ９：pData
転送元ポインタ転送方向設定レジスタ１０：アドレスインクリメント
転送データサイズ設定レジスタ１１：SizeOfDataSegment
転送先ポインタ設定レジスタ１２：pRamData
転送先ポインタ転送方向設定レジスタ１３：アドレスインクリメント
次にステップＳ６０４で、転送開始レジスタ１４をイネーブルにする。これにより、データ転送装置６はデータ転送を開始する。この転送により、データセグメント領域１０２の初期化済み変数がすべてフラッシュＲＯＭ２のアドレスpDataから、ＤＲＡＭ３のpRamDataから始まる領域へ展開される。
【００５９】
ステップＳ６０５では、転送が完了したかを判定し、完了するとステップＳ６０６へ移行する。完了の判定は、転送データサイズ設定レジスタ１１に定められる量のデータが転送されたかによって行なうことができる。
【００６０】
ステップＳ６０６では、転送開始レジスタ１４をディスエーブルにする。これにより、データ転送装置６はデータ転送を停止する。
【００６１】
ステップＳ６０７では、データ転送装置６はｂｓｓセグメント領域転送情報格納領域１０７及びＲＯＭ８を参照して、ｂｓｓセグメント領域１０３の転送に関する転送条件パラメータ群を取得する。
【００６２】
ｂｓｓセグメント領域転送情報格納領域１０７(pBssSegmentInfo)には前述のように、以下に挙げる情報が格納されている。
（ｂｓｓセグメント領域転送情報)
フラッシュＲＯＭ２のｂｓｓセグメント領域１０３のサイズ：SizeOfBssSegment
ＤＲＡＭ３のｂｓｓセグメント展開領域１０５の開始アドレス：pRamBss
ｂｓｓセグメント領域転送情報格納領域１０７から取得した転送条件パラメータ群はそれぞれ、転送データサイズ設定レジスタ１１(SizeOfBssSegment)、転送先ポインタ設定レジスタ１２(pRamBss)に記録される。
【００６３】
また、ｂｓｓセグメント展開領域１０５はデータのコピーではなく、領域中の全アドレスを０で埋めるため、ＤＲＡＭ３上の任意の空きアドレスにメモリコントローラ（不図示）を介して０を代入する。その上で、転送元ポインタ設定レジスタ９には０を代入したアドレスを記録する。ｂｓｓセグメント展開領域１０５の全アドレスを０で埋める理由は、前述のように一般的にＣ言語で取り扱う未初期化変数はシステムの起動時に０で初期化するからであり、必ずしも０に限定する必要はない。
【００６４】
また、ＲＯＭ８には、転送元ポインタ転送方向設定レジスタ１０及び転送先ポインタ転送方向設定レジスタ１３に記録されるべき値が格納されている。ここではｂｓｓセグメント展開領域１０５の全アドレスに０を代入するため、転送元ポインタ転送方向設定レジスタ１０は一定（すなわち、転送元アドレスは０を代入したアドレスから変化しない）、転送先ポインタ転送方向設定レジスタ１３はインクリメントになるように、ＲＯＭ８に情報が格納されている。ステップＳ６０７で制御部７は、これらの値を転送元ポインタ転送方向設定レジスタ１０及び転送先ポインタ転送方向設定レジスタ１３に記録する。
【００６５】
なお、この情報はフラッシュＲＯＭ２のｂｓｓセグメント領域転送情報格納領域１０７など、他の場所に格納してもよい。
【００６６】
まとめると、ステップＳ６０７における処理により、データ転送装置６の各レジスタには以下のように転送条件パラメータ群が設定された状態となる。
転送元ポインタ設定レジスタ９：０を代入したアドレス
転送元ポインタ転送方向設定レジスタ１０：アドレス一定
転送データサイズ設定レジスタ１１：SizeOfBssSegment
転送先ポインタ設定レジスタ１２：pRamBss
転送先ポインタ転送方向設定レジスタ１３：アドレスインクリメント
次にステップＳ６０８で、転送開始レジスタ１４をイネーブルにする。これにより、データ転送装置６はデータ転送を開始する。この転送により、ＤＲＡＭ３上のｂｓｓセグメント展開領域１０５の全アドレスに０が代入された状態となる。
【００６７】
ステップＳ６０９では、転送が完了したかを判定し、完了するとステップＳ６１０へ移行する。完了の判定は、転送データサイズ設定レジスタ１１に定められる量のデータが転送されたか（ここでは、０が代入されたか）によって行なうことができる。
【００６８】
ステップＳ６１０では、転送開始レジスタ１４をディスエーブルにする。これにより、データ転送装置６はデータ転送を停止する。
【００６９】
ステップＳ６１１では、転送完了レジスタ１５をアサートする。このとき一方で、ＣＰＵ１は必要な初期化作業を行なった後、転送完了レジスタ１５を監視している。ＣＰＵ１が転送完了レジスタ１５のアサートを確認したらシステムの起動が完了し、変数操作を伴うファームウェアの実行が可能となる。
【００７０】
＜ＣＰＵ１の処理の流れ＞
図７は、電源装置１６に電源が投入された際の、ＣＰＵ１の処理の流れを示すフローチャートである。
【００７１】
ステップＳ７０１で電源装置１６に電源が投入されると、ステップＳ７０２で、ＣＰＵ１は変数操作を伴わない、所定の初期化作業を行なう。この作業は例えばＣＰＵ１及びその周辺デバイスのハードウェア初期化の処理である。特にデジタルカメラにおいては液晶やレンズ、その他操作部材と結線するポートの入出力値の初期化である。
【００７２】
初期化作業が終了するとステップＳ７０３で、転送完了レジスタ１５がアサートされるのを待つ。アサートを確認するとステップＳ７０４に移行し、システムの起動処理が完了する。
【００７３】
＜まとめ＞
以上図１乃至図７を参照して説明したように、本実施形態によれば、データ転送装置６はＣＰＵ１を使用することなく転送条件パラメータ群を設定し、フラッシュＲＯＭ２からＤＲＡＭ３へのデータの展開を行なうことができる。すなわち、従来はＤＭＡ転送においても転送条件パラメータ群の設定のために多少なりともＣＰＵ資源を消費していたが、本実施形態によれば、データ転送装置６はＣＰＵ１と完全に独立して動作することが可能である。
【００７４】
これにより、データ処理装置（例えばデジタルカメラ）の電源投入時にＣＰＵ１はデータ転送に係る負担を受けずに他の初期化作業を行なうことが可能となる。その結果、システムの起動に要する時間を短縮することが可能となる。
【００７５】
なお、本実施形態では一例としてファームウェアを実行する最小構成からなるデータ処理装置について説明したが、マイクロコンピュータとファームウェアで実行するデータ処理装置全般に適用可能である。また、データセグメント領域転送情報、及びｂｓｓセグメント領域転送情報の格納先はフラッシュＲＯＭ２に限定されることなく、その他の不揮発性外部記録装置、もしくはハードウェアに搭載の別のメモリ領域であってもよい。
【００７６】
さらに、データ転送装置６が展開可能な領域はデータセグメント領域１０２及びｂｓｓセグメント領域１０３に限られるものではない。すなわち、ＲＯＭ８中の制御プログラムの設計を変更すれば、テキストセグメント領域１０１はもちろん、その他任意の領域の展開にデータ転送装置６を適用することが可能である。
【００７７】
［第２の実施形態］
第１の実施形態では、データ転送装置６が転送条件パラメータ群を記録するために転送元ポインタ設定レジスタ９乃至転送先ポインタ転送方向設定レジスタ１３を備え、展開する領域ごと（例えばデータセグメント領域１０２とｂｓｓセグメント領域１０３）に転送条件パラメータ群を設定し、展開を行なった。第２の実施形態では、展開する領域ごとに転送条件パラメータ群を記録するために、領域の数だけレジスタ群を備えるデータ転送装置２３（図８参照）について説明する。
【００７８】
＜システム構成＞
図８は、本実施形態におけるデータ処理装置及びデータ転送装置のシステム構成を示す図である。図８において、第１の実施形態と同じ構成要素には同じ符号を付して詳細な説明は省略する。
【００７９】
本実施形態では、データ転送装置２３は、展開すべきデータセグメント領域１０２及びｂｓｓセグメント領域１０３それぞれに専用の展開装置であるデータセグメント領域展開装置１７及びｂｓｓセグメント領域展開装置２０を備える。また、それぞれの展開装置は、転送元ポインタ設定レジスタ９乃至転送先ポインタ転送方向設定レジスタ１３に相当する、データセグメント領域転送情報設定レジスタ群１８及びｂｓｓセグメント領域転送情報設定レジスタ群２１を備える。さらに、それぞれの展開装置は、転送開始レジスタ１４に相当する転送開始レジスタ１９及び転送開始レジスタ２２を備える。
【００８０】
このように、本実施形態では、データ転送装置２３を搭載したデータ処理装置において、データ転送装置２３内にフラッシュＲＯＭ２の特定アドレスのデータを転送条件パラメータ群として反映するミラーレジスタ（データセグメント領域転送情報設定レジスタ群１８、ｂｓｓセグメント領域転送情報設定レジスタ群２１）を備える。
【００８１】
ミラーレジスタについて詳述すると、データセグメント領域転送情報設定レジスタ群１８は図３におけるデータセグメント領域転送情報格納領域１０６の値を反映するミラーレジスタとなっている。すなわちデータ転送装置２３は電源投入時に、データセグメント領域転送情報設定レジスタ群１８にデータセグメント領域転送情報格納領域１０６に保持される転送条件パラメータ群を代入する。同様に、ｂｓｓセグメント領域転送情報設定レジスタ群２１は図３におけるｂｓｓセグメント領域転送情報格納領域１０７に保持される転送条件パラメータ群を反映するミラーレジスタとなっている。
【００８２】
＜データ転送（展開）処理の流れ＞
図９は、データ処理装置の起動時にデータ転送装置２３がフラッシュＲＯＭ２からＤＲＡＭ３にデータを展開する処理の流れを示すフローチャートである。なお、特に断らなければ図９のフローチャートにおける動作の主体は、制御部７である。
【００８３】
ステップＳ９０１で電源装置１６に電源が投入されると、電源回路（不図示）を介してデータ転送装置２３に電力が供給される。並行して、ＣＰＵ１は図６のステップＳ６０１と同様、変数操作を伴わない所定の初期化作業を行なう。
【００８４】
データ転送装置２３が電力の供給を受けると、ステップＳ９０２で、データ転送装置２３が起動する。
【００８５】
次にステップＳ９０３で、データセグメント領域転送情報設定レジスタ群１８及びｂｓｓセグメント領域転送情報設定レジスタ群２１のミラーリングを行なう。ミラーリングとは、フラッシュＲＯＭ２のデータセグメント領域転送情報格納領域１０６及びｂｓｓセグメント領域転送情報格納領域１０７から始まる領域に格納されているデータをデータセグメント領域転送情報設定レジスタ群１８及びｂｓｓセグメント領域転送情報設定レジスタ群２１にコピーする処理である。
【００８６】
なお、転送元ポインタ転送方向設定レジスタ１０及び転送先ポインタ転送方向設定レジスタ１３に相当するレジスタに記録されるべき値については、それぞれの展開装置に固有の値であるため、データ転送装置２３製造時に予め記録しておくことができる。
【００８７】
次にステップＳ９０４でデータセグメント領域展開装置１７を起動し、ステップＳ９０５で転送開始レジスタ１９をイネーブルにする。これにより、データセグメント領域展開装置１７は専用のデータセグメント領域転送情報設定レジスタ群１８の設定値に従ってデータ転送を開始する。前述のようにデータセグメント領域転送情報設定レジスタ群１８はデータセグメント領域転送情報格納領域１０６に格納される情報をミラーリングするミラーレジスタ群となっているので、各レジスタには、以下の転送条件パラメータ群が格納されている。
(データセグメント領域転送情報)
フラッシュＲＯＭ２のデータセグメント領域１０２の開始アドレス：pData
フラッシュＲＯＭ２のテキストセグメント領域１０１のサイズ：SizeOfDataSegment
ＤＲＡＭ３のデータセグメント展開領域１０４の開始アドレス：pRamData
また転送時の転送元ポインタ転送方向、及び転送先ポインタ転送方向はいずれもインクリメント方向である。
【００８８】
これにより、データセグメント領域１０２の初期化済み変数をすべてフラッシュＲＯＭ２のpDataからＤＲＡＭ３のpRamDataへ展開することができる。
【００８９】
ステップＳ９０６では、転送が完了したかを判定し、完了するとステップＳ９０７へ移行する。完了の判定は、SizeOfDataSegmentで定められる量のデータが転送されたかによって行なうことができる。
【００９０】
ステップＳ９０７では、転送開始レジスタ１９をディスエーブルにする。これにより、データ転送装置２３はデータ転送を停止する。
【００９１】
ステップＳ９０８で、データセグメント領域展開装置１７はｂｓｓセグメント領域展開装置２０に対してデータセグメント領域転送完了信号をアサートする。
【００９２】
この信号をトリガーにして、ステップＳ９０９で、ｂｓｓセグメント領域展開装置２０を起動する。次いでステップＳ９１０で、転送開始レジスタ２２をイネーブルにする。これにより、ｂｓｓセグメント領域展開装置２０は専用のｂｓｓセグメント領域転送情報設定レジスタ群２１の設定値に従ってデータ転送を開始する。前述したようにｂｓｓセグメント領域転送情報設定レジスタ群２１はｂｓｓセグメント領域転送情報格納領域１０７に格納される情報をミラーリングするミラーレジスタ群となっているので、各レジスタには、以下の転送条件パラメータ群が格納されている。
（ｂｓｓセグメント領域転送情報)
フラッシュＲＯＭ２のｂｓｓセグメント領域１０３のサイズ：SizeOfBssSegment
ＤＲＡＭ３のｂｓｓセグメント展開領域１０５の開始アドレス：pRamBss
ここで、転送元ポインタには第１の実施形態と同様、ＤＲＡＭ３上の空きアドレスに値０を書き込み、そのアドレスを指定する。
【００９３】
また、転送元ポインタ転送方向設定を一定、すなわちアドレスの変更を行なわないように設定し、転送先ポインタ転送方向をインクリメント方向にする。これにより、pRamBssから始まるｂｓｓセグメント領域１０３の全アドレスに０を代入することができる。
【００９４】
ステップＳ９１１では、転送が完了したかを判定し、完了するとステップＳ９１２へ移行する。完了の判定は、SizeOfBssSegmentで定められる量のデータが転送されたか（ここでは、０が代入されたか）によって行なうことができる。
【００９５】
ステップＳ９１２では、転送開始レジスタ２２をディスエーブルにする。これにより、データ転送装置２３はデータ転送を停止する。
【００９６】
ステップＳ９１３で、転送完了レジスタ１５をアサートする。このとき一方で、ＣＰＵ１は必要な初期化作業を行なった後、転送完了レジスタ１５を監視している。ＣＰＵ１が転送完了レジスタ１５のアサートを確認したらシステムの起動が完了し、変数操作を伴うファームウェアの実行が可能となる。なお、このときのＣＰＵ１の処理の流れは第１の実施形態と同様、図７に示すものである。
【００９７】
＜まとめ＞
以上主に図８及び図９を参照して説明したように、本実施形態によれば、特定の展開作業を行なうように設計されたデータセグメント領域展開装置１７及びｂｓｓセグメント領域展開装置２０が展開作業を行なう。
【００９８】
これにより、第１の実施形態における利点に加えて、より簡潔な処理でＣＰＵ１に負荷をかけないデータ転送を行ない、データ処理装置を起動することが可能となる。
【００９９】
なお、本実施形態では一例としてファームウェアを実行する最小構成からなるデータ処理装置について説明したが、第１の実施形態と同様、マイクロコンピュータとファームウェアで実行するデータ処理装置全般に適用可能である。また、データセグメント領域転送情報、及びｂｓｓセグメント領域転送情報の格納先はフラッシュＲＯＭ２に限定されることなく、その他の不揮発性外部記録装置、もしくはハードウェアに搭載の別のメモリ領域であってもよい。さらに、ファームウェアのアップデートも第１の実施形態で図５を参照して説明したように、同様に行なうことができる。
【０１００】
［その他の実施形態］
上述した各実施の形態の処理は、各機能を具現化したソフトウェアのプログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても実現することができる。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フロッピィ（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【０１０１】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した各実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行ない、その処理によって前述した各実施の形態の機能が実現される場合も含まれている。
【０１０２】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行ない、その処理によって前述した各実施の形態の機能が実現される場合も含むものである。
【図面の簡単な説明】
【０１０３】
【図１】データセグメント領域１０２及びｂｓｓセグメント領域１０３をフラッシュＲＯＭ２からＤＲＡＭ３に展開する様子を示す図である。
【図２】第１の実施形態におけるデータ処理装置及びデータ転送装置６のシステム構成を示す図である。
【図３】フラッシュＲＯＭ２に格納されるデータの構成を示す図である。
【図４】データが展開されるＤＲＡＭ３の構成を示す図である。
【図５】データ処理装置がファームウェアプログラム及び転送条件パラメータ群をフラッシュＲＯＭ２に書き込む処理の流れを示すフローチャートである。
【図６】第１の実施形態において、データ処理装置の起動時にデータ転送装置６がフラッシュＲＯＭ２からＤＲＡＭ３にデータを展開する処理の流れを示すフローチャートである。
【図７】電源装置１６に電源が投入された際の、ＣＰＵ１の処理の流れを示すフローチャートである。
【図８】第２の実施形態におけるデータ処理装置及びデータ転送装置２３のシステム構成を示す図である。
【図９】第２の実施形態において、データ処理装置の起動時にデータ転送装置２３がフラッシュＲＯＭ２からＤＲＡＭ３にデータを展開する処理の流れを示すフローチャートである。
【符号の説明】
【０１０４】
１  ＣＰＵ
２  フラッシュＲＯＭ
３  ＤＲＡＭ
６  データ転送装置
１７  データセグメント領域展開装置
２０  ｂｓｓセグメント領域展開装置
２３  データ転送装置
【図１】
2006331221.tif 000003
【図２】
2006331221.tif 000004
【図３】
2006331221.tif 000005
【図４】
2006331221.tif 000006
【図５】
2006331221.tif 000007
【図６】
2006331221.tif 000008
【図７】
2006331221.tif 000009
【図８】
2006331221.tif 000010
【図９】
2006331221.tif 000011