(57)【特許請求の範囲】
【請求項１】
プロセッサと、実行可能コードを格納するための不揮発メモリと、不揮発メモリ制御論理回路と、メモリ保護論理回路と、を含む集積回路装置であって、
前記メモリ保護論理回路は、
前記不揮発メモリの保護領域に対する読出保護フラグであって、前記不揮発メモリの保護設定領域に格納された前記読出保護フラグの状態を判定し、
前記プロセッサによるメモリ読出要求を検出し、
前記メモリ読出要求が、前記不揮発メモリの前記保護領域のアドレスに対するものであるかどうかを判定し、
前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したかどうかを判定し、
一つ以上のアクセス条件を少なくとも一つ満たさないとき、前記保護領域に対する前記読出保護フラグが設定されている場合、前記保護領域の前記アドレスに対する読出要求を拒否し、
前記アクセス条件の少なくとも一つは、前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行し、
前記不揮発メモリ制御論理回路は、
前記保護設定領域の何れの部分についても、当該部分が消去状態でない場合は、当該部分への書き込みがなされるのを防ぎ、
前記不揮発メモリの前記保護領域が消去状態にあるときに限って、前記保護設定領域が消去されることを許可する
ことを特徴とする集積回路装置。
【請求項２】
前記メモリ保護論理回路は、前記プロセッサとは別体のハードウェア論理回路を含む
請求項１に記載の集積回路装置。
【請求項３】
前記メモリ保護論理回路は、前記保護領域に対する前記読出保護フラグが設定されていないならば、前記保護領域の前記アドレスに対する前記読出要求を許可する
請求項１または２に記載の集積回路装置。
【請求項４】
前記メモリ保護論理回路は、
前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行しないとき前記保護領域に対する前記読出保護フラグが設定されている場合、前記保護領域の前記アドレスに対する前記読出要求を拒否する
請求項１〜３の何れか一項に記載の集積回路装置。
【請求項５】
前記メモリ保護論理回路は、
前記保護設定領域に格納されている前記保護領域に対する書込保護フラグの状態をさらに判定し、
前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサがメモリ書込要求を発行しないとき前記保護領域に対する前記書込保護フラグが設定されている場合、前記保護領域の前記アドレスに対する前記書込要求を拒否する
請求項１〜４の何れか一項に記載の集積回路装置。
【請求項６】
前記メモリ保護論理回路が、前記不揮発メモリに対する全てのアクセスをモニタする
請求項１〜５の何れか一項に記載の集積回路装置。
【請求項７】
前記メモリ保護論理回路が、
フェッチされた命令が前記保護領域にあるか否かに対応して、命令フェッチ処理ごとに、レジスタを設定する
請求項１〜６の何れか一項に記載の集積回路装置。
【請求項８】
前記メモリ保護論理回路が、
メモリ・アクセス要求の直前の前記命令フェッチ処理のアドレスが、前記保護領域内のものであるかどうかを判定することで、
前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したかどうかを判定する、
請求項１〜７の何れか一項に記載の集積回路装置。
【請求項９】
前記保護領域は、変更可能であり、前記集積回路装置に格納されている一つ以上の前記アドレスによって定義される
請求項１〜８の何れか一項に記載の集積回路装置。
【請求項１０】
前記不揮発メモリの前記保護領域が、
予め設定された定数アドレスと、前記不揮発メモリの前記アドレス領域内で指定される変更可能なポイントと、の間に及び、
前記メモリ保護論理回路は、
前記読出要求の前記アドレスが、予め設定された前記定数アドレスと、前記不揮発メモリの前記アドレス領域内で指定される変更可能な前記ポイントと、の間にあるかどうかを決定することによって、
前記読出要求が、前記保護領域の前記アドレスに対するものであるか否かを判定する
請求項１〜９の何れか一項に記載の集積回路装置。
【請求項１１】
前記装置は、さらに、揮発メモリを含み、
前記メモリ保護論理回路が、さらに、
前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行しないとき前記揮発メモリの前記保護領域に対する前記読出保護フラグが設定されている場合、
前記保護領域の前記アドレスに対する前記読出要求を拒否する
請求項１〜１０の何れか一項に記載の集積回路装置。
【請求項１２】
外部デバッガあるいはソフトウェア・ローダによるメモリ・アクセスを許可するためのインターフェースを、さらに含み、
前記メモリ保護論理回路は、
前記保護領域に対するデバッギング保護フラグが設定されているならば、
前記揮発メモリまたは前記不揮発メモリの何れか一つ以上の前記保護領域の前記アドレスに対して、前記インターフェースを介して受信した複数の前記読出要求を拒否する、
請求項１〜１１の何れか一項に記載の集積回路装置。
【請求項１３】
前記装置が、集積された無線通信論理回路を含み、
無線プロトコル・スタックを実装した前記実行可能コードを含むファーム・ウェア・モジュールが、前記不揮発メモリの前記保護領域に格納され、
前記ファーム・ウェア・モジュールとインターフェースしているソフトウェア・アプリケーションが、前記保護領域の外側の前記不揮発メモリに、選択的に格納されている
請求項１〜１２の何れか一項に記載の集積回路装置。
【請求項１４】
プロセッサと、実行可能コードを格納するための不揮発メモリと、不揮発メモリ制御論理回路と、を含む集積回路装置のメモリ・アクセスを制御する方法であって、
前記不揮発メモリ制御論理回路は、
前記保護設定領域の何れの部分についても、当該部分が消去状態でない場合は、当該部分への書き込みがなされるのを防ぎ、
前記不揮発メモリの前記保護領域が消去状態にあるときに限って、前記保護設定領域が消去されることを許可するものであり、
前記方法は、
前記不揮発メモリの保護領域に対する読出保護フラグであって、前記不揮発メモリの保護設定領域に格納された前記読出保護フラグの状態を判定し、
前記プロセッサによってメモリ読出要求を検出し、
前記メモリ読出要求が、前記不揮発メモリの前記保護領域のアドレスに対するものであるかどうかを判定し、
前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したかどうかを判定し、
一つ以上のアクセス条件を少なくとも一つ満たさないとき前記保護領域に対する前記読出保護フラグが設定されていれば、前記保護領域の前記アドレスに対する読出要求を拒否し、
前記一つ以上のアクセス条件の少なくとも一つは、前記不揮発メモリの前記保護領域に格納されている前記実行可能コードを前記プロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したことである
ことを特徴とするメモリ・アクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路のメモリ保護に関する。
【背景技術】
【０００２】
マイクロ・コントローラあるいはシステム・オン・チップ装置は、一般的には、メモリに実行可能コードを格納する。この装置は、メモリ内に、チップ製造者により記述されたコード（例えば、オペレーティング・システム、または、ファーム・ウェア）や、顧客・ユーザによって書かれたコード（例えば、ソフトウェア・アプリケーション）が格納しているであろう。
これらのコードは、ＥＥＰＲＯＭやフラッシュ・メモリのような不揮発メモリに格納される。
【０００３】
ユーザ・コード、あるいは、外部・デバッギング・インターフェースが、チップ製造者によって書かれたコードに対するメモリ・アクセスを制限することなく、チップ製造者によって書かれたコードを読み出し、あるいは、上書きできないようにすることが望まれるであろう。
この理由は、チップ製造者によって記述されたコードには、他者にはアクセスされたくない営業秘密が含まれているからであろう。
これはまた、ユーザ・コードのバグによって、チップ製造者のコードの不用意な破壊を防止するのを手伝う。
【０００４】
米国特許８０５１２６３号は、特定のメモリ領域に対する一群の設定可能なメモリ保護属性に従って、選択的にメモリ・アクセスに対する要求を承諾または拒否する、メモリ・保護ユニットが記載されている。その領域に対するアクセスは、特権モードまたは非特権モードの何れで実行ユニットが処理を行うのかに依存している。
【０００５】
そのような機構は、ユーザ・コードが非特権モードで実行されているならば、ユーザ・コードによる読込で損傷を受けやすいコードを含むメモリ領域を保護するために使用することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、処理が特権モードで実行されている場合、悪意のある攻撃者が、プロセッサにメモリから損傷を受けやすいコードを読み込ませ、それにより攻撃者に内容を出力させてしまうことが可能かもしれない。
さらに、全てのプロセッサが、実行の特権モード及び非特権モードをサポートしている訳ではない。
【課題を解決するための手段】
【０００７】
それ故に、本願発明では、上記の方法とは異なったアプローチを取る。
【０００８】
第１の構成として、本願発明は、プロセッサと実行可能コードを格納するためのメモリとメモリ保護論理回路とを含む集積回路装置であって、前記メモリ保護論理回路は、前記メモリの保護領域に対する読出保護フラグの状態を判定し、前記プロセッサによってメモリ読出要求を検出し、前記メモリ読出要求が、前記メモリの前記保護領域のアドレスに対するものであるかどうかを判定し、前記メモリの前記保護領域に格納されているコードをプロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したかどうかを判定し、一つ以上のアクセス条件を一つも満たさないとき前記保護領域に対する前記読出保護フラグが設定されている場合、前記保護領域のアドレスに対する、読出要求を拒否し、前記複数のアクセス条件の少なくとも一つは、前記メモリの前記保護領域に格納されているコードをプロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したことであることを特徴とする集積回路装置である。
【０００９】
第２の構成として、本願発明は、プロセッサと、実行可能コードを格納するためのメモリと、メモリ保護論理回路と、を含む集積回路装置のメモリ・アクセスを制御する方法であって、前記方法は、前記メモリの保護領域に対する読出保護フラグの状態を判定し、前記プロセッサによってメモリ読出要求を検出し、前記メモリ読出要求が、前記メモリの前記保護領域のアドレスに対するものであるかどうかを判定し、前記メモリの前記保護領域に格納されているコードをプロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したかどうかを判定し、一つ以上のアクセス条件を一つも満たさないとき前記保護領域に対する前記読出保護フラグが設定されている場合、前記保護領域のアドレスに対する、読出要求を拒否し、前記複数のアクセス条件の少なくとも一つは、前記メモリの前記保護領域に格納されているコードをプロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したことであることを特徴とするメモリ・アクセス方法である。
【００１０】
さらなる構成として、本願発明は、プロセッサと、実行可能コードを格納するためのメモリと、メモリ保護論理回路と、を含む集積回路装置のメモリ・アクセスを制御する方法であって、前記方法は、前記メモリの保護領域に対する読出保護フラグが設定されていることを判定し、前記プロセッサによってメモリ読出要求を検出し、前記メモリ読出要求が、前記メモリの前記保護領域のアドレスに対するものであるかどうかを判定し、前記メモリの前記保護領域に格納されているコードをプロセッサが実行している間に、前記プロセッサが前記メモリ読出要求を発行したかどうかを判定し、前記読出要求を許可することを特徴とするメモリ・アクセス方法である。
【００１１】
従って、当業者には、以下ことが分かるであろう。すなわち、本発明に従えば、メモリ保護領域に対する読込アクセスをプロセッサが要求したとき、要求を許可できるかどうか判定するために、このプロセッサにより実行されているコードのロケーションが利用できる。
保護領域外に格納されたコードから発せられた要求は、保護領域内に格納されたコードから発せられた要求が許可された場合でも、（読込保護フラグが、適切に設定されているならば）拒否することができる。
ＡＲＭ（登録商標）のような、多くのプロセッサ・アーキテクチャに対して、コードが自身が格納されている領域に対するデータ読込要求を発行できることは重要なことであって、その結果プロセッサはコードに組み込まれている定数にアクセスできる。
【００１２】
メモリ保護はメモリ保護論理回路によって実施される。この回路は、プロセッサと独立して機能するように構成されることが好ましい。メモリ保護論理回路は、プロセッサと別体のハードウェア論理回路を含むことが好ましい。ハードウェア論理回路は、プロセッサ内に備わった特権モードによる依存する保護よりも、悪意のソフトウェア・コードによる迂回に対して影響されにくい。
【００１３】
チップ製造者は、チップ製造者自身のコードに対する無制限なメモリ・アクセスを維持しつつ、顧客のコードがチップ製造者のコードの読込を妨げるために、読込保護フラグを設定して、保護された領域にチップ製造者のコードを簡便に格納できる。
設定データのような、他の影響を受けやすい情報も、保護された領域に格納できる。
【００１４】
メモリ保護論理回路は、保護領域に対する読出保護フラグが設定されていないならば、保護領域のアドレスに対する読出要求を許可することが好ましい。この機能は、当該装置及びソフトウェアの初期開発期間において有用であろう。
同様に、メモリ保護論理回路は、書込保護フラグが設定されていない場合、保護領域のアドレスに対する書込要求を許可することが好ましい。
【００１５】
メモリ保護論理回路は、メモリの保護領域に格納されているコードをプロセッサが実行している間に、プロセッサがメモリ読出要求を発行しない場合（メモリ読出要求が発行されたなら、この場合は許可される）、保護領域に対する読出保護フラグが設定されているならば、保護領域のアドレスに対する読出要求を拒否することが好ましい。このような好ましい実施形態は、前述の唯一つのアクセス条件を満たす。
しかし、他の実施形態においては、それでもなお、複数のアクセス条件を備え、その何れも実際上保護フラグを覆すことができる。例えば、もし、ＲＯＭに格納されている製造者の作成したブート・ローダー・プログラムをプロセッサが実行している間に、プロセッサが読込要求を発行したら、保護領域への読込を許可する場合があるかもしれない。
【００１６】
メモリ保護論理回路は、同様にして、保護領域に対する書込保護フラグの状態を判定し、メモリの保護領域に格納されているコードをプロセッサが実行している間に、プロセッサがメモリ書込要求を発行しないとき保護領域に対する書込保護フラグが設定されている場合、保護領域のアドレスに対する書込要求を拒否することができる。
この場合、読出保護フラグを書込保護フラグとして機能させることもできるし、別々のフラグとすることもできる。
【００１７】
一組の好ましい実施形態の中には、上記のメモリを、フラッシュ・メモリのような不揮発メモリとしたものがある。
コードを実行するには、コード実行用の不揮発メモリから直接コードをフェッチ、あるいは、実施形態によっては、キャッシュできる（すなわち、揮発メモリに格納する）。
もし、当該装置がキャッシュのようなメモリを含むなら、保護領域に格納されている実行可能コードに対する当該記述は、そのような実行可能コードのキャッシュされたコピーに対しても及ぶものである。
【００１８】
他の実施形態において、メモリは、実行可能コードを保存しているＲＡＭの一部のような揮発メモリであってもよく、保護領域が揮発メモリの領域であってもよい。
装置に電源が入ったとき、実行可能コードは、そのような揮発メモリにコピーされる。あるいは、装置を使っているときに、必要に応じて、コード・セクション、あるいは、個々の命令を（例えば、ＲＯＭまたはフラッシュから）揮発メモリの保護領域にコピーしてもよい。
【００１９】
プロセッサとメモリは、一つ以上のバスによって接続されている。メモリ保護論理回路も、少なくとも一つ以上のバスに接続している。
メモリ保護論理回路が、メモリに対する全てのアクセス（例えば、全ての読込、書込、命令フェッチ）をモニタする。
【００２０】
メモリ保護論理回路は、メモリ・アクセス要求の直前の命令フェッチ処理のアドレスが保護領域内のものであるかどうかを判定することで、メモリの保護領域に格納されている実行可能コードをプロセッサが実行している間に、プロセッサがメモリ読出要求を発行したかどうかを判定する。
また、フェッチされた命令のアドレスが保護領域にあるか否かに従って、命令フェッチ処理ごとに、レジスタを設定できる。
レジスタは、命令フェッチのアドレスが保護領域にあるか否かに従って設定される二値フラグを含むことができる。
【００２１】
メモリ保護論理回路は、命令フェッチ処理を特定する（例えば、読込要求と区別する）ため、メモリ・バス上の処理型情報を使うことができる。あるいは、プロセッサ・ピンの状態を判定すること、または、フェッチ命令を運ぶバスを特定すること（例えば、当該装置において、データをフェッチするバスと命令をフェッチするバスが分離すること）で、命令フェッチ処理を特定できる。
ＡＲＭ（登録商標）から提供される Cortex(登録商標)-M0 プロセッサを使う場合、データ・アクセスとオペコード・フェッチを区別するために、メモリ保護論理回路は、Cortex(登録商標)-M0からのHPROT[0]（データ／オペコード）信号を使用できる。
【００２２】
保護領域は、複数個の個別の領域（あるいはアドレス範囲）を含んでもよい。しかし、論理回路の実現が容易な、単一の連続したアドレス範囲で定義することが好ましい。
好ましい実施形態では、保護領域は、変更可能で、装置に格納されている一つ以上のアドレスによって定義される。例えば、不揮発メモリ上の設定データとして格納されている。
【００２３】
保護領域は、予め設定された定数アドレスと、メモリ領域内の変更可能なアドレスとの間に展開できる。定数アドレスは、メモリに対する、あるいは、当該装置のメモリ空間全体に対する、始端または終端にすれば便利である（例えば、ゼロ：0x00000000）。
従って、メモリ空間内の保護領域の変更可能な終端アドレスを定義すれば、保護領域は当該装置に格納された一つの値によって簡単に特定できる。
【００２４】
メモリ保護ユニットは、読出要求のアドレスが、予め設定された定数アドレスとメモリ領域内の変更可能なアドレスの間にあるかどうかを判定することによって、読出要求が、保護領域のアドレスに対するものであるか否かを判定する。
この処理は、比較的少ない論理ゲートを使うことで実装できる。
【００２５】
前述のメモリの保護領域が不揮発メモリ内にある実施形態において、当該装置がＲＡＭのような揮発メモリを含んでもよい。
さらに、このメモリ保護論理回路は、不揮発メモリの保護領域に格納されているコードをプロセッサが実行している間に、プロセッサがメモリ読出要求を発行しない場合、揮発メモリの保護領域に対する読出保護フラグが設定されているならば、保護領域のアドレスに対する読出要求を拒否するように構成できる。
このようにすれば、不揮発メモリの保護領域（例えばヒープ領域）に格納されたコードによって、保護されたＲＡＭ領域が使用できる。一方で、保護領域外に格納されたコードによる読込アクセスからは保護される。
この方法は、チップ製造業者により書かれたコードがＲＡＭ上に格納されているような傷付く恐れのある情報を保護できる。
【００２６】
同様にして、さらに、このメモリ保護論理回路は、不揮発メモリの保護領域に格納されているコードをプロセッサが実行している間に、プロセッサがメモリ書込要求を発行しないとき揮発メモリの保護領域に対する書込保護フラグが設定されている場合、保護領域のアドレスに対する読出要求を拒否できる。
このようにすれば、保護領域の外側に格納された顧客コードが、不揮発メモリの保護領域にあるコードに属する揮発データが、不注意あるいは故意に、書き換えあるいは上書きされることを防ぐことができる。
【００２７】
不揮発メモリ保護フラグは、揮発メモリ保護フラグとして機能させることもできるし、揮発メモリフラグを一つ以上の別のフラグとすることもできる。
【００２８】
上述の実施形態の何れにおいても、当該装置は外部デバッガまたはソフトウェア・ローダによるメモリ・アクセスを許可するためのインターフェース（例えば、一つ以上のピン）を含むように構成できる。
本願発明の好ましい実施形態は、メモリ保護論理回路は、当該領域に対してデバッギング保護フラグが設定されている場合、揮発または不揮発メモリの全てまたは幾つかの保護領域のアドレスに対する、インターフェースを介して受信した複数の読出要求を拒否するようにしてよい。
同様に、上記保護は、保護領域からの命令フェッチに対する保護、揮発あるいは不揮発メモリの保護領域への書込アクセスに対する保護、の一方あるいは両方を提供できる。
メモリ保護論理回路は、デバッガが当該装置のメモリ・バスのためのバス・マスタとして機能する場合を判定することで、メモリ・アクセス要求がデバッギング・インターフェース由来のものであることを特定できる。
プロセッサがＡＲＭ（登録商標）のCortex(登録商標)-M0である場合、プロセッサはCortex(登録商標)-M0からのHMASTER信号を使用して、プロセッサ・コアとデバッガ処理とを区別できる。
【００２９】
さらに、メモリ保護論理回路は、実行可能コード用のメモリのユーザ領域に対する読込保護フラグの状態を判定するように構成できる。
このユーザ領域は、アドレス空間の保護コード領域に隣接し、しかも当該保護コード領域を除いた、メモリの一部または全てを含む。
メモリ保護論理回路は、ユーザ領域に対する読込保護フラグが設定されているならば、デバッギング・インターフェースから受信したユーザ領域のアドレスに対する読込要求・書込要求の一方または両方を拒否するように構成できる。
このようにすれば、顧客または他のユーザは、例えば、機密保持の理由により、第三者による権限のないアクセスから、自身のユーザ・アプリケーション・コードを保護できる。
【００３０】
ある実施形態では、当該装置は、無線送信機・無線受信機の双方または一方（すなわち、オンチップ無線機）のような、集積された無線通信論理回路を含む。
無線プロトコル・スタックを実装したコードを含むファーム・ウェア・モジュールは、コード・メモリの保護領域に格納できる。
このファーム・ウェア・モジュールとインターフェースで接続しているソフトウェア・アプリケーションは、保護領域以外に格納できる。
【００３１】
本願発明の実施形態は、伝統的なオペレーティング・システムを持たずに、ユーザが直接プロセッサ上で実行できるネイティブコードを開発できる装置に、特に適している。
これはなぜなら、そのような装置は、装置製造者が当該装置に実装した機密ライブラリまたはモジュールを保護し、メモリ・アクセスを制御するオペレーティング・システムに依存させることができないからである。
【００３２】
本願発明の何れの実施形態でも、読込保護フラグ・書込保護フラグの双方または一方は、不揮発メモリに格納されることが好ましい。
使用に際して、勿論、フラグをレジスタやＲＡＭにキャッシュしてもよい。
保護フラグは条件設定の大きな一群の一つの要素に過ぎない。これは、適当な方法で暗号化されてもよい。そのような保護フラグは、二値フラグまたはビットフィールドとして格納される。
【００３３】
一つ以上の保護フラグは、不揮発メモリの保護設定領域に格納される。
当該装置は、保護設定領域の何れの部分についても、当該部分が消去状態でない場合は、当該部分への書き込みがなされるのを防ぐように構成された不揮発メモリ制御論理回路を、含むことが好ましい。さらに、この不揮発メモリ制御論理回路は、不揮発メモリの保護領域が消去状態にあるときに限って、保護設定領域が消去されることを許可することが好ましい。
【００３４】
このようにすれば、不揮発メモリの保護領域に格納されている全てのデータを先ず消去しなければ、保護フラグは再設定できない。
保護領域に格納されている損傷を受けやすい実行可能コードは、常に不揮発メモリの読出保護フラグを再設定することによって、読み出すことができない。
【００３５】
このアイデアは、まぎれもなく新規性と進歩性がある。
他の構成として、本願発明は、プロセッサと、不揮発メモリと、不揮発メモリ制御論理回路と、メモリ保護論理回路と、を含む集積回路装置であって、メモリ保護論理回路は、不揮発メモリの保護設定領域に格納された保護設定データに依存して、不揮発メモリの保護可能領域に対するアクセスを制御し、不揮発メモリ制御論理回路は、保護設定領域の何れの部分についても、当該部分が消去状態でない場合は、不揮発メモリ制御論理回路が書き込みがなされるのを防ぎ、保護可能領域が消去状態である場合に限って、保護設定領域を消去することを許可する。
【００３６】
別の構成として、本願発明は、プロセッサと、不揮発メモリと、を含む集積回路装置上でメモリ・アクセスを制御する方法であって、不揮発メモリの保護設定領域に格納された保護設定データに依存して、不揮発メモリの保護可能領域に対するアクセスを制御し、保護設定領域の何れの部分についても、当該部分が消去状態でない場合は、書き込みがなされるのを防ぎ、保護可能領域が消去状態である場合に、保護設定領域を消去することを許可するメモリ・アクセスの制御方法である。
【００３７】
始めに示した構成の特徴や実施形態は、適当な場合には、上記構成による実施形態の付加的特徴にできる。
特に、保護可能領域は、前述のように、不揮発メモリの保護領域にできるし、保護設定データは、前述のように、一つ以上の保護フラグを含ませることができる。
【００３８】
不揮発メモリ制御論理回路はプロセッサとは独立に処理されることが好ましい。また、不揮発メモリ制御論理回路と保護論理回路の一方または双方がプロセッサとは別体の論理回路を含むことが好ましい。
【００３９】
米国特許公報６９５２７７８号は、規則群に従って、組込メモリのメモリ・ブロックに対する読出保護、書込保護の双方または一方を提供するマイクロ・コントローラを述べている。
これらの規則群は、複数のメモリ・ブロックに対して、各々にセキュリティ・レベルを割り当てており、監視不揮発メモリに格納されている。
一旦、最初に、エンド・ユーザの要求に適合するようにプログラミングされれば、監視不揮発メモリが消去され、マイクロ・コントローラが再初期化されない場合、各ブロックに対するセキュリティ・レベルは増加させることだけできる。
その結果として、ユーザがデフォルトで設定したセキュリティ・レベルが復活する。
【００４０】
しかし、そのような方法は、メモリ・ブロックを適切に保護するために、デフォルトのセキュリティ・レベルの再設定が成功するかどうかに依る。
もし、マイクロ・コントローラを再初期化するプロセスに攻撃者が攻撃できるならば、メモリの内容は、攻撃者によって、保護されず読出可能のままにされるであろう。
【００４１】
本願発明の好ましい実施形態では、これに対して、専用の不揮発メモリ制御論理回路と、全ての損傷を受けやすい情報を当該装置から最初に消去した場合、保護設定データを再設定できる。
【００４２】
不揮発メモリ制御論理回路によって提供される保護設定領域を消去する唯一の機構が、保護領域と保護設定領域の双方を消去する命令であるように、不揮発メモリ制御論理回路は構成できる。これは、当該装置の全ての不揮発メモリを消去できる命令である。
【００４３】
もし、保護設定領域と保護可能領域とが、異なる複数のページまたはメモリの消去可能ブロックを含むならば、保護設定領域の一部を形成するブロックあるいは何れかのページを消去する前に、全てのページあるいは保護可能領域を形成するブロックを、不揮発メモリ制御論理回路が消去する。
このようにすれば、消去処理が完了前に中断しても、保護可能領域の全ての消去が完了していなければ、保護設定データは存在する。従って、保護の提供は継続する。
【００４４】
保護設定領域が消去状態であるとき、保護可能領域に対するアクセスが、指定された一群の制限レベルが最高値のときに実行されるように、メモリ保護論理回路を構成できる。
これにより、例えばユーザが消去後に新しい設定データの設定を省略した場合などに、デフォルトで保護可能領域に対するアクセスを制限することで、付加的なセキュリティを提供できる。
【００４５】
消去状態のときに、保護設定領域に対する書込を許可することによって、製造中または試運転中や、当該装置の後の再プログラミングに際しても、保護設定情報を設定できる。
【００４６】
不揮発メモリ制御論理回路は、保護設定領域の部分に対する書込命令を受信し、これに応答して、書込を許可する前に、当該領域が消去された状態であることを検査することが好ましい。
不揮発メモリ型の自然消去状態にあることを判定し、当該部分を読み込むことにより、これを実行できる。
例えば、フラッシュ・メモリが、ページ消去後、全ビットを「１」にする。その結果、メモリ制御論理回路が、書込処理前に、当該領域の全ビットが「１」となっていることを検査できる。
別のメモリタイプなら、勿論「０」を読み込むこともできる。あるいは、別の自然消去状態を持つこともできる。
【００４７】
他の方法としては、不揮発メモリの領域が次のような消去状態フラグを含むこともできる。この消去状態フラグは、当該領域が消去されたときリセットされる。しかし、最初の書込処理が当該領域に実行されたとき不揮発メモリ制御論理回路によって設定される。
この場合、不揮発メモリ制御論理回路は、保護設定領域の一部に対して書込処理を許可する前に、一つ以上の消去状態フラグを検査する。
【００４８】
上述のように、不揮発メモリの保護可能領域を定義する値と、揮発メモリの保護領域を定義する値との、双方あるいは一方の値がメモリ保護設定領域で格納されている。
このようにすれば、最初に内容を破壊しなければ、保護領域の定義を変更できない。
【００４９】
ここで述べられた構成例または実施形態の付加的または好ましい特徴は、その適用が妥当なら、他の構成例や実施形態にも適用できる。
【００５０】
本願発明の好ましい実施形態を以下に示す。しかし、これは例示目的でのみ示されるものであり、添付の図面を参照して述べる。
【図面の簡単な説明】
【００５１】
【図１】本発明の実施形態のマイクロ・コントローラの構成図である。
【図２】本発明の実施形態のマイクロ・コントローラ・アーキテクチャ内の主要なソフトウェア・構成要素を示した構成図である。
【図３】本発明の実施形態のマイクロ・コントローラにおけるメモリ・マップである。
【発明を実施するための形態】
【００５２】
本発明の好ましい実施形態の一つを、単に例として、添付の図に関連して示す。
図１に、マイクロ・コントローラ集積回路１、または、１チップ・無線機を示す。
これは、クロック論理回路３（レジスタ・キャパシタ発振器を含むか、外付クリスタル発振子から入力を受信するかの、双方または一方）、電源管理回路５、プロセッサ７（例えば、ＡＲＭ（登録商標）Cortex(登録商標)-M0）、メモリ保護ユニット９、ＲＡＭ１１、フラッシュ・メモリ・コントローラ２０、フラッシュ・メモリ１３、無線通信論理回路１７、一つ以上の周辺回路１５、及び、入出力回路１９を含む。
【００５３】
これらの構成要素は、適当な配線やバス（図示せず）の双方または一方と内部接続している。マイクロ・コントローラ１は、ハーバード・アーキテクチャ、または、ノイマン型アーキテクチャを使うことができる。メモリ保護ユニット９は、プロセッサ７からＲＡＭ１１とフラッシュ・メモリ・コントローラ２０とに対する全てのメモリ・アクセス命令を阻止できるように構成されている。
【００５４】
マイクロ・コントローラ１は、フラッシュ・メモリ１３にデータをロードするために、プロセッサ７をデバッグするために使用されるデバッギング・インターフェース１８も、持つことができる。
これは、ＲＡＭ１１やフラッシュ１３に対して、直接アクセスするのではなく、メモリ保護ユニット９やフラッシュ・メモリ・コントローラ２０を介して当該メモリにアクセスしなければならない。
【００５５】
使用の際には、マイクロ・コントローラ１は、電源装置、無線アンテナ、水晶発振子、センサ、出力装置等、多数の外部機器に接続できる。
【００５６】
図２は、マイクロ・コントローラ１上に実装された、ソフトウェア構成要素を示す。
マイクロ・コントローラ１・ハードウェアとのインターフェースは、ＡＲＭ（登録商標）Cortex マイクロ・コントローラ・ソフトウェア・インターフェースのような、選択的なハードウェア抽象化層である。
この上に、ファーム・ウェア・モジュール２３と、各々独立したソフトウェア・アプリケーション２７が配置されている。
【００５７】
ファーム・ウェア・モジュール２３は、多数の組込ソフトウェア・ブロックを含む二値アプリケーションである。無線プロトコル・ブロック３１は一つ以上のワイヤレス・プロトコル・スタックに実装される。無線イベント・マネージャは、無線通信論理回路１７のためのアクセス・スケジューリングと、イベント多重化とを提供する。
ライブラリ３５は、乱数生成、割込や優先権の設定処理、電源管理（例えば、周辺回路の有効化、無効化）、暗号化モジュール等々の各種関数と、共有ハードウェア・リソース管理機構とを提供する。
ファーム・ウェア・マネージャ３７は、ファーム・ウェア・モジュールの有効化と無効化を行う機能をサポートし、無線プロトコル・スタックの有効化と無効化を行う。
【００５８】
ファーム・ウェア・モジュール２３には、マルチ・スレッド機能やメモリ割当機能等を提供する必要がないため、オペレーティング・システムの全機能は必ずしも必要ない。
【００５９】
ファーム・ウェア・モジュール２３のアプリケーション・インターフェース（ＡＰＩ）２９は、ソフトウェア・アプリケーション２７が、ファーム・ウェア・モジュール２３の各関数を呼び出すことを可能にする。これは専らシステム・コールを用いて実装される。
ＡＲＭ（登録商標）プロセッサを使用する場合、各ＡＰＩ関数プロトタイプは、それと関連付けられたスーパーバイザ・コール（ＳＶＣ）の番号によって、ファーム・ウェア関数にマップされる（対応付けられる）。このマッピング（対応関係）は、ソフトウェア・アプリケーション２７の開発者に提供され、開発者はそのＡＰＩ関数を正確に呼び出すことができる。
【００６０】
ファーム・ウェア・モジュール２３は、ソフトウェアを中断して、複数のイベントを、ソフトウェア・アプリケーション２７に伝達できる。イベントの内容は、ソフトウェア・アプリケーション２７に読み込まれるまで、バッファに格納される。
当該読込は、ＡＰＩコール（例えば、event_get()）を介して実行される。
【００６１】
図３には、ＲＡＭ１１とフラッシュ１３が、ファーム・ウェア２３とソフトウェア・アプリケーション２７の間で、どのように共有されるかを示す。
フラッシュ１３は、ゼロ（0x0000 0000）から、実行可能コードが格納されているSizeOfProgMemまで割り当てられている。
【００６２】
それ自身のフラッシュ・ページ上に存在する、フラッシュ１３の別の領域は、MemConfigStartから、MemConfigENDまで展開し、メモリ保護ユニット９により使用するための設定データを格納するために使用される。
ある一群の実施形態では、このページは0x1000 0000から0x1000 07ffに展開している。しかし、ここで述べた全てのアドレスと同様に、これらの値は与えられた実施形態において使用されるプロセッサのアーキテクチャに依存する。
【００６３】
ＲＡＭ１１は、0x2000 0000から0x2000 0000＋SizeOfRAMまでのアドレスが割り当てられている。
【００６４】
フラッシュ１３のプログラム領域は、アドレスCLENR0（領域０のコード長）の両側で区分される二つの領域を含む。
ゼロからCLENR0の間の領域０は、ファーム・ウェア２３がロードされる。
ファーム・ウェア割込ベクタ・テーブルが、アドレス・ゼロに格納される。
領域０の上にCLENR0からSizeOfProgMemの間の範囲にわたり、展開している領域１は、ソフトウェア・アプリケーション２７がロードされる。
アドレスCLENR0に割込ベクタ・テーブルを持つことも可能である。
【００６５】
ＲＡＭ１１は、同様に、ベース・アドレス0x2000 0000からRLENR0までの領域 0と、RLENR0から領域０の上側に展開している領域１を持つ。
ＲＡＭ領域０が、ファーム・ウェア・モジュール２３のヒープ領域を提供する一方で、ＲＡＭ領域１が、ソフトウェア・アプリケーション２７のヒープ領域を提供する。コール・スタックは、ファーム・ウェア・モジュール２３と、ソフトウェア・アプリケーション２７との間で共有され、0x2000 0000＋SizeOfRAM から下に成長する。
コール・スタックに対して割当られるメモリは、ファーム・ウェア・モジュール２３とソフトウェア・アプリケーション２７に必要な量より十分に大きくなければならない。
【００６６】
CLENR0とRLENR0の値はフラッシュ・メモリ１３のメモリ保護設定領域に格納される。
【００６７】
電源を入れたときに、フラッシュ・メモリ１３のメモリ保護設定領域に格納されている関連データは、メモリ保護論理９に対してアクセス可能な複数のメモリ保護設定レジスタに、コピーされる。
これらのレジスタは、これらのレジスタの内容を変更することだけで、フラッシュ１３のメモリ保護設定領域のデータを変更できるように、マイクロ・コントローラ１の電源が入っている間に限って実行されるハードウェア状態マシンからのみ書込可能である。
【００６８】
メモリ保護論理９は、プロセッサ７からフラッシュ１３とＲＡＭ１１へのメモリ・アクセス要求（例えば、データ・フェッチまたは命令フェッチ処理）を妨げることができる。
これは、メモリ・バス上の「処理タイプ」から命令フェッチ処理を同定する。
プロセッサ７がフラッシュ・メモリから行う命令フェッチ毎に、メモリ保護論理９は、フェッチされた命令のアドレスがCLENR0より小さければ「１」を、CLENR0より大きいか等しければ「０」を入れて、１ビットフラグを更新する。
【００６９】
全てのデータ・アクセス要求ごとに、メモリ保護論理回路９は、「ファーム・ウェア領域」レジスタの値を検査することによって、アクセス要求源がファーム・ウェア・モジュール２３か、他の場所からのものかを判定する。
アクティブ・メモリ・バス・マスタを特定することによって、そのアクセス要求源が、デバッガ・インターフェースか、ダイレクト・メモリ・アクセス（ＤＭＡ）ユニットかを検出できる。
これは、「ファーム・ウェア領域」レジスタの状態とバス・マスタの特定に基づいて、アクセス要求を許可するか拒否するかを判定するメモリ保護設定レジスタにアクセスすることもできる。
【００７０】
ある好ましい実施形態では、ソフトウェア・アプリケーション２７は、フラッシュ領域 ０とＲＡＭ領域０に対する読込アクセスと書込アクセスが拒否される。
これにより、ファーム・ウェア・モジュール２３に対する秘密性を保護し、ファーム・ウェア・モジュール２３に対して割り当てられたメモリ・ロケーションに対する、ソフトウェア・アプリケーション２７による不注意なあるいは悪意のある書き込みを防ぐことができる。従って、安全性と頑強性を向上できる。
ソフトウェア・アプリケーション・フラッシュ領域1は、例えば外部デバッグ・インターフェース１８を介して、リード・バックに対して保護するなど、読込アクセスされないように保護することもできる。
【００７１】
図４は、権限のないアクセスからフラッシュ・メモリ１３の保護するために、マイクロ・コントローラ１に実装された決定表を示す。
他の実装であっても勿論可能である。
【００７２】
二つの二値フラグが、フラッシュ・メモリ１３のメモリ保護設定領域に格納（さらに、ブート時にレジスタにコピー）される。
第一のフラグが設定時されたときは、デバッギング・インターフェース１８介した、プログラム・フラッシュの全てに対するデータ読込・書込アクセスが妨げられる。
第二のフラグが設定時されたときは、領域０から実行されたコード以外のコードによる、フラッシュ・メモリの領域０自身に対するデータ読込・書込アクセスが妨げられる。
プロセッサ７による実行アクセス（すなわち、命令フェッチ）は、データ読込アクセスが拒絶されたときでも、未だ許可される。
【００７３】
もしも、攻撃者がフラッシュ・メモリ１３のメモリ保護設定領域に格納されているデータを変更できるとするならば、保護機構がバイパスされるであろう。
しかし、フラッシュ・メモリ・コントローラ２０は、消去状態でない場合、メモリ保護設定領域に対する書込を妨げる。
さらに、フラッシュ・メモリ・コントローラ２０は、フラッシュ・メモリの領域０と領域１が最初に消去されていない場合、メモリ保護設定領域の消去が妨げられる。
これは、これらの条件を実行する有限状態マシンを実装するデジタル論理回路を使う。
【００７４】
フラッシュ・メモリ・コントローラ２０が、メモリ保護設定領域のアドレスに対する１ワードのデータを書き込む命令を受信したなら、フラッシュ・メモリ・コントローラ２０は、当該アドレスに存在する内容を読み出し、メモリ保護設定領域フラッシュ・メモリの消去以降、当該アドレスに書き込みされていないことを示している、内容が全て「１」である場合にのみ、書き込みを許可する。
検査できない場合、書込は拒絶され、プロセッサ７から例外処理が起動される。
【００７５】
フラッシュ・メモリ・コントローラ２０がフラッシュ・メモリ１３全体を消去する命令を受信したなら、メモリ保護設定領域を消去する前に、最初にフラッシュ領域 0と領域 1の内容を消去することによって応答する。
このような理由から、メモリ保護設定は、それ自身が消去可能なフラッシュ・ページに格納され、フラッシュ・メモリ１３の何れのプログラム領域からも分離されることが好ましい。
【００７６】
フラッシュ・メモリ・コントローラ２０は、メモリ保護設定領域を消去する何れかの命令を拒絶する。
【００７７】
当業者なら、マイクロ・コントローラ１が、フラッシュ・メモリ１３の領域 0以外で実行されるコードが、無線通信論理回路１７の低レベル関数と関係するレジスタ、電源制御論理回路５、ダイレクト・メモリ・コントローラ（ＤＭＡ），複数の割込レジスタ、のような重要な特徴にアクセスすることを妨げるように構成できることは、理解されるであろう。
【図１】
0006306578.tif 000002
【図２】
0006306578.tif 000003
【図３】
0006306578.tif 000004
【図４】
0006306578.tif 000005