JP2004310268A - フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム - Google Patents
フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム Download PDFInfo
- Publication number
- JP2004310268A JP2004310268A JP2003100286A JP2003100286A JP2004310268A JP 2004310268 A JP2004310268 A JP 2004310268A JP 2003100286 A JP2003100286 A JP 2003100286A JP 2003100286 A JP2003100286 A JP 2003100286A JP 2004310268 A JP2004310268 A JP 2004310268A
- Authority
- JP
- Japan
- Prior art keywords
- data
- address
- read
- flash memory
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】フラッシュメモリ消去単位ブロックに任意のデータ長を有する最新データを追加記憶させる。
【解決手段】消去ブロック単位毎にデータ書き換えを行う際に、ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し(ステップA1〜A4)、検索したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み(ステップA2,A9)、検索したデータが非消去状態である場合は、当該アドレス値に予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから最新データを書き込み(ステップA6,A9)、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから最新データを書き込む(ステップA6〜A9)。
【選択図】 図3
【解決手段】消去ブロック単位毎にデータ書き換えを行う際に、ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し(ステップA1〜A4)、検索したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み(ステップA2,A9)、検索したデータが非消去状態である場合は、当該アドレス値に予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから最新データを書き込み(ステップA6,A9)、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから最新データを書き込む(ステップA6〜A9)。
【選択図】 図3
Description
【0001】
【発明の属する技術分野】
本発明はフラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラムに係わり、特に書き込み回数を低減するフラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラムに関する。
【0002】
【従来の技術】
近年、半導体素子の微細化技術の進展に伴い、その半導体素子で構成するLSIも大規模化している。例えば、半導体メモリとしてダイナミック型ランダムアクセスメモリ(DRAM)やシンクロナス・ダイナミック・ランダムアクセス・メモリ(SDRAM)も実用化されている。これらの揮発性メモリに対し不揮発性メモリの分野では、読み出し専用の半導体記憶装置としてリードオンリメモリ(ROM)、電気的な書き換えが可能なEEPROM、フラッシュメモリがあり、これらのメモリも大容量化が進んでいる。
【0003】
フラッシュメモリは、EEPROMとしてブロックごとのデータまたは全ビットのデータを一括消去することができるフラッシュ型EEPROMのことであるが、このフラッシュメモリにたいして書き込みや消去などを行なう場合は、書き込み命令や消去命令などの設定コマンドをフラッシュメモリに対して与え、フラッシュメモリは、このコマンドに従って動作を実行する。
【0004】
また、フラッシュメモリはブロック単位の消去とバイト単位の書き込みが出来るメモリであるが、その初期状態は他のメモリと異なり全ブロックが論理レベルの“1”レベル状態になっており、この状態をフラッシュメモリの消去状態とする。
【0005】
上述したように、フラッシュメモリでは消去状態はメモリ領域が“1”レベルであり、データが書き込まれた状態は“0”レベルである。そのため、“0”レベルを書き込むことは出来ても“1”レベルを書き込むことは出来無いことになり、このことをフラッシュメモリの非対称性と称している。
【0006】
そのため、同じメモリ領域にデータを上書きする場合、既に書き込まれているデータを消去した後で上書きする必要がある。既に書き込まれたデータを消去する際にメモリ素子が劣化するため、フラッシュメモリには寿命があることが知られている。
【0007】
また、消去を行うための回路の規模が大きいこと、消去動作には時間がかかること、メモリ素子の磨耗の問題によりフラッシュメモリの消去は、アドレス単位ではなく、ある一定のブロック単位で行われるのが一般的である。
【0008】
上述した特徴をもつフラッシュメモリで、複数の頻繁に書き換えを行う小容量データを扱う場合には、1つのデータを書き換えるたびにブロック消去動作を行わなければならず、1回のデータ書き換え動作に際して、ブロックの消去時間分余計に時間がかかることになる。
【0009】
また、頻繁に消去を行うことで、フラッシュメモリの寿命が短くなるという問題も生じる。
【0010】
これらの従来フラッシュメモリの問題は、例えば特開平9−293027号公報に記載の不揮発性メモリの制御回路をフラッシュメモリに適用することによって、解決できる(特許文献1参照)。
【0011】
上述したこの従来技術による不揮発性メモリの書き込みデータのビット構成を示した図8を参照すると、このフラッシュメモリは6ビットのユーザデータ、パリティビット、巡回認識用ビットを持つ領域から構成される。
【0012】
巡回用ビットの使用例の動作説明用フローチャートを示した図9を参照すると、データの書き込みを行う際に、まず、アドレスポインタを1加算してデータを読みだす(処理ステップC1)。
【0013】
巡回認識用ビットが直前のアドレスの巡回認識用ビットの反転値であったら、そのアドレスが次にデータを書き込むべきアドレスである。
【0014】
アドレスポインタがブロック最終アドレスに達したか否か判断し(処理ステップC2)、最終アドレスを越えるとアドレスポインタをブロック先頭アドレスとし(処理ステップC3)、次に書き込む巡回認識用ビットは最新データの巡回認識用ビットの反転値とする(処理ステップC4)。
【0015】
また、最終アドレスに達していない場合、次に書き込む巡回認識用ビットは最新データの巡回認識用ビットと同じ値とする(処理ステップC5)。
【0016】
次に書き込むべき巡回認識用ビットの値が決定したら、現在のアドレスポインタの指し示すアドレスに、ユーザデータ、巡回認識用ビット、パリティビットから成る8ビットのデータを書き込む(処理ステップC6)。
【0017】
次に書き込んだ8ビットのデータを読み出し、書き込んだデータと同一か否かを判断し(処理ステップC7)、同一でなければ処理ステップC1へ戻り同一になるまで繰り返し、同一なると処理を終了する。
【0018】
【特許文献1】
特開平9−293027号公報(段落「0024」、「0039」、「0043」、図4。)。
【0019】
【発明が解決しようとする課題】
上述したように従来のフラッシュROMの制御は、フラッシュメモリの消去回数を抑えることができ、結果的にメモリの寿命を延ばすことが可能となった。
【0020】
しかし、この従来の方法では、最新データが格納されているアドレスを検索する際に、あらかじめ決められた間隔(書き込み単位毎)で巡回認識用ビットを参照する必要があるため、ユーザデータは一定のデータ長しか扱うことができないという問題点があった。
【0021】
本発明の目的は、上述した従来の欠点に鑑みなされたものであり、消去動作の回数を低減するとともに、最新データから見てアドレス増加方向の領域またはアドレス減少方向の領域に任意のデータ長を有する最新データを追加記憶させることが出来ること、当該ブロックの最新データの先頭アドレスを検索し、最新データを読み出すことが出来るフラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラムを提供することにある。
【0022】
【課題を解決するための手段】
本発明のフラッシュメモリの制御方法は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、前記最新データから見てアドレス増加方向の領域またはアドレス減少方向の領域に、前記ブロックの最大アドレスを越えない範囲内で任意のデータ長を有する最新データおよびその検索用チェックコードを追加記憶させることを特徴とする。
【0023】
本発明のフラッシュメモリの制御方法の他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、前記最新データの検索用チェックコードとして前記最新データのデータ長を書き込むとともに、検索用チェックコードは、書き込まれたユーザデータのアドレスに続けて、アドレス増加方向の領域、アドレス減少方向の領域またはユーザデータの一部として書き込み、最新データ読み出し時には検出した前記検索用チェックコードに基づき読み出すことにある。
【0024】
本発明のフラッシュメモリの制御方法のまた他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、ユーザプログラムが指示する書き込み先ブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長に基づき、データ書き換え対象ブロックの格納データ値を更新することにある。
【0025】
本発明のフラッシュメモリの制御方法のさらに他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返しかつ書き換えた最新データを読み出す際に、ユーザプログラムが指示するブロック番号に基づき、データ検索用のチェックコードから最新データを検索し該当ブロックの格納データ値として読み出すことにある。
【0026】
本発明のフラッシュメモリの制御方法のさらにまた他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返しかつ書き換えた最新データを読み出す際に、前記ブロックのブロックサイズから前記最新データの検索用チェックコード値を減じた値を最大値とする可変データ長のユーザデータを格納し、かつその最新データを参照することにある。
【0027】
本発明のフラッシュメモリの制御方法の他の特徴は、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み、検出したデータが“1”レベル以外のデータである場合は、当該アドレスに予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから前記最新データを書き込むことにある。
【0028】
本発明のフラッシュメモリの制御方法のまた他の特徴は、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが全て論理レベルの“1”レベルであれば最終アドレスから先頭アドレスまで順次に前記最新データを書き込み、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算して求めたアドレス値が先頭アドレス値よりも大きければ当該アドレスから先頭アドレスまで順次に前記最新データを書き込み、アドレス値が先頭アドレス値よりも小さければ当該ブロックのデータを消去して最終アドレスから先頭アドレスまで前記最新データを書き込むことにある。
【0029】
本発明のフラッシュメモリの制御方法のさらに他の特徴は、予め定める消去ブロック単位毎にデータ読み出しを行う際に、前記ブロックの最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば当該ブロックはブランク状態と判断し、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算して求めたアドレス値を先頭アドレスとし、その先頭アドレスから前記最新データを読み出すことにある。
【0030】
本発明のフラッシュメモリの制御方法のさらにまた他の特徴は、予め定める消去ブロック単位毎にデータ読み出しを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが全て論理レベルの“1”レベルであれば当該ブロックはブランク状態と判断し、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算して求めたアドレス値を先頭アドレスとして当該アドレスから前記最新データを読み出すことにある。
【0031】
本発明のフラッシュメモリの制御方法の他の特徴は、ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
前記ユーザユーザプログラムがそれぞれの前記インタフェース関数をユーザプログラムROMからコールすることによって前記フラッシュメモリ領域のデータ書き込み制御を行う際に、前記ユーザプログラムROMが前記書き込みインタフェース関数をコールするとともに、引数としてデータ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すインタフェース関数コール処理と、
書き込み処理が終了した時点で、ステータスデータを受け取るステータス受け取り処理と、
コールされた前記書き込みインタフェース関数が、前記データ書き込み処理関数をコールし、最新データ書き込み処理を行わせるとともに、引数として、前記最新データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すデータ書き込み処理関数コール処理と、
書き込み処理が終了した時点で、前記データ書き込み処理関数からステータスデータを受け取るステータスデータ受け取り処理とを実行することにある。
【0032】
また、前記データ書き込み処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの最終アドレスとして先頭アドレスの方向に向かって1ワードずつデータを読み出していくアドレス検索処理と、
読み出したアドレスが先頭アドレスでなければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが“1”レベル以外のデータであれば当該アドレス値から数値4を減じる処理を先頭アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値に書き込みデータ長の値および数値4を加算するとともに加算結果が最終アドレス値を越える場合はブロック消去を実行した後、先頭アドレスをポイントする第2のデータ検索処理と、前記第1および前記第2のデータ検索処理によりデータ書き込み領域を特定した後、先頭アドレスから最終アドレス方向に順次に任意のデータ長のユーザデータを書き込み、その後のアドレスに検索用チェックコードとしてデータ長の書き込みを実行することができる。
【0033】
さらに、前記データ書き込み処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの先頭アドレスとして最終アドレス方向に向かって1ワードずつデータを読み出すアドレス検索処理と、
読み出したアドレスが最終アドレスより小さければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値に数値4を加算する処理を最終アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値から書き込みデータ長の値および数値4を減算するとともに減算結果が先頭アドレス値より小さい場合はブロック消去を実行した後、最終アドレスをポイントする第2のデータ検索処理と、
前記第1および前記第2のデータ検索処理によりデータ書き込み領域を特定した後、最終アドレスから先頭アドレス方向に向かって順次データを書き込みを実行することにある。
【0034】
本発明のフラッシュメモリの制御方法のまた他の特徴は、ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
前記ユーザプログラムがそれぞれ対応する前記インタフェース関数を前記ユーザプログラムからコールすることによって前記フラッシュメモリ領域からの最新データの読み出し制御を行う際に、前記読み出しインタフェース関数をコールするとともに、引数として、前記最新データの読み出しを行うブロック番号を渡すインタフェース関数コール処理と、
読み出し処理が終了した時点で、読み出した前記最新データを受け取る読み出しデータ受取処理と、
コールされた前記読み出しインタフェース関数が、前記データ読み出し処理関数をコールし、前記最新データの読み出し処理を行わせるとともに、引数として、前記最新データの読み出しを行うブロック番号を渡すデータ読み出し処理関数コール処理と、
読み出し処理が終了した時点で、前記データ読み出し処理関数から読み出した前記最新データを受け取る読み出しデータ受取処理とを実行することにある。
【0035】
また、前記データ読み出し処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの最終アドレスとして先頭アドレス方向に向かって1ワードずつデータを読み出すアドレス検索処理と、読み出したアドレスが先頭アドレスより大きければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値から数値4を減じる処理を先頭アドレスに達するまで順次繰り返し、先頭アドレスに達すると当該ブロック内は全て消去状態でありブロックとしてはブランク状態と判断する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値から読み出しデータ長の値を減算するとともに減算結果を先頭アドレス値として抽出し、そのアドレスから順次データを読み出す第2のデータ検索処理とを実行することができる。
【0036】
さらに、前記データ読み出し処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの先頭アドレスとして最終アドレスに向かって1ワードずつデータを読み出すアドレス検索処理と、
読み出したアドレスが最終アドレスより小さければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値に数値4を加算する処理を最終アドレスに達するまで順次繰り返し、最終アドレスに達すると当該ブロック内は全て消去状態でありブロックとしてはブランク状態と判断する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、読み出したアドレス値から、読み出したデータ長の値を減算するとともに減算結果を先頭アドレス値として抽出し、抽出したアドレスから順次データを読み出す第2のデータ検索処理とを実行することにある。
【0037】
本発明のフラッシュメモリの制御回路の特徴は、CPUおよびユーザプログラムの制御の下に、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、アドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから前記最新データを書き込むことで、ブロックの書き込み回数を低減する書き込み回数制御機能を有することを特徴とする。
【0038】
本発明のフラッシュメモリの制御回路の他の特徴は、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段と、検索したデータが消去状態であるかまたはブロック消去を実行した後の状態で全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込む手段と、検索したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算する演算手段と、加算して求めたアドレス値と最終アドレス値とを比較する手段と、比較した結果、加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去する手段と、消去後に先頭アドレスから前記最新データを書き込む手段とを備えることにある。
【0039】
また、前記格納データを検索する手段は、最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段であり、前記最新データを書き込む手段は、最終アドレスから先頭アドレス方向に順次に前記最新データを書き込む手段であり、前記演算手段は、当該アドレスから予め定める数値を減算する手段であり、前記消去する手段は、減算して求めたアドレス値が先頭アドレス値よりも小さければ当該ブロックのデータを消去する手段である。
【0040】
本発明のフラッシュメモリの制御回路のまた他の特徴は、全体を制御するCPUと、その制御プログラムおよびユーザプログラムをもつROMと、データ格納用のフラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリから予め定めるブロック単位毎にデータ読み出しを行う際に、前記ブロックの最終アドレスから先頭アドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段と、検索したデータが消去状態である全て論理レベルの“1”レベルであれば当該ブロックはブランク状態であると判断する手段と、検索したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算する手段と、減算で求めたアドレス値を先頭アドレスとしそのアドレスから最新データを読み出す手段とを備えたことにある。
【0041】
また、前記格納データを検索する手段は、ブロックの先頭アドレスから最終アドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段であり、前記減算手段は、検索したデータが非消去状態である“0”レベルのデータを有する場合に、当該アドレスから予め定める数値を減算する手段であり、前記最新データを読み出す手段は、減算で求めたアドレス値を先頭アドレスとしそのアドレスから最新データを読み出す手段である。
【0042】
【発明の実施の形態】
まず、本発明の概要を述べると、本発明によるフラッシュメモリ内蔵の半導体装置およびフラッシュメモリの制御方法は、消去動作に要する時間の削減に対して、ブロック毎に小容量データ書き換えを頻繁に行うシステムにおいてデータの書き換えを行う際に、ブロック内の領域を最終アドレスから先頭アドレスに向かって検索し、ブロック内が消去状態の時と書き込みデータがブロック領域を越えない時とブロック領域を越える場合はブロック消去を実行した時とのそれぞれの時に、最新データをブロック内の先頭アドレスから最終アドレス方向に向かって書き込みを実行する。
【0043】
一方、ブロック内の領域を先頭アドレスから最終アドレスに向かって検索し、ブロック内が消去状態の時と書き込みデータがブロック領域を越えない時とブロック領域を越える場合はブロック消去を実行した時とのそれぞれの時に、最新データをブロック内の最終アドレスから先頭アドレス方向に向かって書き込みを実行する。
【0044】
また、検索用チェックコードを、ユーザデータと共に書き込むことによって、該当ブロックの最新データの先頭アドレスを検索し、最新データを読みだすことができる、という工夫を行っている。なお、ここでは1パラメータを格納する領域、およびフラッシュメモリの消去単位をブロックと称する。
【0045】
本発明のフラッシュメモリ内蔵の半導体装置およびフラッシュメモリの制御方法の、第1の実施の形態で制御されるメモリブロック領域におけるデータ配置領域を示した図1を参照すると、ブロック先頭アドレスからブロック最終アドレスの方向、つまりアドレスが増加する方向に先ずユーザデータ1が書き込まれ、その後に検索用のチェックコードとしてユーザデータ1のデータ長が書き込まれている。
【0046】
そのユーザデータ1のチェックコードの次にユーザデータ2が書き込まれ、その後にチェックコードとしてユーザデータ2のデータ長が書き込まれている。その後の領域は、ここではブランク(16進数のFFh)領域になっている。
【0047】
一方、本発明の第1の実施の形態が適用される半導体装置は、その関数関係の概要のソフトウェアモジュール構成を示した図2を参照すると、ユーザプログラムを格納するROM10と、データ格納用のフラッシュメモリ11と、後述するCPU14からの読み出し、書き込みを指示するコマンドやアドレスデータ等に応じて、制御信号をフラッシュメモリに供給し、書き込み読み出しを制御するフラッシュメモリ制御回路12と、フラッシュメモリ制御回路12の制御の下にユーザプログラムからコールされフラッシュメモリ11にデータ書き込みを行うための書き込みインタフェース関数D1およびデータ書き込み処理関数D3並びに読み出し制御を行うための読み出しインタフェース関数D2およびデータ読み出し処理関数D14を有するフラッシュメモリ・セルフ・プログラミング・ライブラリ13と、ユーザプログラムに基づきフラッシュメモリ11から読み出したデータを参照しかつフラッシュメモリ制御回路12と協働してフラッシュメモリ11の制御を行うCPU14とを備える。
【0048】
すなわち、フラッシュメモリ・セルフ・プログラミング・ライブラリ13に含まれる書き込みインタフェース関数D1、読み出しインタフェース関数D2、データ書き込み処理関数D3、データ読み出し処理関数D4からなる関数とユーザプログラムとの相互関係は、ユーザプログラムROM10のユーザプログラムが、CPU14およびフラッシュメモリ制御回路12の制御の下に、各インタフェース関数D1,D2をユーザプログラムROM10からコールすることによって、フラッシュメモリ領域のデータ制御を行う。
【0049】
なお、以下の説明および請求項において、検索する手段はアドレスポインタに対応し、演算手段および比較手段はCPUに対応し、最新データを書き込む手段および消去する手段はフラッシュメモリ制御回路に対応するものとする。
【0050】
次に、インタフェース関数の構成を以下に示す。
(1)書き込みインタフェース関数は、該当ブロックに次のデータを書き込む処理である。
【0051】
引数1:ブロック番号
引数2:書き込みデータ先頭アドレス
引数3:書き込みデータ長
戻り値:ステータスデータ(正常終了、パラメータエラー、書き込みエラー消去エラー)
(2)読み出しインタフェース関数は、該当ブロックの最新データを検索し読み出す処理である。
【0052】
引数1:ブロック番号
引数2:読み出しデータバイト数 戻り値:読み出しデータ
なお、関数の引数の順番は、この通りでなくてもよい。
【0053】
フラッシュメモリの初期状態はブランク状態(ALL−FFh)とする。前述した図1に示すように、最新データは、ブロック先頭アドレスからブロック最終アドレスへ向けて書き込まれ、その直後にデータ検索用のチェックコードを書き込む。
【0054】
データの書き込みおよび読み出し単位は1ワード(4バイト:XXXXXXXXh、「X」1個は4ビット)とする。最後に書かれたユーザデータが、そのブロックのパラメータ値となる。
【0055】
図2を参照すると、ユーザプログラムがデータの書き込みを行う場合、書き込みインタフェース関数D1を引数D5でコールする。この時の引数D5として、ユーザプログラムはデータ書き込みを行うブロック番号、書き込みデータ先頭アドレス、書き込みデータ長を書き込みインタフェース関数に渡す。
【0056】
また、書き込み処理が終了した時点で、ユーザプログラムは書き込みインタフェース関数D1からステータスデータを受け取る(D7)。書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、データ書き込みの処理を行わせる。
【0057】
この時の引数D6として、データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を、書き込みインタフェース関数D1はデータ書き込み処理関数D3に渡す。
【0058】
また、書き込み処理が終了した時点で、ステータスデータD8をデータ書き込み処理関数D3から受け取る。データ書き込みの詳細な動作は後述する。
【0059】
同様に、データの読み出しを行う場合、ユーザプログラムは読み出しインタフェース関数D2をコールする。この時引数D11として、データ読み出しを行うブロック番号を読み出しインタフェース関数に渡す。
【0060】
また、読み出し処理が終了した時点で、ユーザプログラムは読み出しインタフェース関数D2から読み出しデータD9を受け取る。読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数D4をコールし、データ読み出し処理を行わせる。この時引数D12として、読み出しインタフェース関数D2はデータ読み出しを行うブロック番号をデータ読み出し処理関数D4に渡す。
【0061】
また、読み出し処理が終了した時点で、読み出しインタフェース関数D2は読み出しデータD10を受け取る。データ読み出しの詳細な動作は後述する。
【0062】
次に、データ書き込みのさらに詳細な動作を説明する。第1の実施形態のデータ書き込み処理関数のフローチャートを示した図3を参照すると、まず、引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。続いてそのブロックの最新データのアドレスを検索するために、アドレスポインタをブロック最終アドレスとして先頭アドレスに向かって1ワードずつデータを読み出すアドレス検索処理を実行する(処理ステップA1)。
【0063】
次に、読み出したアドレスが先頭アドレスでなければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理を実行する。すなわち1ワードずつデータを読みだしていく(処理ステップA2,A3)。
【0064】
この時、読み出したデータが消去状態の“FFFFFFFFh”であれば(処理ステップA4)、アドレスポインタを“4”減算する処理を先頭アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理を実行する(処理ステップA5)。
【0065】
アドレスポインタがブロック先頭アドレスに達した場合(処理ステップA2)、そのブロックは消去状態であるため、ブロック先頭アドレスから、任意のデータ長のユーザデータを書き込む。
【0066】
また、検索用のチェックコードとして、書き込んだデータのデータ長をユーザデータの次のアドレスに書き込む(処理ステップA9)。
【0067】
もし、読み出したデータが“FFFFFFFFh”以外の値であれば(処理ステップA4)、そのデータがチェックコードであるので、検索を終了する(アドレスポインタ=チェックコードが格納されているアドレスの状態)。
【0068】
次に、データを書き込む際にブロック最終アドレスを越えるかどうかの判定を行い(処理ステップA6)、越えるようであれば、ブロック消去をして(処理ステップA7)、アドレスポインタをブロック先頭アドレスとする(処理ステップA8)。
【0069】
処理ステップA6における「ADRS+書き込みデータ長+4+4」は、この判定の直前でチェックコードを検出しているので、アドレスポインタ(ADRS)は、ブランク領域から「−4」のアドレス(チェックコードが格納されているアドレス)を指し示している。そこで、次に行う書き込み動作のためにブランク領域を指し示す必要があるので「+4」している。
【0070】
つまり、「ADRS(チェックコードが格納されているアドレス)+4(ブランク領域の先頭を指すための加算)」はブロックの最終アドレス方向に書き込みを開始するアドレスであり、「書き込みデータ長+4(チェックコードのデータ長)」は書き込むデータのデータ長である。
【0071】
上術した処理によりデータを書き込むべきアドレスを特定できたので、現在のアドレスポインタの位置から、任意のデータ長のユーザデータを書き込む(処理ステップA9)。
【0072】
また、検索用のチェックコードとして、書き込んだデータのデータ長をユーザデータの次のアドレスに書き込む(処理ステップA9)。
【0073】
尚、上述の説明では、検索用のチェックコードはユーザデータとは独立したデータとして区別し、ユーザデータの次のアドレスに書き込んでいるが、データの一部として書き込むことでもよい。その場合は、その部分がチェックコードであることが予め判別できるようにしておく。
【0074】
次に、図2を併せて参照しながら、データ読み出し処理の詳細な動作を説明する。
【0075】
最新データを読み出す場合には、書き込み時と同様に、引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。
【0076】
生成したブロック先頭アドレス、最終アドレスに基づき、アドレスポインタをブロック最終アドレスとし(処理ステップB1)、1ワードずつデータを読み出していく(処理ステップB3)。
【0077】
この時、読み出したデータが“FFFFFFFFh”であれば(処理ステップB4)、アドレスポインタを「4」減算する(処理ステップB5)。アドレスポインタがブロック先頭アドレスに達したら(処理ステップB2)、そのブロックは消去状態であり、ブロックとしてはブランク状態と判断するデータ検索処理を実行する(請求項における第1の検索処理に対応)。
【0078】
もし、読み出したデータが“FFFFFFFFh”以外の値が書き込まれた非消去状態、すなわち書き込み状態であれば(処理ステップB4)、そのデータがチェックコード(最新データのデータ長)であるので、アドレスポインタの値からデータ長を減算した値を、最新データ先頭アドレスとして抽出する(処理ステップB6)。
【0079】
次に、抽出したアドレスのデータを読み出し(処理ステップB7)、データ読み出し処理関数D4の戻り値とする(処理ステップB6およびB7が請求項における第2の検索処理に対応)。
【0080】
次に具体例を用いて、本実施の形態の動作を説明する。
【0081】
データ読み出し処理関数のフローチャートを示した図4を参照すると、例えば、書き込み対象ブロック番号は“2”、ブロック2の先頭アドレスは“FFFF2000h”、ブロック2の最終アドレスは“FFFF2FFFh”、書き込みデータが格納されている先頭アドレスを“00000000h”、書き込みデータ長を“10h”とする。
【0082】
図2を併せて参照すると、ユーザプログラムは書き込みインタフェース関数D1をコールし、ブロック番号“2”、書き込みデータ先頭アドレス“00000000h”、書き込みデータ長“10h”を引数D5として渡す。
【0083】
書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、ブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を引数D6として渡し、データ書き込み処理を行わせる。
【0084】
データ書き込み処理関数D3がコールされると、まずブロック番号“2”から、ブロック先頭アドレス“FFFF2000h”と、ブロック最終アドレス“FFFF2FFFh”を生成する。この時、データの読み出し単位は1ワード(4バイト)単位であるから、アドレスポインタ“ADRS”を、ブロック最終アドレス“FFFF2FFFh”から4バイトを減じたアドレス“FFFF2FFCh”とする(処理ステップA1)。
【0085】
次に、アドレスポインタ“ADRS”の指す“FFFF2FFCh”のデータを読み出す(処理ステップA3)。読み出したデータが、消去状態を示す“FFFFFFFFh”だったなら(処理ステップA4)、アドレスポインタ“ADRS”の“FFFF2FFCh”から「4」減算し(処理ステップA5)、“FFFF2FF8h”となる。
【0086】
次に、アドレスポインタ“ADRS”の指す“FFFF2FF8h”をブロック先頭アドレス“FFFF2000h”と比較し(処理ステップA2)、先頭アドレスよりも値が大きいため、再びアドレスポインタ“ADRS”の指す“FFFF2FF8h”のデータを読み出す(処理ステップA3)。
【0087】
読み出したデータが消去状態の“FFFFFFFFh”以外の値、例えば“00000020h”である場合(処理ステップA4)、そのデータがチェックコードである。
【0088】
次に、データを書き込む際に、書き込むメモリ領域がブロック最終アドレスを越えるかどうかの判定を行う(処理ステップA6)。
【0089】
消去状態であるアドレス“FFFF2FFCh”に、書き込みデータ長“10h”と、チェックコード長“04h”を加えた値“FFFF3010h”は、ブロック最終アドレス“FFFF2FFF”を越えているため(処理ステップA6)、このブロックにはユーザデータを追加記禄できない。
【0090】
そこで、ブロック消去を行い(処理ステップA7)、アドレスポインタ“ADRS”の指す値をブロック先頭アドレス“FFFF2000h”とする(処理ステップA8)。
【0091】
上述した処理を実行した結果、データを書き込むべきアドレスを特定できたので、アドレス“00000000h”から“00000010h”に格納されているユーザデータを“FFFF2000h”から書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA9)、ステータスを返す(D8)。
【0092】
処理ステップA2において、アドレスポインタ“ADRS”が“FFFF2000h”となった場合、そのブロックは消去済みであるため、ブロック先頭アドレス“FFFF2000h”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA9)、ステータスD8を返す。
【0093】
処理ステップA6において、アドレスポインタ“ADRS”が“FFFF2020h”だった場合、消去状態であるアドレス“FFFF2024h”に書き込みデータ長と、チェックコード長を加えた値は“FFFF2038h”となり、ブロック最終アドレス“FFFF2FFFh”に満たないため、そのブロックにはユーザデータの追加記録を行うことができる。
【0094】
この時、消去状態であるアドレス“FFFF2024h”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み処理ステップA9)、ステータスD8を返す。
【0095】
また、書き込みインタフェース関数D1からユーザプログラムへステータスD7を返す。
【0096】
同様に、データ読み出しの動作を具体例を用いて説明する。
【0097】
例えば、データ読み出し対象ブロック番号は“3”、ブロック3の先頭アドレスは“FFFF3000h”、ブロック3の最終アドレスは“FFFF3FFFh”とする。
【0098】
図4に示すように、ユーザは読み出しインタフェース関数D2をコールし、ブロック番号“3”を引数D11として渡す。
【0099】
読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数D4をコールし、ブロック番号を引数D12として渡し、データ読み出し処理を行わせる。
【0100】
データ読み出し処理関数D4がコールされると、まずブロック番号“3”から、ブロック先頭アドレス“FFFF3000h”と、ブロック最終アドレス“FFFF3FFFh”を生成する。この時、データの読み出し単位は1ワード(4バイト)単位であるから、アドレスポインタ“ADRS”の指すアドレス値を“FFFF3FFCh”とする(処理ステップB1)。
【0101】
次に、アドレスポインタ“ADRS”の指すアドレス“FFFF3FFCh”のデータを読みだす(処理ステップB3)。読み出したデータが、“FFFFFFFFh”だったなら(処理ステップB4)、アドレスポインタ“ADRS”を「4」減算し(処理ステップB5)、次のアドレスは“FFFF3FF8h”となる。
【0102】
次に、アドレスポインタ“ADRS”の指すアドレス“FFFF3FF8h”をブロック先頭アドレス“FFFF3000h”と比較し(処理ステップB2)、先頭アドレスよりも値が大きいため、再びアドレスポインタ“ADRS”の指すアドレス“FFFF3FF8h”のデータを読み出す(処理ステップB3)。
【0103】
読み出したデータが消去状態“FFFFFFFFh”以外、例えば“00000030h”だったなら(処理ステップB4)、そのデータがチェックコードであり、アドレス“FFFF3FF8h”に格納されているデータのデータ長であることを示している。
【0104】
よって、現在のアドレスポインタ“ADRS”の値である“FFFF3FF8h”からデータ長“30h”を減算した値“FFFF3FC8h”が最新データの先頭アドレスとなる(処理ステップB6)。
【0105】
抽出したアドレス“FFFF3FC8h”からデータ長“30h”分のデータを読み出し、読み出しインタフェース関数D2へステータスD10として返す。
【0106】
また、読み出しインタフェース関数D2からユーザプログラムへ、読み出しデータD9を返す。
【0107】
処理ステップB2において、アドレスポインタ“ADRS”の指すアドレス値が“FFFF3000h”となった場合は、そのブロックは消去状態であるため、データは存在しない。
【0108】
上述した本発明のフラッシュメモリ内蔵の半導体装置およびフラッシュメモリの制御方法の第1の実施の形態によれば、消去回数を抑えることによってフラッシュメモリの寿命を延ばすことができるだけでなく、最大で“(ブロックサイズ)−(チェックコード)”までの可変データ長のユーザデータを格納でき、かつその最新データを参照することができるようになり、従来技術では一定のデータ長のユーザデータしか扱うことができなかった問題点を解決した。
【0109】
次に、本発明の第2の実施の形態を説明する。
【0110】
第2の実施の形態におけるメモリ領域の配置を示した図5を参照すると、ブロック最終アドレスからブロック先頭アドレスの方向、つまりアドレスが減少する方向に先ずユーザデータ1が書き込まれ、その前のアドレスにチェックコードとしてユーザデータ1のデータ長が書き込まれている。
【0111】
そのユーザデータ1のチェックコードの次にユーザデータ2が書き込まれ、その上のアドレスにチェックコードとしてユーザデータ2のデータ長が書き込まれている。さらにその上の領域は、ブロック先頭アドレスまで、ここではブランク(16進数のFFh)領域になっている。
【0112】
なお、ここでも前述したように検索用のチェックコードはユーザデータとは独立したデータとして区別し、ユーザデータの次のアドレスに書き込んでいるが、データの一部として書き込むことでもよい。その場合は、その部分がチェックコードであることが予め判別できるようにしておく。
【0113】
一方、本発明の第2の実施の形態が適用されるシステムは、その関数関係の概要は前述した図2の構成と同様である。
【0114】
すなわち、書き込みインタフェース関数D1、読み出しインタフェース関数D2、データ書き込み処理関数D3、データ読み出し処理関数D4から成り、ユーザプログラムは、CPU14の制御の下に、各インタフェース関数D1〜D4をユーザプログラムROM10に格納されたユーザプログラムからコールすることによって、フラッシュメモリ領域のデータ制御を行う。
【0115】
ここでもフラッシュメモリ11の初期状態はブランク状態(ALL−FFh)とする。
【0116】
図5において、データはブロック最終アドレスからブロック先頭アドレスへ向けて書き込まれ、そのデータの直後にデータ検索用のチェックコードが書き込まれる。データの書き込みおよび読み出し単位は1ワード(4バイト)とする。最後に書かれたユーザデータが、そのブロックのパラメータ値となる。
【0117】
前述した図2を参照すると、ユーザプログラムはデータの書き込みを行う場合、書き込みインタフェース関数D1をコールする。
【0118】
この時引数D5として、データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を書き込みインタフェース関数D1に渡す。
【0119】
また、書き込み処理が終了した時点で、書き込みインタフェース関数D1からステータスデータを受け取る。書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、データ書き込みの処理を行わせる。データ書き込みの詳細な動作は後述する。
【0120】
同様に、データの読み出しを行う場合、読み出しインタフェース関数D2をコールする。この時引数D9として、データ読み出しを行うブロック番号を読み出しインタフェース関数D2に渡す。
【0121】
また、読み出し処理が終了した時点で、読み出しインタフェース関数D2から読み出したデータを受け取る。読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数をコールD4し、データ読み出し処理を行わせる。データ読み出しの詳細な動作は後述する。
【0122】
まず第2の実施の形態におけるデータ書き込みの詳細な動作を説明する。
【0123】
第2の実施の形態におけるデータ書き込み処理関数のフローチャートを示した図6を参照すると、まず、引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。
【0124】
その生成されたブロックの最新データのアドレスを検索するために、アドレスポインタ“ADRS”をブロック先頭アドレスとし(処理ステップA11)、1ワードずつデータを読み出していく(処理ステップA13)。
【0125】
この時、読み出したデータが“FFFFFFFFh”であれば(処理ステップA14)、アドレスポインタ“ADRS”を「4」加算する(処理ステップA15)。アドレスポインタ“ADRS”がブロック最終アドレスに達した場合(処理ステップA12)、そのブロックは消去状態であるため、ブロック最終アドレスから、任意のデータ長のユーザデータを書き込む。
【0126】
また、検索用チェックコードとして、書き込んだデータのデータ長をユーザデータの次(先頭アドレス方向)のアドレスに書き込む(処理ステップA19)。
【0127】
もし、読み出したデータが消去状態の“FFFFFFFFh”以外の値であれば(処理ステップA14)、そのデータがチェックコードであるので、検索を終了する。すなわち、アドレスポインタ=チェックコードが格納されているアドレスの状態である。
【0128】
次に、データを書き込む際にその書き込むデータがブロック先頭アドレスを越えるかどうかの判定を行い(処理ステップA16)、越えるようであれば、ブロック消去をして(処理ステップA17)、アドレスポインタ“ADRS”をブロック最終アドレスとする(処理ステップA18)。
【0129】
処理ステップA16における「ADRS−書き込みデータ長−4−4」は、この判定の直前でチェックコードを検出しているので、アドレスポインタ(ADRS)は、ブランク領域から「+4」のアドレス(チェックコードが格納されているアドレス)を指し示している。そこで、次に行う書き込み動作のためにブランク領域を指し示す必要があるので「−4」している。
【0130】
つまり、「ADRS(チェックコードが格納されているアドレス)−4(ブランク領域の先頭を指すための減算)」はブロックの先頭アドレス方向に書き込みを開始するアドレスであり、「書き込みデータ長−4(チェックコードのデータ長)」は書き込むデータのデータ長である。
【0131】
上述のフローによりデータを書き込むべきアドレスを特定できたので、現在のアドレスポインタ“ADRS”の位置から、任意のデータ長のユーザデータを書き込む。
【0132】
また、検索用チェックコードとして、書き込んだデータのデータ長をユーザデータの次のアドレス(ここでは先頭アドレス方向に減少したアドレス)に書き込み(処理ステップA19)、データ書き込みの動作を終了する。
【0133】
次にデータ読み出しの動作を詳細に説明する。
【0134】
第2の実施の形態におけるデータ読み出し処理関数のフローチャートを示した図7を参照すると、最新データを読み出す場合には、書き込み時と同様に、まず引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。
【0135】
アドレスポインタ“ADRS”をブロック先頭アドレスとし(処理ステップB11)、1ワードずつデータを読み出していく(処理ステップB13)。
【0136】
この時、読み出したデータが“FFFFFFFFh”であれば(処理ステップB14)、アドレスポインタ“ADRS”を「4」加算する(処理ステップB15)。
【0137】
アドレスポインタ“ADRS”がブロック最終アドレスに達したら(処理ステップB12)、そのブロックは消去状態である。もし、読み出したデータが“FFFFFFFFh”以外の値であれば(処理ステップB14)、そのデータがチェックコード(最新データのデータ長)であるので、アドレスポインタ“ADRS”にデータ長を加算した値を、最新データ先頭アドレスとして抽出する(処理ステップB16)。
【0138】
次に、抽出したアドレスのデータを読み出し(処理ステップB17)、関数の戻り値とする。
【0139】
上述した書き込みおよび読み出し動作を、具体例を用いながら説明する。
【0140】
例えば、書き込み対象ブロック番号は“2”、ブロック2の先頭アドレスは“FFFF2000h”、ブロック2の最終アドレスは“FFFF2FFFh”、書き込みデータが格納されている先頭アドレスを“00000000h”、書き込みデータ長を“10h”とする。
【0141】
ここでも図2に示すように、ユーザプログラムはユーザプログラムROM10からフラッシュメモリ・セルフ・プログラミング・ライブラリ13に含まれる書き込みインタフェース関数D1をコールし、ブロック番号“2”、書き込みデータ先頭アドレス“00000000h”および書き込みデータ長“10h”を引数D5として渡す。
【0142】
書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、ブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を引数D6として渡し、データ書き込み処理を行わせる。
【0143】
データ書き込み処理関数がコールされると、まずブロック番号“2”から、ブロック先頭アドレス“FFFF2000h”と、ブロック最終アドレス“FFFF2FFFh”とを生成する。この時、アドレスポインタ“ADRS”を“FFFF2000h”とする(処理ステップA11)。
【0144】
次に、アドレスポインタ“ADRS”の指示する“FFFF2000h”のデータを読み出す(処理ステップA13)。読み出したデータが、“FFFFFFFFh”だったなら(処理ステップA14)、アドレスポインタ“ADRS”の指す“FFFF2000h”を「4」加算し(処理ステップA15)、“FFFF2004h”となる。
【0145】
この時、データ読み出し単位は1ワード(4バイト)であるから、アドレスポインタ“ADRS”の“FFFF2000h”をブロック最終アドレス“FFFF2FFCh”と比較し(処理ステップA12)、最終アドレスよりも値が小さいため、再びアドレスポインタ“ADRS”のデータを読み出す(処理ステップA13)。
【0146】
読み出したデータが消去状態の“FFFFFFFFh”以外、例えば“00000020h”だったなら(処理ステップA14)、そのデータがチェックコードである。
【0147】
次に、最終アドレスから先頭アドレス方向へ順次にデータを書き込んで行ったとき際に、ブロック先頭アドレスを越えるかどうかの判定を行う(処理ステップA16)。
【0148】
消去状態であるアドレス“FFFF2000h”から、書き込みデータ長“10h”およびチェックコード長“04h”を減算した値“FFFF1FECh”は、ブロック先頭アドレス“FFFF2000”を越えているため(処理ステップA16)、このブロックにはユーザデータを追加記録できない。
【0149】
そこで、ブロック消去を行い(処理ステップA17)、アドレスポインタ“ADRS”をブロック最終アドレス“FFFF2FFCh”とする(処理ステップA18)。
【0150】
データを書き込むべきアドレスを特定できたので、“00000000h”から“00000010h”に格納されているユーザデータを“FFFF2FFCh”から書き込み、続けて先頭アドレス方向の次のアドレスにユーザデータのデータ長“10h”を書き込み(処理ステップA19)、ステータスD8を返す。
【0151】
処理ステップA12において、アドレスポインタ“ADRS”が“FFFF2FFCh”となった場合、そのブロックは消去済みであるため、ブロック最終アドレス“FFFF2FFCh”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA19)、ステータスD8を返す。
【0152】
処理ステップA16において、アドレスポインタ“ADRS”が“FFFF2FC4h”だった場合、消去状態であるアドレス“FFFF2FC0h”から書き込みデータ長およびチェックコード長を減算した値は“FFFF2FACh”となり、ブロック先頭アドレス“FFFF2000h”に達しないため、そのブロックにはユーザデータの追加記録を行うことができる。
【0153】
この時、消去状態であるアドレス“FFFF2FC0h”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA19)、ステータスD8を返す。また、書き込みインタフェース関数D1からユーザへステータスD7を返す。
【0154】
次に、図7を参照しながら同様に、データ読み出しの動作を具体例を用いて説明する。
【0155】
例えば、データ読み出し対象ブロック番号は“3”、ブロック3の先頭アドレスは“FFFF3000h”、ブロック3の最終アドレスは“FFFF3FFFh”とする。
【0156】
ユーザはフラッシュメモリ・セルフ・プログラミング・ライブラリ12に含まれる読み出しインタフェース関数D2をユーザプログラムROM13からコールし、ブロック番号“3”を引数D11として渡す。
【0157】
読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数D4をコールし、ブロック番号を引数D12として渡し、データ読み出し処理を行わせる。
【0158】
ユーザプログラムROM13からデータ読み出し処理関数D4がコールされると、まずブロック番号“3”から、ブロック先頭アドレス“FFFF3000h”と、ブロック最終アドレス“FFFF3FFFh”を生成する。
【0159】
アドレスポインタ“ADRS”の指すアドレスを“FFFF3000h”とする(処理ステップB11)。次に、アドレスポインタ“ADRS”の指す“FFFF3000h”のデータを読み出す(処理ステップB13)。
【0160】
読み出したデータが、“FFFFFFFFh”だったなら(処理ステップB14)、アドレスポインタ“ADRS”を「4」加算し(処理ステップB15)、“FFFF3004h”となる。
【0161】
データの読み出し単位は1ワード(4バイト)単位であるから、“FFFF3FFCh”をブロック最終アドレスとして、アドレスポインタ“ADRS”の指すアドレス“FFFF3004h”と比較し(処理ステップB12)、最終アドレスよりも値が小さいため、再びアドレスポインタ“ADRS”の指す“FFFF3004h”のデータを読み出す(処理ステップB13)。
【0162】
読み出したデータが消去状態の“FFFFFFFFh”以外、例えば“00000030h”だったなら(処理ステップB14)、そのデータがチェックコードであり、格納されているデータのデータ長である。
【0163】
よって、現在のアドレスポインタ“ADRS”の値である“FFFF3004h”にデータ長“30h”を加算した値“FFFF3034h”が最新データの先頭アドレスとなる(処理ステップB16)。
【0164】
抽出したアドレス“FFFF3034h”からデータ長分のデータを読み出し、読み出しインタフェース関数D2へステータスD10を返す。
【0165】
また、読み出しインタフェース関数D2からユーザプログラム12へ、読み出しデータD9を返す。
【0166】
処理ステップB12において、アドレスポインタ“ADRS”が“FFFF3FFCh”となった場合は、そのブロックは消去状態であるため、データは存在しない。
【0167】
上述した第2の実施の形態においても、消去回数を抑えることによってフラッシュメモリの寿命を延ばすことができるだけでなく、最大(ブロックサイズ−チェックコード)までの可変データ長のユーザデータを格納でき、かつその最新データを参照することができるようになり従来技術では一定のデータ長のユーザデータしか扱うことができなかった問題点を解決する。
【0168】
【発明の効果】
上述したように、本発明のフラッシュメモリ内蔵の半導体装置(制御回路)、フラッシュメモリの制御方法およびそのプログラムは、消去回数を抑えることによってフラッシュメモリの寿命を延ばすことができるだけでなく、最大“(ブロックサイズ)−(チェックコード)”までの可変データ長のユーザデータを格納でき、かつその最新データを参照することができるという効果が有る。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態第1の実施の形態で制御されるメモリブロック領域におけるデータ配置領域を示した図である。
【図2】関数関係の概要のソフトウェアモジュール構成を示した図である。
【図3】本発明の第1の実施形態のデータ書き込み処理関数のフローチャートである。
【図4】本発明の第1の実施の形態のデータ読み出し処理関数のフローチャートである。
【図5】第2の実施の形態におけるメモリ領域の配置を示した図である。
【図6】第2の実施の形態におけるデータ書き込み処理関数のフローチャートである。
【図7】第2の実施の形態におけるデータ読み出し処理関数のフローチャートである。
【図8】従来技術による不揮発性メモリの書き込みデータのビット構成を示した図である。
【図9】従来の巡回用ビットの使用例の動作説明用フローチャートである。
【符号の説明】
10 フラッシュメモリ
11 CPU
12 フラッシュメモリ・セルフ・プログラミング・ライブラリ
13 ユーザプログラムROM
14 フラッシュメモリ制御回路
D1 書き込みインタフェース関数
D2 読み出しインタフェース関数
D3 データ書き込み処理関数
D4 データ読み出し処理関数
D5,D6,D11,D12 引数
D9,D10 読み出しデータ
【発明の属する技術分野】
本発明はフラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラムに係わり、特に書き込み回数を低減するフラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラムに関する。
【0002】
【従来の技術】
近年、半導体素子の微細化技術の進展に伴い、その半導体素子で構成するLSIも大規模化している。例えば、半導体メモリとしてダイナミック型ランダムアクセスメモリ(DRAM)やシンクロナス・ダイナミック・ランダムアクセス・メモリ(SDRAM)も実用化されている。これらの揮発性メモリに対し不揮発性メモリの分野では、読み出し専用の半導体記憶装置としてリードオンリメモリ(ROM)、電気的な書き換えが可能なEEPROM、フラッシュメモリがあり、これらのメモリも大容量化が進んでいる。
【0003】
フラッシュメモリは、EEPROMとしてブロックごとのデータまたは全ビットのデータを一括消去することができるフラッシュ型EEPROMのことであるが、このフラッシュメモリにたいして書き込みや消去などを行なう場合は、書き込み命令や消去命令などの設定コマンドをフラッシュメモリに対して与え、フラッシュメモリは、このコマンドに従って動作を実行する。
【0004】
また、フラッシュメモリはブロック単位の消去とバイト単位の書き込みが出来るメモリであるが、その初期状態は他のメモリと異なり全ブロックが論理レベルの“1”レベル状態になっており、この状態をフラッシュメモリの消去状態とする。
【0005】
上述したように、フラッシュメモリでは消去状態はメモリ領域が“1”レベルであり、データが書き込まれた状態は“0”レベルである。そのため、“0”レベルを書き込むことは出来ても“1”レベルを書き込むことは出来無いことになり、このことをフラッシュメモリの非対称性と称している。
【0006】
そのため、同じメモリ領域にデータを上書きする場合、既に書き込まれているデータを消去した後で上書きする必要がある。既に書き込まれたデータを消去する際にメモリ素子が劣化するため、フラッシュメモリには寿命があることが知られている。
【0007】
また、消去を行うための回路の規模が大きいこと、消去動作には時間がかかること、メモリ素子の磨耗の問題によりフラッシュメモリの消去は、アドレス単位ではなく、ある一定のブロック単位で行われるのが一般的である。
【0008】
上述した特徴をもつフラッシュメモリで、複数の頻繁に書き換えを行う小容量データを扱う場合には、1つのデータを書き換えるたびにブロック消去動作を行わなければならず、1回のデータ書き換え動作に際して、ブロックの消去時間分余計に時間がかかることになる。
【0009】
また、頻繁に消去を行うことで、フラッシュメモリの寿命が短くなるという問題も生じる。
【0010】
これらの従来フラッシュメモリの問題は、例えば特開平9−293027号公報に記載の不揮発性メモリの制御回路をフラッシュメモリに適用することによって、解決できる(特許文献1参照)。
【0011】
上述したこの従来技術による不揮発性メモリの書き込みデータのビット構成を示した図8を参照すると、このフラッシュメモリは6ビットのユーザデータ、パリティビット、巡回認識用ビットを持つ領域から構成される。
【0012】
巡回用ビットの使用例の動作説明用フローチャートを示した図9を参照すると、データの書き込みを行う際に、まず、アドレスポインタを1加算してデータを読みだす(処理ステップC1)。
【0013】
巡回認識用ビットが直前のアドレスの巡回認識用ビットの反転値であったら、そのアドレスが次にデータを書き込むべきアドレスである。
【0014】
アドレスポインタがブロック最終アドレスに達したか否か判断し(処理ステップC2)、最終アドレスを越えるとアドレスポインタをブロック先頭アドレスとし(処理ステップC3)、次に書き込む巡回認識用ビットは最新データの巡回認識用ビットの反転値とする(処理ステップC4)。
【0015】
また、最終アドレスに達していない場合、次に書き込む巡回認識用ビットは最新データの巡回認識用ビットと同じ値とする(処理ステップC5)。
【0016】
次に書き込むべき巡回認識用ビットの値が決定したら、現在のアドレスポインタの指し示すアドレスに、ユーザデータ、巡回認識用ビット、パリティビットから成る8ビットのデータを書き込む(処理ステップC6)。
【0017】
次に書き込んだ8ビットのデータを読み出し、書き込んだデータと同一か否かを判断し(処理ステップC7)、同一でなければ処理ステップC1へ戻り同一になるまで繰り返し、同一なると処理を終了する。
【0018】
【特許文献1】
特開平9−293027号公報(段落「0024」、「0039」、「0043」、図4。)。
【0019】
【発明が解決しようとする課題】
上述したように従来のフラッシュROMの制御は、フラッシュメモリの消去回数を抑えることができ、結果的にメモリの寿命を延ばすことが可能となった。
【0020】
しかし、この従来の方法では、最新データが格納されているアドレスを検索する際に、あらかじめ決められた間隔(書き込み単位毎)で巡回認識用ビットを参照する必要があるため、ユーザデータは一定のデータ長しか扱うことができないという問題点があった。
【0021】
本発明の目的は、上述した従来の欠点に鑑みなされたものであり、消去動作の回数を低減するとともに、最新データから見てアドレス増加方向の領域またはアドレス減少方向の領域に任意のデータ長を有する最新データを追加記憶させることが出来ること、当該ブロックの最新データの先頭アドレスを検索し、最新データを読み出すことが出来るフラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラムを提供することにある。
【0022】
【課題を解決するための手段】
本発明のフラッシュメモリの制御方法は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、前記最新データから見てアドレス増加方向の領域またはアドレス減少方向の領域に、前記ブロックの最大アドレスを越えない範囲内で任意のデータ長を有する最新データおよびその検索用チェックコードを追加記憶させることを特徴とする。
【0023】
本発明のフラッシュメモリの制御方法の他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、前記最新データの検索用チェックコードとして前記最新データのデータ長を書き込むとともに、検索用チェックコードは、書き込まれたユーザデータのアドレスに続けて、アドレス増加方向の領域、アドレス減少方向の領域またはユーザデータの一部として書き込み、最新データ読み出し時には検出した前記検索用チェックコードに基づき読み出すことにある。
【0024】
本発明のフラッシュメモリの制御方法のまた他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、ユーザプログラムが指示する書き込み先ブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長に基づき、データ書き換え対象ブロックの格納データ値を更新することにある。
【0025】
本発明のフラッシュメモリの制御方法のさらに他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返しかつ書き換えた最新データを読み出す際に、ユーザプログラムが指示するブロック番号に基づき、データ検索用のチェックコードから最新データを検索し該当ブロックの格納データ値として読み出すことにある。
【0026】
本発明のフラッシュメモリの制御方法のさらにまた他の特徴は、フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返しかつ書き換えた最新データを読み出す際に、前記ブロックのブロックサイズから前記最新データの検索用チェックコード値を減じた値を最大値とする可変データ長のユーザデータを格納し、かつその最新データを参照することにある。
【0027】
本発明のフラッシュメモリの制御方法の他の特徴は、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み、検出したデータが“1”レベル以外のデータである場合は、当該アドレスに予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから前記最新データを書き込むことにある。
【0028】
本発明のフラッシュメモリの制御方法のまた他の特徴は、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが全て論理レベルの“1”レベルであれば最終アドレスから先頭アドレスまで順次に前記最新データを書き込み、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算して求めたアドレス値が先頭アドレス値よりも大きければ当該アドレスから先頭アドレスまで順次に前記最新データを書き込み、アドレス値が先頭アドレス値よりも小さければ当該ブロックのデータを消去して最終アドレスから先頭アドレスまで前記最新データを書き込むことにある。
【0029】
本発明のフラッシュメモリの制御方法のさらに他の特徴は、予め定める消去ブロック単位毎にデータ読み出しを行う際に、前記ブロックの最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば当該ブロックはブランク状態と判断し、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算して求めたアドレス値を先頭アドレスとし、その先頭アドレスから前記最新データを読み出すことにある。
【0030】
本発明のフラッシュメモリの制御方法のさらにまた他の特徴は、予め定める消去ブロック単位毎にデータ読み出しを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが全て論理レベルの“1”レベルであれば当該ブロックはブランク状態と判断し、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算して求めたアドレス値を先頭アドレスとして当該アドレスから前記最新データを読み出すことにある。
【0031】
本発明のフラッシュメモリの制御方法の他の特徴は、ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
前記ユーザユーザプログラムがそれぞれの前記インタフェース関数をユーザプログラムROMからコールすることによって前記フラッシュメモリ領域のデータ書き込み制御を行う際に、前記ユーザプログラムROMが前記書き込みインタフェース関数をコールするとともに、引数としてデータ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すインタフェース関数コール処理と、
書き込み処理が終了した時点で、ステータスデータを受け取るステータス受け取り処理と、
コールされた前記書き込みインタフェース関数が、前記データ書き込み処理関数をコールし、最新データ書き込み処理を行わせるとともに、引数として、前記最新データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すデータ書き込み処理関数コール処理と、
書き込み処理が終了した時点で、前記データ書き込み処理関数からステータスデータを受け取るステータスデータ受け取り処理とを実行することにある。
【0032】
また、前記データ書き込み処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの最終アドレスとして先頭アドレスの方向に向かって1ワードずつデータを読み出していくアドレス検索処理と、
読み出したアドレスが先頭アドレスでなければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが“1”レベル以外のデータであれば当該アドレス値から数値4を減じる処理を先頭アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値に書き込みデータ長の値および数値4を加算するとともに加算結果が最終アドレス値を越える場合はブロック消去を実行した後、先頭アドレスをポイントする第2のデータ検索処理と、前記第1および前記第2のデータ検索処理によりデータ書き込み領域を特定した後、先頭アドレスから最終アドレス方向に順次に任意のデータ長のユーザデータを書き込み、その後のアドレスに検索用チェックコードとしてデータ長の書き込みを実行することができる。
【0033】
さらに、前記データ書き込み処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの先頭アドレスとして最終アドレス方向に向かって1ワードずつデータを読み出すアドレス検索処理と、
読み出したアドレスが最終アドレスより小さければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値に数値4を加算する処理を最終アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値から書き込みデータ長の値および数値4を減算するとともに減算結果が先頭アドレス値より小さい場合はブロック消去を実行した後、最終アドレスをポイントする第2のデータ検索処理と、
前記第1および前記第2のデータ検索処理によりデータ書き込み領域を特定した後、最終アドレスから先頭アドレス方向に向かって順次データを書き込みを実行することにある。
【0034】
本発明のフラッシュメモリの制御方法のまた他の特徴は、ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
前記ユーザプログラムがそれぞれ対応する前記インタフェース関数を前記ユーザプログラムからコールすることによって前記フラッシュメモリ領域からの最新データの読み出し制御を行う際に、前記読み出しインタフェース関数をコールするとともに、引数として、前記最新データの読み出しを行うブロック番号を渡すインタフェース関数コール処理と、
読み出し処理が終了した時点で、読み出した前記最新データを受け取る読み出しデータ受取処理と、
コールされた前記読み出しインタフェース関数が、前記データ読み出し処理関数をコールし、前記最新データの読み出し処理を行わせるとともに、引数として、前記最新データの読み出しを行うブロック番号を渡すデータ読み出し処理関数コール処理と、
読み出し処理が終了した時点で、前記データ読み出し処理関数から読み出した前記最新データを受け取る読み出しデータ受取処理とを実行することにある。
【0035】
また、前記データ読み出し処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの最終アドレスとして先頭アドレス方向に向かって1ワードずつデータを読み出すアドレス検索処理と、読み出したアドレスが先頭アドレスより大きければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値から数値4を減じる処理を先頭アドレスに達するまで順次繰り返し、先頭アドレスに達すると当該ブロック内は全て消去状態でありブロックとしてはブランク状態と判断する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値から読み出しデータ長の値を減算するとともに減算結果を先頭アドレス値として抽出し、そのアドレスから順次データを読み出す第2のデータ検索処理とを実行することができる。
【0036】
さらに、前記データ読み出し処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの先頭アドレスとして最終アドレスに向かって1ワードずつデータを読み出すアドレス検索処理と、
読み出したアドレスが最終アドレスより小さければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値に数値4を加算する処理を最終アドレスに達するまで順次繰り返し、最終アドレスに達すると当該ブロック内は全て消去状態でありブロックとしてはブランク状態と判断する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、読み出したアドレス値から、読み出したデータ長の値を減算するとともに減算結果を先頭アドレス値として抽出し、抽出したアドレスから順次データを読み出す第2のデータ検索処理とを実行することにある。
【0037】
本発明のフラッシュメモリの制御回路の特徴は、CPUおよびユーザプログラムの制御の下に、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、アドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから前記最新データを書き込むことで、ブロックの書き込み回数を低減する書き込み回数制御機能を有することを特徴とする。
【0038】
本発明のフラッシュメモリの制御回路の他の特徴は、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段と、検索したデータが消去状態であるかまたはブロック消去を実行した後の状態で全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込む手段と、検索したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算する演算手段と、加算して求めたアドレス値と最終アドレス値とを比較する手段と、比較した結果、加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去する手段と、消去後に先頭アドレスから前記最新データを書き込む手段とを備えることにある。
【0039】
また、前記格納データを検索する手段は、最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段であり、前記最新データを書き込む手段は、最終アドレスから先頭アドレス方向に順次に前記最新データを書き込む手段であり、前記演算手段は、当該アドレスから予め定める数値を減算する手段であり、前記消去する手段は、減算して求めたアドレス値が先頭アドレス値よりも小さければ当該ブロックのデータを消去する手段である。
【0040】
本発明のフラッシュメモリの制御回路のまた他の特徴は、全体を制御するCPUと、その制御プログラムおよびユーザプログラムをもつROMと、データ格納用のフラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリから予め定めるブロック単位毎にデータ読み出しを行う際に、前記ブロックの最終アドレスから先頭アドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段と、検索したデータが消去状態である全て論理レベルの“1”レベルであれば当該ブロックはブランク状態であると判断する手段と、検索したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算する手段と、減算で求めたアドレス値を先頭アドレスとしそのアドレスから最新データを読み出す手段とを備えたことにある。
【0041】
また、前記格納データを検索する手段は、ブロックの先頭アドレスから最終アドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段であり、前記減算手段は、検索したデータが非消去状態である“0”レベルのデータを有する場合に、当該アドレスから予め定める数値を減算する手段であり、前記最新データを読み出す手段は、減算で求めたアドレス値を先頭アドレスとしそのアドレスから最新データを読み出す手段である。
【0042】
【発明の実施の形態】
まず、本発明の概要を述べると、本発明によるフラッシュメモリ内蔵の半導体装置およびフラッシュメモリの制御方法は、消去動作に要する時間の削減に対して、ブロック毎に小容量データ書き換えを頻繁に行うシステムにおいてデータの書き換えを行う際に、ブロック内の領域を最終アドレスから先頭アドレスに向かって検索し、ブロック内が消去状態の時と書き込みデータがブロック領域を越えない時とブロック領域を越える場合はブロック消去を実行した時とのそれぞれの時に、最新データをブロック内の先頭アドレスから最終アドレス方向に向かって書き込みを実行する。
【0043】
一方、ブロック内の領域を先頭アドレスから最終アドレスに向かって検索し、ブロック内が消去状態の時と書き込みデータがブロック領域を越えない時とブロック領域を越える場合はブロック消去を実行した時とのそれぞれの時に、最新データをブロック内の最終アドレスから先頭アドレス方向に向かって書き込みを実行する。
【0044】
また、検索用チェックコードを、ユーザデータと共に書き込むことによって、該当ブロックの最新データの先頭アドレスを検索し、最新データを読みだすことができる、という工夫を行っている。なお、ここでは1パラメータを格納する領域、およびフラッシュメモリの消去単位をブロックと称する。
【0045】
本発明のフラッシュメモリ内蔵の半導体装置およびフラッシュメモリの制御方法の、第1の実施の形態で制御されるメモリブロック領域におけるデータ配置領域を示した図1を参照すると、ブロック先頭アドレスからブロック最終アドレスの方向、つまりアドレスが増加する方向に先ずユーザデータ1が書き込まれ、その後に検索用のチェックコードとしてユーザデータ1のデータ長が書き込まれている。
【0046】
そのユーザデータ1のチェックコードの次にユーザデータ2が書き込まれ、その後にチェックコードとしてユーザデータ2のデータ長が書き込まれている。その後の領域は、ここではブランク(16進数のFFh)領域になっている。
【0047】
一方、本発明の第1の実施の形態が適用される半導体装置は、その関数関係の概要のソフトウェアモジュール構成を示した図2を参照すると、ユーザプログラムを格納するROM10と、データ格納用のフラッシュメモリ11と、後述するCPU14からの読み出し、書き込みを指示するコマンドやアドレスデータ等に応じて、制御信号をフラッシュメモリに供給し、書き込み読み出しを制御するフラッシュメモリ制御回路12と、フラッシュメモリ制御回路12の制御の下にユーザプログラムからコールされフラッシュメモリ11にデータ書き込みを行うための書き込みインタフェース関数D1およびデータ書き込み処理関数D3並びに読み出し制御を行うための読み出しインタフェース関数D2およびデータ読み出し処理関数D14を有するフラッシュメモリ・セルフ・プログラミング・ライブラリ13と、ユーザプログラムに基づきフラッシュメモリ11から読み出したデータを参照しかつフラッシュメモリ制御回路12と協働してフラッシュメモリ11の制御を行うCPU14とを備える。
【0048】
すなわち、フラッシュメモリ・セルフ・プログラミング・ライブラリ13に含まれる書き込みインタフェース関数D1、読み出しインタフェース関数D2、データ書き込み処理関数D3、データ読み出し処理関数D4からなる関数とユーザプログラムとの相互関係は、ユーザプログラムROM10のユーザプログラムが、CPU14およびフラッシュメモリ制御回路12の制御の下に、各インタフェース関数D1,D2をユーザプログラムROM10からコールすることによって、フラッシュメモリ領域のデータ制御を行う。
【0049】
なお、以下の説明および請求項において、検索する手段はアドレスポインタに対応し、演算手段および比較手段はCPUに対応し、最新データを書き込む手段および消去する手段はフラッシュメモリ制御回路に対応するものとする。
【0050】
次に、インタフェース関数の構成を以下に示す。
(1)書き込みインタフェース関数は、該当ブロックに次のデータを書き込む処理である。
【0051】
引数1:ブロック番号
引数2:書き込みデータ先頭アドレス
引数3:書き込みデータ長
戻り値:ステータスデータ(正常終了、パラメータエラー、書き込みエラー消去エラー)
(2)読み出しインタフェース関数は、該当ブロックの最新データを検索し読み出す処理である。
【0052】
引数1:ブロック番号
引数2:読み出しデータバイト数 戻り値:読み出しデータ
なお、関数の引数の順番は、この通りでなくてもよい。
【0053】
フラッシュメモリの初期状態はブランク状態(ALL−FFh)とする。前述した図1に示すように、最新データは、ブロック先頭アドレスからブロック最終アドレスへ向けて書き込まれ、その直後にデータ検索用のチェックコードを書き込む。
【0054】
データの書き込みおよび読み出し単位は1ワード(4バイト:XXXXXXXXh、「X」1個は4ビット)とする。最後に書かれたユーザデータが、そのブロックのパラメータ値となる。
【0055】
図2を参照すると、ユーザプログラムがデータの書き込みを行う場合、書き込みインタフェース関数D1を引数D5でコールする。この時の引数D5として、ユーザプログラムはデータ書き込みを行うブロック番号、書き込みデータ先頭アドレス、書き込みデータ長を書き込みインタフェース関数に渡す。
【0056】
また、書き込み処理が終了した時点で、ユーザプログラムは書き込みインタフェース関数D1からステータスデータを受け取る(D7)。書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、データ書き込みの処理を行わせる。
【0057】
この時の引数D6として、データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を、書き込みインタフェース関数D1はデータ書き込み処理関数D3に渡す。
【0058】
また、書き込み処理が終了した時点で、ステータスデータD8をデータ書き込み処理関数D3から受け取る。データ書き込みの詳細な動作は後述する。
【0059】
同様に、データの読み出しを行う場合、ユーザプログラムは読み出しインタフェース関数D2をコールする。この時引数D11として、データ読み出しを行うブロック番号を読み出しインタフェース関数に渡す。
【0060】
また、読み出し処理が終了した時点で、ユーザプログラムは読み出しインタフェース関数D2から読み出しデータD9を受け取る。読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数D4をコールし、データ読み出し処理を行わせる。この時引数D12として、読み出しインタフェース関数D2はデータ読み出しを行うブロック番号をデータ読み出し処理関数D4に渡す。
【0061】
また、読み出し処理が終了した時点で、読み出しインタフェース関数D2は読み出しデータD10を受け取る。データ読み出しの詳細な動作は後述する。
【0062】
次に、データ書き込みのさらに詳細な動作を説明する。第1の実施形態のデータ書き込み処理関数のフローチャートを示した図3を参照すると、まず、引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。続いてそのブロックの最新データのアドレスを検索するために、アドレスポインタをブロック最終アドレスとして先頭アドレスに向かって1ワードずつデータを読み出すアドレス検索処理を実行する(処理ステップA1)。
【0063】
次に、読み出したアドレスが先頭アドレスでなければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理を実行する。すなわち1ワードずつデータを読みだしていく(処理ステップA2,A3)。
【0064】
この時、読み出したデータが消去状態の“FFFFFFFFh”であれば(処理ステップA4)、アドレスポインタを“4”減算する処理を先頭アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理を実行する(処理ステップA5)。
【0065】
アドレスポインタがブロック先頭アドレスに達した場合(処理ステップA2)、そのブロックは消去状態であるため、ブロック先頭アドレスから、任意のデータ長のユーザデータを書き込む。
【0066】
また、検索用のチェックコードとして、書き込んだデータのデータ長をユーザデータの次のアドレスに書き込む(処理ステップA9)。
【0067】
もし、読み出したデータが“FFFFFFFFh”以外の値であれば(処理ステップA4)、そのデータがチェックコードであるので、検索を終了する(アドレスポインタ=チェックコードが格納されているアドレスの状態)。
【0068】
次に、データを書き込む際にブロック最終アドレスを越えるかどうかの判定を行い(処理ステップA6)、越えるようであれば、ブロック消去をして(処理ステップA7)、アドレスポインタをブロック先頭アドレスとする(処理ステップA8)。
【0069】
処理ステップA6における「ADRS+書き込みデータ長+4+4」は、この判定の直前でチェックコードを検出しているので、アドレスポインタ(ADRS)は、ブランク領域から「−4」のアドレス(チェックコードが格納されているアドレス)を指し示している。そこで、次に行う書き込み動作のためにブランク領域を指し示す必要があるので「+4」している。
【0070】
つまり、「ADRS(チェックコードが格納されているアドレス)+4(ブランク領域の先頭を指すための加算)」はブロックの最終アドレス方向に書き込みを開始するアドレスであり、「書き込みデータ長+4(チェックコードのデータ長)」は書き込むデータのデータ長である。
【0071】
上術した処理によりデータを書き込むべきアドレスを特定できたので、現在のアドレスポインタの位置から、任意のデータ長のユーザデータを書き込む(処理ステップA9)。
【0072】
また、検索用のチェックコードとして、書き込んだデータのデータ長をユーザデータの次のアドレスに書き込む(処理ステップA9)。
【0073】
尚、上述の説明では、検索用のチェックコードはユーザデータとは独立したデータとして区別し、ユーザデータの次のアドレスに書き込んでいるが、データの一部として書き込むことでもよい。その場合は、その部分がチェックコードであることが予め判別できるようにしておく。
【0074】
次に、図2を併せて参照しながら、データ読み出し処理の詳細な動作を説明する。
【0075】
最新データを読み出す場合には、書き込み時と同様に、引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。
【0076】
生成したブロック先頭アドレス、最終アドレスに基づき、アドレスポインタをブロック最終アドレスとし(処理ステップB1)、1ワードずつデータを読み出していく(処理ステップB3)。
【0077】
この時、読み出したデータが“FFFFFFFFh”であれば(処理ステップB4)、アドレスポインタを「4」減算する(処理ステップB5)。アドレスポインタがブロック先頭アドレスに達したら(処理ステップB2)、そのブロックは消去状態であり、ブロックとしてはブランク状態と判断するデータ検索処理を実行する(請求項における第1の検索処理に対応)。
【0078】
もし、読み出したデータが“FFFFFFFFh”以外の値が書き込まれた非消去状態、すなわち書き込み状態であれば(処理ステップB4)、そのデータがチェックコード(最新データのデータ長)であるので、アドレスポインタの値からデータ長を減算した値を、最新データ先頭アドレスとして抽出する(処理ステップB6)。
【0079】
次に、抽出したアドレスのデータを読み出し(処理ステップB7)、データ読み出し処理関数D4の戻り値とする(処理ステップB6およびB7が請求項における第2の検索処理に対応)。
【0080】
次に具体例を用いて、本実施の形態の動作を説明する。
【0081】
データ読み出し処理関数のフローチャートを示した図4を参照すると、例えば、書き込み対象ブロック番号は“2”、ブロック2の先頭アドレスは“FFFF2000h”、ブロック2の最終アドレスは“FFFF2FFFh”、書き込みデータが格納されている先頭アドレスを“00000000h”、書き込みデータ長を“10h”とする。
【0082】
図2を併せて参照すると、ユーザプログラムは書き込みインタフェース関数D1をコールし、ブロック番号“2”、書き込みデータ先頭アドレス“00000000h”、書き込みデータ長“10h”を引数D5として渡す。
【0083】
書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、ブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を引数D6として渡し、データ書き込み処理を行わせる。
【0084】
データ書き込み処理関数D3がコールされると、まずブロック番号“2”から、ブロック先頭アドレス“FFFF2000h”と、ブロック最終アドレス“FFFF2FFFh”を生成する。この時、データの読み出し単位は1ワード(4バイト)単位であるから、アドレスポインタ“ADRS”を、ブロック最終アドレス“FFFF2FFFh”から4バイトを減じたアドレス“FFFF2FFCh”とする(処理ステップA1)。
【0085】
次に、アドレスポインタ“ADRS”の指す“FFFF2FFCh”のデータを読み出す(処理ステップA3)。読み出したデータが、消去状態を示す“FFFFFFFFh”だったなら(処理ステップA4)、アドレスポインタ“ADRS”の“FFFF2FFCh”から「4」減算し(処理ステップA5)、“FFFF2FF8h”となる。
【0086】
次に、アドレスポインタ“ADRS”の指す“FFFF2FF8h”をブロック先頭アドレス“FFFF2000h”と比較し(処理ステップA2)、先頭アドレスよりも値が大きいため、再びアドレスポインタ“ADRS”の指す“FFFF2FF8h”のデータを読み出す(処理ステップA3)。
【0087】
読み出したデータが消去状態の“FFFFFFFFh”以外の値、例えば“00000020h”である場合(処理ステップA4)、そのデータがチェックコードである。
【0088】
次に、データを書き込む際に、書き込むメモリ領域がブロック最終アドレスを越えるかどうかの判定を行う(処理ステップA6)。
【0089】
消去状態であるアドレス“FFFF2FFCh”に、書き込みデータ長“10h”と、チェックコード長“04h”を加えた値“FFFF3010h”は、ブロック最終アドレス“FFFF2FFF”を越えているため(処理ステップA6)、このブロックにはユーザデータを追加記禄できない。
【0090】
そこで、ブロック消去を行い(処理ステップA7)、アドレスポインタ“ADRS”の指す値をブロック先頭アドレス“FFFF2000h”とする(処理ステップA8)。
【0091】
上述した処理を実行した結果、データを書き込むべきアドレスを特定できたので、アドレス“00000000h”から“00000010h”に格納されているユーザデータを“FFFF2000h”から書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA9)、ステータスを返す(D8)。
【0092】
処理ステップA2において、アドレスポインタ“ADRS”が“FFFF2000h”となった場合、そのブロックは消去済みであるため、ブロック先頭アドレス“FFFF2000h”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA9)、ステータスD8を返す。
【0093】
処理ステップA6において、アドレスポインタ“ADRS”が“FFFF2020h”だった場合、消去状態であるアドレス“FFFF2024h”に書き込みデータ長と、チェックコード長を加えた値は“FFFF2038h”となり、ブロック最終アドレス“FFFF2FFFh”に満たないため、そのブロックにはユーザデータの追加記録を行うことができる。
【0094】
この時、消去状態であるアドレス“FFFF2024h”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み処理ステップA9)、ステータスD8を返す。
【0095】
また、書き込みインタフェース関数D1からユーザプログラムへステータスD7を返す。
【0096】
同様に、データ読み出しの動作を具体例を用いて説明する。
【0097】
例えば、データ読み出し対象ブロック番号は“3”、ブロック3の先頭アドレスは“FFFF3000h”、ブロック3の最終アドレスは“FFFF3FFFh”とする。
【0098】
図4に示すように、ユーザは読み出しインタフェース関数D2をコールし、ブロック番号“3”を引数D11として渡す。
【0099】
読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数D4をコールし、ブロック番号を引数D12として渡し、データ読み出し処理を行わせる。
【0100】
データ読み出し処理関数D4がコールされると、まずブロック番号“3”から、ブロック先頭アドレス“FFFF3000h”と、ブロック最終アドレス“FFFF3FFFh”を生成する。この時、データの読み出し単位は1ワード(4バイト)単位であるから、アドレスポインタ“ADRS”の指すアドレス値を“FFFF3FFCh”とする(処理ステップB1)。
【0101】
次に、アドレスポインタ“ADRS”の指すアドレス“FFFF3FFCh”のデータを読みだす(処理ステップB3)。読み出したデータが、“FFFFFFFFh”だったなら(処理ステップB4)、アドレスポインタ“ADRS”を「4」減算し(処理ステップB5)、次のアドレスは“FFFF3FF8h”となる。
【0102】
次に、アドレスポインタ“ADRS”の指すアドレス“FFFF3FF8h”をブロック先頭アドレス“FFFF3000h”と比較し(処理ステップB2)、先頭アドレスよりも値が大きいため、再びアドレスポインタ“ADRS”の指すアドレス“FFFF3FF8h”のデータを読み出す(処理ステップB3)。
【0103】
読み出したデータが消去状態“FFFFFFFFh”以外、例えば“00000030h”だったなら(処理ステップB4)、そのデータがチェックコードであり、アドレス“FFFF3FF8h”に格納されているデータのデータ長であることを示している。
【0104】
よって、現在のアドレスポインタ“ADRS”の値である“FFFF3FF8h”からデータ長“30h”を減算した値“FFFF3FC8h”が最新データの先頭アドレスとなる(処理ステップB6)。
【0105】
抽出したアドレス“FFFF3FC8h”からデータ長“30h”分のデータを読み出し、読み出しインタフェース関数D2へステータスD10として返す。
【0106】
また、読み出しインタフェース関数D2からユーザプログラムへ、読み出しデータD9を返す。
【0107】
処理ステップB2において、アドレスポインタ“ADRS”の指すアドレス値が“FFFF3000h”となった場合は、そのブロックは消去状態であるため、データは存在しない。
【0108】
上述した本発明のフラッシュメモリ内蔵の半導体装置およびフラッシュメモリの制御方法の第1の実施の形態によれば、消去回数を抑えることによってフラッシュメモリの寿命を延ばすことができるだけでなく、最大で“(ブロックサイズ)−(チェックコード)”までの可変データ長のユーザデータを格納でき、かつその最新データを参照することができるようになり、従来技術では一定のデータ長のユーザデータしか扱うことができなかった問題点を解決した。
【0109】
次に、本発明の第2の実施の形態を説明する。
【0110】
第2の実施の形態におけるメモリ領域の配置を示した図5を参照すると、ブロック最終アドレスからブロック先頭アドレスの方向、つまりアドレスが減少する方向に先ずユーザデータ1が書き込まれ、その前のアドレスにチェックコードとしてユーザデータ1のデータ長が書き込まれている。
【0111】
そのユーザデータ1のチェックコードの次にユーザデータ2が書き込まれ、その上のアドレスにチェックコードとしてユーザデータ2のデータ長が書き込まれている。さらにその上の領域は、ブロック先頭アドレスまで、ここではブランク(16進数のFFh)領域になっている。
【0112】
なお、ここでも前述したように検索用のチェックコードはユーザデータとは独立したデータとして区別し、ユーザデータの次のアドレスに書き込んでいるが、データの一部として書き込むことでもよい。その場合は、その部分がチェックコードであることが予め判別できるようにしておく。
【0113】
一方、本発明の第2の実施の形態が適用されるシステムは、その関数関係の概要は前述した図2の構成と同様である。
【0114】
すなわち、書き込みインタフェース関数D1、読み出しインタフェース関数D2、データ書き込み処理関数D3、データ読み出し処理関数D4から成り、ユーザプログラムは、CPU14の制御の下に、各インタフェース関数D1〜D4をユーザプログラムROM10に格納されたユーザプログラムからコールすることによって、フラッシュメモリ領域のデータ制御を行う。
【0115】
ここでもフラッシュメモリ11の初期状態はブランク状態(ALL−FFh)とする。
【0116】
図5において、データはブロック最終アドレスからブロック先頭アドレスへ向けて書き込まれ、そのデータの直後にデータ検索用のチェックコードが書き込まれる。データの書き込みおよび読み出し単位は1ワード(4バイト)とする。最後に書かれたユーザデータが、そのブロックのパラメータ値となる。
【0117】
前述した図2を参照すると、ユーザプログラムはデータの書き込みを行う場合、書き込みインタフェース関数D1をコールする。
【0118】
この時引数D5として、データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を書き込みインタフェース関数D1に渡す。
【0119】
また、書き込み処理が終了した時点で、書き込みインタフェース関数D1からステータスデータを受け取る。書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、データ書き込みの処理を行わせる。データ書き込みの詳細な動作は後述する。
【0120】
同様に、データの読み出しを行う場合、読み出しインタフェース関数D2をコールする。この時引数D9として、データ読み出しを行うブロック番号を読み出しインタフェース関数D2に渡す。
【0121】
また、読み出し処理が終了した時点で、読み出しインタフェース関数D2から読み出したデータを受け取る。読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数をコールD4し、データ読み出し処理を行わせる。データ読み出しの詳細な動作は後述する。
【0122】
まず第2の実施の形態におけるデータ書き込みの詳細な動作を説明する。
【0123】
第2の実施の形態におけるデータ書き込み処理関数のフローチャートを示した図6を参照すると、まず、引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。
【0124】
その生成されたブロックの最新データのアドレスを検索するために、アドレスポインタ“ADRS”をブロック先頭アドレスとし(処理ステップA11)、1ワードずつデータを読み出していく(処理ステップA13)。
【0125】
この時、読み出したデータが“FFFFFFFFh”であれば(処理ステップA14)、アドレスポインタ“ADRS”を「4」加算する(処理ステップA15)。アドレスポインタ“ADRS”がブロック最終アドレスに達した場合(処理ステップA12)、そのブロックは消去状態であるため、ブロック最終アドレスから、任意のデータ長のユーザデータを書き込む。
【0126】
また、検索用チェックコードとして、書き込んだデータのデータ長をユーザデータの次(先頭アドレス方向)のアドレスに書き込む(処理ステップA19)。
【0127】
もし、読み出したデータが消去状態の“FFFFFFFFh”以外の値であれば(処理ステップA14)、そのデータがチェックコードであるので、検索を終了する。すなわち、アドレスポインタ=チェックコードが格納されているアドレスの状態である。
【0128】
次に、データを書き込む際にその書き込むデータがブロック先頭アドレスを越えるかどうかの判定を行い(処理ステップA16)、越えるようであれば、ブロック消去をして(処理ステップA17)、アドレスポインタ“ADRS”をブロック最終アドレスとする(処理ステップA18)。
【0129】
処理ステップA16における「ADRS−書き込みデータ長−4−4」は、この判定の直前でチェックコードを検出しているので、アドレスポインタ(ADRS)は、ブランク領域から「+4」のアドレス(チェックコードが格納されているアドレス)を指し示している。そこで、次に行う書き込み動作のためにブランク領域を指し示す必要があるので「−4」している。
【0130】
つまり、「ADRS(チェックコードが格納されているアドレス)−4(ブランク領域の先頭を指すための減算)」はブロックの先頭アドレス方向に書き込みを開始するアドレスであり、「書き込みデータ長−4(チェックコードのデータ長)」は書き込むデータのデータ長である。
【0131】
上述のフローによりデータを書き込むべきアドレスを特定できたので、現在のアドレスポインタ“ADRS”の位置から、任意のデータ長のユーザデータを書き込む。
【0132】
また、検索用チェックコードとして、書き込んだデータのデータ長をユーザデータの次のアドレス(ここでは先頭アドレス方向に減少したアドレス)に書き込み(処理ステップA19)、データ書き込みの動作を終了する。
【0133】
次にデータ読み出しの動作を詳細に説明する。
【0134】
第2の実施の形態におけるデータ読み出し処理関数のフローチャートを示した図7を参照すると、最新データを読み出す場合には、書き込み時と同様に、まず引数として与えられたブロック番号からブロック先頭アドレス、最終アドレスを生成する。
【0135】
アドレスポインタ“ADRS”をブロック先頭アドレスとし(処理ステップB11)、1ワードずつデータを読み出していく(処理ステップB13)。
【0136】
この時、読み出したデータが“FFFFFFFFh”であれば(処理ステップB14)、アドレスポインタ“ADRS”を「4」加算する(処理ステップB15)。
【0137】
アドレスポインタ“ADRS”がブロック最終アドレスに達したら(処理ステップB12)、そのブロックは消去状態である。もし、読み出したデータが“FFFFFFFFh”以外の値であれば(処理ステップB14)、そのデータがチェックコード(最新データのデータ長)であるので、アドレスポインタ“ADRS”にデータ長を加算した値を、最新データ先頭アドレスとして抽出する(処理ステップB16)。
【0138】
次に、抽出したアドレスのデータを読み出し(処理ステップB17)、関数の戻り値とする。
【0139】
上述した書き込みおよび読み出し動作を、具体例を用いながら説明する。
【0140】
例えば、書き込み対象ブロック番号は“2”、ブロック2の先頭アドレスは“FFFF2000h”、ブロック2の最終アドレスは“FFFF2FFFh”、書き込みデータが格納されている先頭アドレスを“00000000h”、書き込みデータ長を“10h”とする。
【0141】
ここでも図2に示すように、ユーザプログラムはユーザプログラムROM10からフラッシュメモリ・セルフ・プログラミング・ライブラリ13に含まれる書き込みインタフェース関数D1をコールし、ブロック番号“2”、書き込みデータ先頭アドレス“00000000h”および書き込みデータ長“10h”を引数D5として渡す。
【0142】
書き込みインタフェース関数D1は自身がコールされると、データ書き込み処理関数D3をコールし、ブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を引数D6として渡し、データ書き込み処理を行わせる。
【0143】
データ書き込み処理関数がコールされると、まずブロック番号“2”から、ブロック先頭アドレス“FFFF2000h”と、ブロック最終アドレス“FFFF2FFFh”とを生成する。この時、アドレスポインタ“ADRS”を“FFFF2000h”とする(処理ステップA11)。
【0144】
次に、アドレスポインタ“ADRS”の指示する“FFFF2000h”のデータを読み出す(処理ステップA13)。読み出したデータが、“FFFFFFFFh”だったなら(処理ステップA14)、アドレスポインタ“ADRS”の指す“FFFF2000h”を「4」加算し(処理ステップA15)、“FFFF2004h”となる。
【0145】
この時、データ読み出し単位は1ワード(4バイト)であるから、アドレスポインタ“ADRS”の“FFFF2000h”をブロック最終アドレス“FFFF2FFCh”と比較し(処理ステップA12)、最終アドレスよりも値が小さいため、再びアドレスポインタ“ADRS”のデータを読み出す(処理ステップA13)。
【0146】
読み出したデータが消去状態の“FFFFFFFFh”以外、例えば“00000020h”だったなら(処理ステップA14)、そのデータがチェックコードである。
【0147】
次に、最終アドレスから先頭アドレス方向へ順次にデータを書き込んで行ったとき際に、ブロック先頭アドレスを越えるかどうかの判定を行う(処理ステップA16)。
【0148】
消去状態であるアドレス“FFFF2000h”から、書き込みデータ長“10h”およびチェックコード長“04h”を減算した値“FFFF1FECh”は、ブロック先頭アドレス“FFFF2000”を越えているため(処理ステップA16)、このブロックにはユーザデータを追加記録できない。
【0149】
そこで、ブロック消去を行い(処理ステップA17)、アドレスポインタ“ADRS”をブロック最終アドレス“FFFF2FFCh”とする(処理ステップA18)。
【0150】
データを書き込むべきアドレスを特定できたので、“00000000h”から“00000010h”に格納されているユーザデータを“FFFF2FFCh”から書き込み、続けて先頭アドレス方向の次のアドレスにユーザデータのデータ長“10h”を書き込み(処理ステップA19)、ステータスD8を返す。
【0151】
処理ステップA12において、アドレスポインタ“ADRS”が“FFFF2FFCh”となった場合、そのブロックは消去済みであるため、ブロック最終アドレス“FFFF2FFCh”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA19)、ステータスD8を返す。
【0152】
処理ステップA16において、アドレスポインタ“ADRS”が“FFFF2FC4h”だった場合、消去状態であるアドレス“FFFF2FC0h”から書き込みデータ長およびチェックコード長を減算した値は“FFFF2FACh”となり、ブロック先頭アドレス“FFFF2000h”に達しないため、そのブロックにはユーザデータの追加記録を行うことができる。
【0153】
この時、消去状態であるアドレス“FFFF2FC0h”からユーザデータを書き込み、続けてユーザデータのデータ長“10h”を書き込み(処理ステップA19)、ステータスD8を返す。また、書き込みインタフェース関数D1からユーザへステータスD7を返す。
【0154】
次に、図7を参照しながら同様に、データ読み出しの動作を具体例を用いて説明する。
【0155】
例えば、データ読み出し対象ブロック番号は“3”、ブロック3の先頭アドレスは“FFFF3000h”、ブロック3の最終アドレスは“FFFF3FFFh”とする。
【0156】
ユーザはフラッシュメモリ・セルフ・プログラミング・ライブラリ12に含まれる読み出しインタフェース関数D2をユーザプログラムROM13からコールし、ブロック番号“3”を引数D11として渡す。
【0157】
読み出しインタフェース関数D2は自身がコールされると、データ読み出し処理関数D4をコールし、ブロック番号を引数D12として渡し、データ読み出し処理を行わせる。
【0158】
ユーザプログラムROM13からデータ読み出し処理関数D4がコールされると、まずブロック番号“3”から、ブロック先頭アドレス“FFFF3000h”と、ブロック最終アドレス“FFFF3FFFh”を生成する。
【0159】
アドレスポインタ“ADRS”の指すアドレスを“FFFF3000h”とする(処理ステップB11)。次に、アドレスポインタ“ADRS”の指す“FFFF3000h”のデータを読み出す(処理ステップB13)。
【0160】
読み出したデータが、“FFFFFFFFh”だったなら(処理ステップB14)、アドレスポインタ“ADRS”を「4」加算し(処理ステップB15)、“FFFF3004h”となる。
【0161】
データの読み出し単位は1ワード(4バイト)単位であるから、“FFFF3FFCh”をブロック最終アドレスとして、アドレスポインタ“ADRS”の指すアドレス“FFFF3004h”と比較し(処理ステップB12)、最終アドレスよりも値が小さいため、再びアドレスポインタ“ADRS”の指す“FFFF3004h”のデータを読み出す(処理ステップB13)。
【0162】
読み出したデータが消去状態の“FFFFFFFFh”以外、例えば“00000030h”だったなら(処理ステップB14)、そのデータがチェックコードであり、格納されているデータのデータ長である。
【0163】
よって、現在のアドレスポインタ“ADRS”の値である“FFFF3004h”にデータ長“30h”を加算した値“FFFF3034h”が最新データの先頭アドレスとなる(処理ステップB16)。
【0164】
抽出したアドレス“FFFF3034h”からデータ長分のデータを読み出し、読み出しインタフェース関数D2へステータスD10を返す。
【0165】
また、読み出しインタフェース関数D2からユーザプログラム12へ、読み出しデータD9を返す。
【0166】
処理ステップB12において、アドレスポインタ“ADRS”が“FFFF3FFCh”となった場合は、そのブロックは消去状態であるため、データは存在しない。
【0167】
上述した第2の実施の形態においても、消去回数を抑えることによってフラッシュメモリの寿命を延ばすことができるだけでなく、最大(ブロックサイズ−チェックコード)までの可変データ長のユーザデータを格納でき、かつその最新データを参照することができるようになり従来技術では一定のデータ長のユーザデータしか扱うことができなかった問題点を解決する。
【0168】
【発明の効果】
上述したように、本発明のフラッシュメモリ内蔵の半導体装置(制御回路)、フラッシュメモリの制御方法およびそのプログラムは、消去回数を抑えることによってフラッシュメモリの寿命を延ばすことができるだけでなく、最大“(ブロックサイズ)−(チェックコード)”までの可変データ長のユーザデータを格納でき、かつその最新データを参照することができるという効果が有る。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態第1の実施の形態で制御されるメモリブロック領域におけるデータ配置領域を示した図である。
【図2】関数関係の概要のソフトウェアモジュール構成を示した図である。
【図3】本発明の第1の実施形態のデータ書き込み処理関数のフローチャートである。
【図4】本発明の第1の実施の形態のデータ読み出し処理関数のフローチャートである。
【図5】第2の実施の形態におけるメモリ領域の配置を示した図である。
【図6】第2の実施の形態におけるデータ書き込み処理関数のフローチャートである。
【図7】第2の実施の形態におけるデータ読み出し処理関数のフローチャートである。
【図8】従来技術による不揮発性メモリの書き込みデータのビット構成を示した図である。
【図9】従来の巡回用ビットの使用例の動作説明用フローチャートである。
【符号の説明】
10 フラッシュメモリ
11 CPU
12 フラッシュメモリ・セルフ・プログラミング・ライブラリ
13 ユーザプログラムROM
14 フラッシュメモリ制御回路
D1 書き込みインタフェース関数
D2 読み出しインタフェース関数
D3 データ書き込み処理関数
D4 データ読み出し処理関数
D5,D6,D11,D12 引数
D9,D10 読み出しデータ
Claims (22)
- フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、前記最新データから見てアドレス増加方向の領域またはアドレス減少方向の領域に、前記ブロックの最大アドレスを越えない範囲内で任意のデータ長を有する最新データおよびその検索用チェックコードを追加記憶させることを特徴とするフラッシュメモリの制御方法。
- フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、前記最新データの検索用チェックコードとして前記最新データのデータ長を書き込むとともに、検索用チェックコードは、書き込まれたユーザデータのアドレスに続けて、アドレス増加方向の領域、アドレス減少方向の領域またはユーザデータの一部として書き込み、最新データ読み出し時には検出した前記検索用チェックコードに基づき読み出すことを特徴とするフラッシュメモリの制御方法。
- フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返して最新データに書き換える際に、ユーザプログラムが指示する書き込み先ブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長に基づき、データ書き換え対象ブロックの格納データ値を更新することを特徴とするフラッシュメモリの制御方法。
- フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返しかつ書き換えた最新データを読み出す際に、ユーザプログラムが指示するブロック番号に基づき、データ検索用のチェックコードから最新データを検索し該当ブロックの格納データ値として読み出すことを特徴とするフラッシュメモリの制御方法。
- フラッシュメモリの消去単位ブロックごとに小容量のデータ書き換えを複数回繰り返しかつ書き換えた最新データを読み出す際に、前記ブロックのブロックサイズから前記最新データの検索用チェックコード値を減じた値を最大値とする可変データ長のユーザデータを格納し、かつその最新データを参照することを特徴とするフラッシュメモリの制御方法。
- 予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み、検出したデータが“1”レベル以外のデータである場合は、当該アドレスに予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから前記最新データを書き込むことを特徴とするフラッシュメモリの制御方法。
- 予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが全て論理レベルの“1”レベルであれば最終アドレスから先頭アドレスまで順次に前記最新データを書き込み、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算して求めたアドレス値が先頭アドレス値よりも大きければ当該アドレスから先頭アドレスまで順次に前記最新データを書き込み、アドレス値が先頭アドレス値よりも小さければ当該ブロックのデータを消去して最終アドレスから先頭アドレスまで前記最新データを書き込むことを特徴とするフラッシュメモリの制御方法。
- 予め定める消去ブロック単位毎にデータ読み出しを行う際に、前記ブロックの最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば当該ブロックはブランク状態と判断し、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算して求めたアドレス値を先頭アドレスとし、その先頭アドレスから前記最新データを読み出すことを特徴とするフラッシュメモリの制御方法。
- 予め定める消去ブロック単位毎にデータ読み出しを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが全て論理レベルの“1”レベルであれば当該ブロックはブランク状態と判断し、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算して求めたアドレス値を先頭アドレスとして当該アドレスから前記最新データを読み出すことを特徴とするフラッシュメモリの制御方法。
- ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
前記ユーザユーザプログラムがそれぞれの前記インタフェース関数をユーザプログラムROMからコールすることによって前記フラッシュメモリ領域のデータ書き込み制御を行う際に、前記ユーザプログラムROMが前記書き込みインタフェース関数をコールするとともに、引数としてデータ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すインタフェース関数コール処理と、
書き込み処理が終了した時点で、ステータスデータを受け取るステータス受け取り処理と、
コールされた前記書き込みインタフェース関数が、前記データ書き込み処理関数をコールし、最新データ書き込み処理を行わせるとともに、引数として、前記最新データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すデータ書き込み処理関数コール処理と、
書き込み処理が終了した時点で、前記データ書き込み処理関数からステータスデータを受け取るステータスデータ受け取り処理とを実行することを特徴とするフラッシュメモリの制御方法。 - 前記データ書き込み処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの最終アドレスとして先頭アドレスの方向に向かって1ワードずつデータを読み出していくアドレス検索処理と、
読み出したアドレスが先頭アドレスでなければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが“1”レベル以外のデータであれば当該アドレス値から数値4を減じる処理を先頭アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値に書き込みデータ長の値および数値4を加算するとともに加算結果が最終アドレス値を越える場合はブロック消去を実行した後、先頭アドレスをポイントする第2のデータ検索処理と、前記第1および前記第2のデータ検索処理によりデータ書き込み領域を特定した後、先頭アドレスから最終アドレス方向に順次に任意のデータ長のユーザデータを書き込み、その後のアドレスに検索用チェックコードとしてデータ長の書き込みを実行する請求項10記載のフラッシュメモリの制御方法。 - 前記データ書き込み処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの先頭アドレスとして最終アドレス方向に向かって1ワードずつデータを読み出すアドレス検索処理と、
読み出したアドレスが最終アドレスより小さければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値に数値4を加算する処理を最終アドレスに達するまで順次繰り返して検索処理を終了する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値から書き込みデータ長の値および数値4を減算するとともに減算結果が先頭アドレス値より小さい場合はブロック消去を実行した後、最終アドレスをポイントする第2のデータ検索処理と、
前記第1および前記第2のデータ検索処理によりデータ書き込み領域を特定した後、最終アドレスから先頭アドレス方向に向かって順次データを書き込みを実行する請求項10記載のフラッシュメモリの制御方法。 - ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
前記ユーザプログラムがそれぞれ対応する前記インタフェース関数を前記ユーザプログラムからコールすることによって前記フラッシュメモリ領域からの最新データの読み出し制御を行う際に、前記読み出しインタフェース関数をコールするとともに、引数として、前記最新データの読み出しを行うブロック番号を渡すインタフェース関数コール処理と、
読み出し処理が終了した時点で、読み出した前記最新データを受け取る読み出しデータ受取処理と、
コールされた前記読み出しインタフェース関数が、前記データ読み出し処理関数をコールし、前記最新データの読み出し処理を行わせるとともに、引数として、前記最新データの読み出しを行うブロック番号を渡すデータ読み出し処理関数コール処理と、
読み出し処理が終了した時点で、前記データ読み出し処理関数から読み出した前記最新データを受け取る読み出しデータ受取処理とを実行することを特徴とするフラッシュメモリの制御方法。 - 前記データ読み出し処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの最終アドレスとして先頭アドレス方向に向かって1ワードずつデータを読み出すアドレス検索処理と、
読み出したアドレスが先頭アドレスより大きければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値から数値4を減じる処理を先頭アドレスに達するまで順次繰り返し、先頭アドレスに達すると当該ブロック内は全て消去状態でありブロックとしてはブランク状態と判断する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、そのアドレス値から読み出しデータ長の値を減算するとともに減算結果を先頭アドレス値として抽出し、そのアドレスから順次データを読み出す第2のデータ検索処理とを実行する請求項13記載のフラッシュメモリの制御方法。 - 前記データ読み出し処理関数は、対象ブロックの前記最新データのアドレスを検索するためにアドレスポインタを前記ブロックの先頭アドレスとして最終アドレスに向かって1ワードずつデータを読み出すアドレス検索処理と、
読み出したアドレスが最終アドレスより小さければそのアドレスのデータを読み出す検索アドレスデータ読み出し処理と、
読み出したデータが消去状態であればアドレス値に数値4を加算する処理を最終アドレスに達するまで順次繰り返し、最終アドレスに達すると当該ブロック内は全て消去状態でありブロックとしてはブランク状態と判断する第1のデータ検索処理と、
読み出したデータが非消去状態の場合は、読み出したアドレス値から、読み出したデータ長の値を減算するとともに減算結果を先頭アドレス値として抽出し、抽出したアドレスから順次データを読み出す第2のデータ検索処理とを実行する請求項13記載のフラッシュメモリの制御方法。 - CPUおよびユーザプログラムの制御の下に、予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索し、検出したデータが消去状態である全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込み、検出したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、アドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去して先頭アドレスから前記最新データを書き込むことで、ブロックの書き込み回数を低減する書き込み回数制御機能を有することを特徴とするフラッシュメモリ内蔵の半導体装置。
- 予め定める消去ブロック単位毎にデータ書き換えを行う際に、前記ブロックの先頭アドレスから最終ドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段と、検索したデータが消去状態であるかまたはブロック消去を実行した後の状態で全て論理レベルの“1”レベルであれば先頭アドレスから順次に最新データを書き込む手段と、検索したデータが“1”レベル以外のデータを有する場合は、当該アドレスに予め定める数値を加算する演算手段と、加算して求めたアドレス値と最終アドレス値とを比較する手段と、比較した結果、加算して求めたアドレス値が最終アドレス値よりも小さければ当該アドレスから前記最新データを書き込み、加算して求めたアドレス値が最終アドレス値よりも大きければ当該ブロックのデータを消去する手段と、消去後に先頭アドレスから前記最新データを書き込む手段とを備えることを特徴とするフラッシュメモリ内蔵の半導体装置。
- 前記格納データを検索する手段は、最終アドレスから先頭ドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段であり、前記最新データを書き込む手段は、最終アドレスから先頭アドレス方向に順次に前記最新データを書き込む手段であり、前記演算手段は、当該アドレスから予め定める数値を減算する手段であり、前記消去する手段は、減算して求めたアドレス値が先頭アドレス値よりも小さければ当該ブロックのデータを消去する手段である請求項17記載のフラッシュメモリ内蔵の半導体装置。
- 全体を制御するCPUと、その制御プログラムおよびユーザプログラムをもつROMと、データ格納用のフラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリから予め定めるブロック単位毎にデータ読み出しを行う際に、前記ブロックの最終アドレスから先頭アドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段と、検索したデータが消去状態である全て論理レベルの“1”レベルであれば当該ブロックはブランク状態であると判断する手段と、検索したデータが“1”レベル以外のデータを有する場合は、当該アドレスから予め定める数値を減算する手段と、減算で求めたアドレス値を先頭アドレスとしそのアドレスから最新データを読み出す手段とを備えたことを特徴とするフラッシュメモリ内蔵の半導体装置。
- 前記格納データを検索する手段は、ブロックの先頭アドレスから最終アドレスまでアドレスを1ワード単位にずらしながら格納データを検索する手段であり、前記減算手段は、検索したデータが非消去状態である“0”レベルのデータを有する場合に、当該アドレスから予め定める数値を減算する手段であり、前記最新データを読み出す手段は、減算で求めたアドレス値を先頭アドレスとしそのアドレスから最新データを読み出す手段である請求項19記載のフラッシュメモリ内蔵の半導体装置。
- ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
ユーザがそれぞれの前記インタフェース関数をユーザプログラムからコールすることによって前記フラッシュメモリ領域のデータ書き込み制御を行う際に、ユーザが前記書き込みインタフェース関数をコールするとともに、引数としてデータ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すインタフェース関数コール処理と、
書き込み処理が終了した時点で、ステータスデータを受け取るステータス受け取り処理と、
コールされた前記書き込みインタフェース関数が、前記データ書き込み処理関数をコールし、データ書き込み処理を行わせるとともに、引数として、データ書き込みを行うブロック番号、書き込みデータ先頭アドレスおよび書き込みデータ長を渡すデータ書き込み処理関数コール処理と、
書き込み処理が終了した時点で、前記データ書き込み処理関数からステータスデータを受け取るステータスデータ受け取り処理とを、前記CPUに実行させるプログラム。 - ユーザプログラムを格納するROMと、データ格納用フラッシュメモリと、フラッシュメモリ制御手段と、前記フラッシュメモリ制御手段の制御の下に前記ユーザプログラムからコールされ前記フラッシュメモリにデータ書き込みを行うための書き込みインタフェース関数およびデータ書き込み処理関数並びに読み出し制御を行うための読み出しインタフェース関数およびデータ読み出し処理関数を有するフラッシュメモリ・セルフ・プログラミング・ライブラリと、前記ユーザプログラムに基づき前記フラッシュメモリから読み出したデータを参照しかつ前記フラッシュメモリ制御手段と協働して前記フラッシュメモリの制御を行うCPUとを用いて、
ユーザがそれぞれ対応する前記インタフェース関数をユーザプログラムからコールすることによって前記フラッシュメモリ領域からのデータ読み出し制御を行う際に、前記読み出しインタフェース関数をコールするとともに、引数として、データ読み出しを行うブロック番号を渡すインタフェース関数コール処理と、
読み出し処理が終了した時点で、読み出したデータを受け取る読み出しデータ受取処理と、
コールされた前記読み出しインタフェース関数が、前記データ読み出し処理関数をコールし、データ読み出し処理を行わせるとともに、引数として、データ読み出しを行うブロック番号を渡すデータ読み出し処理関数コール処理と、
読み出し処理が終了した時点で、前記データ読み出し処理関数から読み出したデータを受け取る読み出しデータ受取処理とを、前記CPUに実行させるプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003100286A JP2004310268A (ja) | 2003-04-03 | 2003-04-03 | フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003100286A JP2004310268A (ja) | 2003-04-03 | 2003-04-03 | フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004310268A true JP2004310268A (ja) | 2004-11-04 |
Family
ID=33464472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003100286A Pending JP2004310268A (ja) | 2003-04-03 | 2003-04-03 | フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004310268A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006313411A (ja) * | 2005-05-06 | 2006-11-16 | Yokogawa Electric Corp | フラッシュメモリ制御方法及び制御装置 |
US8868822B2 (en) | 2010-03-24 | 2014-10-21 | Spansion Llc | Data-processing method, program, and system |
US9075740B2 (en) | 2008-03-07 | 2015-07-07 | Kabushiki Kaisha Toshiba | Memory system |
US9076533B2 (en) | 2012-05-30 | 2015-07-07 | Samsung Electronics Co., Ltd. | Method of reprogramming nonvolatile memory comprising marking some cells as blanks |
CN111208950A (zh) * | 2020-01-15 | 2020-05-29 | 山西银河电子设备厂 | 一种基于单片机的提升norflash使用周期的方法 |
-
2003
- 2003-04-03 JP JP2003100286A patent/JP2004310268A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006313411A (ja) * | 2005-05-06 | 2006-11-16 | Yokogawa Electric Corp | フラッシュメモリ制御方法及び制御装置 |
US9075740B2 (en) | 2008-03-07 | 2015-07-07 | Kabushiki Kaisha Toshiba | Memory system |
US8868822B2 (en) | 2010-03-24 | 2014-10-21 | Spansion Llc | Data-processing method, program, and system |
US9076533B2 (en) | 2012-05-30 | 2015-07-07 | Samsung Electronics Co., Ltd. | Method of reprogramming nonvolatile memory comprising marking some cells as blanks |
CN111208950A (zh) * | 2020-01-15 | 2020-05-29 | 山西银河电子设备厂 | 一种基于单片机的提升norflash使用周期的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4418439B2 (ja) | 不揮発性記憶装置およびそのデータ書込み方法 | |
US7070113B2 (en) | Nonvolatile memory card | |
US7480760B2 (en) | Rotational use of memory to minimize write cycles | |
US6865658B2 (en) | Nonvolatile data management system using data segments and link information | |
JP4999325B2 (ja) | フラッシュメモリ | |
US8595413B2 (en) | Memory control method and device, memory access control method, computer program, and recording medium | |
JP2005182793A (ja) | 頻繁にアクセスされたセクタの動作による不揮発性メモリに対するより速い書込み動作 | |
JP2000250820A (ja) | 不揮発性メモリへのデータ保存方法 | |
JP2005251219A (ja) | フラッシュメモリ内のブロックにおける移動セクタ | |
US20140181378A1 (en) | Control device, control method, and program | |
JP2006285600A (ja) | 記憶装置、メモリ管理装置、メモリ管理方法及びプログラム | |
US20070136510A1 (en) | Storage device, memory managing device, memory managing method, and program | |
JP4158526B2 (ja) | メモリカード及びメモリへのデータ書き込み方法 | |
US20040049727A1 (en) | Method and apparatus for allocating CRC codes in a flash ROM | |
US8046529B2 (en) | Updating control information in non-volatile memory to control selection of content | |
JP2004310268A (ja) | フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム | |
US20050273589A1 (en) | Method and system for reading instructions from NAND flash memory and writing them into SRAM for execution by a processing device | |
JP4826232B2 (ja) | 情報処理装置およびブートプログラムの書き換え方法 | |
CN108228095B (zh) | 一种基于Flash进行实时信息记录的方法 | |
JP4513786B2 (ja) | メモリコントローラ、メモリシステム及びメモリ制御方法 | |
JP4910402B2 (ja) | 不揮発性メモリの書き換え装置及び書き換え方法 | |
JP2009276883A (ja) | 半導体補助記憶装置 | |
JP5273780B2 (ja) | メモリアクセス制御方法及びメモリ制御装置、コンピュータプログラム | |
CN111241008B (zh) | 用于校正eeprom变量与地址的方法、装置和控制器 | |
JP2008171246A (ja) | フラッシュメモリドライブ装置、その制御方法及びそのプログラム |