(57)【要約】【課題】起動処理時間を短縮しCPUの負荷を軽減した電子機器を提供する。【解決手段】電子機器は，CPUと，それぞれレジスタを有する複数の周辺デバイスと，複数の周辺デバイス内のレジスタへの設定コマンド列を記憶するメモリと，CPUと複数の周辺デバイスとメモリとを接続するバスと，複数の周辺デバイスに共通に設けられ，バスに接続され，電源起動時に複数の周辺デバイス内のレジスタに対してメモリ内の設定コマンド列を実行する起動ユニットとを有する。【選択図】図１
2013218544.tif 000002
【特許請求の範囲】
【請求項１】
CPUと，
それぞれレジスタを有する複数の周辺デバイスと，
前記複数の周辺デバイス内のレジスタに対して実行すべき設定コマンド列を記憶するメモリと，
前記CPUと複数の周辺デバイスとメモリとを接続するバスと，
前記複数の周辺デバイスに共通に設けられ，前記バスに接続され，電源起動時に前記複数の周辺デバイス内のレジスタに対して前記メモリ内の設定コマンド列を実行する起動ユニットとを有する電子機器。
【請求項２】
請求項１において，
前記起動ユニットは，第１の周辺デバイス内のレジスタへの第１の設定コマンド列に含まれるウエイトコマンド実行中に，第２の周辺デバイス内のレジスタへの第２の設定コマンド列を実行する電子機器。
【請求項３】
請求項１または２において，
前記起動ユニットは，前記CPUが電源起動時に実行する前記設定コマンド列を前記バスからトレースし，当該トレースした複数の周辺デバイスに対する設定コマンド列を統合して前記メモリに格納し，
統合した設定コマンド列を格納した後に電源が起動した場合に，前記起動ユニットが前記統合された設定コマンド列を実行して，複数の周辺デバイスのレジスタへの設定を行う電子機器。
【請求項４】
請求項１または２において，
前記起動ユニットは，前記CPUが電源起動時に実行する追加された周辺デバイスのレジスタへの設定コマンド列を前記バスからトレースし，当該トレースした設定コマンド列を前記メモリ内の設定コマンド列に追加して記憶し，次回の電源起動時には，前記メモリ内の追加された設定コマンド列を含む設定コマンド列を実行する電子機器。
【請求項５】
請求項４において，
前記起動ユニットは，前記メモリ内に記憶されていた設定コマンド列の実行中に前記追加された設定コマンド列を実行する電子機器。
【請求項６】
請求項１乃至５のいずれかにおいて，
前記CPUは，電源起動時に前記起動ユニットに前記設定コマンド列の実行を指令する起動信号を供給し，前記起動ユニットは当該起動信号に応答して，前記メモリ内の起動コマンド列を実行する電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，複数の周辺デバイスを起動する起動ユニットを有する電子機器に関する。
【背景技術】
【０００２】
システムLSIなどの電子機器は，複数の周辺デバイスを有し，電源起動時にCPUが複数の周辺デバイスを初期化する起動プロセスを実行する。周辺デバイスには，例えばUSB制御デバイス，イーサーネット制御デバイス，I2C制御デバイス，タイマー及びGPSなどのセンサーである。この起動プロセスは，主に周辺デバイス内のレジスタへの初期値設定を有する。
【０００３】
周辺デバイス内のレジスタ設定を行うコマンド実行回路をチップ内に内蔵させることが特許文献１に記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−９２６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
電子機器の大規模化に伴い，周辺デバイスの数が増大し，起動プロセスの長時間化が問題になっている。周辺デバイスは，異なるベンダーのものが含まれ，それぞれの周辺デバイスの起動処理はそれぞれを開発したベンダーから提供される。CPUは，この周辺デバイス毎に提供されている起動処理を順に実行しなければならない。
【０００６】
そのため，起動プロセスが長時間化し，電源起動時の起動処理完了までに時間がかかるという問題が有る。さらに，各周辺デバイスの起動処理中には所定時間のウエイトが含まれているため，より一層，起動処理時間が長時間化している。
【０００７】
そこで，本発明の目的は，起動処理時間を短縮しCPUの負荷を軽減した電子機器を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の電子機器の第１の側面は，
CPUと，
それぞれレジスタを有する複数の周辺デバイスと，
前記複数の周辺デバイス内のレジスタへの設定コマンド列を記憶するメモリと，
前記CPUと複数の周辺デバイスとメモリとを接続するバスと，
前記複数の周辺デバイスに共通に設けられ，前記バスに接続され，電源起動時に前記複数の周辺デバイス内のレジスタに対して前記メモリ内の設定コマンド列を実行する起動ユニットとを有する。
【０００９】
第１の側面によれば，起動ユニットが複数の周辺デバイスへの起動処理を実行するので，電源起動時のCPUの負荷を軽減できる。また，複数の周辺デバイスへの設定コマンド列を統合して実行することで，起動処理時間を短縮できる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態における電子機器の構成図である。
【図２】本実施の形態における起動ユニット１２の構成例を示す図である。
【図３】本実施の形態における設定コマンド列の一例を示す図である。
【図４】設定コマンド列の別の例を示す図である。
【図５】統合設定コマンド列を実行するフローチャート図である。
【図６】統合設定コマンド列を実行するフローチャート図である。
【発明を実施するための形態】
【００１１】
図１は，本実施の形態における電子機器の構成図である。この電子機器は，一例としてシステムLSIであり，図中のCPU１０と，複数の周辺デバイスD1,D2,D3と，起動ユニット１２とが，RAM１４，メモリ１６を除いてまたは含んで，単一のチップ内に設けられている。このメモリ１６は，例えば不揮発性メモリ（MRAM,FeRAM等）であり，電源がオフになってもデータを保持することができる。
【００１２】
CPU１０，複数の周辺デバイスD1,D2,D3，起動ユニット１２，RAM１４，メモリ１６が，バスBUSを介して接続されている。また，バスBUSに接続されているインターフェースIFを介して，追加デバイスD4が接続されても良い。この追加デバイスD4は，チップの外に設けられる。
【００１３】
第１の周辺デバイスD1は，例えばUSB制御デバイスであり，その機能回路FC1は，USBポートに接続された外部のUSBデバイスの検出などの制御機能を有する。さらに，第１の周辺デバイスD1は，レジスタ群RG1を有し，複数のレジスタRG11-RG1nにはそれぞれアドレスが割り当てられている。
【００１４】
第２の周辺デバイスD2は，例えばイーサーネット制御デバイスであり，その機能回路FC2は，ポートに接続された外部の電子機器とのイーサーネットの通信制御機能を有する。さらに，第２の周辺デバイスD2も，レジスタ群RG2を有し，複数のレジスタRG21-RG2nにはそれぞれアドレスが割り当てられている。
【００１５】
第３の周辺デバイスD3は，例えばI2C制御デバイスであり，その機能回路FC3は，ポートに接続された外部の電子機器とのI2Cの通信制御機能を有する。さらに，第３の周辺デバイスD3も，レジスタ群RG3を有する。
【００１６】
上記以外の周辺デバイスとしては，タイマー，GPSセンサー，ジャイロセンサー，加速度センサー，無線通信デバイスなどが考えられる。図１には図示されていないが，それらの周辺デバイスがさらに設けられても良い。
【００１７】
図１の電子機器では，電源起動時に，周辺デバイス内のレジスタ群に初期値を設定する起動処理が行われる。例えば，CPUがメモリ内の起動プログラムを実行して，複数の周辺デバイスのレジスタ群への初期値の設定を行う。また，CPUは，周辺デバイスへの起動処理以外にも所定のパラメータを外部メモリからダウンロードしたり，表示メモリに初期画面データをダウンロードしたりなど様々な起動処理を実行する。
【００１８】
ただし，CPUが複数の周辺デバイスのレジスタ群への初期値の設定を行うと，起動時の負荷が大きくなり，起動処理時間が長くなる。そこで，本実施の形態では，CPUとは別に，起動ユニット１２を設け，メモリ１６内に起動時の設定コマンド列１７を記憶させる。また，メモリ１６内には，CPUが実行する各種の制御プログラム１８も格納されている。
【００１９】
図示しない電源回路で電源起動が検出されると，CPU１０は電源起動処理プログラムを実行し，所定のタイミングで起動ユニット１２に周辺デバイスへの起動処理の開始を指令する起動信号STを出力する。この起動信号STに応答して，起動ユニット１２は，メモリ１
６内の起動用の設定コマンド列１７を実行し，周辺デバイスD1,D2,D3内のレジスタ群RG1RG2,RG3の必要なレジスタへの初期値の設定（初期値の書き込み）を行う。起動ユニット１２がこの設定コマンド列を実行している間は，CPUは，RAM１０内の表示メモリ領域への初期画面データのダウンロード（インスタントブート）など，他の起動処理を実行することができる。
【００２０】
図２は，本実施の形態における起動ユニット１２の構成例を示す図である。起動ユニット１２はコマンド実行部２０を有し，コマンド実行部２０は，メモリ１６内の起動用の設定コマンド列１７を実行するコマンド実行ユニット２１と，起動用の設定コマンド列の実行が完了したことを知らせる完了フラグが書込まれるレジスタRG41を含むレジスタ群２２を有する。
【００２１】
さらに，起動ユニット１２は，起動時のバス内の情報をトレースするバス情報トレース部２６を有する。このバス情報トレース部２６については後で説明する。
【００２２】
図３は，本実施の形態における設定コマンド列の一例を示す図である。図３の左側には，各記号の説明が示されている。すなわち，D1,D2,D3はそれぞれ周辺デバイス１，２，３を示し，wr,rd,w1,w2は，それぞれライトコマンドwr，リードコマンドrd，所定時間（または所定クロック数）ウエイトするタイムウエイトコマンドw1，所定レジスタの状態が変化するまでウエイトするステータスウエイトコマンドw2である。
【００２３】
図３に示された設定コマンド列CMD1は，３つの周辺デバイスD1,D2,D3の設定コマンド列が順番に並べられている。コマンド列の各コマンドは，デバイスDEV，コマンドCMD，レジスタアドレスADD，データDATAを有し，さらに，各コマンドの処理時間TIME（msec）が示されている。
【００２４】
図３の設定コマンド列の例では，ライトコマンドwrは全て1msecで実行完了し，タイムウエイトコマンドw1はデータ領域に示された時間だけウエイトし，ステータスウエイトコマンドw2はアドレス領域のアドレスに対応するレジスタがデータ領域の値になるまでウエイトする。図３の例では，ステータスウエイトコマンドw2のウエイト時間は3msecである。
【００２５】
各周辺デバイスは，起動時の処理において，内蔵するレジスタへの初期値の設定に加えて，制御対象の外部デバイスとの通信などを含む。そのため，設定コマンド列CMD1には，レジスタへのライトコマンドに加えて，タイムウエイトコマンドw1やステータスウエイトコマンドw2を有する。つまり，一連のライトコマンドの中に，所定時間ウエイトするコマンドが挿入されている。
【００２６】
電源起動時にCPUから供給される起動信号STに応答して，起動ユニット１２内のコマンド実行ユニット２１が，メモリ１６内の設定コマンド列を順に実行する。図３の設定コマンド列の例では，周辺デバイスD1への設定コマンド列が実行され，周辺デバイスD1のレジスタ群内の図３に示されたアドレスに対応するレジスタRGにデータ領域の初期値が書込まれる。また，４つのライトコマンドwrの間に，ステータスウエイトコマンドw2が含まれている。このステータスウエイトコマンドw2のウエイト状態がなくならないと次のライトコマンドwrを実行することはできない。したがって，周辺デバイスD1への設定コマンド列を順に実行すると，7msecの時間を必要とする。
【００２７】
周辺デバイスD2への設定コマンド列には，４つのライトコマンドwrの間に，タイムウエイトコマンドw1とステータスウエイトコマンドw2とが含まれている。これらのウエイトコマンドw1,w2も，それぞれのウエイト状態がなくならないと次のライトコマンドは実行で
きない。これらの設定コマンド列を順に実行すると，17msecの時間を必要とする。
【００２８】
周辺デバイスD3への設定コマンド列には，３つのライトコマンドwrの間に，タイムウエイトコマンドw1が含まれていて，これらの設定コマンド列を順に実行すると，23msecの時間を必要とする。したがって，合計で47msecの実行時間である。
【００２９】
起動ユニット１２内のコマンド実行ユニット２１は，図３の設定コマンド列をシリアルに順番に実行し，実行が完了するとレジスタRG41に完了フラグを書込む。CPU１０は，このレジスタRG41の完了フラグを検出して起動ユニット１２による設定コマンド列の実行が完了したことを知らされる。
【００３０】
このように，CPUは起動処理中に起動信号STを起動ユニット１２に出力した後は，周辺デバイスのレジスタへの初期値設定を起動ユニット１２に行わせるので，CPUの負担が軽減され，全体の起動処理時間が短縮される。
【００３１】
図４は，設定コマンド列の別の例を示す図である。左側の設定コマンド列CMD1は，図３と同じである。図３の設定コマンド列CMD1は，３つの周辺デバイスD1,D2,D3に対するコマンド列を順番に並べてシリアルに実行する。しかし，図３の設定コマンド列CMD1では，周辺デバイスD2にはタイムウエイトコマンドw1で10msecのウエイト時間が，周辺デバイスD3にはタイムウエイトコマンドw１で20msecのウエイト時間がそれぞれ含まれている。
【００３２】
そこで，これらのウエイト時間の間に，他の周辺デバイスの設定コマンド列を実行するように全体のコマンド列を最適化することで，全体の設定処理に必要な時間を短くすることができる。
【００３３】
図４の右側の設定コマンド列CMD2では，周辺デバイスD3の設定コマンドから実行し，２番目のタイムウエイトコマンドw1（20msecのウエイト時間）の実行中に，周辺デバイスD2の設定コマンドを実行し，その２番目のタイムウエイトコマンドw1（10msecのウエイト時間）の実行中に，周辺デバイスD1の設定コマンドを全て実行する。その後，周辺デバイスD2のタイムウエイトコマンドw1の残り時間3msec後に，そのデバイスの残りの設定コマンド列を実行する。そして最後に，周辺デバイスD3のタイムウエイトコマンドw1の残り時間3msec後に，そのデバイスの残りの設定コマンド列を実行する。
【００３４】
このように，他の周辺デバイスでのウエイト状態を利用して，別の周辺デバイスの設定コマンドを実行するように，時間を最適化した統合設定コマンド列CMD2にすることで，起動ユニットによる設定コマンド列の実行時間を短くすることができる。図３の３つの周辺デバイスへの設定コマンド列CMD1の場合の実行時間が47msecだったのに対して，統合設定コマンド列CMD2の場合の実行時間は，23msecに短縮できた。なお，タイムウエイトコマンドw1の実行時間はウエイト時間を除くとゼロである。
【００３５】
本実施の形態では，複数の周辺デバイスへの起動処理を行う起動ユニットを共通化して，各周辺デバイスへの設定コマンド列を実行するので，図４のように複数の周辺デバイスへの設定コマンド列を最適な順に統合することで，設定コマンド列の実行時間を短くすることができる。
【００３６】
本実施の形態では，図３，図４に示した設定コマンド列は，予め不揮発性メモリ１６内に格納されている。その場合は，図４の統合設定コマンド列は，人手で設定コマンド列CMD1から統合設定コマンド列CMD2を生成し，不揮発性メモリ１６に格納する。
【００３７】
図３，図４に示した設定コマンド列は，電源起動時にCPU１０が外部のメモリからメモ
リ１６にダウンロードしても良い。その場合は，CPU１０は，格納したメモリ１６内のアドレスを起動信号STと共に起動ユニット１２に通知する。
【００３８】
または，図３，図４に示した設定コマンド列は，次のようにして実行されてもよい。即ち，電源起動時にCPU１０が外部メモリから設定すべきレジスタのアドレスと設定値とをRAM１４に設定し，起動ユニット１２が，起動信号STに応答して，RAM１４に設定したアドレスと設定値とにしたがって，設定コマンド列を実行する。
【００３９】
さらに，変形例として，図３の設定コマンド列CMD1を，起動ユニット１２が，所定のアルゴリズムにより最適化された統合設定コマンド列CMD2に変換しながら，実行しても良い。
【００４０】
図５，図６は，統合設定コマンド列を実行するフローチャート図である。図６は，図５で実行されるサブルーチンのフローチャート図である。図５のフローチャートでは，複数の周辺デバイスD1,D2,D3それぞれの設定コマンド列が順番に並べられた設定コマンド列CMD1を参照して，起動ユニット１２は，各周辺デバイスのコマンド列をそれぞれウエイトが出現するまでのブロックに分割し，分割されたブロックの実行時間をそれぞれ算出する（S10）。さらに，起動ユニット１２は，各周辺デバイスのコマンド列の最初のウエイトコマンドのウエイト時間が大きい順に，周辺デバイスの設定コマンド実行順序を決定する（S12）。
【００４１】
そして，最初の周辺デバイス（CMD2の例ではD3）に対する設定コマンド列を先頭から順に実行する（S14）。そして，その設定コマンド列の最初のウエイトコマンドになったら（S16のYES）,次の順番の周辺デバイス(CMD2の例ではD2)に対する設定コマンド列の実行ルーチンに移る(S18)。
【００４２】
図６の他の周辺デバイスの設定コマンド列の実行ルーチンでは，その周辺デバイス(D2)の先頭の設定コマンドから順に実行する(S21)。そして，その設定コマンド列の最初のウエイトコマンドになったら（S22のYES）,次の順番の周辺デバイス(D1)に対する設定コマンド列の実行ルーチンに移る（S18）。この周辺デバイス（D1）に対する設定コマンド列の実行ルーチンが終了したら，周辺デバイス（D2）の残りの設定コマンド列を実行して（S23），リターンする。
【００４３】
リターン後，今度は周辺デバイス（D3）の残りの設定コマンド列を実行して（S20），全ての設定コマンド列の実行を完了する。このように，図５，図６のフローチャートは，他のデバイスの設定コマンド列の実行ルーチンS18が再帰的に実行される。
【００４４】
［変形例］
図５，図６の統合設定コマンド列の実行が可能であれば，複数の周辺デバイスそれぞれの設定コマンド列の情報があれば，起動ユニット１２による統合設定コマンド列の実行が可能になる。そこで，本実施の形態の変形例について説明する。
【００４５】
図２に示した起動ユニット１２は，バス情報トレース部２６を有する。このバス情報トレース部２６は，システムLSIの最初の電源起動時にCPU１０が周辺デバイスへの設定コマンド列CMDを実行している最中のバスBUS内のデータをトレースする。CPU１０は，例えば図３に示された複数の周辺デバイスの設定コマンド列CMD1を順番に実行する。その時，バス情報トレース部２６は，実行される設定コマンド列CMD1に対応してバスBUSに送出されるアドレス情報と設定情報とをトレースしてRAM１４に格納する。これにより，RAM１４内には設定コマンド列CMD1に対応したバス情報が格納される。バス情報トレース部２６は，ウエイトコマンドについては，バスの空き時間からその存在とウエイト時間を検出する。
【００４６】
そして，次の電源起動時からは，起動ユニット１２が，トレースにより取得した設定コマンド列CMD1から，図５，図６の統合設定コマンド列の実行処理により，最適化された統合設定コマンド列の実行を行う。この統合設定コマンド列の実行処理によれば，複数の周辺デバイスそれぞれの設定コマンド列を効率的に実行することができる。
【００４７】
図５，図６の統合設定コマンド列の実行が可能であれば，周辺デバイスが外付けで追加された場合でも，起動ユニット１２は，その追加周辺デバイスに対する設定コマンド列を効率的に実行できる。
【００４８】
すなわち，図１に示された周辺デバイスD4が追加された場合，追加後の最初の電源起動時は，CPU１０が，追加周辺デバイスD4に対する設定コマンド列の実行を行う。その時のバス情報を，起動ユニット１２のバス情報トレース部２６がトレースする。それにより，追加周辺デバイスD4に対する設定コマンド列を取得する。そして，次の電源起動時からは，起動ユニット１２が，追加周辺デバイスD4に対する設定コマンド列も含めて効率化した統合設定コマンド列を実行する。
【００４９】
以上の通り，複数の周辺デバイスに共通に設けた起動ユニット１２が，複数の周辺デバイスへの設定コマンド列を実行することで，CPU１０での電源起動時の負荷を軽減する。また，起動ユニット１２が，効率的な統合設定コマンド列を実行することで，起動に要する時間を短縮できる。また，起動ユニット１２のバス情報トレース部２６が設定コマンド実行時のバス情報をトレースし，起動ユニット１２が複数の周辺デバイスの設定コマンドを効率的に統合して実行するので，統合設定コマンド列をメモリ１６などに設定する手間を省くことができる。
【符号の説明】
【００５０】
１０：CPU               １２：起動ユニット
D1,D2,D3:周辺デバイス    RG1,RG2,RG3：レジスタ群
１６：メモリ            １７：設定コマンド列
【図１】
2013218544.tif 000003
【図２】
2013218544.tif 000004
【図３】
2013218544.tif 000005
【図４】
2013218544.tif 000006
【図５】
2013218544.tif 000007
【図６】
2013218544.tif 000008