(57)【特許請求の範囲】
【請求項１】
１以上のアドレスを有するメモリセルブロックを複数備える不揮発性メモリと、
前記不揮発性メモリに対し、前記メモリセルブロック単位での一括消去処理、予め定められたアドレス数の記憶領域単位またはビット単位での書き込み処理、および、前記メモリセルブロック単位で、データ更新元メモリセルブロックからデータ更新先メモリセルブロックへ予め定められたデータを転送するデータ更新処理の制御を行うメモリ制御部と、
を備え、
前記複数のメモリセルブロックは、それぞれ、
該メモリセルブロックの使用状態に関する情報を含むステータス情報を記憶するためのステータス情報記憶領域と、
該メモリセルブロックの前記データ更新処理における更新履歴を含む更新履歴情報を記憶する更新履歴情報記憶領域と、
を備え、
前記更新履歴情報記憶領域は、前記更新履歴が真正なものであるかを検査するためのデータを含み、
前記更新履歴が真正なものであるかを検査した上で、前記ステータス情報および前記更新履歴情報に基づいて、現在使用中のメモリセルブロックを特定するメモリセルブロック特定部を備えることを特徴とする不揮発性半導体記憶装置。
【請求項２】
前記メモリセルブロック特定部は、前記ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが複数あるとき、その複数のメモリセルブロックのうち、更新履歴情報に直近の前記データ更新処理におけるデータ更新先であることを示す内容が含まれているメモリセルブロックを、現在使用中のメモリセルブロックとする請求項１に記載の不揮発性半導体記憶装置。
【請求項３】
前記更新履歴情報は、カウンタ値を含み、
前記メモリ制御部は、前記データ更新処理において、前記データ更新先メモリセルブロックのカウンタ値として、前記データ更新元メモリセルブロックのカウンタ値に対して、予め定められた値を加算したものを記憶し、
前記メモリセルブロック特定部は、前記カウンタ値に基づいて、前記直近のデータ更新処理におけるデータ更新先メモリセルブロックを判定する請求項２に記載の不揮発性半導体記憶装置。
【請求項４】
前記メモリセルブロック特定部は、前記ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが１つしかないとき、該メモリセルブロックを現在使用中のメモリセルブロックとする請求項１ないし請求項３のいずれか１項に記載の不揮発性半導体記憶装置。
【請求項５】
１以上のアドレスを有するメモリセルブロックを複数備える不揮発性メモリと、
前記不揮発性メモリに対し、前記メモリセルブロック単位での一括消去処理、予め定められたアドレス数の記憶領域単位またはビット単位での書き込み処理、および、前記メモリセルブロック単位で、データ更新元メモリセルブロックからデータ更新先メモリセルブロックへ予め定められたデータを転送するデータ更新処理を実行するメモリ制御部を備えた不揮発性半導体記憶装置のメモリ管理方法であって、
前記複数のメモリセルブロックは、それぞれ、
該メモリセルブロックの使用状態に関する情報を含むステータス情報を記憶するためのステータス情報記憶領域と、
該メモリセルブロックの前記データ更新処理における更新履歴を含む更新履歴情報を記憶する更新履歴情報記憶領域と、
を備え、
前記更新履歴情報記憶領域は、前記更新履歴が真正なものであるかを検査するためのデータを含み、
前記メモリ制御部において、前記更新履歴が真正なものであるかを検査した上で、前記ステータス情報および前記更新履歴情報に基づいて、現在使用中であるメモリセルブロックを特定するメモリセルブロック特定処理を実行することを特徴とするメモリ管理方法。
【請求項６】
前記メモリセルブロック特定処理において、前記ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが複数あるとき、その複数のメモリセルブロックのうち、更新履歴情報に直近の前記データ更新処理におけるデータ更新先であることを示す内容が含まれているメモリセルブロックを、現在使用中のメモリセルブロックとする請求項５に記載のメモリ管理方法。
【請求項７】
前記更新履歴情報は、カウンタ値を含み、
前記データ更新処理において、前記データ更新先メモリセルブロックのカウンタ値として、前記データ更新元メモリセルブロックのカウンタ値に対して、予め定められた値を加算したものを記憶し、
前記メモリセルブロック特定処理において、前記カウンタ値に基づいて、前記直近のデータ更新処理におけるデータ更新先メモリセルブロックを判定する請求項６に記載のメモリ管理方法。
【請求項８】
前記メモリセルブロック特定処理において、前記ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが１つしかないとき、該メモリセルブロックを現在使用中であるメモリセルブロックとする請求項５ないし請求項７のいずれか１項に記載のメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリを備える不揮発性半導体記憶装置および不揮発性メモリのメモリ管理方法に関する。
【背景技術】
【０００２】
近年、クレジットカードやキャッシュカード等の用途で、ＩＣチップを埋め込んだＩＣカードが普及しつつある。ＩＣカードは、磁気カードと比較して、記憶容量が大きく、複製や偽造等が難しいため、セキュリティ性が高い。このため、高いセキュリティ性が必要とされる電子マネー機能等の用途で普及しつつある。
【０００３】
ＩＣカードでは、一般的に、電源を切っても記憶内容を保持することができる不揮発性メモリが用いられることが多い。このような不揮発性メモリには、例えば、ＥＥＰＲＯＭ（Electrically  Erasable/Programmable  Read  Only  Memory）、フラッシュＥＥＰＲＯＭ（以下、フラッシュメモリと称する）等がある。特に、フラッシュメモリは、大容量化を容易かつ低コストで実現できる。
【０００４】
また、フラッシュメモリは、例えば、車両用制御装置（ＥＣＵともいう）のマイクロコンピュータ（マイコンともいう）の記憶媒体としても用いられている。
【０００５】
ところで、フラッシュメモリでは、動作原理上、消去状態を書き込み状態にする書き込み処理は、アドレス単位あるいはビット単位で実行できるが、書き込み状態を消去状態にする消去処理については、メモリセルブロック単位（セクタ単位）で一括して行われ、アドレス単位あるいはビット単位で実行することはできない。
【０００６】
このため、不揮発性半導体記憶装置では、一般的に、所定のメモリセルブロック（以下、単に「ブロック」ということもある）に既に書き込まれているデータの全部または一部を更新する場合、更新後のデータを一括消去処理済みのメモリセルブロック（更新先メモリセルブロック）に書き込む書き込み処理を実行した後、更新前のデータが記憶された更新元メモリセルブロックを一括消去する一括消去処理を実行するデータ更新処理を実行している。なお、更新元メモリセルブロックおよび更新先メモリセルブロックには同じ論理アドレス（仮想アドレス）が割り当てられる。
【０００７】
例えば、現在使用中のメモリセルブロックに全てデータが書き込まれた場合、データ更新処理を実行し、別の（一括消去済の）メモリセルブロック（すなわち、更新先メモリセルブロック）に必要なデータをコピーする。そして、更新先メモリセルブロック（つまり、直近のデータ更新処理における更新先メモリセルブロック）が現在使用中のメモリセルブロックとなる。
【０００８】
ところで、フラッシュメモリ等の不揮発性メモリでは、一括消去処理や書き込み処理の実行中に、何らかの原因により、電源断が発生する場合がある。一括消去処理の実行中に電源断が発生した場合には、例えば、メモリセルブロック内に書き込み状態のビットが残存する、あるいは、消去状態および書き込み状態のいずれにも該当しない不定状態のビットが発生する等の問題が生じる。また、書き込み処理の実行中に電源断が発生すると、例えば、記憶すべきデータの一部が欠落した状態となる等の問題が発生する。
【０００９】
そこで、不揮発性メモリに対するデータ更新処理および電源断等に対する異常対応処理の処理手順の簡略化および処理時間の短縮を図るために、上述のデータ更新処理が複数の要素処理を含み、メモリセルブロックが、データ領域と実行中の要素処理を特定可能なステータス情報を記憶するステータス情報記憶領域を備え、ステータス情報のそれぞれが、書き込み処理の実行のみでステータス情報記憶領域を次に実行する要素処理のステータス情報に更新可能なデータ構成を有する不揮発性半導体記憶装置およびメモリ管理方法が考案されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−３０５２６３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１の構成では、ステータス情報が何らかの原因でデータ化けをした場合、誤ったステータス判定を行い、古いブロックや空きブロックを最新ブロックと誤判定する可能性がある。そこで、ステータス情報を２重化してデータ化けに対処する方法が考えられる。しかし、フラッシュメモリは、上書きができない特性上、使用状況（未使用、使用中、使用済、故障等）に対応した数のステータス情報領域を確保しなければならないため、ステータス情報の２重化により、データ記憶領域が少なくなるという問題が生ずる。
【００１２】
また、ステータス情報を２重化しても、「使用中」であるメモリセルブロックが複数あったときには、いずれが最新のメモリセルブロックかを特定することができないという問題もある。
【００１３】
上記問題点を背景として、本発明の課題は、より少ないステータス情報領域で、ステータス異常に対応することができる不揮発性半導体記憶装置およびメモリ管理方法を提供することにある。
【課題を解決するための手段および発明の効果】
【００１４】
上記課題を解決するための不揮発性半導体記憶装置は、１以上のアドレスを有するメモリセルブロックを複数備える不揮発性メモリと、不揮発性メモリに対し、メモリセルブロック単位での一括消去処理、予め定められたアドレス数の記憶領域単位またはビット単位での書き込み処理、および、メモリセルブロック単位で、データ更新元メモリセルブロックからデータ更新先メモリセルブロックへ予め定められたデータを転送するデータ更新処理の制御を行うメモリ制御部と、を備え、複数のメモリセルブロックは、それぞれ、該メモリセルブロックの使用状態に関する情報を含むステータス情報を記憶するためのステータス情報記憶領域と、該メモリセルブロックのデータ更新処理における更新履歴を含む更新履歴情報を記憶する更新履歴情報記憶領域と、を備え、更新履歴情報記憶領域は、更新履歴が真正なものであるかを検査するためのデータを含み、更新履歴が真正なものであるかを検査した上で、ステータス情報および更新履歴情報に基づいて、現在使用中のメモリセルブロックを特定するメモリセルブロック特定部を備えることを特徴とする。
【００１５】
上記構成によって、更新履歴情報は、使用状況（未使用、使用中、使用済、故障等）に応じた記憶領域を複数組確保する必要はないので、ステータス情報を２重化することなく、少ないステータス情報領域で、ステータス異常に対応することができる。
【００１６】
また、本発明の不揮発性半導体記憶装置におけるメモリセルブロック特定部は、ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが複数あるとき、その複数のメモリセルブロックのうち、更新履歴情報に直近のデータ更新処理におけるデータ更新先であることを示す内容が含まれているメモリセルブロックを、現在使用中のメモリセルブロックとする。
【００１７】
上記構成によって、ステータス情報が何らかの原因でデータ化けをした場合でも、現在使用中のメモリセルブロックを特定することができる。
【００１８】
また、本発明の不揮発性半導体記憶装置における更新履歴情報は、カウンタ値を含み、メモリ制御部は、データ更新処理において、データ更新先メモリセルブロックのカウンタ値として、データ更新元メモリセルブロックのカウンタ値に対して、予め定められた値を加算したものを記憶し、メモリセルブロック特定部は、カウンタ値に基づいて、直近のデータ更新処理におけるデータ更新先メモリセルブロックを判定する。
【００１９】
上記構成によって、ステータス情報を２重化することなく、ステータス情報が何らかの原因でデータ化けをした場合でも、現在使用中のメモリセルブロックを特定することができる。カウンタ長は、例えば１バイト程度でよく、ステータス情報の約１／４であるため、更新履歴情報のデータを小さなものとすることができる。また、このカウンタを用いることで、メモリセルブロックのデータ更新回数を把握でき、メモリセルブロックの使用状況や寿命の推定にも活用することができる。
【００２０】
また、本発明の不揮発性半導体記憶装置におけるメモリセルブロック特定部は、ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが１つしかないとき、該メモリセルブロックを現在使用中のメモリセルブロックとする。
【００２１】
上記構成によって、ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが１つしかないときは、更新履歴情報を参照しないため、現在使用中のメモリセルブロックを特定するための時間を短縮することができる。
【００２２】
上記課題を解決するためのメモリ管理方法は、１以上のアドレスを有するメモリセルブロックを複数備える不揮発性メモリと、不揮発性メモリに対し、メモリセルブロック単位での一括消去処理、予め定められたアドレス数の記憶領域単位またはビット単位での書き込み処理、および、メモリセルブロック単位で、データ更新元メモリセルブロックからデータ更新先メモリセルブロックへ予め定められたデータを転送するデータ更新処理を実行するメモリ制御部を備えた不揮発性半導体記憶装置のメモリ管理方法であって、複数のメモリセルブロックは、それぞれ、該メモリセルブロックの使用状態に関する情報を含むステータス情報を記憶するためのステータス情報記憶領域と、該メモリセルブロックのデータ更新処理における更新履歴を含む更新履歴情報を記憶する更新履歴情報記憶領域と、を備え、更新履歴情報記憶領域は、更新履歴が真正なものであるかを検査するためのデータを含み、メモリ制御部において、更新履歴が真正なものであるかを検査した上で、ステータス情報および更新履歴情報に基づいて、現在使用中であるメモリセルブロックを特定するメモリセルブロック特定処理を実行することを特徴とする。
【００２３】
上記構成によって、更新履歴情報は、使用段階（使用中、使用済、故障等）に応じた記憶領域を複数組確保する必要はないので、ステータス情報を２重化することなく、少ないステータス情報領域で、ステータス異常に対応することができる。
【００２４】
また、本発明のメモリ管理方法におけるメモリセルブロック特定処理において、ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが複数あるとき、その複数のメモリセルブロックのうち、更新履歴情報に直近のデータ更新処理におけるデータ更新先であることを示す内容が含まれているメモリセルブロックを、現在使用中のメモリセルブロックとする。
【００２５】
上記構成によって、ステータス情報が何らかの原因でデータ化けをした場合でも、現在使用中のメモリセルブロック（つまり、最新のデータ更新先メモリセルブロック）を特定することができる。
【００２６】
また、本発明のメモリ管理方法における更新履歴情報は、カウンタ値を含み、データ更新処理において、データ更新先メモリセルブロックのカウンタ値として、データ更新元メモリセルブロックのカウンタ値に対して、予め定められた値を加算したものを記憶し、メモリセルブロック特定処理において、カウンタ値に基づいて、直近のデータ更新処理におけるデータ更新先メモリセルブロックを判定する。
【００２７】
上記構成によって、ステータス情報を２重化することなく、ステータス情報が何らかの原因でデータ化けをした場合でも、現在使用中のメモリセルブロックを特定することができる。カウンタ長は、例えば１バイト程度でよく、ステータス情報の約１／４であるため、更新履歴情報のデータを小さなものとすることができる。また、このカウンタを用いることで、メモリセルブロックのデータ更新回数を把握でき、メモリセルブロックの使用状況や寿命の推定にも活用することができる。
【００２８】
また、本発明のメモリ管理方法におけるメモリセルブロック特定処理において、ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが１つしかないとき、該メモリセルブロックを現在使用中であるメモリセルブロックとする。
【００２９】
上記構成によって、ステータス情報に現在使用中である旨の情報が含まれるメモリセルブロックが１つしかないときは、更新履歴情報を参照しないため、現在使用中のメモリセルブロックを特定するための時間を短縮することができる。
【図面の簡単な説明】
【００３０】
【図１】本発明の不揮発性半導体記憶装置の構成を示す図。
【図２】本発明の不揮発性半導体記憶装置の構成の別例を示す図。
【図３】フラッシュメモリの詳細構成を示す図。
【図４】ステータス情報記憶領域の構成を示す図。
【図５】更新履歴情報記憶領域の構成を示す図。
【図６】フラッシュメモリに記憶されるデータの構成を示す図。
【図７】データ化けを生じたフラッシュメモリの構成を示す図。
【図８】初期化処理を説明するフロー図。
【図９】データ更新処理を説明するフロー図。
【図１０】ブロック特定処理を説明するフロー図。
【図１１】ブロック特定処理の別例を説明するフロー図。
【発明を実施するための形態】
【００３１】
以下、本発明のメモリ管理方法および不揮発性半導体記憶装置について、図面を用いて説明する。まず、図１に、本発明のメモリ管理方法および不揮発性半導体記憶装置をＩＣカードへ適用した例を示す。ＩＣカード１は、１以上のアドレスを有するメモリセルブロックを複数備え、ＩＣカード１の動作に必要なデータを記憶するフラッシュメモリ１１（詳細は図３参照）、あるいはＲＯＭ１３に記憶された制御プログラムを実行することにより、ＩＣカード１の各種機能を実現するＣＰＵ１０と、ＣＰＵ１０による制御プログラムの実行において生成される各種データを一時的に記憶するためのＲＡＭ１２を備えている。
【００３２】
また、ＩＣカード１は、リーダライタ装置（図示せず）と物理的に接続してデータ通信を行うための接触式用通信Ｉ／Ｆ１４と、リーダライタ装置と物理的に接続せずにデータ通信を行うための非接触式用通信Ｉ／Ｆ１５のうちの少なくとも一方を備えて構成されている。本実施形態では、ＩＣカード１は、接触式用通信Ｉ／Ｆ１４または非接触式用通信Ｉ／Ｆ１５を介して、リーダライタ装置から電源供給を受けるように構成されている。
【００３３】
ＣＰＵ１０は、リーダライタ装置とのデータ通信を行うとともに、データ通信の状態あるいはフラッシュメモリ１１の各メモリセルブロックの記憶状態に応じて、フラッシュメモリ１１に対し、メモリセルブロック単位での一括消去処理、所定アドレス数の記憶領域単位またはビット単位での書き込み処理、および、メモリセルブロック単位でのデータ更新処理等の制御を行う。なお、ＣＰＵ１０が本発明のメモリ制御部，メモリセルブロック特定部に相当する。また、フラッシュメモリ１１が本発明の不揮発性メモリに相当する。
【００３４】
図２に、本発明のメモリ管理方法および不揮発性半導体記憶装置を電子制御装置（ＥＣＵ）へ適用した例を示す。ＥＣＵ２は、例えば車両のエンジン制御、エアコン制御等の車載機器の制御に用いられる。ＥＣＵ２は、ＣＰＵ２０，フラッシュメモリ２１，ＲＡＭ２２，ＲＯＭ２３を備え、ＣＰＵ２０が、フラッシュメモリ２１あるいはＲＯＭ２３に記憶された制御プログラムを実行することにより、ＥＣＵ２の各種機能を実現する。ＲＡＭ２２は、ＣＰＵ１０による制御プログラムの実行において生成される各種データを一時的に記憶する。
【００３５】
また、ＥＣＵ２は、例えば、回転センサ，温度センサのようなセンサ２６からのデータの取得、あるいは他のＥＣＵからのデータ受信を行うための入力Ｉ／Ｆ２４と、例えば、モータ，ソレノイドのようなアクチュエータ２７に対する動作制御指令値の出力、あるいは他のＥＣＵへのデータ送信を行うための出力Ｉ／Ｆ２５を備えている。
【００３６】
フラッシュメモリ２１は、１以上のアドレスを有するメモリセルブロックを複数備え（詳細は図３参照）、ＥＣＵ２の動作に必要なデータを記憶する。ＣＰＵ２０は、ＥＣＵ２の動作状態あるいはフラッシュメモリ２１の各メモリセルブロックのデータ記憶状態に応じて、フラッシュメモリ２１に対し、メモリセルブロック単位での一括消去処理、所定アドレス数の記憶領域単位またはビット単位での書き込み処理、および、メモリセルブロック単位でのデータ更新処理等の制御を行う。なお、ＣＰＵ２０が本発明のメモリ制御部，メモリセルブロック特定部に相当する。また、フラッシュメモリ２１が本発明の不揮発性メモリに相当する。
【００３７】
上記構成により、ＥＣＵ２は、センサ２６あるいは他のＥＣＵから取得したデータ、およびアクチュエータ２７の動作状態に基づいて、動作制御指令値を演算し、アクチュエータ２７に出力する。
【００３８】
フラッシュメモリ（１１，２１）の構成、および上述のデータ更新処理等のフラッシュメモリに対する制御は、ＩＣカード１およびＥＣＵ２とも同様であるので、以下の本発明の構成の説明については、ＩＣカード１の符号を用いて行う。
【００３９】
図３に、フラッシュメモリ１１の詳細構成を示す。図３の例では、フラッシュメモリ１１は、ブロック（「メモリセルブロック」の略称）１〜ブロック４で示された４個のメモリセルブロックを含んでいる。各メモリセルブロックは、ステータス情報記憶領域（１０１，２０１，３０１，４０１）、更新履歴情報記憶領域（１０２，２０２，３０２，４０２）が設けられ、残余の領域がデータ記憶領域（１０３，２０３，３０３，４０３）となっている。
【００４０】
メモリセルブロックにデータが何も記憶されていない状態（例えば、一括消去処理が行われた後の状態）では、ブロック３あるいはブロック４のように、ステータス情報記憶領域は「未使用」、更新履歴情報記憶領域は「値なし」、データ記憶領域は「空き」となっている。
【００４１】
また、メモリセルブロックにデータが書き込まれると、そのメモリセルブロック（図３のブロック１，ブロック２）には、ステータス情報記憶領域（１０１，２０１）、更新履歴情報記憶領域（１０２，２０２）には、状態に応じた値が書き込まれ、データ記憶領域（１０３，２０３）にデータが書き込まれる。
【００４２】
図３は、既存のデータの更新（この場合は追記）・新規のデータの追加等でブロック１のデータ記憶領域が空き領域のない一杯の状態（「ＦＵＬＬ」と表記）になったため、データ更新処理により、現在使用中のデータ（すなわちデータ２０３ａ）のみをブロック２にコピーした状態を示している（詳細については後述）。また、ブロック２には空き領域２０３ｂがあるので、記憶されているデータ２０３ａの更新が行われたとき、あるいは新たにデータを追加するときは、この空き領域２０３ｂに順次追記される。
【００４３】
図４を用いて、上述のステータス情報記憶領域（１０１，２０１，３０１，４０１）の詳細について、ブロック１のステータス情報記憶領域１０１を例に挙げて説明する。ステータス情報記憶領域は、例えば１バイト×４の４バイトの領域で構成され、それぞれ、「使用中」領域１０１ａ，「コピー中」領域１０１ｂ，「使用済」領域１０１ｃ，「故障」領域１０１ｄのように区分されている。図４（ａ）のブロック３，４のように、ブロック１が未使用のときは、ステータス情報記憶領域１０１の全領域（１０１ａ，１０１ｂ，１０１ｃ，１０１ｄ）に何も書き込まれていない状態（データが消去された状態）となっている。
【００４４】
図４（ｂ）のように、ブロック１を使用中のときは、「使用中」領域１０１ａに予め定められた値が書き込まれる（他の３個の領域は「空き」状態）。次に、他のメモリセルブロックへデータをコピーするデータ更新処理を実行中のときには、「コピー中」領域１０１ｂに予め定められた値が書き込まれる（他の２個の領域：「使用済」領域１０１ｃ，「故障」領域１０１ｄは「空き」状態）。
【００４５】
そして、データ更新処理を終了すると、図４（ｃ）のように、「使用済」領域１０１ｃに予め定められた値が書き込まれる（「故障」領域１０１ｄのみ「空き」状態）。このとき、コピー先のメモリセルブロックのステータス情報記憶領域の「使用中」領域に、予め定められた値が書き込まれる。
【００４６】
また、正常に読み書きできないもの、過去にデータが正常でない値に書き換わった状態（以降、「データ化け」と称する）を生じたものには、そのステータス情報記憶領域の「故障」領域１０１ｄに、予め定められた値が書き込まれる。そして、以降の動作では、「故障」領域１０１ｄに、予め定められた値が書き込まれているメモリセルブロックはデータの記憶に用いないようにしている。また、リーダライタ装置（図示せず）あるいは他のＥＣＵに、メモリセルブロックが故障している旨の情報を出力するような、予め定められた故障対応処理を実行してもよい。
【００４７】
なお、上述のステータス情報記憶領域の各領域に書き込む値は、本実施例では０ｘ５Ａ（１バイトデータ）としているが、データ化けの発生を正確に検出できるのであれば、どのような値，データ長としてもよい。
【００４８】
上述のように、フラッシュメモリは、アドレス単位あるいはビット単位で消去・上書きができないため、状態に応じて領域を確保している。
【００４９】
また、ステータス情報を読み出すときの優先順位は、「故障」が最も高く、以下、「使用中」，「コピー中」，「使用済」の順となり、「使用済」が最も低い。そして、１０１ａ〜１０１ｄのうち複数の領域に予め定められた値（例えば、０ｘ５Ａ）が書き込まれているときには、それらの領域のうち優先順位のより高い領域の状態をそのメモリセルブロックのステータス情報として用いる。例えば、「使用中」領域１０１ａと「コピー中」領域１０１ｂに予め定められた値が書き込まれているときには、そのメモリセルブロックのステータス情報は「コピー中」となる。
【００５０】
図５を用いて、更新履歴情報記憶領域（１０２，２０２，３０２，４０２）の詳細について、ブロック１の更新履歴情報記憶領域１０２を例に挙げて説明する。図５の例では、更新履歴情報としてカウンタを用いている。このカウンタは、データ更新処理において、自身がコピー先となったときに、コピー元のメモリセルブロックの更新履歴情報記憶領域のカウンタ値に対して、インクリメントした（あるいはデクリメントした）ものを記憶する。カウンタ値が最大となったときには、初期値（例えば、ゼロ）に戻ってインクリメントを継続する。
【００５１】
なお、図３の、更新履歴情報記憶領域（３０２，４０２）の「カウンタ（値なし）」は、データ削除時に書き込まれる値、あるいは初期値等の予め定められた値のような、カウンタ値が通常時に示す値とは異なる値となっていることを示している。
【００５２】
更新履歴情報は、直近のデータ更新処理におけるデータ更新先であることを示すもので、最新のデータ更新先であることを示すことが可能であれば、カウンタ値以外の値（例えば、他のメモリセルブロックの更新履歴情報との間で大小関係を比較できるもの）を設定してもよい。
【００５３】
また、図５のように、更新履歴情報記憶領域に、カウンタ値１０２ａの他に、カウンタ値のチェックサム１０２ｂ（符号はブロック１を例示）を含めてもよい。このように、更新履歴情報記憶領域に、更新履歴の検査用のデータを含めることで、更新履歴（すなわち、カウンタ値）が正しいものかどうかを確認でき、現在使用中であるメモリセルブロックをより正確に特定することができる。
【００５４】
また、更新履歴情報記憶領域のデータ長は、カウンタ値とチェックサムで１バイトとしてもよいし、カウンタ値を２バイトとしチェックサムを１バイトとしてもよい。
【００５５】
また、更新履歴情報記憶領域のカウンタ値を、メモリセルブロック（ブロック１〜４）の使用状況や寿命の推定にも活用することができる。例えば、カウンタ値が予め定められた閾値を超えるメモリセルブロックは、データ更新処理に用いないようにする（詳細は後述）。
【００５６】
図６に、フラッシュメモリのデータ記憶領域に記憶されるデータの構成を示す。データは、データＩＤ，データ値，データ値（データＩＤを含めてもよい）のチェックサムを含んでいる。チェックサムを含まない構成としてもよい。例えばブロック２に既に記憶されているデータが更新され、更新データが空き領域２０３ｂに追記されたとき、ブロック２には同じデータＩＤを持つデータが複数記憶される。しかし、データはデータ記憶領域２０３の先頭アドレスから書き込まれるので、同じデータＩＤで、最も大きいアドレスに書き込まれているものが最新のデータであると判断できる。
【００５７】
図７に、図３のフラッシュメモリにおいて、ノイズ、データ更新処理が正常に行われなかった、等の原因で、メモリセルブロックのステータス情報記憶領域あるいは更新履歴情報記憶領域で、データ化けを生じた状態を示す。
【００５８】
図７の例では、ブロック１のステータス情報が「使用中」になっている。つまり、「コピー中」領域１０１ｂおよび「使用済」領域１０１ｃの本来のデータ（０ｘ５Ａ）が、消去された（あるいはデータ化けした）状態となっている。また、ブロック４のステータス情報が「使用中」になっている。つまり、「使用中」領域にデータ（０ｘ５Ａ）が書き込まれた状態となっている。この状態では、ステータス情報のみでは、どのメモリセルブロックが現在使用中であるかを特定することはできない。
【００５９】
図８を用いて、ＲＯＭ１３に記憶された制御プログラムに含まれ、ＣＰＵ１０が実行する初期化処理について説明する。まず、ブロック１（図３参照）のステータス情報記憶領域１０１の「使用中」領域１０１ａに０ｘ５Ａを書き込む（Ｓ１１）。次に、ブロック１の更新履歴情報記憶領域１０２（カウンタ値１０２ａ）に０ｘ００を書き込む（Ｓ１２）。無論、チェックサム値を計算して書き込んでもよい。
【００６０】
上述の初期化処理で、ステップＳ１１を実行する前に、全ブロック（１〜４）の一括消去処理を実行してもよい。
【００６１】
図９，図４を用いて、ＲＯＭ１３に記憶された制御プログラムに含まれ、ＣＰＵ１０が実行するデータ更新処理について説明する（ブロック１→ブロック２へのコピーを例示）。本処理は、例えば、現在使用中のメモリセルブロックのデータ記憶領域が一杯になったときに実行する。なお、ステップＳ３０ａ〜Ｓ３０ｃについては、本処理の必須構成ではないので後述する。
【００６２】
まず、ブロック１（図３参照）のステータス情報記憶領域１０１の「コピー中」領域１０１ｂに０ｘ５Ａを書き込む（Ｓ３１）。次に、ブロック１のデータをブロック２にコピーする（Ｓ３２）。コピーするデータは各データＩＤの最新のもののみである。どのデータが最新かの判断方法は上述したとおりである。
【００６３】
データのコピーが終了したとき（Ｓ３３：Ｙｅｓ）、ブロック２のステータス情報記憶領域２０１の「使用中」領域２０１ａに０ｘ５Ａを書き込む（Ｓ３４）。続いて、ブロック２の更新履歴情報記憶領域２０２（カウンタ値２０２ａ）に０ｘ０１を書き込む（Ｓ３５）。上述の初期化処理で、ブロック１の更新履歴情報記憶領域１０２（カウンタ値１０２ａ）には０ｘ００が書き込まれているので、その値をインクリメントしたものを更新履歴情報記憶領域２０２に書き込んでいる。ブロック１の更新履歴情報に記憶された値に１以外の値を加えたもの、ブロック１の更新履歴情報に記憶された値に所定の演算を行ったものでもよい。
【００６４】
最後に、ブロック１のステータス情報記憶領域１０１の「使用済」領域１０１ｃに０ｘ５Ａを書き込む（Ｓ３６）。
【００６５】
上述の、更新履歴情報記憶領域のカウンタ値を用いることで、メモリセルブロックのデータ更新回数を把握し、メモリセルブロックの使用状況や寿命の推定にも活用する方法について説明する。これは、図９のステップＳ３０ａ〜Ｓ３０ｃに相当している。無論、データ更新処理において、これらのステップを必ず実行しなければならないということではない。上述のステップＳ３１を実行する前に、全てのブロック（データ更新先の対象となるブロックのみでもよい）の更新履歴情報を読み込む（Ｓ３０ａ）。次に、データ更新先としたいメモリセルブロック（例えば、ブロック２）の更新履歴情報に含まれるカウンタ値が予め定められた閾値以下となるとき（Ｓ３０ｂ：Ｙｅｓ）そのメモリセルブロックをデータ更新先としてステップＳ３１へ進む。
【００６６】
一方、カウンタ値が閾値を超えるとき（Ｓ３０ｂ：Ｎｏ）、そのメモリセルブロックをデータ更新先に用いず、別のメモリセルブロックを選択し（Ｓ３０ｃ）、そのメモリセルブロックのカウンタ値を調べる。なお、カウンタ値が閾値以下となるメモリセルブロックが１つもないときには、本処理を終了する。
【００６７】
図１０を用いて、ＲＯＭ１３に記憶された制御プログラムに含まれ、ＣＰＵ１０が実行するブロック特定処理について説明する。まず、不揮発性半導体記憶装置に電源を投入する（Ｓ５１）。ＩＣカード１のときは、リーダライタ装置（図示せず）に電源を投入してＩＣカード１をリーダライタ装置に接近あるいは挿入した状態である。また、ＥＣＵ２のときは、ＥＣＵ２に電源を投入した状態である。
【００６８】
次に、フラッシュメモリ１１の全てのメモリセルブロック（ブロック１〜４）のステータス情報記憶領域（１０１，２０１，３０１，４０１）および更新履歴情報記憶領域（１０２，２０２，３０２，４０２）の内容を読み込む（Ｓ５２）。全てのメモリセルブロックのステータス情報および更新履歴情報を読み込むと（Ｓ５３：Ｙｅｓ）、ステータス情報の「使用中」領域に０ｘ５Ａが書き込まれているブロック、すなわち現在使用中のメモリセルブロックを検索する（Ｓ５４）。このとき、「使用済」領域あるいは「故障」領域に０ｘ５Ａが書き込まれているものは除外する。
【００６９】
次に、現在使用中のメモリセルブロックがあり（Ｓ５５：Ｙｅｓ）、現在使用中のメモリセルブロックが複数ないとき（Ｓ５６：Ｎｏ）、検索したメモリセルブロックを現在使用中のメモリブロックとして特定する（Ｓ５７）。
【００７０】
一方、現在使用中のメモリセルブロックがなかったとき（Ｓ５５：Ｎｏ）、あるいは、現在使用中のメモリセルブロックが複数あったとき（Ｓ５６：Ｙｅｓ）、読み込んだ更新履歴情報記憶領域の内容から、カウンタ値が最大である（すなわち、直近のデータ更新処理におけるデータ更新先であることを示す値を記憶する）メモリセルブロックを検索する（Ｓ５８）。使用中のメモリセルブロックを検索できなかったときは、全てのメモリセルブロックが検索対象となる。また、使用中のメモリセルブロックを複数あったときは、それら複数のメモリセルブロックがカウンタ値の検索対象となる。
【００７１】
カウンタ値が最大であるメモリセルブロックを検索できたとき（Ｓ５９：Ｙｅｓ）、そのメモリセルブロックを現在使用中のメモリセルブロックとして特定する（Ｓ５７）。
【００７２】
一方、カウンタ値が最大であるメモリセルブロックを検索できなかったとき（Ｓ５９：Ｎｏ）、例えば工場出荷状態と判定して、ブロック１を「使用中」とする（Ｓ６０）。このとき、ブロック１を「使用中」とする前に、全ブロック（ブロック１〜４）の一括消去処理を実行してもよい。
【００７３】
図１１を用いて、ブロック特定処理の別例について説明する。なお、本処理は図１０の変形例であるので、図１０と同一の処理ステップについては同一の符号を付与し、ここでの詳細な説明は割愛する。また、本処理では、メモリセルブロック特定部は、更新履歴情報に直近のデータ更新処理におけるデータ更新先であることを示す内容が含まれているメモリセルブロックがあるときには、そのメモリセルブロックのステータス情報に現在使用中である旨の情報が含まれているとき、そのメモリセルブロックを現在使用中であるメモリセルブロックとしている。
【００７４】
フラッシュメモリ１１の、全てのメモリセルブロック（ブロック１〜４）のステータス情報記憶領域（１０１，２０１，３０１，４０１）および更新履歴情報記憶領域（１０２，２０２，３０２，４０２）の内容を読み込むと（Ｓ５３：Ｙｅｓ）、読み込んだ更新履歴情報記憶領域の内容から、カウンタ値が最大であるメモリセルブロックを検索する（Ｓ５３１）。
【００７５】
カウンタ値が最大であるメモリセルブロックを検索できたとき（Ｓ５３２：Ｙｅｓ）、かつ、検索したメモリセルブロックが複数でないとき（Ｓ５３３：Ｎｏ）、検索したメモリセルブロックのステータス情報を参照し、以下のように、ステータス情報に応じた処理を実行する（Ｓ５３４）。
・ステータス情報が「使用中」のとき：そのメモリセルブロックを継続して使用する。
・ステータス情報が「コピー中」のとき：図９のデータ更新処理（メモリセルブロックのコピー）の実行途中と推定できるので、データ更新処理をやり直す。このとき、コピーの前に、コピー先のメモリセルブロックの内容を一括消去してもよい。
・ステータス情報が「使用済」のとき：メモリセルブロック内のデータを他のメモリセルブロックにコピーする。つまり、図９のデータ更新処理を実行する。
・ステータス情報が「故障」のとき：上述のような故障対応処理を実行する。
・ステータス情報が上記以外のとき：「使用中」と見なす。
【００７６】
そして、ステータス情報が「使用中」のメモリセルブロックがあるときには、
そのメモリセルブロックを現在使用中のメモリセルブロックとして特定する（Ｓ５３７）。
【００７７】
検索した、カウンタ値最大のメモリセルブロックの数が複数でないとき（Ｓ５３３：Ｎｏ）、そのメモリセルブロックが「使用中」であるか否かを判定せずに、現在使用中のメモリセルブロックとして特定してもよい。
【００７８】
一方、カウンタ値が最大であるメモリセルブロックを検索できないとき（Ｓ５３２：Ｎｏ）、例えば工場出荷状態と判定して、ブロック１を「使用中」とする（Ｓ６０）。図８の初期化処理を実行してもよい。
【００７９】
また、カウンタ値が最大であるメモリセルブロックを複数検索したとき（Ｓ５３３：Ｙｅｓ）、検索した複数のメモリセルブロックに現在使用中のメモリセルブロックがあるか否かを検索する（Ｓ５３５）。検索の結果、現在使用中のメモリセルブロックが複数見つからなかったとき（Ｓ５３６：Ｎｏ）、検索されたメモリセルブロックを現在使用中のメモリセルブロックとして特定する（Ｓ５３７）。一方、現在使用中のメモリセルブロックが複数見つかったとき（Ｓ５３６：Ｙｅｓ）、そのうちのいずれを現在使用中のメモリセルブロックとするか特定できないため、上述のステップＳ６０の処理を実行する。
【００８０】
なお、上述の実施例で、カウンタ値をインクリメントする構成において、カウンタ値がオーバーフローしたときには、カウンタ値をゼロに戻すが、この場合の最大値はゼロとなる。また、ブロック１〜４において、ゼロを挟んでオーバーフロー前の値とゼロ以降の値とが記憶されているときは、オーバーフロー前の値を検索の対象から外すようにしてもよい。
【産業上の利用可能性】
【００８１】
車両以外の制御機器に用いられる不揮発性半導体記憶装置にも適用可能である。
【００８２】
以上、本発明の実施の形態を説明したが、これらはあくまで例示にすぎず、本発明はこれらに限定されるものではなく、特許請求の範囲の趣旨を逸脱しない限りにおいて、当業者の知識に基づく種々の変更が可能である。
【符号の説明】
【００８３】
１  ＩＣカード
２  ＥＣＵ
１０  ＣＰＵ（メモリ制御部，メモリセルブロック特定部）
１１  フラッシュメモリ（不揮発性メモリ）
２０  ＣＰＵ（メモリ制御部，メモリセルブロック特定部）
２１  フラッシュメモリ（不揮発性メモリ）
１０１，２０１，３０１，４０１  ステータス情報記憶領域
１０２，２０２，３０２，４０２  更新履歴情報記憶領域
ブロック１〜ブロック４  メモリセルブロック
【図１】
0005660521.tif 000002
【図２】
0005660521.tif 000003
【図３】
0005660521.tif 000004
【図４】
0005660521.tif 000005
【図５】
0005660521.tif 000006
【図６】
0005660521.tif 000007
【図７】
0005660521.tif 000008
【図８】
0005660521.tif 000009
【図９】
0005660521.tif 000010
【図１０】
0005660521.tif 000011
【図１１】
0005660521.tif 000012