(57)【要約】【課題】ＥＥＰＲＯＭエミュレーション時のエミュレーション書き込み単位（データ群）を構成するデータ数が各データ群で共通（固定値）にしなくてはならなかった。【解決手段】本発明は、第１のデータをフラッシュメモリ４に書き込むときには、第１のデータを識別するための第１の付加ビットを書き込み、第２のデータをフラッシュメモリ４に書き込むときには、第２のデータを識別するための第１の付加ビットとは異なる第２の付加ビットを書き込む、ことを特徴とする。【選択図】図２
2011243230.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリと、
データ群の単位で前記フラッシュメモリへアクセスするメモリ制御回路と
を備えた半導体装置であって、
前記データ群は、
データと前記データに関連づけられた付加情報である付加ビットデータとの組を複数備え、
前記フラッシュメモリは、
前記データを複数格納するデータ領域と
前記付加ビットデータを複数格納する付加ビット領域と
を備え、
前記メモリ制御回路は、
前記フラッシュメモリへの前記データ群の書き込み時は、
前記データが前記データ群の識別情報である第１のデータの場合、前記第１のデータに関連付けられた第１の付加ビットデータを前記付加ビット領域に書き込み、
前記データが前記データ群の識別情報でない第２のデータの場合、前記第２のデータに関連付けられ前記第１の付加ビットデータとは異なる第２の付加ビットデータを前記付加ビット領域に書き込む
ことを特徴とする半導体装置。
【請求項２】
前記メモリ制御回路は、
前記データ群の書き込み時、
アドレスを昇順または降順のいずれか一方の第１の方向に、前記フラッシュメモリのアドレスを変えて、前記付加ビット領域の各アドレスに格納された値を読み出し、
読み出した値が、前記第１の付加ビットデータの値となった第１のアドレスを検出し、
前記第１のアドレスから見て、前記第１の方向とは逆の第２の方向に変えたアドレスを基点に前記データ群を書き込む
ことを特徴とする請求項１に記載の半導体装置。
【請求項３】
前記メモリ制御回路は、
前記データ群の書き込み時、
前記データ群を前記組単位で前記フラッシュメモリに書き込み、１つの組の書き込みごとに前記アドレスを前記第２の方向に変えて書き込む
こと特徴とする請求項２に記載の半導体装置。
【請求項４】
前記メモリ制御回路は、
前記データ群の書き込み時、
前記第１のデータと前記第１の付加ビットデータとの組を前記データ群の書き込みの最後に行う
ことを特徴とする請求項３に記載の半導体装置。
【請求項５】
前記メモリ制御回路は、
前記データ群の書き込み時、
前記組のデータを書き込んだ後、
前記組の付加ビットデータを書き込む
ことを特徴とする請求項３または４のいずれか一に記載の半導体装置。
【請求項６】
前記メモリ制御回路は、
前記データ群の読み出し時、
アドレスを前記第１の方向または前記第２の方向のいずれか一方の方向に、前記フラッシュメモリのアドレスを変えて、前記付加ビット領域の各アドレスに格納された値を読み出し、
読み出した値が第１の値と同じ値であるアドレスに格納された前記付加ビットデータに関連付けられた前記第１のデータを抽出し、
抽出された第１のデータが読み出すべき識別情報であるデータ群を読み出す
ことを特徴とする請求項１乃至５のいずれか一に記載の半導体装置。
【請求項７】
前記第１の付加ビットデータは、前記フラッシュメモリの消去状態を示す値と逆の値である第１の値である
ことを特徴とする請求項１乃至６のいずれか一に記載の半導体装置。
【請求項８】
前記第１の値は０である
ことを特徴とする請求項６または７のいずれか一に記載の半導体装置。
【請求項９】
前記第２の付加ビットデータは１である
ことを特徴とする請求項１乃至８のいずれか一に記載の半導体装置。
【請求項１０】
前記データが格納された前記データ領域のアドレスと
前記付加ビットデータが格納された前記付加ビット領域のアドレスと
が同一である場合、
前記メモリ制御回路は、前記データと前記付加ビットデータとを関連付ける
ことを特徴とする請求項１乃至９のいずれか一に記載の半導体装置。
【請求項１１】
前記データが格納された前記データ領域のアドレスの一部が
前記付加ビットデータが格納された付加ビット領域のアドレスの一部と同一である場合、
前記メモリ制御回路は、前記データと前記付加ビットデータとを関連付ける
ことを特徴とする請求項１乃至９のいずれか一に記載の半導体装置。
【請求項１２】
前記付加ビットデータのビット長は、１ビットである
ことを特徴とする請求項１乃至１１のいずれか一に記載の半導体装置。
【請求項１３】
前記フラッシュメモリの付加ビット領域の１アドレスに対応付けられたビット幅が１ビットである
ことを特徴とする請求項１乃至１１のいずれか一に記載の半導体装置。
【請求項１４】
前記第１のデータと前記第１の付加ビットデータとの組と
前記第２のデータと前記第２の付加ビットデータとの組とは、
前記データ領域および前記付加ビット領域の互いに異なるアドレスに格納される
ことを特徴とする請求項１に記載の半導体装置。
【請求項１５】
前記半導体装置は、さらに中央演算装置を備え、
前記メモリ制御回路は、前記中央演算装置の命令に従って、前記フラッシュメモリへのアクセスを実行する
ことを特徴とする請求項１乃至１２のいずれか一に記載の半導体装置。
【請求項１６】
フラッシュメモリと、
中央演算装置と、
前記中央演算装置の命令に従って、データ群の単位で前記フラッシュメモリへアクセスするメモリ制御回路と
を備えるマイクロコンピュータであって、
前記データ群は、
データと前記データに関連づけられた付加情報である付加ビットデータとの組を複数備え、
前記フラッシュメモリは、
前記データを複数格納するデータ領域と
前記付加ビットデータを複数格納する付加ビット領域と
を備え、
前記メモリ制御回路は、
前記フラッシュメモリへの前記データ群の書き込み時は、
前記データが前記データ群の識別情報である第１のデータの場合、前記第１のデータに関連付けられた第１の付加ビットデータを前記付加ビット領域に書き込み、
前記データが前記データ群の識別情報でない第２のデータの場合、前記第２のデータに関連付けられ前記第１の付加ビットデータとは異なる第２の付加ビットデータを前記付加ビット領域に書き込む
ことを特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリ、メモリ制御回路、マイクロコンピュータおよびメモリ制御方法に関し、特に、付加ビットを用いてデータの書き込みおよび読み出しを実行するフラッシュメモリ、メモリ制御回路、マイクロコンピュータおよびメモリ制御方法に関する。
【背景技術】
【０００２】
近年、フラッシュメモリとＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）の両方の不揮発性メモリを備える半導体装置が使用されている。同じ不揮発性メモリであってもフラッシュメモリとＥＥＰＲＯＭとでは、データの消去単位、書き換え回数、回路面積等、その特徴が異なる。
【０００３】
フラッシュメモリやＥＥＰＲＯＭにデータの書き込みを行うためには、フラッシュメモリやＥＥＰＲＯＭを構成する記憶素子であるメモリセルに記憶されているデータを消去してからでないと新しいデータの書き込みを行うことができないが、この消去を行う単位が、フラッシュメモリとＥＥＰＲＯＭとで異なる。フラッシュメモリは、ブロック単位での消去となるが、ＥＥＰＲＯＭはワード線とビット線とで選択可能な単位での消去となる。（以下、この単位を最小書き込み単位という。）このため、ブロック単位での消去に制約されるフラッシュメモリは、ＥＥＰＲＯＭに対しその使い方に制限を受ける。
【０００４】
また、フラッシュメモリとＥＥＰＲＯＭとでは、その書き換え（消去）回数も異なる。例えば、マイコンに搭載されるメモリでは、フラッシュメモリが１００〜１０００回程度の書き換え回数が保証されるのに対し、ＥＥＰＲＯＭは１万〜１０万回程度の書き換え回数が保証される。
【０００５】
このように消去単位や書き換え（消去）回数の観点からみると、ＥＥＰＲＯＭはフラッシュメモリに比べ技術的に優位であると考えられるが、最小書き込み単位での消去を可能にするための回路構成や、フラッシュメモリに対して１０〜１０００倍の書き換え回数を保証するために消去の際に印加する高電界の影響に耐えることが可能なデバイス構造が必要となり、その結果、回路規模が増大する。回路規模の増大は、製造コストのアップにつながるため、このような観点では、逆に、フラッシュメモリはＥＥＰＲＯＭに比べ有利であるといえる。
【０００６】
そこで、フラッシュメモリとＥＥＰＲＯＭの両方の不揮発性メモリを半導体装置に搭載し、大量のデータを記憶する必要があるが書き換えを行う頻度が少ないデータに対してはフラッシュメモリを使用し、一方、記憶するデータ量は少量であるが頻繁に書き換えを行う必要があるデータに対してはＥＥＰＲＯＭを使用するようにして、フラッシュメモリとＥＥＰＲＯＭ双方の長所を活かすように、使い分けを行って使用されている。
【０００７】
しかし、このように異なる構造を有する複数種類のメモリの両方を搭載する半導体装置の製造プロセスは混載プロセスとなり、どちらか一方のみのメモリを搭載する半導体装置の製造プロセスに比べると、非常に多くのプロセス工程を追加しなくてはならず、製造コストが増大する要因となってしまう。
【０００８】
そこで、使用する不揮発性メモリはフラッシュメモリだけにし、その代わりにそのフラッシュメモリの一部をＥＥＰＲＯＭのように扱うことによって、混載プロセスを回避する技術が考え出されている。このようなフラッシュメモリをあたかもＥＥＰＲＯＭのように使用する技術は、一般的には、ＥＥＰＲＯＭエミュレーションと呼ばれている。
【０００９】
ＥＥＰＲＯＭエミュレーションは、フラッシュメモリ内の記憶領域において、まだ使用されていない領域、すなわち、データの書き込みが行われていない空き（ブランク）領域を最大限活用し、全ての領域が使用されてからブロック単位での消去を行うことで、データ更新時に付属する消去の回数を減らし、その結果、見かけ上の書き換え回数をＥＥＰＲＯＭのように増加させる技術である。
【００１０】
図１１に、（ａ）ＥＥＰＲＯＭに記憶されたデータＡをデータＡ’に書き換える（更新する）場合と、（ｂ）フラッシュメモリに記憶されたデータＡをＥＥＰＲＯＭエミュレーションを使用してデータＡ’に書き換える（更新する）場合を示す。
【００１１】
データＡをデータＡ’に書き換える場合、通常はデータＡをデータＡ’に上書すればよい。しかしながら、フラッシュメモリやＥＥＰＲＯＭにおいては、消去してからでないと書き込みができない構成であるため、具体的には、ブロック単位或いは最小書き込み単位に存在する全てのメモリセルの浮遊ゲートから電荷を引き抜いた（消去した）状態にし、その後、書き込みデータに基づいて、任意のメモリセルの浮遊ゲートに電荷を注入する（書き込む）ことで、書き換えを行う。
【００１２】
ＥＥＰＲＯＭの消去単位は、最小書き込み単位であるため、図１１（ａ）のように書き換え対象のデータＡを消去して、その場所にデータＡ’を書き込むことで、データＡのデータＡ’へのＥＥＰＲＯＭおける書き換えが完了する。
【００１３】
一方、フラッシュメモリの書き換え単位は、ブロック単位であるため、図１１（ｂ）のようにデータＡ、Ｂ、Ｃが１ブロックの中に書き込まれている場合には、データＡの上書きするためにブロック全体を消去してしまうと、データＢ、Ｃも同時に消去してしまうことになる。そこで、データＢ、Ｃを別領域に一時的に退避し、ブロック単位での消去後に、データＡ’、Ｂ、Ｃを書き込む方法を取ることによって、フラッシュメモリにおけるデータＡのデータＡ’への書き換えを完了する。
【００１４】
しかし、ＥＥＰＲＯＭエミュレーションでは、図１１（ｂ）のように、ブロック内にデータＡ’を書き込むことができる未使用（ブランク）領域があれば、データＡ’をそのブランク領域に書き込む。そして、データＡとＡ’が併存することになるので、所定の方法で、データＡは既に無効となったデータであるとしてデータＡの無効化を行う。
【００１５】
このように、ＥＥＰＲＯＭエミュレーションを使用すれば、新しいデータを書き込むためのブランク領域さえあれば、ブロック単位での消去を不要とすることができ、また、ブロック消去に伴う他のデータ（図１２ではデータＢ、Ｃに相当）の一時的な退避および再度の書き込みの作業を回避することができる。すなわち、書き換え（消去）回数を削減できることから、見かけ上の書き換え回数をＥＥＰＲＯＭのように増加することができ、また、ＥＥＰＲＯＭのように他のデータに対する保護を考慮しなくてもデータの書き換えを可能にする。
【００１６】
次に、図１２〜図１７を用いて、ＥＥＰＲＯＭエミュレーションについて詳細に説明する。
【００１７】
図１２に、従来のＥＥＰＲＯＭエミュレーションの際のデータ書き込み単位（以下、エミュレーション書き込み単位という）を示す。
【００１８】
エミュレーション書き込み単位に含まれるデータは、ＤＡＴＡ_０〜ＤＡＴＡ_ｎのｎ＋１個のＤＡＴＡと、そのｎ＋１個のＤＡＴＡグループの名称であるデータ番号（ＩＤ）から構成される（つまり、ＩＤは複数のＤＡＴＡと関連付けが行われたデータである）。但し、ＩＤの値は、消去状態、つまり、未使用領域から読み出される値以外の値でなければならない。また、各データ群に含まれるＤＡＴＡの数（ｎ）は、ＩＤ毎に同じ（共通）でなければならず、異なった値であってはならない。例えば、ＩＤ＝０の識別番号が付されているデータ群０に含まれるＤＡＴＡ数が５個であれば、ＩＤ＝１の識別番号が付されているデータ群１に含まれるＤＡＴＡ数も５でなければならない。また、このエミュレーション書き込み単位を構成する複数のデータをまとめてデータ群と呼ぶ。
【００１９】
図１３に、従来のＥＥＰＲＯＭエミュレーション時の書き込み処理を示す動作フローチャートを示す。また、図１４，図１５，図１６に、データ群０〜データ群２が格納されたフラッシュメモリを示す。図１４，図１５，図１６のフラッシュメモリは、１ブロックから構成（つまり、消去単位は、フラッシュメモリ全体）され、００００Ｈ番地〜ＦＦＦＦＨ番地の最小書き込み単位領域（番地）を持ち、それぞれの番地が格納できるデータの大きさは、８ビット（００Ｈ〜ＦＦＨ）である。また、００００Ｈ番地〜００１１Ｈ番地にはデータ群０〜データ群２が書き込まれており、書き込まれているデータ群０〜データ群２の各々は、ＤＡＴＡ＿０〜ＤＡＴＡ＿４とＩＤ（ＩＤ＝０〜２）で構成されている。なお、図１７のフラッシュメモリの消去状態をＦＦＨであるとすると、前述の通り、ＩＤは、消去状態のデータ領域から読み出される値とは異なる値としなければならないため、ＩＤの取り得る値は、００Ｈ〜ＦＥＨである。また、図１２に示すように、ＤＡＴＡやＩＤが格納される場所をデータ領域とする。
【００２０】
図１３および図１４，図１５，図１６を用いて、ＥＥＰＲＯＭエミュレーションの時の書き込み処理について、データ群１を書き込む処理具体例と共に説明する。なお、図１３に示すように、書き込み処理においては、新しいデータを書き込む領域を特定するためのブランクサーチの工程（Ｓ１３−１〜Ｓ１３−４）と、特定したブランク領域にＤＡＴＡ＿０〜ＩＤまで順次書き込む工程（Ｓ１３−５〜Ｓ１３−６）の２段階の処理で行われる。
【００２１】
（Ｓ１３−１）フラッシュメモリの最終番地であるＦＦＦＦＨ番地からスタートし、ＦＦＦＦＨ番地→ＦＦＦＥＨ番地→ＦＦＦＤＨ番地→・・・→０００１Ｈ番地→００００Ｈ番地の検索方向で、データの読み出しを行う。すなわち、図１２におけるフラッシュメモリのブランク領域側から読み出し処理を行っていく。
【００２２】
（Ｓ１３−２）読み出した値がＦＦＨ以外の値（ＦＦＨは消去状態（未使用状態）を示す値）であるか否かを判定する。ＦＦＨ以外の値が読み出された場合には、Ｓ１３−４に遷移する。一方、ＦＦＨが読み出された場合には、Ｓ１３−３に遷移する。
【００２３】
（Ｓ１３−３）読み出し先の番地を＋１ディクリメント（検索方向は最終番地から開始番地の方向なので、読み出し先の番地は、−１番地分加算する。以下、同様。）して、再度読み出しを行う。図１４では、ＦＦＦＦＨ番地〜００１２Ｈ番地は、未使用（ブランク）領域なので、００１２Ｈ番地までは、Ｓ１３−２とＳ１３−３の処理を繰り返すことになる。
【００２４】
（Ｓ１３−４）Ｓ１３−２において、ＦＦＨ以外の値が読み出された場合には、当該ＦＦＨ以外の値が読み出された番地の直前に読み出した番地をブランク領域の先頭番地（書き込みを開始する番地）であると特定する。ＦＦＨ以外のデータが読み出されたということは、使用領域と未使用（ブランク）領域の境界を特定することができるので、最後にＦＦＨが読み出された番地がブランク領域の先頭番地であると判断することができる。
【００２５】
図１４では、００１１Ｈ番地においてＩＤ＝２（ＦＦＨ以外の値）が読み出されるので、００１１Ｈ番地が使用領域の最終番地（境界）であると判断され、直前に読み出しを行った番地である００１２Ｈ番地がブランク領域の先頭番地であると判断できる。なお、ＩＤが取り得る値は００Ｈ〜ＦＥＨであると前述したが、もしＩＤの値がＦＦＨであるすれば、ブランク領域との区別がつかなくなってしまうため、ＩＤの値としてのＦＦＨを禁止したものである。
【００２６】
（Ｓ１３−５）ＤＡＴＡ（ＤＡＴＡ＿０〜ＤＡＴＡ＿ｎ）の書き込みを行う。書き込みは、ＤＡＴＡ＿０→ＤＡＴＡ＿１→・・・→ＤＡＴＡ＿ｎの順で行う。図１５では、データ群０のＤＡＴＡ＿０〜ＤＡＴＡ＿４の書き込みが行われている。
【００２７】
（Ｓ１３−６）ＩＤの書き込みを行う。ＩＤの書き込みは、エミュレーション書き込み単位の最後に行われるで、ＩＤの書き込み終了をもって、複数のデータを有するデータ群の一連の書き込み処理は完了する。
【００２８】
図１６では、データ群０のＩＤ＝１の書き込みが終了し、ＤＡＴＡ＿０〜ＤＡＴＡ＿４およびＩＤ＝１から構成されるデータ群１の書き込みが完了している。
【００２９】
従来のＥＥＰＲＯＭエミュレーション時の書き込み処理は、このようなステップをもって行われ、その後新規のデータ群を書き込む際には、同様のステップで追記書き込み処理が行われる。図１６では、００１８Ｈ番地から新規データ群の書き込みが行われる。
【００３０】
また、図１４では、既に書き込まれているデータ群０〜データ群２が存在していたが、書き込まれているデータ群が全くない場合には、データの書き込みは００００Ｈ番地から行われる。また、ブランクサーチの結果、これから書き込もうとするデータ群に含まれる全てのデータを書き込むブランク領域がない場合には、消去が必要となり、その場合には前述した通り、必要なデータを保護しつつ消去を行う必要がある。
【００３１】
続いて、従来のＥＥＰＲＯＭエミュレーション時の読み出し動作について説明する。
【００３２】
図１７に、従来の読み出し処理を示す動作フローチャートを示す。図１７に示すように、読み出し処理においては、読み出し対象のデータ群に含まれる複数のＤＡＴＡに関連付けされたＩＤを検索することで読み出し対象データ群を特定するＩＤサーチの工程（Ｓ１７−１〜Ｓ１７−６）と、特定した読み出し対象データ群をフラッシュメモリから読み出す工程（Ｓ１７−７）の２段階の処理で行われる。
【００３３】
また、具体的な事例として、図１６のフラッシュメモリからデータ群０および１を読み出す事例をあげて説明する。但し、図１６のフラッシュメモリは、２度目のデータ群１の書き込み（データの更新）が行われているため、最後に書き込まれたデータ群１（００１２Ｈ番地〜００１７Ｈ番地）が有効なデータ群であり、以前に書き込まれたデータ群１（０００６Ｈ番地〜０００ＢＨ番地）は、無効なデータ群として取り扱われる。
【００３４】
（Ｓ１７−１）フラッシュメモリの最終番地であるＦＦＦＦＨ番地からスタートし、ＦＦＦＦＨ番地→ＦＦＦＥＨ番地→ＦＦＦＤＨ番地→・・・→０００１Ｈ番地→００００Ｈ
番地の検索方向で、データの読み出しを行う。すなわち、図１６のフラッシュメモリのブランク領域側から読み出し処理を行っていく。これは、前述した書き込み処理のＳ１３−１と同じである。
【００３５】
（Ｓ１７−２）読み出した値がＦＦＨ（消去状態を示す値）以外の値であるか否かを判定する。ＦＦＨ以外の値が読み出された場合には、Ｓ１７−４に遷移し、一方、ＦＦＨが読み出された場合には、Ｓ１７−３に遷移する。
【００３６】
（Ｓ１７−３）読み出し先の番地を＋１ディクリメントして、再度読み出しを行う。図１６では、ＦＦＦＦＨ番地〜００１８Ｈ番地は、未使用（ブランク）領域なので、００１８Ｈ番地までは、Ｓ１７−２とＳ１７−３の処理を繰り返すことになる。
【００３７】
（Ｓ１７−４）Ｓ１７−２において、ＦＦＨ以外の値が読み出された場合には、その読み出した値が、読み出し対象データ群のＤＡＴＡに関連付けされたＩＤ（目的のＩＤ）であるか否かを判定する。
【００３８】
図１６において、読み出し対象のデータ群をデータ群０とすると、読み出した値がＩＤ＝０であれば、目的のＩＤであると判断できる。Ｓ１７−２で、ＦＦＨ以外の値が検出されるのは、００１７Ｈ番地であり、００１７Ｈ番地に格納されている値は、ＩＤ＝１である。従って、読み出し対象のデータ群はデータ群０であるため、読み出した値は、目的のＩＤではないと判断できる。一方、読み出し対象データ群をデータ群１とすると、００１７Ｈ番地に格納されているデータはＩＤ＝１であるため、読み出した値は、目的のＩＤであると判断できる。
【００３９】
（Ｓ１７−５）読み出した値が目的のＩＤでない場合には、読み出し先の番地から＋６ディクリメントした番地に対し、再度読み出し処理を行う。そして再度読み出した値に対して、Ｓ１７−４での判定が行われる。
【００４０】
図１６において、読み出し対象のデータ群がデータ群０である場合には、００１７Ｈ番地から＋６ディクリメントした番地は００１１Ｈ番地となり、この００１１番地から読み出した値はＩＤ＝２であるため、目的のＩＤ（ＩＤ＝０）ではない。そのため、再び読み出し先の番地を＋６ディクリメントする。
【００４１】
（Ｓ１７−６）Ｓ１７−４で、読み出した値が目的のＩＤであった場合には、当該目的のＩＤを読み出した番地から＋５ディクリメントした番地を、読み出し対象データ群の先頭番地であると特定する。
【００４２】
図１６において、データ群０を読み出す場合には、Ｓ１７−４で、０００５Ｈ番地に目的のＩＤが格納されていると判断できるので、０００５Ｈ番地から＋５ディクリメントした００００Ｈ番地を、読み出し対象データ群の先頭番地であると特定する。また、データ群１を読み出す場合には、Ｓ１７−４で、００１７Ｈ番地に目的のＩＤが格納されていると判断できるので、００１７Ｈ番地から＋５ディクリメントした００１２Ｈ番地を、読み出し対象データ群の先頭番地であると特定する。
【００４３】
（Ｓ１７−７）Ｓ１７−６で特定した読み出し対象データ群の先頭番地からＤＡＴＡ＿０を読み出し、順に番地を＋１インクリメントしながらＤＡＴＡ＿１〜ＤＡＴＡ＿ｎを読み出す。図１６において、００００Ｈ番地〜０００４Ｈ番地よりＤＡＴＡ＿０〜ＤＡＴＡ＿４を読み出すことによって、データ群０の読み出しを完了する。また、００１２Ｈ番地〜００１６Ｈ番地よりＤＡＴＡ＿０〜ＤＡＴＡ＿４を読み出すことによって、データ群１の読み出しを完了する。
【００４４】
図１６のフラッシュメモリでは、データ群１は更新されていて、フラッシュメモリ内にデータ群１に関するデータが２箇所に格納されているが、有効なデータ群は最後に書かれた方、すなわち、ブランク領域側に近い方である。Ｓ１７−１〜Ｓ１７−６で説明した方式では、ブランク領域側からＩＤの検索を行い、読み出した値が目的のＩＤと同じとなった時点で、読み出し対象データ群の検索を終了するため、フラッシュメモリ内に同じＩＤを有する複数のデータ群が格納されていたとしても、適切に、一番新しいデータ群、つまり、有効なデータ群を読み出すことができる。
【００４５】
図１６における読み出し対象データ群をデータ群１とした読み出し処理の例においても、無効なデータ群１（０００６Ｈ番地〜０００ＢＨ番地）を選択せずに、有効なデータ群１（００１２Ｈ番地〜００１７Ｈ番地）を選択している。
【００４６】
なお、図１３および図１７の書き込み処理フローおよび読み出し処理フローにおいて、ブランクサーチおよびＩＤサーチの方向をＦＦＦＦＨ番地（最終番地）から行うと説明したが、逆に００００Ｈ番地（開始番地）から行ってもよい。但し、その場合には、書き込み処理フローにおいては、最後にＦＦＨ以外の値が読み出された番地に＋１インクリメントした番地が未使用（ブランク）領域の先頭番地となり、また、読み出し処理フローにおいては、読み出し先の番地を＋６インクリメントすることでＩＤだけを読み出し、読み出した値がＦＦＨになった時点でその直前に読み出したＩＤから順に遡って目的のＩＤであるかを探索する方法で、目的のＩＤの特定をすることができる。
【００４７】
また、このようなＥＥＰＲＯＭエミュレーションに関する技術が非特許文献１に記載されている。非特許文献１では、エミュレーション書き込み単位は、データ番号、データ１、デリミタ、データ２から構成されており、データ番号としてＦＦＨ（消去状態）を禁止している。データ番号はフラッシュメモリに４バイト毎に格納される。ブロックの先頭から４バイト毎にインクリメントしながらデータ番号を読み出すことで、最新のデータの検索を行い、同一番号を持つデータ番号が複数見つかった場合には、データの終端に近いデータを最新のデータとして取り扱うことが記載されている。
【先行技術文献】
【非特許文献】
【００４８】
【非特許文献１】「アプリケーションノート Ｕ１７０５７ＪＪ３Ｖ０ＡＮ００」、第３版、ＮＥＣエレクトロニクス株式会社、２００４年１１月、ｐ．２５−２７
【発明の概要】
【発明が解決しようとする課題】
【００４９】
前述のように、ＥＥＰＲＯＭエミュレーションを使用して書き込まれたデータ群の読み出し処理は、エミュレーション書き込み単位（データ群）毎に関連付けされたデータ番号（ＩＤ）の検索を行い、検索したＩＤが読み出し対象データのＩＤであるか否かを判断することで行われる。このとき、フラッシュメモリに書き込まれたデータのどこにＩＤが格納されているかがわからないと、ＩＤの検索をすることができない。そのため、従来では、エミュレーション書き込み単位（データ群）に含まれるデータの個数を各エミュレーション書き込み単位（データ群）で共通とすることにより、フラッシュメモリの各番地にＩＤを規則的に格納することで、ＩＤの検索を可能としている。図１５では、データ群０〜データ群２において、エミュレーション書き込み単位（データ群）を、ＩＤ、ＤＡＴＡ＿０〜ＤＡＴＡ＿４からなる６個のデータから構成されるものとし、フラッシュメモリにＩＤを６番地ごとに規則的に配置して書き込む構成としている。
【００５０】
しかしながら、エミュレーション書き込み単位を構成するデータ数がエミュレーション書き込み単位（データ群）で共通（固定値）にしなくてはならないのは、ユーザの観点からみると、製品設計に制限がかかることとなり、大きなディメリットになってしまう。
【００５１】
なお、ＩＤとして使用する値を、ＤＡＴＡ＿０〜ＤＡＴＡ＿ｎの値としては使わないと禁止するならば、エミュレーション書き込み単位（データ群）を構成するデータ数は、各エミュレーション書き込み単位（データ群）で共通（固定値）にしなくても、ＩＤの検索を行うことが可能となる。但し、この場合には、ユーザが使用するＤＡＴＡ＿０〜ＤＡＴＡ＿ｎそのものの値に制限を課すことになり、これはユーザによって非常に都合が悪く、実用的ではない。
【課題を解決するための手段】
【００５２】
本発明のフラッシュメモリは、ｌ（ｌ＞０）ビットの第１および第２のデータを格納するデータ領域と、前記第１のデータを識別するためのｍビットの第１の付加ビットおよび前記第２のデータを識別するためのｍ（ｍ＞０）ビットの第２の付加ビットを格納する付加ビット領域と、を備え、前記第１の付加ビットは、前記第２の付加ビットとは異なる値を有する、ことを特徴とする。
【００５３】
また、本発明のメモリ制御回路は、第１のデータおよび第２のデータから構成されるデータ単位でフラッシュメモリへのアクセスを行うメモリ制御回路であって、前記メモリ制御回路は、前記第１のデータを前記フラッシュメモリ書き込むときには、前記第１のデータを識別するための第１の付加ビットを書き込み、前記第２のデータを前記フラッシュメモリに書き込むときには、前記第２のデータを識別するための前記第１の付加ビットとは異なる第２の付加ビットを書き込む、ことを特徴とする。
【００５４】
また、本発明のマイクロコンピュータは、フラッシュメモリと、中央演算装置と、第１のデータおよび第２のデータから構成されるデータ単位で、前記中央演算装置の命令に従って前記フラッシュメモリへのアクセスを行うメモリ制御回路と、を備えるマイクロコンピュータであって、前記メモリ制御回路は、前記第１のデータを前記フラッシュメモリ書き込むときには、前記第１のデータを識別するための第１の付加ビットを書き込み、前記第２のデータを前記フラッシュメモリに書き込むときには、前記第２のデータを識別するための前記第１の付加ビットとは異なる第２の付加ビットを書き込む、ことを特徴とする。
【００５５】
また、本発明のメモリ制御方法は、第１のデータおよび前記第１のデータから構成されるデータ単位でフラッシュメモリへのアクセスを行うメモリ制御方法であって、前記第１のデータおよび前記第１のデータを識別するための第１の付加ビットを前記フラッシュメモリに書き込む第１の工程と、前記第２のデータおよび前記第２のデータを識別するための前記第１の付加ビットとは異なる第２の付加ビットを前記フラッシュメモリに書き込む第２の工程と、を備えることを特徴とする。
【発明の効果】
【００５６】
本発明によれば、エミュレーション書き込み単位のデータ数、すなわち、ＤＡＴＡ_０〜ＤＡＴＡ_ｎのｎの値は、各データ群で共通にしなくてもよく、データ群毎に自由に設定することが可能となり、ユーザの設計自由度が向上する。
【図面の簡単な説明】
【００５７】
【図１】本発明の実施の形態１に係るマイクロコンピュータの構成を示すブロック図である。
【図２】本発明の実施の形態１のマイクロコンピュータが備えるフラッシュメモリの構成を示す概念図である。
【図３】本発明の実施の形態１に係る書き込みデータ（エミュレーション書き込み単 位）のデータ構造を示す図である。
【図４】本発明の実施の形態１に係る書き込み処理フローを示す動作フローチャートである。
【図５】本発明の実施の形態１に係る書き込み処理を示す図（フラッシュメモリ）である。
【図６】本発明の実施の形態１に係る書き込み処理を示す図（フラッシュメモリ）である。
【図７】本発明の実施の形態１に係るフラッシュメモリの番地の割り当ての変形例を示す図である。
【図８】本発明の実施の形態１に係るフラッシュメモリの番地の割り当ての変形例を示す図である。
【図９】本発明の実施の形態１に係る読み出し処理フローを示す動作フローチャートである。
【図１０】本発明の実施の形態２に係るデータ書き込み順序を示す図である。
【図１１】従来のＥＥＰＲＯＭおよびフラッシュメモリ（ＥＥＰＲＯＭエミュレーション使用）に対するデータの書き換え（更新）を示す図である。
【図１２】従来の書き込みデータ（エミュレション書き込み単位）のデータ構造を示す図である。
【図１３】従来の書き込み処理フローを示す動作フローチャートである。
【図１４】従来の書き込み処理を示す図（フラッシュメモリ）である。
【図１５】従来の書き込み処理を示す図（フラッシュメモリ）である。
【図１６】従来の書き込み処理を示す図（フラッシュメモリ）である。
【図１７】従来の読み出し処理フローを示す動作フローチャートである。
【発明を実施するための形態】
【００５８】
以下、本発明の好ましい実施例について、図面を参照して詳細に説明する。
【００５９】
実施の形態１
図１は、実施の形態１に係るマイクロコンピュータの構成を示すブロック図である。マイクロコンピュータ１は、中央演算装置（ＣＰＵ）２、メモリ制御回路３およびフラッシュメモリ４を備えている。ＣＰＵ２は、バス５、６を介して、それぞれメモリ制御回路３およびフラッシュメモリ４に接続されている。ＣＰＵ２は、メモリ制御回路３に対し、書き込み／読み出し命令、書き込み／読み出し先のアドレス（番地）および書き込みデータを出力する。また、フラッシュメモリ４から読み出されたデータを取得する。メモリ制御回路３は、フラッシュメモリ４と配線７を介して接続されており、フラッシュメモリ対し、書き込み／読み出しの制御信号（ライト／リードモードの制御信号）、書き込み／読み出し先のアドレス（番地）および書き込みデータを出力する。フラッシュメモリ４は、メモリ制御回路３からの制御信号等に基づいて、書き込み／読み出しの動作を行い、読み出しの場合には、読み出したデータをＣＰＵに出力する。
【００６０】
図２は、実施の形態１に係るマイクロコンピュータ１に搭載されたフラッシュメモリ４の構成を示す概念図である。図２に示すフラッシュメモリ４は、１つのブロックから構成（つまり、消去単位はフラッシュメモリ４全体）され、００００Ｈ番地〜ＦＦＦＦＨ番地の最小書き込み単位領域（番地）を持ち、それぞれの番地が格納できるデータの大きさは９ビット長（０００Ｈ〜１ＦＦＨ）である。すなわち、図１７等の従来のフラッシュメモリに対し、実施の形態１に係るフラッシュメモリ４は、それぞれの番地に対してメモリセルを１ビット追加した構成になっている。
【００６１】
９ビット長のデータは、本来取り扱う８ビット長のデータに１ビット長の付加ビット（後述する）を加えて構成される。本説明においては、本来取り扱うデータを８ビット長のデータとしているが、８ビット長に関わらず、ｌビット（但し、ｌ＞０）であればよく、また、付加ビットに関しても、１ビット長に関わらず、ｍビット（但し、ｍ＞０）であればよい。但し、フラッシュメモリ４に対し、ｌビット長のデータとｍビット長の付加ビットを同時に書き込み／読み出し処理を行う場合には、配線７は、少なくともｌ＋ｍビット幅を有する必要があり、フラッシュメモリ４についても、ｌ＋ｍビット幅の信号が入力できる端子が必要になる。なお、８ビット長のデータが格納される領域をデータ領域とし、また付加ビットが格納される領域を付加ビット領域とする。
【００６２】
また、フラッシュメモリ４の００００Ｈ番地〜０００ＥＨ番地には、データ群０〜データ群２が既に書き込まれているものとし、未使用領域の読み出し値、すなわち、消去状態の読み出し値を１ＦＦＨ（１Ｈの付加ビット＋ＦＦＨのデータ）とする。
【００６３】
図３（ａ）〜（ｄ）に、実施の形態１に係るエミュレーション書き込み単位（データ群）の一般的なデータ構造および図２のフラッシュメモリ４に書き込まれたデータ群０〜データ群２を示す。
【００６４】
図３（ａ）には、エミュレーション書き込み単位（データ群）の一般的なデータ構造を示す。従来と同様、エミュレーション書き込み単位（データ群）８は、ＤＡＴＡ＿０〜ＤＡＴＡ＿ｎのｎ個のＤＡＴＡ９と、そのｎ＋１個のＤＡＴＡグループの名称であるデータ番号（ＩＤ）１０から構成される（つまり、ＩＤは複数のＤＡＴＡと関連付けが行われたデータである）。
【００６５】
しかし、従来と比較して、２点の相違がある。１点目は、データ群を構成する複数のデータのそれぞれに対して、付加ビットと呼ばれる１ビット長のデータが付加されることである。図３（ａ）に示す通り、ＤＡＴＡ＿０〜ＤＡＴＡ＿ｎには、１Ｈの付加ビット１０が付加され、ＩＤには、０Ｈの付加ビット１１が付加される。これらの付加ビットは、ＤＡＴＡ＿０〜ＤＡＴＡ＿ｎやＩＤの識別を可能とするために、付加されるものである。
【００６６】
２点目は、ｎの値は、各データ群で共通の値を取らず、自由に設定できる点である。（ｂ）〜（ｄ）に示すデータ群０〜データ群２のデータ構造が示されているが、それぞれのデータ群は、データ群０が５個、データ群１が３個、データ群２が７個のデータで構成されている。なお、ｎ＝１、つまり、ＤＡＴＡ＿０とＩＤから構成されるデータ群であってもよい。
【００６７】
次に、本発明の実施形態１に係るＥＥＰＲＯＭエミュレーション時の書き込み動作について説明する。
【００６８】
図４に、実施の形態１に係る書き込み処理を示す動作フローチャートを示す。
【００６９】
図１、図２および４を用いて、図４の書き込み処理フローに従い、図１に示すマイクロコンピュータ１が、図２に示すフラッシュメモリ４の未使用（ブランク）領域に、データ群１（図３（ｂ）参照）を書き込む処理についての具体例と共に説明する。なお、図４に示すように、書き込み処理は、書き込み先を特定するためのブランクサーチの工程（Ｓ４−１〜Ｓ４−４）と、特定したブランク領域に１Ｈ＋ＤＡＴＡ＿０〜１Ｈ＋ＤＡＴＡ＿ｎ、０Ｈ+ＩＤを順次書き込む工程（Ｓ４−５〜Ｓ４−６）の２段階の処理で行われる。
【００７０】
（Ｓ４−１）ＣＰＵ２は、フラッシュメモリ４の最終番地であるＦＦＦＦＨ番地からスタートし、ＦＦＦＦＨ番地→ＦＦＦＥＨ番地→ＦＦＦＤＨ番地→・・・→０００１Ｈ番地→００００Ｈ番地の検索方向で、付加ビットの読み出しを行う。
【００７１】
具体的には、ＣＰＵ２は、メモリ制御回路３に対し、読み出し命令および読み出し先の番地（最初の読み出し先はＦＦＦＦＨ番地）を出力する。ＣＰＵ２の読み出し命令を受けたメモリ制御回路３は、フラッシュメモリ４に対し、読み出し先として指定された番地に格納されている９ビット長のデータの読み出し制御を行う。フラッシュメモリ４は、読み出した９ビット長のデータをＣＰＵ２に出力する。ＣＰＵ２は、フラッシュメモリ４から読み出した９ビット長のデータの中から付加ビットを判別し取得する。
【００７２】
（Ｓ４−２）ＣＰＵ２は、読み出した付加ビットが０Ｈであるか否かを判定する。０Ｈの付加ビットが読み出された場合には、Ｓ４−４に遷移する。一方、１Ｈの付加ビットが読み出された場合には、Ｓ４−３に遷移する。
【００７３】
（Ｓ４−３）ＣＰＵ２は、読み出し先の番地を＋１ディクリメント（検索方向は最終番地から開始番地の方向であるため、読み出し先の番地は、−１番地分加算する。以下、同様。）して、再度付加ビットの読み出しを行う。
【００７４】
図２では、ＦＦＦＦＨ番地〜０００ＦＨ番地まで未使用（ブランク）領域であり、付加ビット領域の読み出し値は、消去状態の１Ｈであるため、０００ＦＨ番地までは、Ｓ４−２とＳ４−３の処理を繰り返すことになる。
【００７５】
（Ｓ４−４）ＣＰＵ２は、Ｓ４−２において、０Ｈの付加ビットを読み出した場合には、当該０Ｈの付加ビットを読み出した番地の直前に読み出し処理を行った番地をブランク領域の先頭番地（書き込みを開始する番地）であると特定する。０Ｈの付加ビットが読み出されたということは、その番地から開始番地まではデータが書き込まれていることになり、当該番地は、使用領域と未使用（ブランク）領域の境界であると判断することができる。従って、最後に１Ｈの付加ビットが読み出された番地がブランク領域の先頭番地であると特定することができる。
【００７６】
図２では、０００ＥＨ番地において０Ｈの付加ビットが読み出されるので、０００ＥＨ番地が使用領域の最終番地（境界）であると判断され、直前に読み出し処理を行った番地である０００ＦＨ番地がブランク領域の先頭番地、つまり、これから新しいデータの書き込みを開始する番地であると特定できる。
【００７７】
（Ｓ４−５）ＣＰＵ２は、ＤＡＴＡ（ＤＡＴＡ＿０〜ＤＡＴＡ＿ｎ）および付加ビットの書き込みを行う。
【００７８】
具体的には、ＣＰＵ２は、Ｓ４−４において特定したブランク領域の先頭番地を書き込み先の番地として指定し、書き込みデータを１Ｈ＋ＤＡＴＡ＿０として、メモリ制御回路３に出力する。メモリ制御回路３は、フラッシュメモリ４の指定された番地に対し、１Ｈ＋ＤＡＴＡ＿０の書き込み制御を行う。続いて、ＣＰＵ２は、書き込み先の番地を＋１インクリメントし、当該番地を指定して、書き込みデータを１Ｈ＋ＤＡＴＡ＿１として、メモリ制御回路３に出力する。メモリ制御回路３は、フラッシュメモリ４の指定された番地に対し、１Ｈ＋ＤＡＴＡ＿１の書き込み制御を行う。同様に、１Ｈ＋ＤＡＴＡ＿２〜１Ｈ＋ＤＡＴＡ＿ｎまで、フラッシュメモリ４に対する書き込み処理を行う。図２のフラッシュメモリ４にデータ群１（ＤＡＴＡ＿０、ＤＡＴＡ＿１、ＩＤから構成）を書き込む処理では、０００ＦＨ番地に１Ｈ＋ＤＡＴＡ＿０を、００１０Ｈ番地に１Ｈ＋ＤＡＴＡ＿１をそれぞれ書き込む（図５）。
【００７９】
（Ｓ４−６）ＣＰＵ２は、メモリ制御回路３を介して、付加ビット（０Ｈ）およびＩＤの書き込みを行う。ＩＤに付加される付加ビットは０Ｈであるので、Ｓ４−５で最後に書き込みを行った番地に＋１インクリメントし、当該番地を指定して、０Ｈ＋ＩＤを書き込む。ＩＤの書き込みは、エミュレーション書き込み単位の最後に行われるで、ＩＤの書き込み終了をもって、エミュレーション書き込み単位での一連の書き込み処理は完了する。図６では、００１１Ｈ番地に０Ｈ＋ＩＤを書き込む。
【００８０】
本発明の実施の形態１のＥＥＰＲＯＭエミュレーション時の書き込み処理は、このようなステップを持って行われ、その後新規のデータ群の書き込みを行う際には、同様のステップを持って追記書き込みが行われる。図６では、００１２Ｈ番地から新規データの書き込み処理が行われる。
【００８１】
また、Ｓ４−１において、フラッシュメモリ４から付加ビットの読み出しを行う際に、同じ番地内のデータ領域に格納されている８ビット長のデータも同時に読み出しているが、付加ビットの１ビットのみを読み出す構成にしてもよい。その場合には、例えば、図７に示すように、付加ビットが格納される付加ビット領域とＤＡＴＡやＩＤが格納されるデータ領域のそれぞれに対し番地を割り当て（従って、フラッシュメモリ４に割り当てられる番地は、００００００００Ｈ番地〜ＦＦＦＦＦＦＦＦＨ番地となり、それぞれが最小書き込み単位となる）、ＣＰＵ２がメモリ制御回路３に対し、付加ビット領域に割り当てられた番地のみを指定する形式にする。具体的には、Ｓ４−１における読み出し先の番地は、ＦＦＦＦＦＦＦＥＨ番地→ＦＦＦＦＦＦＦＣＨ番地→ＦＦＦＦＦＦＦＡ番地→・・・→０００００００１Ｈ番地→００００００００Ｈ番地となる。
【００８２】
また、図８に示す通り、付加ビット領域を指定する０Ｈ番地とデータ領域を指定する１Ｈ番地をそれぞれ示す追加の番地を作成し、２つの番地を用いて、付加ビットのみを読み出せるようにしてもよい。
【００８３】
なお、従来と同様、既に書き込まれているデータ群がなければ、データの書き込みは、００００Ｈ番地からとなる。また、Ｓ４−１〜Ｓ４−４のブランクサーチの工程での説明では省いたが、ブランク領域があっても、これから書き込もうとするデータ群に含まれる全てのデータが書き込むだけのブランク領域が存在しない場合には、フラッシュメモリ４にブランク領域がないものと判断し、必要なデータ群（今回の書き込みに関係ないデータ群）を保護しつつ、フラッシュメモリ４全体の消去を行い、消去後のフラッシュメモリ４に必要なデータの書き戻し処理と新しいデータ群の書き込み処理をそれぞれ行う。
【００８４】
続いて、本発明の実施の形態１に係るＥＥＰＲＯＭエミュレーション時の読み出し動作について説明する。
【００８５】
図９に、実施の形態１に係る読み出し処理を示す動作フローチャートを示す。読み出し処理においては、０Ｈの付加ビットを検索し、検索により見つかった０Ｈの付加ビットと同じ番地に格納されているデータ領域のＩＤを読み出し、読み出したＩＤが読み出す対象のデータ群に含まれる複数のＤＡＴＡに関連付けられたＩＤか否かを判定することで、読み出し対象データを特定するＩＤサーチの工程（Ｓ９−１〜Ｓ９−５）と、特定した読み出し対象データを読み出す工程（Ｓ９−６）の２段階の処理で行われる。
【００８６】
また、具体例として、図６のフラッシュメモリ４からデータ群０および１を読み出す事例をあげて説明する。なお、図６のフラッシュメモリ４は、２度目のデータ群１の書き込み（データの更新）が行われているため、最後に書き込まれたデータ群１（０００ＦＨ番地〜００１１Ｈ番地）が有効なデータ群であり、以前に書き込まれたデータ群１（０００５Ｈ番地〜０００７Ｈ番地）は、無効なデータ群として取り扱われる。
【００８７】
（Ｓ９−１）ＣＰＵ２は、フラッシュメモリ４の最終番地であるＦＦＦＦＨ番地からスタートし、ＦＦＦＦＨ番地→ＦＦＦＥＨ番地→ＦＦＦＤＨ番地→・・・→０００１Ｈ番地→００００Ｈ番地の検索方向で、付加ビットの読み出しを行う。
【００８８】
具体的には、ＣＰＵ２は、メモリ制御回路３に対し、読み出し命令および読み出し先の番地（最初の読み出し先はＦＦＦＦＨ番地）を出力する。ＣＰＵ２の読み出し命令を受けたメモリ制御回路３は、フラッシュメモリ４に対し、読み出し先として指定された番地に格納されている９ビット長のデータの読み出し制御を行う。フラッシュメモリ４は、読み出した９ビット長のデータをＣＰＵ２に出力する。ＣＰＵ２は、フラッシュメモリ４から読み出した９ビット長のデータの中から付加ビットを判別し取得する。本ステップは、書き込み処理のＳ４−１と同様の処理となる。
【００８９】
（Ｓ９−２）ＣＰＵ２は、取得した付加ビットが０Ｈであるか否かを判定する。０Ｈであった場合には、Ｓ９−４に遷移し、１Ｈであった場合には、Ｓ９−３に遷移する。
【００９０】
（Ｓ９−３）Ｓ９−２で、ＣＰＵ２が取得した付加ビットが１Ｈであった場合には、読み出し先の番地を＋１ディクリメントして、再度読み出しを行いＳ９−２に遷移する。
図６では、ＦＦＦＦＨ番地〜００１２Ｈ番地まで未使用（ブランク）領域であり、付加ビット領域の読み出し値は消去状態の１Ｈであるため、００１２Ｈ番地までは、Ｓ９−２とＳ９−３の処理を繰り返すことになる。
【００９１】
（Ｓ９−４）ＣＰＵ２は、Ｓ９−２において、付加ビットの値として０Ｈを取得した場合には、当該０Ｈの付加ビットが格納された同じ番地から読み出した８ビット長のデータ（ＩＤ）が、読み出し対象データ群のＤＡＴＡに関連付けされたＩＤ（目的のＩＤ）であるか否かを判定する。読み出したＩＤが目的のＩＤであった場合には、Ｓ９−５に遷移する。一方、読み出したＩＤが目的のＩＤでなかった場合には、Ｓ９−３に遷移し、再び０Ｈの付加ビットを見つけるまで、Ｓ９−２とＳ９−３の処理を繰り返す。
【００９２】
図６において、読み出し対象をデータ群０とすると、読み出したＩＤがＩＤ＝０であれば、読み出し対象データに関連付けされたＩＤであると判断できる。Ｓ９−２で、ＩＤが読み出されるのは、００１１Ｈ番地であり、００１１Ｈ番地に格納されている値は、ＩＤ＝１である。従って、読み出し対象はデータ群０であるため、このＩＤは、目的のＩＤではないと判断できる。そのため、Ｓ９−３に遷移し、読み出し先の番地を＋１ディクリメントし、再び０Ｈの付加ビットをフラッシュメモリ４から読み出すまで、Ｓ９−２とＳ９−３の処理を繰り返し、０Ｈの付加ビットが読み出された場合には、同じ番地のデータ領域に格納されたＩＤが目的のＩＤか否かを判定する。０Ｈの付加ビットが読み出されるのは、０００ＥＨ番地、０００７Ｈ番地、０００４Ｈ番地であるが、目的のＩＤ（ＩＤ＝０）が格納されているのは、０００４Ｈ番地であるので、０００４Ｈ番地まで、Ｓ９−２〜Ｓ９−４の処理を繰り返す。一方、読み出し対象をデータ群１とすると、００１１Ｈ番地に格納されているデータはＩＤ＝１であるため、このＩＤは、目的のＩＤであると判断でき、Ｓ９−５に遷移する。
【００９３】
（Ｓ９−５）Ｓ９−４で、目的のＩＤを特定することができた場合には、当該目的のＩＤを読み出した番地から＋５ディクリメントした番地を、読み出し対象データ群の先頭番地であると特定する。
【００９４】
図６において、データ群０を読み出す場合には、Ｓ９−４で、０００４Ｈ番地が目的のＩＤであると判定されるので、０００４Ｈ番地から＋４ディクリメントした番地は００００Ｈ番地となり、この００００Ｈ番地を、読み出し対象のデータ群０の先頭番地であると特定する。＋４ディリメントするのは、データ群０は、ＤＡＴＡ＿０〜ＤＡＴＡ＿３、ＩＤの５個のデータから構成されていることがわかっているので、ＤＡＴＡ＿０が格納されている番地は、ＩＤが格納されている番地から＋４ディクリメントした番地となるからである。
【００９５】
また、データ群１を読み出す場合には、００１１Ｈ番地が目的のＩＤであるので、００１１Ｈ番地から＋２ディクリメント（データ群１は３個のデータから構成されている）した番地は０００ＦＨ番地となり、この０００ＦＨ番地を、読み出し対象データのデータ群１の先頭番地であると特定する。
【００９６】
（Ｓ９−６）Ｓ９−５で特定した読み出し対象データの先頭番地からＤＡＴＡ＿０を読み出し、順に番地を＋１インクリメントしながらＤＡＴＡ＿１〜ＤＡＴＡ＿ｎを読み出す
。
図６において、００００Ｈ番地〜０００３Ｈ番地よりＤＡＴＡ＿０〜ＤＡＴＡ＿３を読み出すことによって、データ群０の読み出しを行う。また、０００ＦＨ番地〜００１０Ｈ番地よりＤＡＴＡ＿０、ＤＡＴＡ＿１を読み出すことによって、データ群１の読み出しを行う。
【００９７】
図６のフラッシュメモリ４では、データ群１が更新されていて、そのためデータ群１に関するデータ群が２箇所に格納されているが、有効なデータ群は最後に書かれた方、すなわち、ブランク領域側に近い方である。Ｓ９−１〜Ｓ９−６で説明した方式では、ブランク領域側から０Ｈの付加ビット（ＩＤ）の検索を行い、目的のＩＤが特定された時点で読み出し対象データの検索を終了するため、フラッシュメモリ４内に同じＩＤを有する複数のデータ群が格納されていたとしても、適切に一番新しいデータ群、つまり、有効なデータ群を読み出すことができる。図６におけるデータ群１の読み出しの例においても、無効なデータ群１（０００５Ｈ番地〜０００７Ｈ番地）を選択せずに、有効なデータ群１（０００ＦＨ番地〜００１１Ｈ番地）を選択している。
【００９８】
また、Ｓ９−５において、読み出し対象のデータ群のＩＤが格納された番地を基準にして、読み出し対象のデータ群のＤＡＴＡ＿０が格納された番地を特定する方法を説明したが、目的のＩＤが読み出された番地から順次＋１ディリメントして１Ｈの付加ビット＋ＤＡＴＡを読み出していき、０Ｈの付加ビット＋ＩＤが読み出された時点で、読み出し対象のデータ群の読み出しを終了する方法をとってもよい。この方式では、事前にデータ群が何個のデータ数で構成されているか否かわからない場合に有効である。
【００９９】
なお、図４および９の書き込み処理フローおよび読み出し処理フローにおいて、ブランクサーチおよびＩＤサーチの方向をＦＦＦＦＨ番地（最終番地）から行うと説明したが、従来の説明でも記載したように、逆に００００Ｈ番地（開始番地）から行ってもよい。但し、その場合には、書き込み処理フローにおいては、最後に０Ｈの付加ビットを読み出した番地に＋１インクリメントした番地が未使用（ブランク）領域の先頭番地となり、また、読み出し処理フローにおいても、最後に目的のＩＤを読み出した番地が有効なデータ群のＩＤであると特定することになる。
【０１００】
このように、本実施の形態によれば、ＥＥＰＲＯＭエミュレーション時のエミュレーション書き込み単位を構成するデータ数は、ＩＤが異なるエミュレーション書き込み単位間、つまり、データ群間において、共通の値でなくてもよい。そのため、ユーザは、自由にデータ群に含まれるデータ数を設定することができるようになり、その結果、ユーザの設計自由度が向上することになる。
【０１０１】
また、書き込み処理におけるブランクサーチの工程および読み出し処理におけるＩＤサーチの工程において、ＩＤを検索するのに付加ビットのみを確認すればよいことから、従来に比べ、ＩＤの検出手段が容易となる。
【０１０２】
実施の形態２
図１０は、本発明の実施の形態２に関するデータの書き込み順序を示したものである。実施の形態２では、書き込み処理における０Ｈ＋ＩＤを書き込む際の書き込み順序に実施の形態１と異なる特徴がある。従って、これ以外の点においては、実施の形態１と同じであるので説明は省略する。
【０１０３】
ＥＥＰＲＯＭエミュレーションの書き込み処理では、エミュレーション書き込み単位毎に複数のデータ（ＤＡＴＡ＿０〜ＤＡＴＡ＿ｎ、ＩＤ）および付加ビットをフラッシュメモリ４に書き込む（Ｓ４−４およびＳ４−５）。実施の形態１では、最後に０Ｈ＋ＩＤを書き込むと説明したが（Ｓ４−５）、実施の形態２では、１Ｈ＋ＩＤ→０Ｈ＋ＦＦＨという２ステップに分けて書き込みを行う。
【０１０４】
フラッシュメモリ４は、消去状態（例えば、フラッシュメモリ４を構成する複数のメモリセルの浮遊ゲートに電荷がない状態）を１Ｈとしているため、１Ｈの付加ビットの書き込み、或いは、ＦＦＨ（１１１１１１１１Ｂ）のデータの書き込みは、フラッシュメモリ４構成するメモリセルに対して、実際には何ら動作を行わない。すなわち、１ステップ目の１Ｈ＋ＩＤは、フラッシュメモリ４内のデータ領域のみに対して書き込みを行う処理であり、付加ビット領域に対する書き込み処理は行われない。また逆に、２ステップ目の０Ｈ＋ＦＦＨは、フラッシュメモリ４内の付加ビット領域にのみに対して書き込みを行う処理であり、データ領域に対する書き込み処理は行われない。換言すれば、１ステップ目にＩＤを書き込み、２ステップ目、つまり、一連の書き込み処理の最後に０Ｈの付加ビットが書き込まれることになる。
【０１０５】
図１０に示す通り、まず１Ｈ＋ＤＡＴＡ＿０の書き込みを行う（Ｓ１０−１）。次に１Ｈ＋ＤＡＴＡ＿１の書き込みを行う（Ｓ１０−２）。同様に、１Ｈ＋ＤＡＴＡ＿２〜１Ｈ＋ＤＡＴＡ＿ｎまでの書き込みを行う（Ｓ１０−３〜Ｓ１０−５）。
【０１０６】
ＤＡＴＡの書込みが終了後、０Ｈ＋ＩＤの書き込みを行う。まずＩＤだけの書き込みを行うため、１Ｈ＋ＩＤの書き込みを行う（Ｓ１０−６）。最後に０Ｈの付加ビットの書き込みを行うため、０Ｈ＋ＦＦＨの書き込みを行う（Ｓ１０−７）。以上で、付加ビットおよびＤＡＴＡ＿０〜ＤＡＴＡ＿ｎ、ＩＤからなる１個のデータ群の書き込みが完了する。
【０１０７】
このように、本実施の形態によれば、０Ｈの付加ビットを最後に書くことにより、電源瞬停等に起因する書き込みエラーが発生していないことを確認することができる。すなわち、最後に書き込まれた０Ｈの付加ビットが正しく読み出せたとすると、その前に書かれたＤＡＴＡ＿０〜ＤＡＴＡ＿ｎ、ＩＤの書き込みは正常に実行されたと判断することができるからである。
【０１０８】
以上、本発明の実施の形態に基づいて詳細に説明したが、本発明は、上述のような実施の形態に限定されるものでなく種々の変形が可能である。例えば、付加ビットは１ビット長に限定されるわけではなく、２ビット長以上であってもよい。また、図面では、付加ビットは、識別する８ビット長のデータと同じ番地に、９ビット長のデータの最上位ビットの位置に配置されるように書かれているが、それに限られるわけではない。さらに、図８において、付加ビット領域と、データ領域が交互に配置されているが、どのように配置されていてもかまわない。また、実施の形態の説明では、ＣＰＵ２が、メモリ制御回路３に対する書き込み／読み出し命令や、書き込みデータの生成、読み出した値の判定を行っているが、この機能の全て、或いは、一部をメモリ制御回路３が実行しても構わない。逆に、メモリ制御回路３が担うフラッシュメモリ４に対する直接的なアクセス制御機能を、メモリ制御回路３を介さずに、ＣＰＵ２が実行してもよい。さらには、実施の形態１と実施の形態２を組み合わせることなども可能である。
【符号の説明】
【０１０９】
１            マイクロコンピュータ
２            ＣＰＵ
３            メモリ制御回路
４            フラッシュメモリ
５、６        バス
７            信号配線
８            エミュレーション書き込み単位（データ群）
９            ＤＡＴＡ
１０          データ番号（ＩＤ）
１１、１２    付加ビット
【図１】
2011243230.tif 000003
【図２】
2011243230.tif 000004
【図３】
2011243230.tif 000005
【図４】
2011243230.tif 000006
【図５】
2011243230.tif 000007
【図６】
2011243230.tif 000008
【図７】
2011243230.tif 000009
【図８】
2011243230.tif 000010
【図９】
2011243230.tif 000011
【図１０】
2011243230.tif 000012
【図１１】
2011243230.tif 000013
【図１２】
2011243230.tif 000014
【図１３】
2011243230.tif 000015
【図１４】
2011243230.tif 000016
【図１５】
2011243230.tif 000017
【図１６】
2011243230.tif 000018
【図１７】
2011243230.tif 000019