(57)【要約】【課題】メモリとの間でアドレスを指定するバイト数が異なることがあるような場合に、動作プログラムにアドレス判定コードを追加する必要がなく、かつメモリのブートコードを誤って壊してしまうことがないマイクロコンピュータを提供する。【解決手段】Ｉ／Ｆ回路３は、ブートコードを読み出すためのコマンドとアドレスとを含む制御命令をメモリに送信し、ＣＰＵ２は、メモリが受信した制御命令に基づいて送信するデータを取得して実行する。Ｉ／Ｆ回路３は、受信したデータが正しいブートコードでない場合に、送信した制御命令と、コマンドおよび／またはアドレス長が異なる制御命令を送信する。【選択図】図１
2014059612.tif 000002
【特許請求の範囲】
【請求項１】
メモリからブートコードを読み出して実行するマイクロコンピュータであって、
ブートコードを読み出すためのコマンドとアドレスとを含む制御命令を前記メモリに送信するＩ／Ｆ回路と、
前記メモリが、受信した前記制御命令に基づいて送信するデータを取得して実行するＣＰＵとを備え、
前記Ｉ／Ｆ回路は、受信したデータが正しいブートコードでない場合に、前記送信した制御命令と、コマンドおよび／またはアドレス長が異なる制御命令を送信する、マイクロコンピュータ。
【請求項２】
前記Ｉ／Ｆ回路は、受信したデータが正しいブートコードでない場合に、前記送信した制御命令に含まれるリードコマンドと異なるアドレス長用のリードコマンドと、前記送信した制御命令に含まれるアドレスと異なるアドレス長のアドレスとを含む別の制御命令を前記メモリに送信する、請求項１記載のマイクロコンピュータ。
【請求項３】
前記Ｉ／Ｆ回路は、受信したデータが正しいブートコードでない場合に、アドレス長を指定するコマンドと、リードコマンドと、前記指定するアドレス長のアドレスとを含む別の制御命令を前記メモリに送信する、請求項１記載のマイクロコンピュータ。
【請求項４】
前記マイクロコンピュータは、
ウオッチドグタイマを備え、
前記ＣＰＵは、前記受信したデータが正しいブートコードであり、ブート処理が正常に実行されたときには、前記ウオッチドグタイマのカウンタをリセットし、
前記Ｉ／Ｆ回路は、前記ウオッチドグタイマのカウンタがオーバーフローした場合には、前記別の制御命令を送信する、請求項１記載のマイクロコンピュータ。
【請求項５】
前記Ｉ／Ｆ回路は、前記ウオッチドグタイマのカウンタがオーバーフローするごとにインクリメントされるステータスビットを記憶するレジスタを含み、
前記Ｉ／Ｆ回路は、前記ステータスビットの値に応じた制御命令を送信する、請求項４記載のマイクロコンピュータ。
【請求項６】
前記Ｉ／Ｆ回路は、前記ステータスビットが第１の値のときには、リードコマンドと、３バイト長のアドレスを含む前記制御命令を送信する、請求項５記載のマイクロコンピュータ。
【請求項７】
前記Ｉ／Ｆ回路は、前記ステータスビットが第２の値のときには、４バイト長アドレス用のリードコマンドと、４バイト長のアドレスを含む前記制御命令を送信する、請求項６記載のマイクロコンピュータ。
【請求項８】
前記Ｉ／Ｆ回路は、前記ステータスビットが第３の値のときには、４バイトアドレスモードをイネーブルにするコマンドと、リードコマンドと、４バイト長のアドレスを含む前記制御命令を送信する、請求項７記載のマイクロコンピュータ。
【請求項９】
前記Ｉ／Ｆ回路は、前記ステータスビットが第４の値のときには、４バイトアドレスモードをディセーブルブルにするコマンドと、リードコマンドと、３バイト長のアドレスを含む前記制御命令を送信する、請求項８記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータに関し、たとえば外部のメモリ内のブートコードを読み出して実行するマイクロコンピュータに関する。
【背景技術】
【０００２】
従来から、マスタ装置とスレーブ装置との間でアドレスを指定するアドレス情報のバイト数の相違が問題となることが知られている。
【０００３】
これに対して、たとえば、特許文献１のシステムでは、マスタとしてのＣＰＵにより、スレーブとしてのＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）の特定アドレスに異なるデータ（テストデータ）が書き込まれる。その後、ＥＥＰＲＯＭの特定アドレスから書き込まれたデータ（テストデータ）が読み出され、その読み出されたデータに基づき、それぞれのＥＥＰＲＯＭの転送フォーマットを判定する構成が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３０５０３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の装置では、動作プログラムにアドレス判定コードを追加する必要があるという問題があり、カスタマーの作業が必要となるという問題がある。また、ＥＥＰＲＯＭ内にＣＰＵで実行するブートコードを格納している場合に、ＥＥＰＲＯＭにテストデータをライトする方式では、ＥＥＰＲＯＭ内のブートコードを誤って壊してしまうこともある。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかであろう。
【課題を解決するための手段】
【０００７】
本発明の一実施形態のマイクロコンピュータにおいて、Ｉ／Ｆ回路は、ブートコードを読み出すためのコマンドとアドレスとを含む制御命令をメモリに送信し、ＣＰＵは、メモリが受信した制御命令に基づいて送信するデータを取得して実行する。Ｉ／Ｆ回路は、受信したデータが正しいブートコードでない場合に、送信した制御命令と、コマンドおよび／またはアドレス長が異なる制御命令を送信する。
【発明の効果】
【０００８】
本発明の一実施形態によれば、カスタマーの作業が不要となり、ブートコードを誤って壊してしまうことがない。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態のマイクロコンピュータの構成を表わす図である。
【図２】第２の実施形態のマイクロコンピュータ、およびフラッシュメモリの構成を表わす図である。
【図３】ステータスビットの値に対応する制御命令を表わす図である。
【図４】各制御命令のバイト数を説明するための概念図である。
【図５】メモリがサポートする制御命令の例を説明するための図である。
【図６】第２の実施形態のマイクロコンピュータの動作手順を表わすフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について、図面を用いて説明する。
［第１の実施形態］
図１は、第１の実施形態のマイクロコンピュータの構成を表わす図である。
【００１１】
マスタであるマイクロコンピュータ１は、スレーブであるメモリからブートコードを読み出して実行する。マイクロコンピュータ１は、ＣＰＵ（Central Processing Unit）２と、Ｉ／Ｆ（Interface）回路３とを備える。
【００１２】
Ｉ／Ｆ回路３は、ブートコードを読む出すためのコマンドとアドレスとを含む制御命令をメモリに送信する。
【００１３】
ＣＰＵ２は、メモリが、受信した制御命令に基づいて送信するデータを取得して実行する。
【００１４】
Ｉ／Ｆ回路３は、制御命令を送信することによって、受信したデータが正しいブートコードでない場合に、上記送信した制御命令と、コマンドおよび／またはアドレス長が異なる制御命令を送信する。
【００１５】
以上のように、本実施の形態によれば、マイクロコンピュータは、メモリから正しいブートコードが返信されてこない場合には、マイクロコンピュータとメモリとの間でアドレスモード（アドレスを指定するバイト数）が相違するか、メモリが送信した制御命令に含まれるコマンドをサポートしていないと判断する。そして、マイクロコンピュータは、異なるコマンドおよび／またはアドレス長が異なるアドレスを含む制御命令を送信する。これにより、マイクロコンピュータとメモリの間でアドレス情報を指定するバイト数を一致させることができ、マイクロコンピュータは正常にブート処理を実行することができる。
【００１６】
［第２の実施形態］
図２は、第２の実施形態のマイクロコンピュータ、およびフラッシュメモリの構成を表わす図である。
【００１７】
図２を参照して、マイクロコンピュータは、フラッシュメモリは、ＳＰＩ（Serial Peripheral Interface）で接続される。マイクロコンピュータがマスタ側の装置であり、フラッシュメモリがスレーブ側の装置である。
【００１８】
マイクロコンピュータは、ＣＰＵ１２と、マスタＩ／Ｆ回路１５と、ウオッチドグタイマ１３と、リセット回路１４とを備える。
【００１９】
リセット回路１４は、電源オンされた後、マイクロコンピュータ全体をリセットする（パワーオンリセット）。リセット回路１４は、ウオッチドグタイマ１３のカウンタがオーバーフローした場合に、マイクロコンピュータ全体をリセットする（ハードウエアリセット）。
【００２０】
ウオッチドグタイマ１３は、カウンタを有する。パワーオンリセットおよびハードウエアリセットによってウオッチドグタイマ１３のカウンタは、一度「０」にリセットされ、その後、カウントが再開される。
【００２１】
マスタＩ／Ｆ回路１５は、ステータスビットを保持するレジスタ１６を備える。ステータスビットは、ウオッチドグタイマ１３のカウンタがオーバーフローするごとに、インクリンとされ、パワーオンリセットでのみクリアされる。
【００２２】
ＣＰＵ１２は、正しいブートコードを取得した結果ブート処理が正常に実行されたときには、ウオッチドグタイマ１３のカウンタを停止させる。
【００２３】
フラッシュメモリは、スレーブＩ／Ｆ回路１７と、メモリアレイ１９とを備える。
メモリアレイ１９は、ブートコードを格納する。
【００２４】
スレーブＩ／Ｆ回路１７は、マスタＩ／Ｆ回路１５からの制御命令を受信する。スレーブＩ／Ｆ回路１７は、受信した制御命令をサポートしている場合には、制御命令に含まれるブートコードの位置を表わすアドレスを正しく解釈できるので、ブートコードを正しく読み出して、マスタＩ／Ｆ回路１５へ送信する。スレーブＩ／Ｆ回路１７は、受信した制御命令をサポートしていない場合には、制御命令に含まれるブートコードの位置を表わすアドレスを正しく解釈できないので、ブートコードでないデータをブートコードとして、マスタＩ／Ｆ回路１５へ送信する。
【００２５】
図３は、ステータスビットの値に対応する制御命令を表わす図である。図４は、各制御命令のバイト数を説明するための概念図である。
【００２６】
図３を参照して、ステータスビットの値が「００ｈ」のときには、マスタＩ／Ｆ回路１５は、制御命令１を発行する。制御命令１は、リードコマンドと３バイト長アドレスとからなる。図４（ａ）に示すように、リードコマンドは１バイトで構成され、３バイト長アドレスは３バイトで構成される。
【００２７】
ステータスビットの値が「０１ｈ」のときには、マスタＩ／Ｆ回路１５は、制御命令２を発行する。制御命令１は、４バイト長アドレス用リードコマンドと４バイト長アドレスとからなる。図４（ｂ）に示すように、４バイト長アドレス用リードコマンドは１バイトで構成され、４バイト長アドレスは４バイトで構成される。
【００２８】
ステータスビットの値が「０２ｈ」のときには、マスタＩ／Ｆ回路１５は、制御命令３を発行する。制御命令３は、４バイトモードイネーブルコマンドとリードコマンドと４バイト長アドレスとからなる。図４（ｃ）に示すように、４バイトモードイネーブルコマンドは１バイトで構成され、リードコマンドは１バイトで構成され、４バイト長アドレスは４バイトで構成される。
【００２９】
ステータスビットの値が「０３ｈ」のときには、マスタＩ／Ｆ回路１５は、制御命令４を発行する。制御命令４は、４バイトモードディセーブルコマンドとリードコマンドと３バイト長アドレスとからなる。図４（ｄ）に示すように、４バイトモードディセーブルコマンドは１バイトで構成され、リードコマンドは１バイトで構成され、３バイト長アドレスは３バイトで構成される。
【００３０】
図５は、メモリがサポートする制御命令の例を説明するための図である。
種類がＡのメモリは、リードコマンド、４バイトモードイネーブルコマンド、４バイトモードディセーブルコマンドをサポートする。マスタＩ／Ｆ回路１５が、制御命令１を送信した場合には、スレーブＩ／Ｆ回路１７のモードが３バイトモードの場合には、制御命令１に対応する処理を正しく実行して正しいブートコードを返信する。また、マスタＩ／Ｆ回路１５が、制御命令３、制御命令４を送信した場合には、スレーブＩ／Ｆ回路１７は、これらの制御命令に対応する処理を正しく実行して正しいブートコードを返信する。
【００３１】
一方、マスタＩ／Ｆ回路１５が、制御命令２を送信した場合には、スレーブＩ／Ｆ回路１７は、４バイトアドレス用リードコマンドを解釈することができない。その結果、スレーブＩ／Ｆ回路１７は、リード命令を無視してブートコードを返信しないか、あるいは、指定されたアドレスが４バイト長であるのに３バイト長のアドレスであるものと誤解するため、ブートコード以外のデータを返信する。
【００３２】
種類がＢのメモリは、リードコマンド、４バイト長アドレス用リードコマンドをサポートする。マスタＩ／Ｆ回路１５が、制御命令１を送信した場合には、スレーブＩ／Ｆ回路１７のモードが３バイトモードの場合には、制御命令１に対応する処理を正しく実行して正しいブートコードを返信する。また、マスタＩ／Ｆ回路１５が、制御命令２を送信した場合には、スレーブＩ／Ｆ回路１７は、これらの制御命令に対応する処理を正しく実行して正しいブートコードを返信する。
【００３３】
一方、マスタＩ／Ｆ回路１５が、制御命令３を送信した場合には、スレーブＩ／Ｆ回路１７は、４バイトモードイネーブルコマンドを解釈することができない。その結果、スレーブＩ／Ｆ回路１７は、リード命令を無視してブートコードを返信しないか、あるいは、指定されたアドレスが４バイト長であるのに３バイト長のアドレスであるものと誤解するため、ブートコード以外のデータを返信する。マスタＩ／Ｆ回路１５が、制御命令４を送信した場合には、スレーブＩ／Ｆ回路１７は、４バイトモードディセーブルコマンドを解釈することができない。その結果、スレーブＩ／Ｆ回路１７は、リード命令を無視してブートコードを返信しない可能性がある。
【００３４】
種類がＣのメモリは、リードコマンド、４バイト長アドレス用リードコマンド、４バイトモードイネーブルコマンド、４バイトモードディセーブルコマンドをサポートする。マスタＩ／Ｆ回路１５が、制御命令１を送信した場合には、スレーブＩ／Ｆ回路１７のモードが３バイトモードの場合には、制御命令１に対応する処理を正しく実行して正しいブートコードを返信する。マスタＩ／Ｆ回路１５が、制御命令２、制御命令３、制御命令４を送信した場合には、スレーブＩ／Ｆ回路１７は、これらの制御命令に対応する処理を正しく実行して正しいブートコードを返信する。
【００３５】
このように、マスタＩ／Ｆ回路１５がフラッシュメモリがサポートしていないコマンドを含む制御命令を送信した場合や、マスタＩ／Ｆ回路１５とスレーブＩ／Ｆ回路１７の間でアドレスモードが一致していない場合には、正しいブートコードがマスタＩ／Ｆ回路１５に返信されてこない。従来では、このような場合でも、同一の制御命令を再送していた。これに対して、本実施の形態では、マスタＩ／Ｆ回路１５は、正しいブートコードが返信されてこない場合には、別の制御命令を送信する。
【００３６】
図６は、第２の実施形態のマイクロコンピュータの動作手順を表わすフローチャートである。
【００３７】
電源がオンにされると、リセット回路１４は、マイクロコンピュータ全体をリセットする（パワーオンリセット）（ステップＳ１０１）。
【００３８】
次に、ウオッチドグタイマ１３のカウンタのカウントを開始する（ステップＳ１０２）。
【００３９】
次に、マスタＩ／Ｆ回路１５は、ステータスビットの値に応じた制御命令をスレーブＩ／Ｆ回路１７へ送信する。電源がオンにされたときには、ステータスビットの値は、デフォルト値である「００ｈ」であるため、マスタＩ／Ｆ回路１５は、制御命令１、すなわちリードコマンドと３バイト長アドレスとを送信する（ステップＳ１０３）。
【００４０】
スレーブＩ／Ｆ回路１７は、制御命令１を受信する。スレーブＩ／Ｆ回路１７は、受信した制御命令１に含まれるコードをサポートしており、現在のモードが３バイトモードの場合には、正しいブートコードをマスタＩ／Ｆ回路１５を介してＣＰＵ１２へ送信する。スレーブＩ／Ｆ回路１７は、受信した制御命令１に含まれるコードをサポートしていない場合、または現在のモードが４バイトモードの場合には、制御命令１を無視するか、あるいはブートコード以外のデータをマスタＩ／Ｆ回路１５を介してＣＰＵ１２へ送信する。
【００４１】
次に、以下のステップＳ２０１〜Ｓ２０６のオペレーション１が実行される。ＣＰＵ１２は、スレーブＩ／Ｆ回路１７から出力されるデータを取得する。ＣＰＵ１２は、取得したデータをブートコードであるとして処理を実行する（ステップＳ２０１）。ＣＰＵ１２は、取得したデータが正常なブートコートであり、正しくブート処理が実行できた場合には（ステップＳ２０２でＹＥＳ）、ウオッチタイマのカウンタを停止させる（ステップＳ２０３）。
【００４２】
ＣＰＵ１２は、取得したデータが正常なブートコードでない場合には、ウオッチドグタイマ１３のカウンタを停止させない。これにより、ウオッチドグタイマ１３のカウンタがオーバーフローした場合には（ステップＳ２０５でＹＥＳ）、マスタＩ／Ｆ回路１５は、ステータスビットの値をインクリメントして、「０１ｈ」にする。
【００４３】
リセット回路１４は、ウオッチドグタイマ１３のカウンタがオーバーフローした場合に、マイクロコンピュータ全体をリセットする（ハードウエアリセット）。ただし、マスタＩ／Ｆ回路１５のステータスビットの値は維持される（ステップＳ１０４）。
【００４４】
ウオッチドグタイマ１３は、カウンタをリセットして（ステップＳ１０５）、カウントを再開する（ステップＳ１０６）。
【００４５】
次に、マスタＩ／Ｆ回路１５は、ステータスビットの値に応じた制御命令をスレーブＩ／Ｆ回路１７へ送信する。ステータスビットの値は、「０１ｈ」であるため、マスタＩ／Ｆ回路１５は、制御命令２、すなわち４バイト長アドレス用リードコマンドと４バイト長アドレスとを送信する（ステップＳ１０７）。
【００４６】
スレーブＩ／Ｆ回路１７は、制御命令２を受信する。スレーブＩ／Ｆ回路１７は、受信した制御命令２に含まれるコードをサポートしている場合には、正しいブートコードをマスタＩ／Ｆ回路１５を介してＣＰＵ１２へ送信する。スレーブＩ／Ｆ回路１７は、受信した制御命令２に含まれるコードをサポートしていない場合には、制御命令２を無視するか、あるいはブートコード以外のデータをマスタＩ／Ｆ回路１５を介してＣＰＵ１２へ送信する。
【００４７】
次に、前述のステップＳ２０１〜Ｓ２０６のオペレーション１が繰り返される。ただし、ステップＳ２０６において、ステータスビットの値がインクリメントされた結果、ステータスビットの値は「０２ｈ」となる。
【００４８】
リセット回路１４は、ウオッチドグタイマ１３のカウンタがオーバーフローした場合には、マイクロコンピュータ全体をリセットする（ハードウエアリセット）。ただし、マスタＩ／Ｆ回路１５のステータスビットの値は維持される（ステップＳ１０８）。
【００４９】
ウオッチドグタイマ１３は、カウンタをリセットして（ステップＳ１０９）、カウントを再開する（ステップＳ１１０）。
【００５０】
次に、マスタＩ／Ｆ回路１５は、ステータスビットの値に応じた制御命令をスレーブＩ／Ｆ回路１７へ送信する。ステータスビットの値は、「０２ｈ」であるため、マスタＩ／Ｆ回路１５は、制御命令３、すなわち４バイトモードイネーブルコマンドと、リードコマンドと、４バイト長アドレスとを送信する（ステップＳ１１１）。
【００５１】
スレーブＩ／Ｆ回路１７は、制御命令３を受信する。スレーブＩ／Ｆ回路１７は、受信した制御命令３に含まれるコードをサポートしている場合には、正しいブートコードをマスタＩ／Ｆ回路１５を介してＣＰＵ１２へ送信する。スレーブＩ／Ｆ回路１７は、受信した制御命令３に含まれるコードをサポートしていない場合には、制御命令３を無視するか、あるいはブートコード以外のデータをマスタＩ／Ｆ回路１５を介してＣＰＵ１２へ送信する。
【００５２】
以下、前述の処理が繰り返される。
以上のように、本実施の形態によれば、第１の実施形態と同様に、マイクロコンピュータは、メモリから正しいブートコードが返信されてこない場合には、異なるコマンドおよび／またはアドレス長が異なるアドレスを含む制御命令を送信する。これにより、マイクロコンピュータとメモリの間でアドレス情報を指定するバイト数を一致させることができ、マイクロコンピュータは正常にブート処理を実行することができる。
【００５３】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【００５４】
１，１０  マイクロコンピュータ、２，１２  ＣＰＵ、３  Ｉ／Ｆ回路、１１  フラッシュメモリ、１３  ウオッチドグタイマ、１４  リセット回路、１５  マスタＩ／Ｆ回路、１６  レジスタ、１７  スレーブＩ／Ｆ回路、１９  メモリアレイ。
【図１】
2014059612.tif 000003
【図２】
2014059612.tif 000004
【図３】
2014059612.tif 000005
【図４】
2014059612.tif 000006
【図５】
2014059612.tif 000007
【図６】
2014059612.tif 000008