JP5838783B2 - フラッシュメモリへのデータ書き込み方法 - Google Patents

フラッシュメモリへのデータ書き込み方法 Download PDF

Info

Publication number
JP5838783B2
JP5838783B2 JP2011278630A JP2011278630A JP5838783B2 JP 5838783 B2 JP5838783 B2 JP 5838783B2 JP 2011278630 A JP2011278630 A JP 2011278630A JP 2011278630 A JP2011278630 A JP 2011278630A JP 5838783 B2 JP5838783 B2 JP 5838783B2
Authority
JP
Japan
Prior art keywords
block
data
data group
written
group
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.)
Expired - Fee Related
Application number
JP2011278630A
Other languages
English (en)
Other versions
JP2013130947A (ja
Inventor
岳也 西脇
岳也 西脇
剛一 高橋
剛一 高橋
和弘 田中
和弘 田中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Aisin Corp
Original Assignee
Aisin Seiki Co Ltd
Aisin Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Aisin Seiki Co Ltd, Aisin Corp filed Critical Aisin Seiki Co Ltd
Priority to JP2011278630A priority Critical patent/JP5838783B2/ja
Publication of JP2013130947A publication Critical patent/JP2013130947A/ja
Application granted granted Critical
Publication of JP5838783B2 publication Critical patent/JP5838783B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)

Description

本発明は、書き換え可能な不揮発性メモリの一種であるフラッシュメモリへのデータ書き込み方法に関する。
近年、装置や機器の動作を統括管理するコントローラには、動作の際に必要となる各種データを記憶する必要性が増大していることから、種々のメモリが搭載されている。その一つとして各種データを電気的に書き込み及び消去が可能な不揮発性メモリであるフラッシュメモリがある。
フラッシュメモリの記憶領域で、一度データの書き込みが完了した領域にはそのままでは再度の書き込み(上書き)ができず、書き込みを行う領域のデータを先に消去する必要がある。ただし、データの消去も1バイト単位では行うことができない。フラッシュメモリは、全体の記憶領域が例えば32バイトや64バイト単位の複数のブロック(例えば128ブロック)で構成されており、データの消去はブロック単位でのみ可能である。データの書き込み及び消去回数には個別製品による上限がある。
特許文献1には、フラッシュメモリに書き込まれたデータを検索する時間を短縮できる発明が開示されている。この発明では、複数のデータを識別するデータIDにブロック領域のアドレス情報が対応付けられたテーブルを持ち、さらに1ブロックの領域を各々のデータIDごとに区分している。その結果、各データを書き込める領域が小さくなり検索時間を短縮できる。
特開2010−140346号公報
特許文献1の発明では、各々のデータはそのデータ列内に識別のためのデータIDを有している。データIDの分だけデータサイズが大きくなるため1つのブロック内に書き込むことができるデータの個数が少なくなってしまう。その結果1つのブロック内の記憶領域を有効に活用できないという問題があった。
特許文献1の発明では、当該ブロックのいずれかのデータ領域に書き込み可能な領域がなくなると、各々の既存の最新データを一旦RAMに転記し、当該ブロックを初期化する。その後RAMから他のブロックに既存の最新データを再転記する。しかし、データを転記する際にはデータの一部が破損・欠落してしまうおそれがあり、転記を2回行うとその可能性は高まる。データが正常に転記されなかったときには、最新データが喪失してしまうという問題があった。同様に、当該ブロックの初期化後且つ他のブロックへの転記完了前に通電が切断されると、RAM内のデータが消失するので、最新データが喪失してしまうという問題があった。
上記問題に鑑み、本発明は、ブロック内の記憶領域を有効に活用でき、最新データが喪失されるおそれがないフラッシュメモリへのデータ書き込み方法を提供することを課題とする。
上記課題を解決するために、本発明に係るフラッシュメモリへのデータ書き込み方法の特徴は、記憶領域を複数のブロックに分け、それぞれのデータサイズの合計が前記ブロックの書き込み可能容量以下で且つIDを有していない2種類のデータグループを前記ブロックの空き領域に複数回書き込む時に、既に書き込まれた前記データグループを保持したまま最新の前記データグループを書き足すようにし、一方の前記データグループを前記ブロックの先頭セルから順に書き込み、他方の前記データグループを前記ブロックの後尾セルから順に書き込み、3つの前記ブロックが一単位を構成し、前記一単位を構成する3つの前記ブロックの空き領域に2種類の前記データグループを複数回書き込むことにより、2種類の前記データグループの最新の前記データグループの両方が存在し且つ新たな前記データグループの書き込み可能な空き領域がない1つの前記ブロックが現れたとき、残り2つの前記ブロックのそれまでのデータの消去回数と残り2つの前記ブロックに新たな前記データグループを書き込み可能な空き領域があるか否かを確認し、残り2つの前記ブロックのいずれにも新たな前記データグループを書き込み可能な空き領域がないときは、それまでのデータの消去回数が少ない前記ブロック内のデータを消去してから当該ブロックに新たな前記データグループを書き込む点にある。
このような特徴によれば、2種類のデータグループはそれぞれ先頭セルと後尾セルから順に書き込まれるので、IDがなくても各々のデータグループを識別することができる。また、各々のデータグループのデータサイズがIDのサイズ分だけ小さくなるので、一つのブロック内の記憶領域を有効に活用できる。さらに、先頭セル、又は後尾セルから順に検索することにより、短時間で所望のデータグループ(例えば最新のデータグループ)を抽出することができる。
本発明に係るフラッシュメモリへのデータ書き込み方法においては、3つの前記ブロックの空き領域に2種類の前記データグループを複数回書き込むことにより2種類の前記データグループのいずれの最新の前記データグループも存在しない前記ブロックが現れたとき、当該ブロック内のデータを全て消去すると好適である。
本方法によれば、2種類のデータグループの最新のデータグループが存在しないブロックが現れた段階で、当該ブロック内のデータを全て消去する。従って、データグループを新たに書き込める領域がなくなるおそれがなく、既存の最新データグループの転記も行う必要がない。その結果、既存の最新のデータグループの一部が破損・欠落してしまうおそれがなく、最新のデータグループのデータを誤りなく維持することができる。また、最新データグループを新たに書き込んでいる最中に通電が切断されて最新データグループを正常に書き込むことができなくても、既存の最新のデータグループはデータを消去していないブロックに存在している。よって、最新のデータグループのデータを誤りなく維持することができる。
本発明に係るフラッシュメモリへのデータ書き込み方法においては、前記データグループのデータ列の先頭には、書き込まれたデータグループが正しいか否かの誤り検出をするためのチェックデータが配置されていると好適である。本方法によれば、書き込みの際は最初にチェックデータが書き込まれるので、データグループ書き込み後の誤り検出を確実に行うことができる。
本発明に係るフラッシュメモリへのデータ書き込み方法においては、前記データグループに、前記データグループの更新回数を示す更新回数データが含まれていると好適である。本方法によれば、同種のデータグループが複数回書き込まれているときに、いずれのデータグループが最新であるかを容易に判別することができる。
本発明に係るフラッシュメモリへのデータ書き込み方法においては、1つの前記ブロックに書き込まれた2種類の前記データグループの間には、前記データグループ間の境界を示す境界セルが存在すると好適である。本方法によれば、1つのブロックに2種類のデータグループが複数回書き込まれているときでも、それぞれのデータグループの境界を容易に把握することができる。
本発明の実施形態に係るフラッシュメモリを含むECUのソフトウェア構造を示す概略のブロック図 フラッシュメモリの構成を示す概念図 第1のデータグループがブロックに書き込まれるフロー 第2のデータグループがブロックに書き込まれるフロー データグループがブロックに書き込まれた状態を示す概念図 データグループがブロックに書き込まれた状態を示す概念図 データグループがブロックに書き込まれた状態を示す概念図 データグループがブロックに書き込まれた状態を示す概念図 データグループがブロックに書き込まれた状態を示す概念図 データグループがブロックに書き込まれた状態を示す概念図 データグループがブロックから消去された状態を示す概念図 データグループがブロックに書き込まれた状態を示す概念図 データグループがブロックから消去された状態を示す概念図 データグループがブロックに書き込まれた状態を示す概念図 データグループのブロックへの書き込みが正常に完了したかをチェックするフロー
以下、本発明の実施の形態について、図面に基づいて詳細に説明する。図1は、本発明の実施形態に係るフラッシュメモリ1を含むECU(Electronic Control Unit)2のソフトウェア構造を示す概略のブロック図である。フラッシュメモリ1は、車両用のECU2に搭載され、車両用センサ5から取得した検出データや設定値が書き込まれ、読み取られ、または消去される。フラッシュメモリ1への検出データや設定値の書き込み、読み取り、消去等の処理は、車両用センサ5を動作させるアプリケーションソフトウェア4から指令を受けたドライバ3により実行される。車両用センサ5の検出データや設定値は適宜更新されるので、直近に更新された最新データや最新設定値を誤りなく保持することがフラッシュメモリ1において重要である。
図2は、フラッシュメモリ1の構成を示す概念図である。フラッシュメモリ1はその内部の記憶領域が複数のブロックB0、ブロックB1、ブロックB2、・・・、ブロックBnに分けられている。nは2以上の整数である。これらのブロックがデータ消去の単位である。また、3つのブロックが一単位を構成する。例えばブロックB0、ブロックB1、ブロックB2で一単位、ブロックB3、ブロックB4、ブロックB5で一単位を構成する。本実施形態では、ブロックB0、ブロックB1、ブロックB2を用いて説明する。ブロックB0、ブロックB1、ブロックB2はいずれも32バイトの書き込み可能容量を持っている。ただし、本発明に係るブロックの書き込み可能容量は32バイトに限定されることはない。
ブロックB0、ブロックB1、ブロックB2の空き領域には第1のデータグループD1と第2のデータグループD2が複数回書き込まれる。第1のデータグループD1と第2のデータグループD2は新たな書き込みがなされても上書きされることなく、ブロックB0、ブロックB1、ブロックB2に空き領域がある限り既存の第1のデータグループD1と第2のデータグループD2を保持したまま新たな第1のデータグループD1と第2のデータグループD2が書き足される。すなわち、複数の第1のデータグループD1又は複数の第2のデータグループD2がブロックB0、ブロックB1、ブロックB2内に存在できる。
第1のデータグループD1、第2のデータグループD2とも、そのデータ構成の中に書き込み回数(更新回数)を示すデータが含まれている。書き込まれている第1のデータグループD1と第2のデータグループD2のそれぞれの書き込み回数のデータにより、いずれが最新の第1のデータグループD1と最新の第2のデータグループD2であるかが判別できる。第1のデータグループD1と第2のデータグループD2のデータ構成については後述する。
以下、複数回書き込まれた第1のデータグループD1及び第2のデータグループD2をそれぞれ区別して扱うときは、第1のデータグループD11、第1のデータグループD12、第1のデータグループD13、第1のデータグループD14、・・・、第2のデータグループD21、第2のデータグループD22、第2のデータグループD23、・・・のように記載する。符号末尾の1、2、3、4、・・・はブロックB0、ブロックB1、ブロックB2に書き込まれた(更新された)回数を表す。第1のデータグループD1と第2のデータグループD2はアプリケーションソフトウェア4にて作成され、それらのデータサイズは更新されても一定である。
図2では、ブロックB0に第1のデータグループD11と第2のデータグループD21、第2のデータグループD22が書き込まれていることを示している。また図2は、ブロックB1に第1のデータグループD12、第1のデータグループD13が書き込まれ、ブロックB2に第1のデータグループD14と第2のデータグループD23が書き込まれていることを示している。
第1のデータグループD1はブロックB0、ブロックB1、ブロックB2の先頭のセルから順に書き込まれ、第2のデータグループD2は後尾のセルから順に書き込まれる。これは、図示しないテーブルによって予め決められている。また、1つのブロック内の第1のデータグループD1の最後尾と第2のデータグループD2の最後尾との間には予め決められたサイズ(例えば2バイト)以上の境界セル(空きセル)30が存在するように書き込まれる。この境界セル30は第1のデータグループD1と第2のデータグループD2との境界を示すものである。これにより、データ構成にIDが含まれていなくても書き込まれたデータグループが第1のデータグループD1と第2のデータグループD2のどちらであるかを識別することができ、ブロックB0、ブロックB1、ブロックB2内の記憶領域を有効に活用することができる。
図3に、第1のデータグループD1がブロックB0、ブロックB1、ブロックB2のいずれかに書き込まれるフローを示す。アプリケーションソフトウェア4からドライバ3が書き込み命令を受けると、ドライバ3はブロックB0、ブロックB1、ブロックB2の順でブロック内を検索し、ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているか否かを確認する(S1)。ブロックB0、ブロックB1、ブロックB2のいずれのブロックにも第1のデータグループD1及び第2のデータグループD2が書き込まれていないときは(S1のNo)、ブロックB0の先頭のセルから第1のデータグループD1を書き込む(S2)。
ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているときは(S1のYes)、ドライバ3は、最新の第1のデータグループD1が書き込まれているブロックBxを特定する(S3)。そして、当該ブロックBxの空き領域内で第1のデータグループD1を書き込める領域が存在するか否か、すなわち、第1のデータグループD1を書き込めるだけの連続した空きセルが存在するか否かを以下の手順で確認する(S4)。なお、ブロックBxはブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックである。
当該ブロックBxの先頭のセルが空きセルのときは、ドライバ3は、第1のデータグループD1のデータサイズに相当する空きセルが先頭のセルから連続して存在するかどうかを確認する。ブロックBxの先頭のセルに既に第1のデータグループD1が書き込まれているときには、ドライバ3は、既に書き込まれている第1のデータグループD1の最後尾の次のセルから連続して第1のデータグループD1のデータサイズに相当する空きセルが存在するかどうかを確認する。ブロックBxに第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときは(S4のYes)、ドライバ3は、第1のデータグループD1をブロックBxに書き込む(S5)。なお、S2とS5のステップにおいては、新たに書き込んだ第1のデータグループD1の誤り検出を行うことを含んでいる。誤り検出の手順については後述する。
ただし、第1のデータグループD1のデータサイズに相当する連続した空きセルが存在していたとしても、その最後尾の空きセルと既に書き込まれている第2のデータグループD2の最後尾のセルとの間に境界セル30が存在できないときは、ドライバ3はブロックBxの空き領域内には第1のデータグループD1を書き込めるだけの連続した空きセルは存在しなかったと判断する(S4のNo)。
上記の他、第1のデータグループD1のデータサイズに相当する連続した空きセルがないなど、ブロックBxに第1のデータグループD1を書き込める連続した空きセルが存在しなかったときは(S4のNo)、次にドライバ3は最新の第2のデータグループD2が書き込まれているブロックByを特定する(S6)。そして、ブロックByの空き領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認する(S7)。確認の方法は上述したブロックBxでの手順と同じである。ブロックBy内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときは(S7のYes)、第1のデータグループD1をブロックByに書き込む(S5)。なお、ブロックByは、ブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックであり、ブロックBxと同じブロックであるときもあれば、異なるブロックであるときもある。
ブロックByにも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときは(S7のNo)、ドライバ3はブロックBxとブロックByとが同じブロックであるか否かを判断する(S8)。ブロックBxとブロックByが同じブロックのときは(S8のYes)、未だ空き領域を確認していないブロックが2つ存在する。その2つのブロックのこれまでのデータ消去回数が同じかどうかを判断する(S9)。
2つのブロックのデータ消去回数が同じであれば(S9のYes)、ブロックの検索順序に沿って次に検索するブロックを特定する(S10)。そのブロックをブロックBz1とする。すなわち、ブロックBx(=ブロックBy)がブロックB0のときは、ブロックBz1はブロックB1である。ブロックBx(=ブロックBy)がブロックB1のときは、ブロックBz1はブロックB2である。ブロックBx(=ブロックBy)がブロックB2のときは、ブロックBz1はブロックB0である。
そしてブロックBz1空き領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認する(S12)。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz1内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときは(S12のYes)、第1のデータグループD1をブロックBz1に書き込む(S5)。
ブロックBz1に第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときは(S12のNo)、残る1つのブロックの空き領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認する(S13)。当該ブロックをブロックBz2とする。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz2内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときは(S13のYes)、第1のデータグループD1をブロックBz2に書き込む(S5)。
ブロックBz2にも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときは(S13のNo)、ブロックB0、ブロックB1、ブロックB2のいずれにも第1のデータグループD1を書き込めるだけの連続した空きセルがないことになる。そのときは、ブロックBz1のデータを全て消去して(S14)、ブロックBz1の先頭のセルから第1のデータグループD1を書き込む(S5)。
このように、本実施形態においては、ブロックBxにある既存の最新の第1のデータグループD1の転記を行うことなく、第1のデータグループD1を新たに書き足すことができる。従って、既存の最新の第1のデータグループD1の一部が破損、欠落してしまうおそれがない。また、ブロックBz1におけるデータ消去中や第1のデータグループD1を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第1のデータグループD1は残存しているので、既存の最新の第1のデータグループD1を誤りなく維持することができる。
空き領域の確認をしていない2つのブロックのデータ消去回数が異なるときは(S9のNo)、データの消去回数の少ないブロックをブロックBz1とする(S11)。その後の流れは上述した手順と同じである。データの消去回数は個別製品による上限があるが、データの消去回数の少ないブロックをブロックBz1としてブロックBz2より優先的にデータを消去することにより、ブロックB0、B1、B2の残存消去回数を平準化できる。それにより、消去回数上限まで図3、図4のフローに沿って第1のデータグループD1と第2のデータグループD2を新たに書き込むことが可能になり、製品としての寿命を長くすることができる。
ブロックBxとブロックByが異なるブロックのときは(S8のNo)、空き領域の確認をしていないブロックは1つだけである。当該空き領域の確認をしていないブロックをブロックBzとする。ブロックBzの領域内で第1のデータグループD1を書き込めるだけの連続した空きセルがあるか否かを確認する(S15)。確認の手順は上述したブロックBxでの手順と同じである。ブロックBz内に第1のデータグループD1を書き込めるだけの連続した空きセルが存在したときは(S15のYes)、第1のデータグループD1をブロックBzに書き込む(S5)。
ブロックBzにも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しなかったときは(S15のNo)、ブロックB0、ブロックB1、ブロックB2のいずれにも第1のデータグループD1を書き込めるだけの連続した空きセルが存在しないことになる。そのときは、ブロックBzのデータを全て消去して(S16)、ブロックBzの先頭のセルから第1のデータグループD1を書き込む(S5)。
このようにブロックBxにある既存の最新の第1のデータグループD1やByにある既存の最新の第2のデータグループD2の転記を行うことなく、第1のデータグループD1を新たに書き足すことができる。従って、既存の最新の第1のデータグループD1の一部が破損、欠落してしまうおそれがない。また、ブロックBzにおけるデータ消去中や第1のデータグループD1を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第1のデータグループD1は存在しているので、既存の最新の第1のデータグループD1を誤りなく維持することができる。
第1のデータグループD1の新たな書き込み(S5)が正常に完了した後は、当該第1のデータグループD1を書き込んだブロック及び最新の第2のデータグループD2が存在するブロックByを除くそれ以外のブロックBに、新たに第1のデータグループD1又は第2のデータグループD2を書き込めるだけの連続した空きセルが存在するかどうかを確認する(S17)。第2のデータグループD2を書き込めるだけの連続した空きセルが存在するかどうかの確認方法は後述する。当該ブロックBに連続した空きセルが存在すれば(S17のYes)、このフローを終了する。当該ブロックBに連続した空きセルが存在しなければ(S17のNo)、当該ブロックBのデータを全て消去して(S18)、このフローを終了する。
図4に、第2のデータグループD2がブロックBに書き込まれるフローを示す。このフローは、基本的に図3と同様である。ただし、第2のデータグループD2はブロックB0、ブロックB1、ブロックB2の後尾から書き込まれていく点で、第1のデータグループD1とは異なっている。
アプリケーションソフトウェア4からドライバ3が書き込み命令を受けると、ドライバ3はブロックB0、ブロックB1、ブロックB2の順でブロック内を検索し、ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているか否かを確認する(S21)。ブロックB0、ブロックB1、ブロックB2のいずれのブロックにも第1のデータグループD1及び第2のデータグループD2が書き込まれていないときは(S21のNo)、ブロックB0の先頭のセルから第2のデータグループD2を書き込む(S22)。
ブロックB0、ブロックB1、ブロックB2のいずれかに第1のデータグループD1又は第2のデータグループD2が書き込まれているときは(S21のYes)、ドライバ3は、最新の第1のデータグループD1が書き込まれているブロックBxを特定する(S23)。そして、当該ブロックBxの空き領域内で第2のデータグループD2を書き込める領域が存在するか否か、すなわち、第2のデータグループD2を書き込めるだけの連続した空きセルが存在するか否かを以下の手順で確認する(S24)。なお、ブロックBxはブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックである。
当該ブロックBxの後尾のセルが空きセルのときは、ドライバ3は、第2のデータグループD2のデータサイズに相当する空きセルが後尾のセルから連続して存在するかどうかを確認する。ブロックBxの後尾のセルに既に第2のデータグループD2が書き込まれているときには、ドライバ3は、既に書き込まれている第2のデータグループD2の最後尾の次のセルから連続して第2のデータグループD2のデータサイズに相当する空きセルが存在するかどうかを確認する。ブロックBxに第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときは(S24のYes)、ドライバ3は、第2のデータグループD2をブロックBxに書き込む(S25)。なお、S22とS25のステップにおいては、新たに書き込んだ第2のデータグループD2の誤り検出を行うことを含んでいる。誤り検出の手順については後述する。
ただし、第2のデータグループD2のデータサイズに相当する連続した空きセルが存在していたとしても、その最後尾の空きセルと既に書き込まれている第1のデータグループD1の最後尾のセルとの間に境界セル30が存在できないときは、ドライバ3はブロックBxの空き領域内には第2のデータグループD2を書き込めるだけの連続した空きセルは存在しなかったと判断する(S24のNo)。
上記の他、第2のデータグループD2のデータサイズに相当する連続した空きセルがないなど、ブロックBxに第2のデータグループD2を書き込める連続した空きセルが存在しなかったときは(S24のNo)、次にドライバ3は最新の第2のデータグループD2が書き込まれているブロックByを特定する(S26)。そして、ブロックByの空き領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認する(S27)。確認の方法は上述したブロックBxでの手順と同じである。ブロックBy内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときは(S27のYes)、第2のデータグループD2をブロックByに書き込む(S25)。なお、ブロックByは、ブロックB0、ブロックB1、ブロックB2のいずれか1つのブロックであり、ブロックBxと同じブロックであるときもあれば、異なるブロックであるときもある。
ブロックByにも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときは(S27のNo)、ドライバ3はブロックBxとブロックByとが同じブロックであるか否かを判断する(S28)。ブロックBxとブロックByが同じブロックのときは(S28のYes)、未だ空き領域を確認していないブロックが2つ存在する。その2つのブロックのこれまでのデータ消去回数が同じかどうかを判断する(S29)。
2つのブロックのデータ消去回数が同じであれば(S29のYes)、ブロックの検索順序に沿って次に検索するブロックを特定する(S30)。そのブロックをブロックBz1とする。すなわち、ブロックBx(=ブロックBy)がブロックB0のときは、ブロックBz1はブロックB1である。ブロックBx(=ブロックBy)がブロックB1のときは、ブロックBz1はブロックB2である。ブロックBx(=ブロックBy)がブロックB2のときは、ブロックBz1はブロックB0である。
そしてブロックBz1空き領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認する(S32)。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz1内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときは(S32のYes)、第2のデータグループD2をブロックBz1に書き込む(S25)。
ブロックBz1に第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときは(S32のNo)、残る1つのブロックの空き領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認する(S33)。当該ブロックをブロックBz2とする。確認の方法は上述したブロックBxでの手順と同じである。ブロックBz2内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときは(S32のYes)、第2のデータグループD2をブロックBz2に書き込む(S5)。
ブロックBz2にも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときは(S33のNo)、ブロックB0、ブロックB1、ブロックB2のいずれにも第2のデータグループD2を書き込めるだけの連続した空きセルがないことになる。そのときは、ブロックBz1のデータを全て消去して(S34)、ブロックBz1の後尾のセルから第2のデータグループD2を書き込む(S25)。
このように、本実施形態においては、ブロックBxにある既存の最新の第2のデータグループD2の転記を行うことなく、第2のデータグループD2を新たに書き足すことができる。従って、既存の最新の第2のデータグループD2の一部が破損、欠落してしまうおそれがない。また、ブロックBz1におけるデータ消去中や第2のデータグループD2を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第2のデータグループD2は残存しているので、既存の最新の第2のデータグループD2を誤りなく維持することができる。
空き領域の確認をしていない2つのブロックのデータ消去回数が異なるときは(S29のNo)、データの消去回数の少ないブロックをブロックBz1とする(S11)。その後の流れは上述した手順と同じである。データの消去回数は個別製品による上限があるが、データの消去回数の少ないブロックをブロックBz1としてブロックBz2より優先的にデータを消去することにより、ブロックB0、B1、B2の残存消去回数を平準化できる。それにより、消去回数上限まで図3、図4のフローに沿って第1のデータグループD1と第2のデータグループD2を新たに書き込むことが可能になり、製品としての寿命を長くすることができる。
ブロックBxとブロックByが異なるブロックのときは(S28のNo)、空き領域の確認をしていないブロックは1つだけである。当該空き領域の確認をしていないブロックをブロックBzとする。ブロックBzの領域内で第2のデータグループD2を書き込めるだけの連続した空きセルがあるか否かを確認する(S35)。確認の手順は上述したブロックBxでの手順と同じである。ブロックBz内に第2のデータグループD2を書き込めるだけの連続した空きセルが存在したときは(S35のYes)、第2のデータグループD2をブロックBzに書き込む(S25)。
ブロックBzにも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しなかったときは(S35のNo)、ブロックB0、ブロックB1、ブロックB2のいずれにも第2のデータグループD2を書き込めるだけの連続した空きセルが存在しないことになる。そのときは、ブロックBzのデータを全て消去して(S36)、ブロックBzの後尾のセルから第2のデータグループD2を書き込む(S25)。
このようにブロックBxにある既存の最新の第1のデータグループD1やByにある既存の最新の第2のデータグループD2の転記を行うことなく、第2のデータグループD2を新たに書き足すことができる。従って、既存の最新の第2のデータグループD2の一部が破損、欠落してしまうおそれがない。また、ブロックBzにおけるデータ消去中や第2のデータグループD2を新たに書き込んでいる最中に通電が切断されても、ブロックBxにある既存の最新の第2のデータグループD2は存在しているので、既存の最新の第2のデータグループD2を誤りなく維持することができる。
第2のデータグループD2の新たな書き込み(S25)が正常に完了した後は、当該第2のデータグループD2を書き込んだブロック及び最新の第1のデータグループD1が存在するブロックBxを除くそれ以外のブロックBに、新たに第1のデータグループD1又は第2のデータグループD2を書き込めるだけの連続した空きセルが存在するかどうかを確認する(S37)。当該ブロックBに連続した空きセルが存在すれば(S37のYes)、このフローを終了する。当該ブロックBに連続した空きセルが存在しなければ(S37のNo)、当該ブロックBのデータを全て消去して(S38)、このフローを終了する。
次に、第1のデータグループD1のブロックへの書き込みについてより具体的に説明する。図5aは、ブロックB0の先頭のセルから第1のデータグループD11が書き込まれた状態を示す概念図である。これは図3のS2の状態である。左からブロックB0、ブロックB1、ブロックB2の順に並んでいる。ブロックB1とブロックB2の各セルは無色であるが、これは第1のデータグループD1及び第2のデータグループD2が書き込まれていないことを示している。
ブロックB1、ブロックB2、ブロックB3はそれぞれ32バイトの大きさで、1マスが1バイトである。第1のデータグループD1は、先頭から順に2バイトのチェックデータ11、4バイトの第1のデータ13、4バイトの第2のデータ14、3バイトの第3のデータ15、1バイトの更新回数データ12から構成される14バイトのデータである。第1のデータグループD1はアプリケーションソフトウェア4aで、第2のデータグループD2のデータ列はアプリケーションソフトウェア4bでそれぞれ作られる。
第1のデータ13、第2のデータ14、第3のデータ15は、車両用センサ5aから取得した検出データや設定値のデータである。チェックデータ11は、第1のデータ13、第2のデータ14、第3のデータ15を入力としてCRC(Cyclic Redundancy Check)演算により算出された誤り検出用のデータである。更新回数データ12は、第1のデータグループD11がブロックに書き込まれた回数を示すデータである。なお、太線で囲まれているデータグループが、書き込まれた最新の第1のデータグループD1である。
図5bは、図5aの状態から、ブロックB0に第2のデータグループD21が書き込まれた状態を示す概念図である。これは図4のS24からS25へ進んだ状態である。最新の第1のデータグループD11が書き込まれているブロックB0には、18バイトの空きセルがある。第2のデータグループD21は、先頭から順に2バイトのチェックデータ21、3バイトの第1のデータ23、2バイトの第2のデータ24、1バイトの更新回数データ22のように構成される8バイトのデータである。また、第2のデータグループD21を書き込んだ後でも第1のデータグループD11との間に2バイトの境界セル30を確保することができる。従って、第2のデータグループD21はブロックB0に書き込み可能である。第1のデータ23、第2のデータ24は、別の車両用センサ5bから取得した検出データや設定値のデータである。チェックデータ21と更新回数データ22は第1のデータグループD1と同じなので詳細な説明は割愛する。
第2のデータグループD2はブロックB0の後尾から書き込まれる。すなわち、ブロックB0の最後尾のセルからチェックデータ21、第1のデータ23、第2のデータ24、更新回数データ22の順に書き込まれる。なお、太線で囲まれているデータグループが、書き込まれた最新の第2のデータグループD2である。
図5cは、図5bの状態から、ブロックB0に第2のデータグループD22が書き込まれた状態を示す概念図である。これは図4のS24からS25へ進んだ状態である。図5bの状態で最新の第1のデータグループD11が書き込まれているブロックB0には10バイトの空きセルがある。第2のデータグループD22のデータサイズは8バイトである。また、第2のデータグループD22を書き込んだ後でも第1のデータグループD11との間に2バイトの境界セル30を確保することができる。従って、第2のデータグループD22はブロックB0に書き込み可能であり、第2のデータグループD21の最後尾(更新回数データ22)から連続してブロックB0に書き込まれる。なお、図5bで第2のデータグループD21が書き込まれている領域は図5cでは濃色のセルになっているが、これは第2のデータグループD21が存在していることを示している(以降の図でも同様)。
図5dは、図5cの状態から、ブロックB1に第1のデータグループD12が書き込まれた状態を示す概念図である。これは図3のS10からS12を経てS5へ進んだ状態である。図5cの状態で最新の第1のデータグループD11と最新の第2のデータグループD22が書き込まれているブロックB0には2バイトの空きセルがある。そのため、14バイトの第1のデータグループD12はブロックB0に書き込むことはできない。ブロックB1とブロックB2は共にデータ消去されておらず、また第1のデータグループD1も第2のデータグループD2も書き込まれていない。そこで第1のデータグループD12はブロックB1の先頭のセルから書き込まれる。
図5eは、図5dの状態から、ブロックB1に第1のデータグループD13が書き込まれた状態を示す概念図である。これは図3のS4からS5へ進んだ状態である。図5dの状態で、最新の第1のデータグループD12はブロックB1に書き込まれている。ブロックB1には18バイトの空きセルがあり、第1のデータグループD13のデータサイズは14バイトである。よって、第1のデータグループD13はブロックB1の第1のデータグループD12の最後尾(更新回数データ12)から連続してブロックB1に書き込まれる。
図5fは、図5eの状態から、ブロックB2に第2のデータグループD23が書き込まれた状態を示す概念図である。これは図4のS35からS25へ進んだ状態である。図5eの状態で最新の第1のデータグループD13が書き込まれているブロックB1には4バイトの空きがある。また、最新の第2のデータグループD22が書き込まれているブロックB0には2バイトの空きセルがある。第2のデータグループD23のデータサイズは8バイトなので、ブロックB0、ブロックB1のいずれにも書き込むことはできない。しかし、ブロックB2には既存の第1のデータグループD1も第2のデータグループD2も存在しない。よって、第2のデータグループD23はブロックB2の後尾のセルから書き込まれる。
図5gは、図5fの状態から、ブロックB0に書き込まれていたデータグループが消去された状態を示す概念図である。これは図4のS25からS37を経てS38へ進んだ状態である。図5fの状態で、最新の第1のデータグループD13はブロックB1に書き込まれており、最新の第2のデータグループD23はブロックB2に書き込まれている。また、ブロックB0の空きセルは2バイトなので、第1のデータグループD1も第2のデータグループD2もブロックB0に書き込むことはできない。よって、ブロックB0に書き込まれていた第1のデータグループD11、第2のデータグループD21、第2のデータグループD22を消去して、新たなデータグループの書き込みを可能にする。
図5hは、図5gの状態から、ブロックB2に第1のデータグループD14が書き込まれた状態を示す概念図である。これは図3のS7からS5へ進んだ状態である。図5gの状態で最新の第1のデータグループD13はブロックB1に書き込まれている。また、最新の第2のデータグループD23はブロックB2に書き込まれている。ブロックB1には4バイトしか空きセルがないが、ブロックB2は24バイトの空きセルがある。よって、第1のデータグループD14はブロックB2の先頭のセルから書き込まれる。
図5iは、図5hの状態から、ブロックB1に書き込まれていたデータグループが消去された状態を示す概念図である。これは図3のS5からS17、S18へ進んだ状態である。図5hの状態で、最新の第1のデータグループD14、最新の第2のデータグループD23はいずれもブロックB1に書き込まれている。また、ブロックB1の空きセルは4バイトであり、第1のデータグループD1も第2のデータグループD2も書き込むことはできない。よって、ブロックB1に書き込まれていた第1のデータグループD12、第1のデータグループD13を消去して、新たなデータグループの書き込みを可能にする。
図5jは、図5iの状態から、ブロックB0に第1のデータグループD15が書き込まれた状態を示す概念図である。これは図3のS10からSs12を経てS5へ進んだ状態である。図5iの状態で最新の第1のデータグループD14、最新の第2のデータグループD23は共にブロックB2に書き込まれている。また、ブロックB2には10バイトしか空きセルがない。よって、ブロックB2には第1のデータグループD15を書き込むことはできない。また、ブロックB0、ブロックB1とも32バイトの空きセルがあるが、どちらも消去回数は1回である。そこで、ブロックB1よりもブロックB0に優先的に書き込みを行う。よって、第1のデータグループD15はブロックB0の先頭のセルから書き込まれる。
以後も、図3、図4のフローに従って、第1のデータグループD1と第2のデータグループD2がブロックに書き込まれたり、ブロックのデータが消去されたりする。このようにブロックにある既存の最新の第1のデータグループD1と第2のデータグループD2の転記を行うことなく、新たな第1のデータグループD1と第2のデータグループD2とを書き足すことができる。従って、既存の最新の第1のデータグループD1や第2のデータグループD2の一部が破損、欠落してしまうおそれがない。また、ブロックにおけるデータ消去中や新たな第1のデータグループD1や第2のデータグループD2を書き込んでいる最中に通電が切断されても、既存の最新の第1のデータグループD1や第2のデータグループD2は残存しており、それらを誤りなく維持することができる。さらには、ブロックB0、B1、B2の残り消去回数を平準化できる。それにより、消去回数上限まで図3、図4のフローに沿って第1のデータグループD1と第2のデータグループD2を新たに書き込むことが可能になり、製品としての寿命を長くすることができる。
アプリケーションソフトウェア4a、アプリケーションソフトウェア4bは、第1のデータグループD1と第2のデータグループD2のブロックへの書き込み後に、その書き込みが正常に完了したかどうかの誤り検出をしている。図6に、第1のデータグループD11がブロックB0に正常に書き込まれたかどうかの誤り検出をするフローを示す。
まず、第1のデータ13、第2のデータ14、第3のデータ15を車両用センサ5aから取得し(S61)。アプリケーションソフトウェア4aは、取得した第1のデータ13、第2のデータ14、第3のデータ15からCRC演算により書き込み前のチェックデータ11aを算出する(S62)。そして、書き込み前のチェックデータ11aを先頭に、第1のデータ13、第2のデータ14、第3のデータ15、更新回数データ12を統合し、第1のデータグループD11を構成する(S63)。第1のデータグループD11は、図3の手順に従い、ドライバ3aによりフラッシュメモリ1に書き込まれる(S64)。
第1のデータグループD11のブロックB0への書き込みが完了すると、書き込みが正常に完了したか否かの誤り検出を行う。具体的には、ブロックB0に書き込まれた第1のデータ13、第2のデータ14、第3のデータ15がドライバ3aにより読み取られ(S65)、アプリケーションソフトウェア4aに送られる。アプリケーションソフトウェア4aは当該読み取られた第1のデータ13、第2のデータ14、第3のデータ15を入力として新たにCRC演算し、書き込み後のチェックデータ11bを算出する(S66)。そして、書き込み前のチェックデータ11aの値と書き込み後のチェックデータ11bの値とを比較する(S67)。書き込み前のチェックデータ11aと書き込み後のチェックデータ11bの値が同じであれば(S67のYes)、第1のデータ13、第2のデータ14、第3のデータ15はブロックB0に正しく書き込まれたと判断し、フローは終了する。書き込み前のチェックデータ11aと書き込み後のチェックデータ11bの値が異なっていれば、ブロックB0に正しく書き込まれなかったと判断される(S67のNo)。正しく書き込まれなかったと判断されたときには、再度図3の手順に従い、第1のデータグループD11をブロックBの他の空き領域に書き込む(S68)。このようにして、ブロックB0に書き込まれた第1のデータグループD11は正確性が担保される。
本発明は、書き換え可能な不揮発性メモリの一種であるフラッシュメモリに用いることが可能である。
1:フラッシュメモリ
11、21:チェックデータ
12、22:更新回数データ
30:境界セル
B1、B2、B3:ブロック
D1、D11、D12、D13、D14、D15:第1のデータグループ
D2、D21、D22、D23:第2のデータグループ

Claims (5)

  1. 記憶領域を複数のブロックに分け、それぞれのデータサイズの合計が前記ブロックの書き込み可能容量以下で且つIDを有していない2種類のデータグループを前記ブロックの空き領域に複数回書き込む時に、既に書き込まれた前記データグループを保持したまま最新の前記データグループを書き足すようにし、一方の前記データグループを前記ブロックの先頭セルから順に書き込み、他方の前記データグループを前記ブロックの後尾セルから順に書き込み、
    3つの前記ブロックが一単位を構成し、前記一単位を構成する3つの前記ブロックの空き領域に2種類の前記データグループを複数回書き込むことにより、2種類の前記データグループの最新の前記データグループの両方が存在し且つ新たな前記データグループの書き込み可能な空き領域がない1つの前記ブロックが現れたとき、残り2つの前記ブロックのそれまでのデータの消去回数と残り2つの前記ブロックに新たな前記データグループを書き込み可能な空き領域があるか否かを確認し、残り2つの前記ブロックのいずれにも新たな前記データグループを書き込み可能な空き領域がないときは、それまでのデータの消去回数が少ない前記ブロック内のデータを消去してから当該ブロックに新たな前記データグループを書き込むフラッシュメモリへのデータ書き込み方法。
  2. 3つの前記ブロックの空き領域に2種類の前記データグループを複数回書き込むことにより2種類の前記データグループのいずれの最新の前記データグループも存在しない前記ブロックが現れたとき、当該ブロック内のデータを全て消去する請求項1に記載のフラッシュメモリへのデータ書き込み方法。
  3. 前記データグループのデータ列の先頭には、書き込まれたデータグループが正しいか否かの誤り検出をするためのチェックデータが配置されている請求項1又は2に記載のフラッシュメモリへのデータ書き込み方法。
  4. 前記データグループには、前記データグループの更新回数を示す更新回数データが含まれている請求項1乃至3のいずれか一項に記載のフラッシュメモリへのデータ書き込み方法。
  5. 1つの前記ブロックに書き込まれた2種類の前記データグループの間には、前記データグループ間の境界を示す境界セルが存在する請求項1乃至4のいずれか一項に記載のフラッシュメモリへのデータ書き込み方法。
JP2011278630A 2011-12-20 2011-12-20 フラッシュメモリへのデータ書き込み方法 Expired - Fee Related JP5838783B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011278630A JP5838783B2 (ja) 2011-12-20 2011-12-20 フラッシュメモリへのデータ書き込み方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011278630A JP5838783B2 (ja) 2011-12-20 2011-12-20 フラッシュメモリへのデータ書き込み方法

Publications (2)

Publication Number Publication Date
JP2013130947A JP2013130947A (ja) 2013-07-04
JP5838783B2 true JP5838783B2 (ja) 2016-01-06

Family

ID=48908473

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011278630A Expired - Fee Related JP5838783B2 (ja) 2011-12-20 2011-12-20 フラッシュメモリへのデータ書き込み方法

Country Status (1)

Country Link
JP (1) JP5838783B2 (ja)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001035232A1 (en) * 1999-11-10 2001-05-17 Sony Electronics Inc. Device for storing audio/video data and non audio/video data
US7610442B2 (en) * 2002-12-24 2009-10-27 Lg Electronics Inc. Dual journaling store method and storage medium thereof
JP4419415B2 (ja) * 2003-03-28 2010-02-24 三菱電機株式会社 記録方式
JP2007241466A (ja) * 2006-03-06 2007-09-20 Sony Corp メモリ管理装置,メモリ管理方法,通信装置,通信方法
JP2009093528A (ja) * 2007-10-11 2009-04-30 Victor Co Of Japan Ltd メモリデータ管理装置
JP2010176201A (ja) * 2009-01-27 2010-08-12 Tokai Rika Co Ltd フラッシュメモリのデータ消失防止装置及びフラッシュメモリのデータ消失防止方法

Also Published As

Publication number Publication date
JP2013130947A (ja) 2013-07-04

Similar Documents

Publication Publication Date Title
EP2003569B1 (en) Flash memory controller
US9431069B2 (en) Management method for nonvolatile memory system following power-off
JP4842563B2 (ja) メモリコントローラ、不揮発性記憶装置、不揮発性記憶システム、及びデータ書き込み方法
US6865658B2 (en) Nonvolatile data management system using data segments and link information
KR960004738B1 (ko) 불휘발성 반도체 메모리 장치
US8996791B2 (en) Flash memory device, memory control device, memory control method, and storage system
JP4748708B2 (ja) 半導体装置
CN101978357A (zh) 数据更新方法、存储器***和存储器设备
KR20020009564A (ko) 메모리 시스템
JP2010020586A (ja) データ処理装置
CN111324549B (zh) 一种存储器及其控制方法和装置
EP1659497A1 (en) Non-volatile storage device and write method thereof
JP4501881B2 (ja) メモリコントローラ及びフラッシュメモリシステム
JP4235646B2 (ja) メモリコントローラおよびフラッシュメモリシステム
JP5838783B2 (ja) フラッシュメモリへのデータ書き込み方法
JP2008084184A (ja) メモリコントローラ
JP5520098B2 (ja) データ処理方法、プログラムおよびシステム
JP2009086738A (ja) メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP4153535B2 (ja) メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びに、フラッシュメモリの制御方法
KR102072351B1 (ko) 플래시 메모리를 관리하기 위한 방법
JP4743185B2 (ja) メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP6040895B2 (ja) マイクロコンピュータ及び不揮発性メモリのブロック管理方法
JP3807012B2 (ja) 記憶装置
JP4497124B2 (ja) メモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法
JP4513782B2 (ja) メモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141110

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150730

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150924

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151013

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151026

LAPS Cancellation because of no payment of annual fees