(57)【特許請求の範囲】
【請求項１】
メモリカードであって、
所定の消去単位を有する第１の不揮発性メモリと、
前記第１の不揮発性メモリの消去単位よりも大きい消去単位を有する第２の不揮発性メモリと、
前記メモリカードにダウンロードされたプログラムデータのうち少なくとも書き換えが発生する可能性がある部分を分離し、分離した部分を前記第１の不揮発性メモリへ格納し、残りの部分を前記第２の不揮発性メモリへ格納する分離部とを備え、
前記プログラムデータは、それぞれに識別コードが付与されている関数と変数とから構成され、前記変数については、書き換えが発生する可能性のあるもの、書き換えが発生する可能性がないもの、それぞれに識別コードが付与されており、
前記分離部は、
前記識別コードを判別して、前記関数を前記第２の不揮発性メモリへ格納し、前記変数のうち書き換えが発生する可能性のあるものを前記第１の不揮発性メモリに格納し、前記変数のうち書き換えが発生する可能性がないものを前記第２の不揮発性メモリへ格納することを特徴とするメモリカード。
【請求項２】
メモリカードであって、
所定の消去単位を有する第１の不揮発性メモリと、
前記第１の不揮発性メモリの消去単位よりも大きい消去単位を有する第２の不揮発性メモリと、
前記メモリカードにダウンロードされたプログラムデータのうち少なくとも書き換えが発生する可能性がある部分を分離し、分離した部分を前記第１の不揮発性メモリへ格納し、残りの部分を前記第２の不揮発性メモリへ格納する分離部とを備え、
前記プログラムデータは、オブジェクト指向プログラミング言語で記述されたクラスであり、前記クラスの変数、メソッド、それぞれに識別コードが予め付与されており、
前記分離部は、
前記識別コードを判別して、前記クラスの変数を前記第１の不揮発性メモリへ格納し、前記クラスのメソッドを前記第２の不揮発性メモリへ格納する
ことを特徴とするメモリカード。
【請求項３】
メモリカードであって、
所定の消去単位を有する第１の不揮発性メモリと、
前記第１の不揮発性メモリの消去単位よりも大きい消去単位を有する第２の不揮発性メモリと、
前記メモリカードにダウンロードされたプログラムデータのうち少なくとも書き換えが発生する可能性がある部分を分離し、分離した部分を前記第１の不揮発性メモリへ格納し、残りの部分を前記第２の不揮発性メモリへ格納する分離部とを備え、
前記プログラムデータは、オブジェクト指向プログラミング言語で記述されたクラスであり、前記クラスの変数、メソッド、それぞれに識別コードが予め付与されており、前記変数については、書き換えが発生する可能性のあるもの、書き換えが発生する可能性がないもの、それぞれに識別コードが付与されており、
前記分離部は、
前記識別コードを判別して、前記クラスの変数のうち書き換えが発生する可能性があるものを前記第１の不揮発性メモリへ格納し、前記クラスの変数のうち書き換えが発生する可能性がないものおよび前記クラスのメソッドを前記第２の不揮発性メモリへ格納することを特徴とするメモリカード。
【請求項４】
請求項１から３のいずれか１つにおいて、
前記第２の不揮発性メモリに格納されるべき前記残りの部分を暗号化する暗号処理部をさらに備え、
前記第１の不揮発性メモリ、前記分離部および前記暗号処理部は同一チップ上に形成される
ことを特徴とするメモリカード。
【請求項５】
請求項１から３のいずれか１つにおいて、
前記第１の不揮発性メモリはＥＥＰＲＯＭであり、
前記第２の不揮発性メモリはフラッシュメモリである
ことを特徴とするメモリカード。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はメモリカードに関し、さらに詳しくは、プログラムデータをダウンロードして不揮発性メモリに格納するメモリカードに関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
デジタルカメラ・ＰＤＡ・携帯型オーディオ・携帯電話・パソコンなどのデジタル機器での情報の書き込み／読み出しにメモリカードが利用されている。メモリカードにはフラッシュメモリとコントローラの２つのチップが搭載されている。近年、メモリカードに搭載されるフラッシュメモリは大容量化しつつあり、これに応じて大規模なデータをフラッシュメモリに格納できるようになりつつある。ところが現状では、メモリカードはデジタル機器とデータのやりとりをするだけである。なお、ＩＣカードにはアプリケーションプログラムをダウンロードして実行可能なものが存在する。しかし、プログラム格納用の不揮発性メモリの容量は、メモリカードに搭載されるフラッシュメモリの容量に比べて非常に小さい。
【０００３】
この発明の目的は、回路規模を小さくすることができるメモリカードを提供することである。
【０００４】
【課題を解決するための手段および発明の効果】
この発明によるメモリカードは、第１の不揮発性メモリと、第２の不揮発性メモリと、分離部とを備える。第１の不揮発性メモリは所定の消去単位を有する。第２の不揮発性メモリは、第１の不揮発性メモリの消去単位よりも大きい消去単位を有する。分離部は、メモリカードにダウンロードされたプログラムデータのうち少なくとも書き換えが発生する可能性がある部分を分離し、分離した部分を第１の不揮発性メモリへ格納し、残りの部分を第２の不揮発性メモリへ格納する。
【０００５】
上記メモリカードでは、ダウンロードしたプログラムの実行処理において、プログラム中のデータの書き換え処理は第２の不揮発性メモリにおいては発生せず第１の不揮発性メモリにおいてのみ発生する。このように、消去単位の小さい第１の不揮発性メモリにおいて変数などの書き換え処理を行うことにより、消去単位の大きい第２の不揮発性メモリにおいて処理を行う場合に比べて、必要なバッファサイズが小さくてよく、回路規模を小さくできる。
【０００６】
また、書き換えのために一時的にバッファリングするデータのサイズは第２の不揮発性メモリよりも第１の不揮発性メモリのほうが小さい。したがって、第２の不揮発性メモリにおいて書き換え処理を行う場合に比べて書き換えのためのバッファリング処理時間が少なくてすみ、書き換えに必要な処理時間を少なくできる。
【０００７】
また、ダウンロードしたプログラムデータを第１の不揮発性メモリと第２の不揮発性メモリとに分離して格納しているためセキュリティ性が向上する。
【０００８】
好ましくは、上記プログラムデータは、関数と変数とから構成される。上記分離部は、上記関数を第２の不揮発性メモリへ格納し、上記変数のうち書き換えが発生する可能性のあるものを第１の不揮発性メモリに格納し、上記変数のうち書き換えが発生する可能性がないものを第２の不揮発性メモリへ格納する。
【０００９】
好ましくは、上記プログラムデータは、オブジェクト指向プログラミング言語で記述されたクラスである。上記分離部は、上記クラスの変数を第１の不揮発性メモリへ格納し、上記クラスのメソッドを第２の不揮発性メモリへ格納する。
【００１０】
好ましくは、上記プログラムデータは、オブジェクト指向プログラミング言語で記述されたクラスである。上記分離部は、上記クラスの変数のうち書き換えが発生する可能性があるものを第１の不揮発性メモリへ格納し、上記クラスの変数のうち書き換えが発生する可能性がないものおよび上記クラスのメソッドを第２の不揮発性メモリへ格納する。
【００１１】
好ましくは、上記メモリカードは暗号処理部をさらに備える。暗号処理部は、第２の不揮発性メモリに格納されるべき上記残りの部分を暗号化する。そして第１の不揮発性メモリ、分離部および暗号処理部は同一チップ上に形成される。
【００１２】
上記メモリカードでは、第２の不揮発性メモリに格納するプログラムデータについては暗号処理部において暗号化しているためセキュリティ性がさらに向上する。
【００１３】
好ましくは、上記第１の不揮発性メモリはＥＥＰＲＯＭであり、上記第２の不揮発性メモリはフラッシュメモリである。
【００１４】
【発明の実施の形態】
以下、この発明の実施の形態を図面を参照して詳しく説明する。なお、図中同一または相当部分には同一の符号を付しその説明は繰り返さない。
【００１５】
＜メモリカードシステムの全体構成＞
図１は、この発明の実施の形態によるメモリカードシステムの全体構成を示すブロック図である。図１に示すシステムでは、デジタル機器２（たとえば、デジタルカメラ・ＰＤＡ・携帯型オーディオ・携帯電話・パソコンなど）のスロット（図示せず）にメモリカード１が挿入され、デジタル機器２からメモリカード１にプログラムデータがダウンロードされる。ダウンロードされたプログラムはメモリカード１内部で実行される。
【００１６】
＜デジタル機器２＞
デジタル機器２は、オブジェクト指向プログラミング言語であるＪａｖａ（ＴＭ）で記述されたソースコードをバイトコードに変換（コンパイル）してメモリカード１へ転送する。
【００１７】
＜メモリカード１＞
メモリカード１は、コントローラチップ１００とフラッシュメモリチップ２００とを備える。
【００１８】
コントローラチップ１００は、インターフェース１１０，１４０，１８０と、ＣＰＵ１２０と、仮想マシン１３０と、ＥＥＰＲＯＭ１５０と、バッファＲＡＭ１４５，１６０と、暗号処理部１７０とを含む。
【００１９】
インターフェース１１０は、デジタル機器２とコントローラチップ１００との間のインターフェースである。インターフェース１１０は、デジタル機器２からダウンロードしたクラスファイル（バイトコード）を仮想マシン１３０へ転送する。
【００２０】
仮想マシン１３０は、インターフェース１１０より与えられるクラスファイルからｓｔａｔｉｃ変数を分離してインターフェース１４０に供給し、残り（ａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数）をバッファＲＡＭ１６０に供給する。また仮想マシン１３０は、ＥＥＰＲＯＭ１５０およびフラッシュメモリチップ２００から読み出されたプログラムデータ（バイトコード）をＣＰＵ１２０が実行可能な形式にインタープリタ方式で変換する。
【００２１】
ＣＰＵ１２０は、仮想マシン１３０によって変換されたプログラムを実行する。またＣＰＵ１２０は、コントローラチップ１００の動作を制御する。
【００２２】
インターフェース１４０は、仮想マシン１３０およびＣＰＵ１２０とＥＥＰＲＯＭ１５０およびバッファＲＡＭ１４５との間のインターフェースである。インターフェース１４０は、仮想マシン１３０からのｓｔａｔｉｃ変数をバッファＲＡＭ１４５を介してＥＥＰＲＯＭ１５０に転送する。
【００２３】
バッファＲＡＭ１４５は、ＥＥＰＲＯＭ１５０へ転送するデータおよびＥＥＰＲＯＭ１５０から出力されるデータをバッファリングする。またバッファＲＡＭ１４５は、ＥＥＰＲＯＭ１５０に記録されているデータを書き替える際に当該データを一時的にバッファリングする。
【００２４】
ＥＥＰＲＯＭ１５０は、インターフェース１４０からのｓｔａｔｉｃ変数を記憶する。ＥＥＰＲＯＭ１５０は、ワード単位でデータの消去を行う不揮発性メモリである。
【００２５】
バッファＲＡＭ１６０は、仮想マシン１３０からのａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数を一時的に記憶する。またバッファＲＡＭ１６０は、フラッシュメモリ２００から読み出され暗号処理部１７０で復号されたプログラムデータを一時的に記憶する。
【００２６】
暗号処理部１７０は、バッファＲＡＭ１６０に記憶されたプログラムデータ（ａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数）を暗号化してインターフェース１８０に供給する。また暗号処理部１７０は、フラッシュメモリチップ２００から読み出されたプログラムデータを復号化する。
【００２７】
インターフェース１８０は、コントローラチップ１００とフラッシュメモリチップ２００との間のインターフェースである。インターフェース１８０は、暗号処理部１７０によって暗号化されたプログラムデータ（ａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数）をフラッシュメモリチップ２００に転送する。またインターフェース１８０は、フラッシュメモリチップ２００から読み出されたプログラムデータを暗号処理部１７０に転送する。
【００２８】
フラッシュメモリチップ２００は、インターフェース１８０からの暗号化プログラムデータ（ａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数）を記憶する。フラッシュメモリチップ２００は、ブロック単位またはチップ単位でデータの消去を行う不揮発性メモリである。すなわちフラッシュメモリチップ２００の消去単位はＥＥＰＲＯＭ１５０の消去単位よりも大きい。
【００２９】
＜プログラムのダウンロード＞
次に、図１に示したメモリカードシステムにおけるデジタル機器２からメモリカード１へのプログラムデータのダウンロードについて説明する。
【００３０】
ここでは、図２に示すようなソースコードのプログラムデータがダウンロードされる。図２に示すソースコードは、メモリカード１をポイントカードとして利用するためのアプリケーションプログラムであり、Ｊａｖａ（ＴＭ）で記述されている。このプログラムでは、購入した品目（食品、衣料品、電化製品）ごとに異なるポイント還元率でポイント数が加算されていく。ポイント残高は購入品目ごとに記録される。ポイント残高は商品の購入のたびに更新されるためｓｔａｔｉｃ変数として宣言されている。一方、ポイント還元率は初期設定値のまま不変であるためｓｔａｔｉｃ  ｆｉｎａｌ変数として宣言されている。
【００３１】
Ｊａｖａ（ＴＭ）で記述されたソースコードはバイトコードに変換（コンパイル）されてデジタル機器２からメモリカード１へダウンロードされる。メモリカード１にダウンロードされたバイトコード（クラスファイル）は仮想マシン１３０においてｓｔａｔｉｃ変数の部分とＡｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数の部分とに分離される。Ａｐｐｌｅｔコードおよびｓｔａｔｉｃｆｉｎａｌ変数の部分はフラッシュメモリ２００に格納され、ｓｔａｔｉｃ変数の部分はＥＥＰＲＯＭ１５０に格納される。このように、書き換えが発生する可能性がある部分（ｓｔａｔｉｃ変数の部分）はＥＥＰＲＯＭ１５０に格納され、書き換えが発生する可能性がない部分（Ａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数の部分）は暗号処理部１７０で暗号化された後にフラッシュメモリ２００に格納される。なお、アプリケーションプログラムをダウンロードして実行可能なＩＣカードでは、図２に示すように、ダウンロードしたバイトコード（クラスファイル）は分離されることなくすべて内部のＥＥＰＲＯＭに格納される。
【００３２】
次に、仮想メモリ１３０において行われる分離処理を図３を参照しつつ具体的に説明する。
【００３３】
デジタル機器２からメモリカード１にダウンロードされるクラスファイルには、ａｐｐｌｅｔコード部（メソッド）と、ｓｔａｔｉｃ  ｆｉｎａｌ変数と、ｓｔａｔｉｃ変数とが含まれている。ａｐｐｌｅｔコード部の先頭１バイトは０ｘ０１である。ｓｔａｔｉｃ  ｆｉｎａｌ変数の先頭１バイトは０ｘ０２である。ｓｔａｔｉｃ変数の先頭１バイトは０ｘ０３である。このように、デジタル機器２においてコンパイルされたクラスファイルでは、先頭１バイトを判断することによってａｐｐｌｅｔコード部・ｓｔａｔｉｃ  ｆｉｎａｌ変数・ｓｔａｔｉｃ変数をそれぞれ識別できるようになっている。この判断は、仮想マシン１３０のアドレス解析部１３１において行われる。
【００３４】
アドレス解析部１３１の判別結果に応じて格納部１３２はフラッシュメモリ２００またはＥＥＰＲＯＭ１５０にプログラムデータを格納する。先頭１バイトが０ｘ０１であると判断されたときは、当該プログラムデータ（ａｐｐｌｅｔコード部）をフラッシュメモリ２００に格納する。先頭１バイトが０ｘ０２であると判断されたときは、当該プログラムデータ（ｓｔａｔｉｃ  ｆｉｎａｌ変数）を（暗号処理部１７０で暗号化した後に）フラッシュメモリ２００に格納する。先頭１バイトが０ｘ０３であると判断されたときは、当該プログラムデータ（ｓｔａｔｉｃ変数）をＥＥＰＲＯＭ１５０に格納する。
【００３５】
以上のような処理の結果、図４に示すように、フラッシュメモリ２００にはａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数が格納され、ＥＥＰＲＯＭ１５０にはｓｔａｔｉｃ変数が格納される。
【００３６】
＜ダウンロードしたプログラムの実行＞
次に、フラッシュメモリ２００およびＥＥＰＲＯＭ１５０に分離して格納されたプログラムの実行処理について説明する。ここで実行される処理は、図５（ａ）のソースコードで示される内容の処理である。以下、図５（ｂ）および（ｃ）を参照しつつ説明する。
【００３７】
購入金額（ｖａｌｕｅ）と品目種別を示すインデックス（ｉ）とがＣＰＵ１２０に入力されると、仮想マシン１３０はフラッシュメモリ２００上のａｐｐｌｅｔコード部（ａｄｄＰｏｉｎｔ）に格納されている”命令”をフェッチし、インタープリタ部において、ＣＰＵ１２０が実行可能な形式にインタープリタ方式で変換する。変換された命令がＣＰＵ１２０によって実行される。このようにして以下の処理が行われる。
【００３８】
＜ステップＳＴ５１＞
＿ｂａｌｏａｄ・・・フラッシュメモリ２００上のｋａｎｇｅｎｒｉｔｕ配列のｉ番目のデータ（ｋａｎｇｅｎｒｉｔｕ［ｉ］）を取得する（Ｘ）。
【００３９】
＜ステップＳＴ５２＞
＿ｍｕｌ・・・Ｖａｌｕｅとｋａｎｇｅｎｒｉｔｕ［ｉ］とのかけ算処理を行う。
【００４０】
＜ステップＳＴ５３＞
＿ｂａｌｏａｄ・・・ＥＥＰＲＯＭ１５０上のｐｏｉｎｔ配列のｉ番目のデータ（ｐｏｉｎｔ［ｉ］）を取得する（Ｙ）。
【００４１】
＜ステップＳＴ５４＞
＿ａｄｄ・・・ステップＳＴ５２におけるかけ算処理の結果とステップＳＴ５３で取得したｐｏｉｎｔ［ｉ］とを加算する。
【００４２】
＜ステップＳＴ５５＞
＿ｂａｓｔｏｒｅ・・・ステップＳＴ５４における加算処理の結果をＥＥＰＲＯＭ１５０上のｐｏｉｎｔ［ｉ］に格納する（Ｚ）。すなわち、ｐｏｉｎｔ［ｉ］の内容を書き換える。
【００４３】
＜効果＞
現在の技術においては、ＥＥＰＲＯＭの記憶容量はフラッシュメモリに比べて非常に小さい。このため、規模の大きいプログラムの場合にはフラッシュメモリに記憶させることが必要となってくる。
【００４４】
通常、プログラムの実行の際には、プログラム中の小さなデータ（変数など）を書き換える処理が発生する。フラッシュメモリに格納したプログラムを実行する場合には消去単位でこの書き換え処理が行われる。しかしながら、フラッシュメモリの消去単位はＥＥＰＲＯＭの消去単位と比べると非常に大きい。このため、フラッシュメモリに格納したプログラムを実行する際には、変数の書き換えなどのために巨大なバッファメモリが必要になる。
【００４５】
たとえば、
記憶容量：５１２Ｍｂｉｔ
プログラム単位：５１２ｂｙｔｅ＝１ｐａｇｅ
消去単位：３２ｐａｇｅ
のＮＡＮＤ型フラッシュメモリの場合には、１６ｋｂｙｔｅのバッファＲＡＭが必要となる。
【００４６】
この発明の実施の形態によるメモリカードシステムでは、デジタル機器２からメモリカード１にダウンロードしたプログラムデータ（クラスファイル）のうち書き換えが発生する可能性がある部分（ｓｔａｔｉｃ変数）をＥＥＰＲＯＭ１５０に格納し、書き換えが発生する可能性がない部分（Ａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数）をフラッシュメモリ２００に格納している。したがって、プログラム中のデータの書き換え処理はフラッシュメモリ２００においては発生せずＥＥＰＲＯＭ１５０においてのみ発生する。このように、消去単位の小さいＥＥＰＲＯＭ１５０において変数などの書き換え処理を行うため、消去単位の大きいフラッシュメモリ２００において処理を行う場合に比べると、書き換え処理に必要なバッファメモリ（バッファＲＡＭ１４５）の容量が小さくてすみ、回路規模を小さくできる。また、書き換えのために一時的にバッファリングするデータのサイズはフラッシュメモリ２００よりもＥＥＰＲＯＭ１５０のほうが小さい。したがって、フラッシュメモリ２００において書き換え処理を行う場合に比べて書き換えのためのバッファリング処理時間が短くてすみ、書き換えに必要な処理時間を短くできる。
【００４７】
また、メモリカード１にダウンロードしたプログラムデータをフラッシュメモリ２００とＥＥＰＲＯＭ１５０とに分離して格納しているためセキュリティ性が向上する。フラッシュメモリチップ２００に格納するプログラムデータについては暗号処理部１７０において暗号化しているためセキュリティ性がさらに向上する。
【００４８】
また、ＥＥＰＲＯＭ１５０に格納されたプログラムデータにアクセスする場合には暗号化／復号化処理を行う必要がないため処理時間が向上される。
【００４９】
なお、ここではｓｔａｔｉｃ変数をＥＥＰＲＯＭ１５０に格納し、Ａｐｐｌｅｔコードおよびｓｔａｔｉｃ  ｆｉｎａｌ変数をフラッシュメモリ２００に格納したが、ｓｔａｔｉｃ変数およびｓｔａｔｉｃ  ｆｉｎａｌ変数をＥＥＰＲＯＭ１５０に格納し、Ａｐｐｌｅｔコードをフラッシュメモリ２００に格納するようにしてもよい。
【００５０】
また、フラッシュメモリ２００からの読み出しおよび暗号処理部１７０による復号処理にかかる時間がＥＥＰＲＯＭ１５０からの読み出しにかかる時間よりも長い場合は、ＣＰＵ１２０の制御により、フラッシュメモリ２００のアクセス回数の多い部分をＥＥＰＲＯＭ１５０に書き込んでもよい。
【００５１】
また、バッファＲＡＭ１４５とバッファＲＡＭ１６０とを共通の１つのＲＡＭで構成しこのＲＡＭを、ＥＥＰＲＯＭ１５０の動作時にはＥＥＰＲＯＭ１５０用バッファＲＡＭとして動作させ、フラッシュメモリ２００の動作時にはフラッシュメモリ２００用バッファＲＡＭとして動作させるようにしてもよい。これにより、ＲＡＭに必要な回路面積を小さくすることができ、回路規模を小さくできる。
【図面の簡単な説明】
【図１】  この発明の実施の形態によるメモリカードシステムの全体構成を示すブロック図である。
【図２】  デジタル機器からダウンロードしたプログラムデータをメモリカードに格納する様子を示す図である。
【図３】  デジタル機器からダウンロードしたプログラムデータをメモリカードに格納する様子を示す図である。
【図４】  フラッシュメモリおよびＥＥＰＲＯＭに格納されるプログラムデータを示す図である。
【図５】  （ａ）〜（ｃ）は、プログラムの実行手順を説明するための図である。
【符号の説明】
１  メモリカード、１００  コントローラチップ、２００  フラッシュメモリチップ（第２の不揮発性メモリ）、１３０  仮想マシン（分離部）、１５０  ＥＥＰＲＯＭ（第１の不揮発性メモリ）、１７０  暗号処理部。
【図１】
0003913128.tif 000002
【図２】
0003913128.tif 000003
【図３】
0003913128.tif 000004
【図４】
0003913128.tif 000005
【図５】
0003913128.tif 000006