(57)【特許請求の範囲】
【請求項１】
ＣＰＵを備え、該ＣＰＵが起動していない場合に、複数のデータ領域とＲＥ（Root Directory Entries）領域を有する外部記憶装置からブート用プログラムをリードすることで該ＣＰＵの起動を行う情報処理装置であって、
前記外部記憶装置から当該外部記憶装置における所定のフォーマット構造情報をリードする構造リード手段と、
前記外部記憶装置よりリードしたフォーマット構造情報に基づいて、データ領域およびＲＥ領域の開始クラスタ番号およびセクタ数を算出し、該算出された開始クラスタ番号およびセクタ数に基づいて、前記外部記憶装置からのリード対象とするアドレスを算出するアドレス算出手段と、
前記アドレス算出手段により算出されたリード対象アドレスに対してデータリードを行う対象リード手段と、
を有し、
前記対象リード手段は、
ｎを２以上のデータ領域およびＲＥ領域の数、ｍを１以上ｎ以下の整数としたときに、ｍ番目のデータ領域のデータリードを行い、前記アドレス算出手段がｍ＋２番目のＲＥ領域開始セクタからｍ＋２番目のデータ領域の開始セクタを算出した後に、ｍ＋１番目のＲＥ領域開始セクタからｍ＋１番目のデータ領域の開始セクタを算出しデータリードを行う
ことを特徴とする情報処理装置。
【請求項２】
前記外部記憶装置は、前記ブート用プログラムを格納しているデータ領域と、前記ブート用プログラムを格納していないデータ領域と、を有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記アドレス算出手段は、
前記外部記憶装置からリードしたフォーマット構造情報を格納するデータバッファと、
前記データバッファから所定の値を読み出すことでデータ領域開始セクタおよびＲＥ領域開始セクタの算出を行うアドレス演算部と、
該算出されたデータ領域開始セクタおよびＲＥ領域開始セクタ、並びに前記ＣＰＵによるリセットベクタからのアドレスに基づいて、前記外部記憶装置からのリード対象とするアドレスを算出するアドレス変換部と、を備えたことを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
前記アドレス演算部は、前記構造リード手段によりリードしているＲＥ領域が最終クラスタでない場合、次のＲＥ領域がリード対象であることを示す次ＲＥリードフラグを立てることを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記アドレス演算部は、前記構造リード手段によりリードしているＲＥ領域が最終クラスタである場合、もしくは、前記次ＲＥリードフラグが立っていない場合、前記構造リード手段によりリードしているＲＥ領域の次のＲＥ領域開始セクタ、および次のデータ領域開始セクタ算出の演算を行わないことを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記ＣＰＵの起動処理のシーケンス制御を行うシーケンス制御手段を備え、
前記構造リード手段は、前記シーケンス制御手段の制御により前記外部記憶装置からのリードを行い、
前記シーケンス制御手段は、前記対象リード手段による１つのデータ領域中のデータリード完了時に、前記次ＲＥリードフラグが立っている場合、前記対象リード手段により次のデータ領域をリードさせ、前記次ＲＥリードフラグが立っていない場合、データリードを終了させることを特徴とする請求項４または５記載の情報処理装置。
【請求項７】
前記シーケンス制御手段は、前記ＣＰＵからのブート完了通知を受信した場合、前記ＣＰＵの起動処理を終了することを特徴とする請求項６記載の情報処理装置。
【請求項８】
前記シーケンス制御手段は、前記ＣＰＵからのブート完了通知を受信した場合、前記次ＲＥリードフラグに関わらず、該ブート完了通知の受信時点でデータリードを終了させることを特徴とする請求項６または７記載の情報処理装置。
【請求項９】
前記シーケンス制御手段から予め定められたパラメータを受信することで、該パラメータに応じた前記外部記憶装置からのデータ転送を行う外部記憶装置インタフェースを備えたことを特徴とする請求項６から８の何れか１項に記載の情報処理装置。
【請求項１０】
前記外部記憶装置の前記データ領域からリードしたブートプログラムを格納するブートプログラムバッファ手段を備え、
前記ＣＰＵがブートプログラムを読み込むＲＡＭには、前記ブートプログラムバッファ手段からブートプログラムが転送されることを特徴とする請求項１から９の何れか１項に記載の情報処理装置。
【請求項１１】
前記ブートプログラムバッファ手段から、前記ＣＰＵへの転送バス幅に応じたビット数単位で前記ＲＡＭにデータ転送を行うＲＡＭインタフェースを備えたことを特徴とする請求項１０記載の情報処理装置。
【請求項１２】
前記ＣＰＵへの転送単位が前記外部記憶装置からの転送容量より小さい場合、１セクタ分を該ＣＰＵ側に転送するまで前記ブートプログラムバッファ手段からデータリードを行い、前記外部記憶装置との転送を行わないことを特徴とする請求項１１記載の情報処理装置。
【請求項１３】
前記ＣＰＵからのブート完了通知が発信された場合、前記１セクタ分の転送が完了していなくても、ＣＰＵ起動処理が終了されることを特徴とする請求項１２記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばＳＤ（Secure Digital）カードなどの外部記憶装置からブート用プログラムをリードすることでＣＰＵの起動を行う情報処理装置に関する。
【背景技術】
【０００２】
ＦＡＴ（File Allocation Table）方式にてフォーマットされているＳＤカードに対して、格納されているデータをリードする際はアドレス（セクタ）を直接指定してセクタ単位でデータリードを行う方法が一般的である。そのため、ＣＰＵが起動していない場合、データリード開始アドレスをハードウェアで指定して、そのアドレスから指定されたデータ長を連続でデータリードする方法が既に知られている。
【０００３】
また、従来のＳＤカード（ＳＤＳＣ）では、フォーマット構造として、ユーザが使用できる領域であるユーザ領域（データ領域）とRoot Directory Entries（以下ＲＥ）が１つで固定であったのに対し、新規格であるＳＤＨＣ／ＳＤＸＣでは、図６に示すように、ユーザ領域中がＲＥ領域、データ領域に分かれており、かつ、このＲＥ領域、データ領域が複数あることが既に知られている。
【０００４】
また、こうしたデータ領域が１つに固定された外部記憶装置からＣＰＵをブートすることで、ブート用ＲＯＭを不要可能とする情報処理装置がある（例えば、特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来のデータリード方法では、データリードする際に連続でデータをリードしてくるため、読み出すデータが、データ領域中、連続で存在している必要があった。このため、データ領域が複数に分割される可能性があるＳＤＨＣ／ＳＤＸＣを用いてブート処理（ＣＰＵが起動していない時のデータリード）などを行うと、格納されているブートプログラムが連続でないため、正常に処理を行うことができない可能性があった。
【０００６】
また、上述した特許文献１のものは、例えば図６に示すＳＤＨＣやＳＤＸＣのような、データ領域が１つに固定されておらず、ブートプログラムが連続して格納されていない外部記憶装置を用いることについてまで考慮されたものではなかった。
【０００７】
また、ＳＤカードのＲＥはクラスタチェイン構造であるため、ファイルシステム中ＦＡＴ部分のデータをリードすることで、各ＲＥ開始セクタを算出することが可能である。ＳＤブートの際、ブート開始前に全ＲＥ開始セクタを算出しておけば、ユーザ領域の構造がわかるため、容易にセクタ以外の読み飛ばしが可能となる。しかし、ＳＤカードが挿入されるまで、ＳＤホストである情報処理装置は、ユーザ領域の構造を知る術がない。また、全てのユーザ領域にブートプログラムが格納されているとは限らないため、上述した全てのＲＥ開始セクタをリードしてからブートを行う方法では、データリード回数、リード開始セクタ演算時間、事前に用意しておく各ＲＥ開始セクタ格納バッファ数を考えると効率的ではないという問題があった。
【０００８】
本発明はこのような状況に鑑みてなされたものであり、データ領域が１つに固定されていないフォーマット構造の外部記憶装置からであっても、その外部記憶装置からのＣＰＵブートを効率的に行うことができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
かかる目的を達成するために、本発明に係る情報処理装置は、ＣＰＵを備え、該ＣＰＵが起動していない場合に、複数のデータ領域とＲＥ（Root Directory Entries）領域を有する外部記憶装置からブート用プログラムをリードすることで該ＣＰＵの起動を行う情報処理装置であって、前記外部記憶装置から当該外部記憶装置における所定のフォーマット構造情報をリードする構造リード手段と、前記外部記憶装置よりリードしたフォーマット構造情報に基づいて、データ領域およびＲＥ領域の開始クラスタ番号およびセクタ数を算出し、該算出された開始クラスタ番号およびセクタ数に基づいて、前記外部記憶装置からのリード対象とするアドレスを算出するアドレス算出手段と、前記アドレス算出手段により算出されたリード対象アドレスに対してデータリードを行う対象リード手段と、を有し、前記対象リード手段は、ｎを２以上のデータ領域およびＲＥ領域の数、ｍを１以上ｎ以下の整数としたときに、ｍ番目のデータ領域のデータリードを行い、前記アドレス算出手段がｍ＋２番目のＲＥ領域開始セクタからｍ＋２番目のデータ領域の開始セクタを算出した後に、ｍ＋１番目のＲＥ領域開始セクタからｍ＋１番目のデータ領域の開始セクタを算出しデータリードを行うことを特徴とする。
【発明の効果】
【００１０】
以上のように、本発明によれば、データ領域が１つに固定されていないフォーマット構造の外部記憶装置からであっても、その外部記憶装置からのＣＰＵブートを効率的に行うことができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態としての情報処理装置の構成例を示すブロック図である。
【図２】ＳＤホスト５００の構成例を示すブロック図である。
【図３】アドレス変換部５０４によるアドレス変換例を示す図である。
【図４】本実施形態によるＳＤブート時の動作例を示すフローチャートである。
【図５】本実施形態によるＳＤブート時の動作例を示すフローチャートである。
【図６】各種ＳＤカードのフォーマット構造を示す図である。
【発明を実施するための形態】
【００１２】
次に、本発明に係る情報処理装置を適用した一実施形態について、図面を用いて詳細に説明する。
【００１３】
まず、本実施形態の概略について説明する。
本実施形態の情報処理装置は、ＳＤブートを開始する前に、図６で上述したＳＤカードのパーティション領域、システム領域にアクセスすることで、ユーザ領域開始セクタ、ＲＥ領域１開始セクタ、１クラスタ当たりのセクタ数、ＲＥ領域２開始セクタのリード、演算を実施する。ＲＥ領域が１つしかない場合でも、ＲＥ領域２開始セクタのリード、演算を行う。（ＳＤカードのＲＥがクラスタチェイン構造であるため、最終クラスタの場合は次のクラスタ番号ではなく０ｘ０ＦＦＦ＿ＦＦＦＦを返す）。
【００１４】
情報処理装置は、次に、ユーザ領域開始セクタと、ＲＥ領域１開始セクタより、データ領域１開始セクタを算出する。その後、データ領域１開始セクタから連続でデータリードをＲＥ領域２の開始セクタの１つ前までリードを行う。もし、この時点までにブートが完了していれば、ブート完了時にデータリードを終了する。
【００１５】
情報処理装置は、データ領域１のデータリードを完了したら、再びシステム領域にアクセスし、ＲＥ領域３の開始セクタのリード、演算を行う。その後、ＲＥ領域２開始セクタよりデータ領域２の開始セクタを算出し、データリードを実施する。
以後は、この動作を繰り返すことで、最初に全ての必要データを算出して行う方法に対し、ＳＤカードへのアクセス回数、演算時間、必要バッファの容量を減らすことができる。
【００１６】
次に、本実施形態としての情報処理装置の構成について、図１を参照して説明する。
本実施形態としての情報処理装置は、図１に示すように、ＡＳＩＣ（Application Specific Integrated Circuit）１００を備え、ＳＤカード６００を装着可能に構成されている。このことにより、ＳＤカード６００からＣＰＵ２００をブートできるようになっている。
【００１７】
ＣＰＵ２００は、ＡＳＩＣ１００に搭載されているＣＰＵである。ＳＤブート実施時は起動していない。ＳＤカード６００に格納されているブートプログラムを読みこむことで起動する。ブート完了しＣＰＵ２００が起動したら、ＳＤホスト５００およびＢＯＯＴ  Ｉ／Ｆ（インタフェース）４００に対して、Ｂｏｏｔ完了通知を行う。
【００１８】
ＲＡＭ３００は、ＳＤカード６００よりリードされたブートプログラムを格納してＣＰＵ２００が読み込めるようにする。
【００１９】
ＢＯＯＴ  Ｉ／Ｆ４００は、ＳＤホスト５００に対してＳＤカードのリードデータ転送要求を出す。なお、ブート時は、ＣＰＵ側から送られてくるリード開始アドレスは、リセットベクタになる。
【００２０】
ＳＤホスト５００は、ＳＤカード６００とのＩ／Ｆで、本モジュールにてＳＤの制御を実施する。
【００２１】
ＳＤカード６００は、例えばＳＤＳＣ、ＳＤＨＣ、ＳＤＸＣなど、各種の規格によるＳＤカードであってよい。
【００２２】
次に、ＳＤホスト５００の構成について、図２を参照して説明する。
【００２３】
・    ブートステート制御部５０１（シーケンス制御機能部）
ＳＤブートを実施する際はＣＰＵが使用できないため、ＳＤ初期化処理などをＨ／Ｗ（ハードウェア）で行う必要がある。そのＳＤ初期化実行、ブートプログラムリードといったＣＰＵ起動処理における一連のシーケンス管理を行う制御部である。
例えば、Ｂｏｏｔ完了通知によってＳＤブート処理を終了する。また、次ＲＥリードフラグによって、１データ領域中のデータリード完了時に次のデータ領域をリードするか判断する。すなわち、次ＲＥリードフラグが立っている場合、次のデータ領域をリードし、そのフラグが立っていない場合、データリードを終了するよう制御する。
【００２４】
・    ＲＡＭ  Ｉ／Ｆ５０２
ＳＤカード６００からリードしたブートプログラムをＲＡＭ３００やＣＰＵ２００側のＩ／Ｆに合わせて出力するモジュール。ＳＤカード６００から読み出されてブートプログラムバッファ５０３に一時保存されたデータを、ＣＰＵ２００側からの転送バス幅に応じて、必要なｂｉｔ数単位でＣＰＵ側のＲＡＭ３００に転送するといった、バス幅、タイミング調整、非同期吸収を行う。また、ＣＰＵ２００側から転送要求を受け取っていても、ＲＥ領域開始アドレス算出中や、ブートプログラムバッファ５０３が空の場合はビジーを返す。
【００２５】
・    アドレス変換部５０４
ＳＤブートを行う際、ＣＰＵ２００側から送られてくるアドレスは、リセットベクタが最初となる。したがって、ＳＤカード６００にアクセスする際のセクタ数（アドレス）とＣＰＵ２００からのアドレスを紐付ける必要がある。すなわち、リセットベクタアドレスをデータ領域１の開始セクタに変換する必要がある。データ領域が連続している限りそこから順次リードを行えばよいが、データの読み飛ばしを行った場合は再度アドレス変換を行う必要がある。
【００２６】
図３にアドレス変換の例を示す。アドレス変換部５０４は、この図３に示すように、ＳＤカードの各データ領域に対して、そのデータ領域の開始アドレスにＣＰＵ２００から送られてくるアドレスを加えたアドレスを、ＳＤカード６００にアクセスする際のアドレスとするよう変換する。
【００２７】
・    ブートプログラムバッファ５０３
ＳＤカード６００から、リードしたブートプログラムを一時保存しておくバッファ。ＳＤカード６００とのデータ転送はセクタ単位で行われるのに対し、ＣＰＵ２００側との転送はｂｉｔ幅が決まっていない。そのため転送速度に差が出てしまうが、ここのバッファでその差分を調整する。
【００２８】
・    アドレスバッファ５０５
各ＲＥ領域開始セクタのアドレスを格納するバッファ。最初に全ＲＥ領域開始アドレスをリードしてからブートを開始する方法だと、このバッファ数が増大する。しかし、今回の方法の場合、現ＲＥ領域開始セクタと次ＲＥ領域開始セクタの分だけ保持しておけば良い。
【００２９】
・    外部記憶装置Ｉ／Ｆ５０６
外部記憶装置、ここではＳＤカード６００とのＩ／Ｆで実際にＳＤカード６００とのデータ転送を行うモジュール。ＳＤ初期化の際に必要なパラメータに関しては、ブートステート制御部５０１から受け取る。受け取ったパラメータに対応した、コマンド、データ送信を行ったり、受信データをバッファに格納したりする。
【００３０】
・    データバッファ５０７
ＳＤカード６００との転送はセクタ単位で行われる。したがって、パーティション領域、システム領域からリードしてきたデータを一時格納しておくバッファが必要となる。アドレス算出などの演算に必要な値は、一度このバッファに保存され、ここから必要な値を使って各アドレスを算出している。
【００３１】
・    アドレス演算部５０８
データバッファ５０７に格納されたＳＤリードデータより、ユーザエリア開始セクタ、ＲＥ領域開始セクタ算出を行うモジュール。またＲＥのクラスタチェイン情報より、現在リード、演算中のＲＥ領域がクラスタチェイン中最終クラスタか否かを判断し、次のＲＥ情報をリードするかしないか判断する次ＲＥリードフラグをブートステート制御部５０１に送る。
【００３２】
次に、本実施形態によるＳＤブート時の動作について、図４、図５のフローチャートを参照して説明する。
【００３３】
ステップSｔ０１として、ＡＳＩＣ１００は、カードディテクト信号などにより、ＳＤカードが挿入されているか検知を行う。ＳＤカードが検知されればステップＳｔ０２へ遷移する。
【００３４】
ステップSｔ０２として、ＡＳＩＣ１００は、ＳＤカード６００に対して初期化処理を行う。この初期化処理は、挿入されるカードの規格（ＳＤＳＣ／ＳＤＨＣ／ＳＤＸＣ）によって処理が異なる。ＳＤ初期化処理に関しては、『SD Memory Card Specification Part1 PHYSICAL LAYER SPECIFICATION』（以下ＳＤ規格書と称す）にて明示されているためここでは言及しない。
【００３５】
ステップSｔ０３として、ＡＳＩＣ１００は、ＳＤカード６００のパーティション領域／システム領域からユーザエリア開始アドレスを算出するためのパラメータをリードする。必要なパラメータは＜１＞論理Offset、＜２＞Reserved Sector Count、＜３＞Number of FAT、＜４＞Sector per FAT、＜５＞Number of Root-directory Entries、＜６＞byte per Sector、である。なお、各パラメータ詳細に関してはＳＤ規格書に明示されているため省略する。
【００３６】
ステップSｔ０４として、ＡＳＩＣ１００は、ステップＳｔ０３でリードしたパラメータより、挿入されたＳＤカード６００のユーザ領域開始アドレスを算出する。算出式は以下に示すとおりである。
【００３７】
【数１】
0005533278.tif 000002
【００３８】
ステップSｔ０５として、ＡＳＩＣ１００は、変数ｍの処理を実施する。なお、変数ｍは、図６に示すフォーマット構造におけるユーザ領域中のＲＥ領域、データ領域の番号を示す。なお、この番号はどのデータ領域をリードすべきかを示すもので、実際に定義する必要はない。
【００３９】
ステップSｔ０６として、ＡＳＩＣ１００は、ＲＥ領域ｍの開始クラスタ番号をリードする。パラメータとしては＜１＞Sector per Cluster、＜２＞Root Clusterをリードする。各パラメータ詳細はＳＤ規格書に明示されているため省略する。
【００４０】
ステップSｔ０７として、ＡＳＩＣ１００は、ステップＳｔ０６にてリードしたパラメータと、ステップＳｔ０４で算出した、ユーザ領域開始アドレスより、ＲＥ領域ｍの開始セクタ（アドレス）を算出する。また、ＲＥ領域ｍの開始セクタより、データ領域ｍの開始セクタ（アドレス）を算出する。なお、ＲＥ領域は１クラスタで構成されている。
【００４１】
ステップSｔ０８として、ＡＳＩＣ１００は、ＦＡＴ領域にアクセスして、ＲＥ領域ｍのクラスタ番号に対応した箇所をリードすることで、ＲＥ領域ｍ＋１のクラスタ番号をリードする。
【００４２】
ステップSｔ０９として、ＡＳＩＣ１００は、ＲＥ領域ｍが最終クラスタであるかの判断を行い、最終クラスタでないならステップＳｔ１０へ遷移し、最終クラスタであるならステップＳｔ１１へ遷移する。ステップＳｔ０８でリードした値がＲＥ領域ｍ＋１のクラスタ番号となり、最終クラスタである場合０ｘ０ＦＦＦ＿ＦＦＦＦがリードされる。
【００４３】
ステップSｔ１０として、ＡＳＩＣ１００は、次ＲＥ領域のクラスタ番号をリードするフラグをＯＮにする。このフラグがＯＮの場合、ＲＥ領域ｍが最終クラスタでないことを示す。
【００４４】
ステップＳｔ１１では、ＲＥ領域ｍが最終クラスタでない場合、ＡＳＩＣ１００は、ＲＥ領域ｍ＋１のクラスタ番号からＲＥ領域ｍ＋１とデータ領域ｍ＋１開始セクタ（アドレス）を算出する。
【００４５】
ステップＳｔ１１’では、状態遷移されてきた時に、ＡＳＩＣ１００は、ＲＥ領域ｍ＋１のクラスタ番号からＲＥ領域ｍ＋１とデータ領域ｍ＋１開始セクタ（アドレス）を算出する。
【００４６】
ステップSｔ１２は、変数処理である。変数ｎはデータ領域内のセクタ番号を示している。なお、この変数は何番目のセクタをリードするかを示すものであるため、変数を定義する必要はとくにない。
【００４７】
ステップSｔ１３として、ＡＳＩＣ１００は、ＣＰＵ２００側から、ブートプログラムの転送要求があったかを判断する。転送要求があった場合、ステップＳｔ１３へ遷移し、要求がなければ、要求を受けるまでｗａｉｔする。
【００４８】
ステップSｔ１４として、ＡＳＩＣ１００は、ＳＤカード６００に対して、ブートプログラムのデータリードを行う。データリードはセクタ単位で行われ、リードしたデータは、ＳＤホスト５００内のバッファに格納される。リードするセクタアドレスに関しては、ステップＳｔ０７もしくは、Ｓｔ２０にて算出したデータ領域開始アドレスとリードするセクタ番号から算出される。
【００４９】
ステップSｔ１５として、ステップＳｔ１３にて１セクタのデータリードが完了したら、ＡＳＩＣ１００は、このセクタがデータ領域ｍの最終セクタであるかを判断する。最終セクタの場合、ステップＳｔ１６’へ遷移し、最終セクタではない場合ステップＳｔ１６へ遷移する。最終セクタかどうかの判断は、ＲＥ領域ｍ＋１の開始アドレスより判断する。また、ＲＥ領域ｍが最終セクタである場合は、最終セクタ  ＝  ユーザ領域の最終セクタとなる。
【００５０】
ステップSｔ１６／Ｓｔ１６’として、ＡＳＩＣ１００は、バッファに格納したブートプログラムをＣＰＵ２００側に転送する。この転送は１セクタの分のデータ転送を完了するか、もしくはブートが完了するまで繰り返し行われる。なお、転送レートはバス幅に依存するため１セクタ転送するための転送回数は固定ではない。
【００５１】
ステップSｔ１７／Ｓｔ１７’として、ＡＳＩＣ１００は、ＣＰＵ２００側からＢＯＯＴ完了通知を受け取ったかを判断する。ブートが完了すれば、ＳＤブート処理を終了し、完了していない場合は、ステップＳｔ１８／Ｓｔ１８’へ遷移する。
【００５２】
ステップSｔ１８／Ｓｔ１８’として、ＡＳＩＣ１００は、ＣＰＵ２００側に対して、１セクタ分の転送が完了したかを判断する。完了していれば、変数ｎを＋１し次セクタの転送要求をｗａｉｔする。完了していなければ、セクタ内のデータ転送を繰り返す。
【００５３】
ステップSｔ１９は、変数制御である。ＡＳＩＣ１００は、変数ｎを＋１し、次セクタ転送要求に備える。
【００５４】
ステップSｔ２０として、ＡＳＩＣ１００は、ステップＳｔ１０の次ＲＥリードフラグがＯＮの場合はステップＳｔ１１’へ遷移し、ＲＥ領域ｍ＋１とデータ領域ｍ＋１の開始セクタ（アドレス）を算出する。次ＲＥリードフラグがＯＦＦの場合は、全データ領域をリードし終えた場合にブート処理が完了していないことを示すため、ブートエラーとして終了する。
【００５５】
ステップSｔ２１は、変数制御である。ＡＳＩＣ１００は、変数ｍを＋１し、次ＲＥ領域のクラスタ番号リードに備える。
【００５６】
以上のように、上述した実施形態では、ＣＰＵが起動していない場合に、ＳＤカードに代表されるＦＡＴ構造の外部記憶装置からブート用プログラムをリードすることでＣＰＵ起動を行う情報処理装置において、
・    外部記憶装置とのＩ／Ｆ制御を行う機能
・    ＣＰＵ起動処理のシーケンス制御を行う機能
・    外部記憶装置のファイル構造（フォーマット構造）をリードする機能
・    外部記憶装置よりリードしたファイル構造中、ユーザ領域／ＲＥ領域の開始クラスタ番号、セクタ数を格納するバッファ機能
・    格納されたクラスタ番号、セクタ数より、データ領域開始アドレスを算出する機能
・    リードしたブートプログラムを格納するＲＡＭとのＩ／Ｆ機能
・    ＣＰＵ側からのリード要求に対して、リセットベクタからのアドレスと前記算出された開始アドレスからデータリードするアドレスを算出する機能
を有することにより、外部記憶装置に対してデータリードを行う際に、不要データ領域の読み飛ばしを行いつつデータリードを行うことができる。
【００５７】
このため、全てのＲＥ開始セクタをリードしてからブートを行う方法と比較して、データリード回数、リード開始セクタ演算時間、事前に用意しておく各ＲＥ開始セクタ格納バッファ数としての効率を向上させることができる。また、使用するＳＤカードによらずＳＤブートを可能としている。
【００５８】
このため、上述した実施形態では、前提条件として、ブートプログラムは、データ領域１の開始セクタから連続で格納されているものとする。また、ＲＥ領域の大きさは１クラスタ固定である。
【００５９】
こうした構成で、ＳＤブートを開始する前に、ＳＤカード６００のパーティション領域、システム領域にアクセスすることで、ユーザ領域開始セクタ、ＲＥ領域１開始セクタ、１クラスタ当たりのセクタ数、ＲＥ領域２開始セクタのリード、演算を実施する。ＲＥ領域が１つしかない場合でも、ＲＥ領域２開始セクタのリード、演算を行う。（ＳＤカードのＲＥがクラスタチェイン構造であるため、最終クラスタの場合は次のクラスタ番号ではなく０ｘ０ＦＦＦ＿ＦＦＦＦを返す）。
次に、ユーザ領域開始セクタと、ＲＥ領域１開始セクタより、データ領域１開始セクタを算出する。その後、データ領域１開始セクタから連続でデータリードをＲＥ領域２の開始セクタの１つ前までリードを行う。もし、この時点までにブートが完了していれば、ブート完了時にデータリードを終了する。
データ領域１のデータリードを完了したら、再びシステム領域にアクセスし、ＲＥ領域３の開始セクタのリード、演算を行う。その後、ＲＥ領域２開始セクタよりデータ領域２の開始セクタを算出し、データリードを実施する。
以後は、この動作を繰り返すことで、最初に全ての必要データを算出して行う方法と比較して、ＳＤカード６００への事前アクセス回数、リード開始セクタ演算時間、開始セクタ格納用バッファの容量を最小限にすることができる。
【００６０】
さらに、ＳＤブートを行う際に、使用するＳＤカードの種類を限定することなく、例えば図６に示すＳＤＨＣやＳＤＸＣのようなブートプログラムが連続して格納されていない外部記憶装置からであっても、ＣＰＵのブートを行うことできる。このため、ブート用ＲＯＭを不要にすることができ、小型で安価な情報処理装置を実現することができる。
【００６１】
また、上述した実施形態では、内部にブートプログラムバッファ５０３をもち、ＳＤカード６００からのリードデータを１度、ブートプログラムバッファ５０３に格納し、ＲＡＭ３００に対しては、ブートプログラムバッファ５０３からデータを読み出して転送する。
このことにより、ＳＤカード６００からＲＡＭ３００に対してブートプログラムを格納していく際の転送速度を向上させることができる。
【００６２】
また、上述した実施形態では、アドレス演算部が、現ＲＥ領域が最終クラスタでない場合、ブートステート制御部に対して、次のＲＥ領域をリードするフラグを立てる。また、現ＲＥ領域が最終クラスタである場合、もしくは、次ＲＥリードフラグがたっていない場合、現データ領域リード前に、次ＲＥ領域開始セクタ、次データ領域開始セクタ算出の演算を実施しない。
このことにより、トータルでの処理時間を短縮することができる。
【００６３】
また、上述した実施形態では、外部記憶装置から読み出したデータを内部バッファに一時保存し、ＣＰＵ側からの転送バス幅に応じて、必要なｂｉｔ数単位でＣＰＵ側に転送する。また、ＣＰＵ側への転送単位がＳＤカードからの転送容量１セクタ数より小さい場合、１セクタ分をＣＰＵ側に転送するまで、そのバッファからデータリードを行い、ＳＤカードとの転送を行わないようにする。
このことにより、全体の転送速度を向上させることができる。
【００６４】
また、そうした転送制御の際にＢｏｏｔ完了通知を受けると、１セクタ分の転送が完了していなくても、ＣＰＵ起動制御を終了する。このため、不要な転送処理を省き、トータルでの処理時間を短縮することができる。
【００６５】
なお、上述した各実施形態は本発明の好適な実施形態であり、本発明はこれに限定されることなく、本発明の技術的思想に基づいて種々変形して実施することが可能である。
【符号の説明】
【００６６】
１００    ＡＳＩＣ
２００    ＣＰＵ
３００    ＲＡＭ
４００    ＢＯＯＴ  Ｉ／Ｆ
５００    ＳＤホスト
５０１    ブートステート制御部
５０２    ＲＡＭ  Ｉ／Ｆ
５０３    ブートプログラムバッファ
５０４    アドレス変換部
５０５    アドレスバッファ
５０６    外部記憶装置Ｉ／Ｆ
５０７    データバッファ
５０８    アドレス演算部
６００    ＳＤカード
【先行技術文献】
【特許文献】
【００６７】
【特許文献１】特許第４０７３３０１号
【図１】
0005533278.tif 000003
【図２】
0005533278.tif 000004
【図３】
0005533278.tif 000005
【図４】
0005533278.tif 000006
【図５】
0005533278.tif 000007
【図６】
0005533278.tif 000008