JP2005038518A - メモリのデータ書き換え方法 - Google Patents

メモリのデータ書き換え方法 Download PDF

Info

Publication number
JP2005038518A
JP2005038518A JP2003274737A JP2003274737A JP2005038518A JP 2005038518 A JP2005038518 A JP 2005038518A JP 2003274737 A JP2003274737 A JP 2003274737A JP 2003274737 A JP2003274737 A JP 2003274737A JP 2005038518 A JP2005038518 A JP 2005038518A
Authority
JP
Japan
Prior art keywords
data
area
sector
written
memory
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
Application number
JP2003274737A
Other languages
English (en)
Inventor
Yoshihiro Masana
芳弘 正名
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.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry Co Ltd
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 Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP2003274737A priority Critical patent/JP2005038518A/ja
Priority to US10/759,096 priority patent/US20050015408A1/en
Publication of JP2005038518A publication Critical patent/JP2005038518A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • G11C16/102External programming circuits, e.g. EPROM programmers; In-circuit programming or reprogramming; EPROM emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Read Only Memory (AREA)
  • Memory System (AREA)

Abstract

【課題】 高速でデータの書き換えができ、しかも書き換え回数の少ないフラッシュメモリのデータ書き換え方法を提供する。
【解決手段】 複数のエリア1〜nに分割され、この各エリア1〜nの同一位置にそれぞれデータが書き込まれるセクタ1を有するフラッシュメモリ10を備え、書換データを書き込む際、その書換データとエリア1の書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータとエリア2の前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込む。
【選択図】 図1

Description

本発明は、例えばフラッシュメモリのデータの書き換え方法に関するものである。
従来、フラッシュメモリ内のデータ書込領域が複数のデータブロックに分割されている場合において、所定のデータブロックに書換データを書き込むとき、そのデータブロック内のデータを消去し、その後に、そのデータブロックに書換データを書き込むようにしている(例えば、特許文献1参照)。
特開平6−324945号公報(第3頁、図9、図10)
しかしながら、前述した従来のデータ書き換え方法では、コンタクト付きICカードやコンタクトレスICカードのように数mSで書き換え可能な不揮発性メモリを書き換える必要がある場合には、書き換え時間が長すぎて対応できないと言う欠点があった。
また、1バイト又は1ワード単位でのデータの書き換えを行う場合には、1セクタ(ページ)単位に消去を行ってから書き換えるようにしているので、書き換えの必要のない部分まで書き換えを行ってしまい、書き換え回数が増えてしまう欠点があり、メモリセルの劣化を早める恐れがあった。
また、セレクトトランジスタを設けてバイト単位またはワード単位の消去を可能にすれば、書き換え回数は少なくできるが、メモリセルにセレクトトランジスタを追加しなければならず、フラッシュメモリのサイズが大幅に大きくなるという課題があった。
本発明に係るメモリのデータ書き換え方法は、複数のエリアに分割され、この各エリアの同一位置にそれぞれデータが書き込まれるセクタを有するメモリを備え、書換データを書き込む際、その書換データと1番目エリアの書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータと2番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むようにした。
以上のように本発明によれば、書換データを書き込む際、その書換データとメモリの1番目エリアの書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータと2番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むようにしたので、従来のデータ書き換えと比べ、データの消去がない分、高速でデータを書き換えることができ、また、一つのセクタを複数のエリアに分割して使用しているので、同一セルの書き換え回数を減らすことが可能になり、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になるので、メモリサイズを小さく抑えることができる。
実施の形態1.
図1は本発明の実施の形態1に係るメモリのデータ書換方法の説明図である。なお、図中に示す実線の矢印はデータ書き換え時のデータの流れを示し、破線の矢印はデータ読み出し時のデータの流れを示す。
実施の形態1のメモリは、例えば、フラッシュメモリ10からなり、一括消去が可能な一定バイト数を一つのセクタとして複数のセクタ1〜セクタnに分割されている。その内、セクタ1は、データ書換用として、複数のエリア1〜エリアnにそれぞれmバイトサイズで分割されている。このエリア1〜エリアnは、前述したように一つのセクタ1であるため、一度の消去処理により一括消去が可能な構成となっており、一方、書き込みは1バイト単位で行うことができる構成になっている。なお、通常、フラッシュメモリ10の消去状態と書込み状態は、メモリセルの方式や読み出し方法により異なるが、ここでは、消去状態を「0」、書込状態を「1」として説明する。
フラッシュメモリ10以外のシステム構成は、図示していないが、システム全体を制御するCPU等からなる制御部、制御プログラムが格納されたROM等のプログラムメモリ、各種のデータを一時保管するためのRAM等のワークメモリ20等からなっている。このワークメモリ20は、データ書換時に使用するエリア番号書き込みのための変数領域jと、データ読出時に使用するエリア毎のデータ番号を書き込むための変数領域kと、データ読出時に使用するエリア番号書き込みのための変数領域L と、書換データ及びこの書換データをXORしたXORデータを書き込むための変数領域WDと、各エリアに保存されたデータを書き込むための変数領域RDと、各エリアのデータをXORして得られる真のデータを一時的に保存するためのデータ書込領域21とを有している。
次に、実施の形態1の動作について図2及び図3のフローチャートを用いて説明する。図2は実施の形態1におけるデータ書き換え時の動作を示すフローチャート、図3は実施の形態1におけるデータ読み出し時の動作を示すフローチャートである。なお、図2のフローチャートはデータD[i]を書き換えるときの一例で、まず最初に、各エリア1〜nのD1[i]〜Dn[i]が消去状態の「00h」になっているときの動作を説明し、次に、そのD1[i]〜Dn[i]にデータが書き込まれているときの動作を説明する。
制御部(図示せず)は、1バイトの書換データD[i]の入力を検知すると、まず、フラッシュメモリ10のセクタ1のエリア番号である「1」をワークメモリ20の変数領域jに書き込み、前記の書換データD[i]をワークメモリ20の変数領域WDに書き込む(Step1)。次に、エリアjのi番目のデータ、この場合は、エリア1のi番目のデータD1[i]をワークメモリ20の変数領域RDに書き込む(Step2)。そして、変数領域WD、RDにそれぞれ書き込んだ書換データD[i]とデータD1[i]のXOR(排他的論理和)をとり、その結果のXORデータを変数領域WD内の書換データD[i]に上書きする(Step3)。その後、ワークメモリ20の変数領域RDに書き込んだエリア1のデータD1[i]が「00h」かどうかを判別し(Step4)、そのデータD1[i]が「00h」でないときは、変数領域jに「1」をインクリメントして「2」とするが(Step6)、変数領域RDに書き込んだエリア1のデータD1[i]が「00h」のときは、変数領域WDに書き込んだXORデータをエリア1のデータD1[i]に上書きし(Step5)、前述した一連の動作を終了する。この場合は、エリア1のD1[i]に書き込まれていたデータが「00h」であるため、そのD1[i]には、入力された真の書換データD[i]が書き込まれる。
この後に、2回目の書換データD[i]が入力されたときは、フラッシュメモリ10のセクタ1のエリアを指定する「1」をワークメモリ20の変数領域jに書き込み、書換データD[i]をワークメモリ20の変数領域WDに書き込む(Step1)。次に、エリア1のi番目のデータD1[i]をワークメモリ20の変数領域RDに書き込む(Step2)。そして、変数領域WD、RDにそれぞれ書き込んだ書換データD[i]とデータD1[i]のXORをとり、その結果のXORデータを変数領域WD内のデータD[i]に上書きする(Step3)。その後、ワークメモリ20の変数領域RDに書き込んだエリア1のデータD1[i]が「00h」かどうかを判別する(Step4)。この場合は、前述したように、エリア1のデータD1[i]が「00h」でないので、変数領域jに「1」をインクリメントして「2」とし(Step6)、その変数領域jの値がセクタ1のエリア番号の「n」を超えたかどうかを判別する(Step7)。変数領域jの値が「n」を超えていたときはセクタ1内の全データD[0]〜D[m]の読み出し処理に入るが(Step8)、この時点では、変数領域jの値が「2」で「n」以下であるため、次のエリア2のi番目のデータD2[i]を読み出し、変数領域RDのデータD1[i]に上書きする(Step2)。
次いで、そのデータD2[i]と変数領域WDに書き込んだ前回のXORデータをさらにXORし、その結果の新たなXORデータを変数領域WD内のXORデータに上書きする(Step3)。その後は、前述したように変数領域RDに書き込んだエリア2のデータD2[i]が「00h」かどうかを判別し(Step4)、この場合は、エリア2のデータD2[i]が「00h」であるため、変数領域WD内の新たなXORデータをエリア2のデータD2[i]に上書きし(Step5)、データ書き換え処理を終了する。
また、3回目の書換データD[i]が入力されたときは、前述したようにセクタ1のエリアを指定する「1」をワークメモリ20の変数領域jに書き込み、書換データD[i]をワークメモリ20の変数領域WDに書き込む(Step1)。次に、エリア1のi番目のデータD1[i]をワークメモリ20の変数領域RDに書き込む(Step2)。そして、変数領域WD、RDにそれぞれ書き込んだ書換データD[i]とデータD1[i]のXORをとり、その結果のXORデータを変数領域WDの書換データD[i]に上書きする(Step3)。その後、ワークメモリ20の変数領域RDに書き込んだエリア1のデータD1[i]が「00h」かどうかを判別する(Step4)。そのエリア1のデータD1[i]は「00h」でないので、変数領域jに「1」をインクリメントして「2」とし(Step6)、その変数領域jの値がセクタ1のエリア番号の「n」を超えたかどうかを判別する(Step7)。変数領域jの値が「2」で「n」以下であるため、エリア番号が「2」であるエリア2のi番目のデータD2[i]を読み出し、変数領域RDのデータD1[i]に上書きする(Step2)。
次いで、そのデータD2[i]と変数領域WDに書き込んだ前回のXORデータをさらにXORし、その結果の新たなXORデータを変数領域WD内のXORデータに上書きする(Step3)。その後は、変数領域RDに書き込んだエリア2のデータD2[i]が「00h」かどうかを判別し(Step4)、このときは、エリア2のデータD2[i]が「00h」でないため、変数領域jに「1」をインクリメントして「3」とし(Step6)、その変数領域jの値がセクタ1のエリア番号の「n」を超えたかどうかを判別する(Step7)。変数領域jの値が「3」で「n」以下であるため、エリア番号が「3」であるエリア3のi番目のデータD3[i]を読み出し、変数領域RDのデータD2[i]に上書きする(Step2)。
その後は、そのデータD3[i]と変数領域WDに書き込んだXORデータをXORし、その結果のXORデータを変数領域WD内のXORデータに上書きする(Step3)。次に、変数領域RDに書き込んだエリア3のデータD3[i]が「00h」かどうかを判別し(Step4)、この時点では、エリア3のデータD3[i]が「00h」であるため、変数領域WD内のXORデータをエリア3のデータD3[i]に上書きし(Step5)、データ書き換え処理を終了する。前述したStep1〜Step7までの動作によるデータの書き換えはn回まで行うことができる。
次に、各エリア1〜nのD1[i]〜Dn[i]に「00h」以外のデータが書き込まれているときの動作を説明する。
この場合は、n回後の書換データD[i]が入力されたときで、その書換データD[i]をセクタ1のエリア1〜nの各データD1[i]〜Dn[i]と繰り返しXORした後に、Step7において、変数領域jの値が「n」を超えたかどうかを判別する。この場合は、エリアnを超えるので、フラッシュメモリ10のセクタ1に書き込まれているデータD1[0]〜Dn[m]から真のデータD[0]〜D[m]を読み出す処理に入る(Step8)。この読み出し処理については図3を用いて後述する。Step8において読み出した真のデータD[0]〜D[m]をワークメモリ20のデータ書込領域21に一時的に保存し、ワークメモリ20に保存した真のデータD[0]〜D[m]のうちデータD[i]に書換データD[i]を上書きして変更し(Step9)、次いで、フラッシュメモリ10のセクタ1に書き込まれている全データD1[0]〜Dn[m]を消去し(Step10)、そして、データD[i]の変更が終了した真のデータD[0]〜D[m]をワークメモリ20から読み出して、フラッシュメモリ10のセクタ1のエリア1に書き込み(Step11)、書換データD[i]の書き換え処理を終了する。
次に、図3に示すフローチャートに基づいてデータの読み出し時の動作を説明する。
制御部(図示せず)は、図2に示すStep8で真のデータD1[0]〜Dn[m]の読み出し処理に入ると、まず、セクタ1の各エリア1〜nにそれぞれ書き込まれたデータの配列順である「0」をワークメモリ20の変数領域kに書き込む(Step21)。次に、フラッシュメモリ10のセクタ1のエリア番号の「1」をワークメモリ20の変数領域L に書き込むと共に、ワークメモリ20のデータ書込領域21のD[k]、この場合は、D[0]に消去状態の「00h」を書き込んでデータD[0]とする(Step22)。
その後、セクタ1のエリアL のk番目のデータDL[k]、 この時点では、エリア1の1番目のデータD1[0]を読み出し、データ書込領域21のデータD[0]とXORをとり、その結果のXORデータをデータ書込領域21のデータD[0]の「00h」に上書きする(Step23)。そして、変数領域L に「1」をインクリメントして「2」とし(Step24)、その値がセクタ1のエリア番号の「n」を超えたかどうかを判別する(Step25)。変数領域L の値が「n」を超えていた場合は、Step23〜Step25の動作の繰り返しにより、真のデータD[0]がデータ書込領域21に書き込まれていると判断して、次のデータ列を読み出すためにStep26に進むが、この時点では、変数領域L の値が「2」で「n」を超えていないのでStep23に戻る。
この時、エリア2の1番目のデータD2[0]を読み出し、データ書込領域21に書き込んだXORデータD[0]とXORをとり、その結果の新たなXORデータをそのデータ書込領域21のXORデータD[0]に上書きする(Step23)。そして、変数領域L に「1」をインクリメントして「3」とし(Step24)、その値がセクタ1のエリア番号の「n」を超えたかどうかの判別に入る(Step25)。Step23〜Step25の動作は、前述したように各エリア1〜nの1番目のデータD1[0]〜Dn[0]から真のデータD[0]を読み出すまで繰り返し行い、変数領域L の値が「n」を超えたときに、変数領域kに「1」をインクリメントして「1」とし(Step26)、その値が「m」を超えたかどうかを判別する(Step27)。変数領域kの値が「m」を超えていた場合は、セクタ1の各エリア1〜nに書き込まれている全データD1[0]〜Dn[m]から真のデータD[0]〜D[m]を読み出したと判断して、この処理を終了するが、変数領域kの値が「1」であるため、Step22に戻って変数領域L を再び「1」に設定し、次いで、ワークメモリ20のデータ書込領域21のD[k]、この場合は、D[1]に消去状態の「00h」を書き込んでデータD[1]とする。
そして、エリア1の2番目のデータD1[1]を読み出し、データ書込領域21のデータD[1]とXORをとって、その結果のXORデータをデータ書込領域21のデータD[1]の「00h」に上書きし(Step23)、変数領域L に「1」をインクリメントして「2」とし(Step24)、その値がセクタ1のエリア番号の「n」を超えたかどうかを判別する(Step25)。この時点では、変数領域L の値が「2」で「n」を超えていないのでStep23に戻って、Step23〜Step25までの動作をセクタ1のエリアが「n」になるまで繰り返し行う。その後は、変数領域kに「1」をインクリメントして「2」とし(Step26)、その値が「m」を超えたかどうかを判別する(Step27)。この時点では、変数領域kの値が「2」であるためStep22に戻って、各エリア1〜nのm番目のデータD1[m]〜Dn[m]から真のデータD[m]を読み出すまで、前述した一連の動作を繰り返し行う(Step22〜Step27)。このStep22〜Step27の繰り返しにより、ワークメモリ20のデータ書込領域21に真のデータD[0]〜D[m]を書き込んだとき、このデータの読み出し処理を終了する。
ここで、フラッシュメモリ10のセクタ1の各エリア1〜nが消去状態(00h)のときにデータを書き換えていった場合のデータの状態を具体的に図4に基づいて説明する。図4はデータを3回書き換えたときのデータの書換状態を示す図である。
各エリア1〜nのデータが全て「00h」のときに((a)参照)、1番目のD[0]に書換データの「55h」を書き込む場合、まず、この「55h」をワークメモリ20の変数領域WDに書き込み、次いで、エリア1の1番目のD1[0]の「00h」を読み出してワークメモリ20の変数領域RDに書き込む。その後、変数領域WD、RDにそれぞれ書き込んだ「55h」と「00h」のXORをとり、その結果の「55h」を変数領域WDの「55h」に上書きする。そして、ワークメモリ20の変数領域RDに書き込んだデータが「00h」かどうかを判別し、この場合、そのデータが「00h」であるため、変数領域WDに書き込んだ「55h」をエリア1のD1[0]の「00h」に上書きする((b)参照)。
次に、「55h」のデータを「AAh」に書き換える場合は、前述したように、この「AAh」を変数領域WDに書き込み、次いで、エリア1の1番目のD1[0]の「55h」を読み出して変数領域RDに書き込む。その後、変数領域WD、RDにそれぞれ書き込んだ「AAh」と「55h」のXORをとり、その結果の「FFh」を変数領域WDの「AAh」に上書きする。そして、変数領域RDに書き込んだデータが「00h」かどうかを判別し、この場合は、そのデータが「55h」であるため、エリア2の1番目のD2[0]にアクセスして「00h」を読み出して、変数領域RDの「55h」に上書きし、この上書きした「00h」と変数領域WDの「FFh」のXORをとり、その結果の「FFh」を変数領域WDに上書きする。その後、変数領域RDに上書きしたエリア2の1番目のデータが「00h」かどうかを判別し、この場合、そのデータが「00h」であるため、変数領域WDに書き込んだ「FFh」をエリア2のD2[0]の「00h」に上書きする((c)参照)。また、3回目の書き換えとして今度は「20h」に書き換える場合は、「55h」XOR[FFh」XOR「20h」=「8AH」をエリア3のD3[0]の「00h」に上書きすることになる((d)参照)。
なお、図3(d)の状態からデータを読み出す場合は、まず、ワークメモリ20のデータ書換領域21のD[0]に「00h」を設定し、次いで、この「00h」とエリア1の「55h」のXORをとり、さらに、このXOR値とエリア2の「FFh」のXORをとり、最後に、このXOR値とエリア3の「8Ah」をXORとることにより、3回目に書き換えたデータ「20h」が読み出される。
以上のように実施の形態1によれば、フラッシュメモリ10の一つのセクタ1をmバイトサイズで複数個のエリア1〜nに分割し、書換データを書き込む際には、各エリア1〜nのデータと繰り返しXORをとりながら「00h」のエリアに保存するようにしたので、従来のデータ書き換えと比べ、データの消去がない分、高速でデータを書き換えることができる。
また、前述したように一つのセクタ1を複数のエリア1〜nに分割して使用しているので、同一セルの書き換え回数を減らすことが可能になり、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になるので、メモリサイズを小さく抑えることができる。
また、各エリア1〜nにそれぞれ書き込まれているデータは直接書き込まれたものではなくXORデータであるため、悪意をもった第3者がフラッシュメモリ10のデータを解析しにくくなり、セキュリティの向上が期待できる。
さらに、本実施の形態1によれば、書換データを書き込む際、複数のエリア1〜nに空きエリアがない場合、各エリア1〜nのデータを消去することになるが、この消去をn回に1回のみであるため、特定の領域のみでデータの書き換えを要する例えばICカード等に適用できる。さらに、コンタクトレスICカードの乗車券への使用の場合は、改札での処理は高速に書き換える必要があるが、精算機での処理は遅い書き換えでも良いので、セクタ1のエリア数を十分に大きくして精算時に消去を含むデータの書き換えを行うようにすれば乗車券にも適用できる。
実施の形態2.
図5は本発明の実施の形態2に係るメモリのデータ書換方法の説明図である。
実施の形態2は、図中に示すようにフラッシュメモリ10のセクタをデータの数に応じて用意し、一つのセクタを例えば1バイトのデータ格納用に使用したものである。つまり、データD[0]〜D[m]を書き込むようにした場合、m+1個のセクタ0〜mを用意し、各セクタ0〜mをそれぞれnバイトで構成している。
ワークメモリ20は、データ書換時に使用するセクタ毎のエリア番号を書き込むための変数領域jと、データ読出時に使用するセクタ番号を書き込むための変数領域kと、データ読出時に使用するセクタ毎のエリア番号を書き込むための変数領域L と、書換データを保持するための変数領域WD’と、書換データ及びこの書換データのXORデータを書き込むための変数領域WDと、各セクタ0〜mのエリアに保存されたデータD1[0]〜Dn[m]を書き込むための変数領域RDと、各セクタ0〜mのデータをXORして得られる真のデータD[0]〜D[m]を一時的に保存するためのデータ書込領域21とを有している。
次に、実施の形態2におけるデータ書き換え時の動作を図6のフローチャートを用いて説明する。なお、図2で説明した実施の形態1と同じStep No.(Step2〜Step7)には同一のStep No.を付し詳細な動作説明を割愛する。
制御部(図示せず)は、1バイトの書換データD[i]の入力を検知すると、まず、その書換データD[i]をワークメモリ20の変数領域WDに書き込み、セクタiのエリアの順番を示す「1」をワークメモリ20の変数領域jに書き込むと共に、変数領域WDに書き込んだ書換データD[i]を変数領域WD’に書き込む(Step1’)。
その後は、実施の形態1で述べたように、セクタiのエリア番号jがnを超えるまでに「00h」のデータDj[i]を確認したときは、そのエリアにXORしたデータを変数領域WDから読み込んで書き込み、また、「00h」のデータDj[i]がなくエリア番号jがnを超えたときは(Step2〜Step7)、セクタiに書き込まれている全データD1[i]〜Dn[i]を消去する(Step10)。そして、変数領域WD’から書換データD[i]を読み出して、セクタiの先頭エリアに書き込み(Step11’)、書換データD[i]の書き換え処理を終了する。
なお、各セクタ0〜mに書き込まれている全データD[0]〜D[m]の読み出し処理については、基本的には実施の形態1(図3参照)と同じであるが、唯一異なる点は、読み出しデータD[0]〜D[m]が各セクタのデータのXORを取ったものになっている点であり、実施の形態2では、前述した如くデータの数と同数のセクタを必要とする点である。
以上のように実施の形態2によれば、1バイトのデータに対しnエリア(nバイト)を有するセクタを設け、書き換えの度にXORしたデータを各エリアに追記して行くようにしたので、実施の形態1と同様に、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になり、セキュリティの向上が期待できる。
また、書換データに対するセクタ内のエリアがXORデータでいっぱいになっていた場合に、全データD[0]〜D[m]を読み出すことなく、該当するセクタ内のデータのみを消去して書換データを書き込むようにしているので、実施の形態1と比べ処理が簡略化でき、処理時間を短くできる。
さらに、一つのセクタで1バイトのデータを書き込むようにしているので、書き換えのターゲットであるデータ以外のデータを消去するようなことがなくなり、このため、他のデータが書き込み不良によりデータ化けを起こすような心配がないという効果がある。
実施の形態3.
図7は本発明の実施の形態3に係るメモリのデータ書換方法の説明図である。なお、図1及び図5で説明した実施の形態1、2と同一又は相当部分には同じ符号を付し説明を省略する。
実施の形態3におけるフラッシュメモリ10は、データ書込用のセクタ1と、例えば1バイトのポインタデータP(以下、単に「ポインタP」という)を格納するためのセクタ2とを有している。セクタ1は、実施の形態1と同様にmバイトサイズで分割された複数のエリア1〜nからなり、セクタ2はnバイトで構成されている。前記のポインタPは、各データが書き込まれているエリア番号を示している。
ワークメモリ20は、実施の形態1と同じ書込領域を備えている上に、ポインタP書換時に使用するセクタ2のエリア番号を書き込むための変数領域j’と、ポインタP読出時に使用するセクタ2のエリア番号を書き込むための変数領域L’と、書換ポインタPを保持するための変数領域PWD’と、書換ポインタP及びこの書換ポインタPのXORデータを書き込むための変数領域PWDと、セクタ2の各エリアに保存されたポインタP1〜Pnを書き込むための変数領域PRDと、セクタ2のポインタP1〜PnをXORして得られる真のポインタPを一時的に保存するためのデータ書込領域PDとが設けられている。
次に、実施の形態3の動作について図8〜図11のフローチャートを用いて説明する。図8は実施の形態3におけるデータ書き換え時の動作を示すフローチャート、図9は実施の形態3におけるデータ読み出し時の動作を示すフローチャート、図10は実施の形態3におけるポインタP読み出し時の動作を示すフローチャート、図11は実施の形態3におけるポインタP書き換え時の動作を示すフローチャートである。なお、図2及び図3並びに図6と同じStep No.(Step1〜Step7とStep10,11並びにStep21〜Step27)については、動作が同じであるため、詳細な動作説明を省略する。
制御部(図示せず)は、例えば1バイトの書換データD[i]の入力を検知すると、その書換データD[i]をワークメモリ20の変数領域WDに格納し、セクタ2からポインタPを読み出すための処理に入る(Step31)。この読み出し処理は、図10に示すように、まず、ワークメモリ20の変数領域L'にエリア番号を示す「1」を書き込み、次いで、変数領域PDに消去状態の「00h」を書き込む(Step22)。その後、セクタ2の1番目のエリアに書き込まれたデータP1と変数領域PDの「00h」のXORをとり、変数領域PDの「00h」に上書きする(Step23)。そして、変数領域L'に「1」をインクリメントして「2」とし(Step24)、その値が「n」を超えたかどうかを判別する(Step25)。この時点では、変数領域L'の値が「2」であるためStep22に戻って、前述した動作を繰り返す。この一連の動作を繰り返すうちに変数領域L'の値が「n」を超えると、ポインタPの読み出し処理を終了する。この読み出し処理によって、真のポインタPが変数領域PDに書き込まれる。
この読み出し処理が終了したときは、図8に示すStep32において、読み出したポインタPとセクタ1のエリア数「n」とを比較する。P=nならエリアnまでデータが書き込まれていると判断してStep33に進むが、ポインタPがセクタ1のエリア数「n」よりも少ないときは、Dj[i]の何れかにXORデータを書き込むエリアがあると判断して、実施の形態1と同様のStep1〜Step6の処理を行う。この処理を実行した際に、Step4においてセクタ1から変数領域RDに書き込んだデータが「00h」と判断した場合は、XORした書換データWDをその「00h」のDj[i]に書き込み(Step5)、書き換え処理を終了する。また、変数領域RD内のデータが「00h」でないときは、変数領域j(エリア数)に「1」をインクリメントし(Step6)、その値が「P」を超えたかどうかを判別する(Step7’)。変数領域jの値が「P」以下のときはStep2に戻って動作を繰り返し、変数領域jの値が「P」を超えたときは、その[P」を超えたエリアjにデータが書き込まれていないと判断してそのエリアjのDj[i]に、XORした書換データWDを書き込む(Step38)。そして、読み出したポインタPに「1」をインクリメントし(Step39)、セクタ2にそのポインタ数の「P」を書き込む処理に入る(Step40)。
一方、Step32において、P=nと判断したときは、前述したようにエリアnまでデータが書き込まれていると判断して、セクタ1から全データD[0]〜D[m]を読み出し(Step33)、ワークメモリ20のデータ書込領域21に格納する。この読み出し処理については、図9を用いて後述する。その後は、データ書込領域21に格納した全データD[0]〜D[m]のうちD[i]に書換データD[i]を上書きして変更する(Step34)。その後、セクタ1に書き込まれた全XORデータD1[0]〜Dn[m]を消去し(Step35)、セクタ1のエリア1に前記の全データD[0]〜D[m]を書き込む(Step36)。そして、ポインタPを「1」とし(Step37)、前記と同様に「P」の書き込み処理に入る(Step40)。
この処理は、図6で説明した実施の形態2の書き換え処理と同じであるが、書き換え処理時に使用する変数領域が異なるため、図11に示すフローチャートに基づいて説明する。
まず、図8のStep37又はStep39の処理によるポインタPをワークメモリ20の変数領域PWDに書き込み、次いで、セクタ2のエリアの順番を示す「1」をワークメモリ20の変数領域j’に書き込むと共に、前記のポインタPをワークメモリ20の変数領域PWD’に書き込む(Step1’)。
そして、セクタ2の1番目のエリアP1に書き込まれたポインタP1を変数領域PRDに書き込み(Step2)、変数領域PWD、PRDにそれぞれ書き込んだポインタPとポインタP1のXOR(排他的論理和)をとり、その結果のXORポインタを変数領域PWD内のポインタPに上書きする(Step3)。その後は、ワークメモリ20の変数領域PRDに書き込んだポインタP1が「00h」かどうかを判別し(Step4)、そのポインタP1が「00h」でないときは、変数領域j’に「1」をインクリメントして「2」とするが(Step6)、変数領域PRDに書き込んだポインタP1が「00h」のときは、変数領域PWDに書き込んだXORポインタをセクタ2の1番目のエリアP1に上書きし(Step5)、前述した一連の動作を終了する。
また、セクタ2の各エリアに「00h」のポインタPがない状態でエリア番号j’がnを超えたときは(Step2〜Step7)、セクタ2に書き込まれている全ポインタP1〜Pnを消去する(Step10)。そして、変数領域PWD’から書き換えのポインタPを読み出して、セクタ2の先頭エリアP1に書き込み(Step11’)、ポインタPの書き換え処理を終了する。
一方、セクタ1から真のデータD[0]〜D[m]を読み出す場合は、図9に示すように、まず最初、図10のフローチャートに基づいてポインタPを読み出す(Step31)。このポインタPの読み出し処理が終了した後は、図3で説明した実施の形態1とほぼ同様の処理を実行して、セクタ1から真のデータD[0]〜D[m]を読み出す(Step21〜Step27)。実施の形態1では、Step25で「L」と「n」とを比較しているのに対し、本実施の形態3では、Step25’において、エリア番号を示す「L」とデータが書き込まれたエリアの番号を示すポインタ数の「P」(Step31)とを比較している点が異なるだけである。この比較処理によって、セクタ1のどのエリアまでデータが書き込まれているかがわかり、エリアからデータを読み込んでXORする回数を最少にすることができる。
以上のように実施の形態3によれば、フラッシュメモリ10に、実施の形態1と同じデータ書込用のセクタ1と、セクタ1のエリアのポインタデータPを書き込むためのセクタ2とを用意したので、実施の形態1と同様に、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になり、しかも、セクタ毎に書き込むデータがXOR値であるため、セキュリティの向上が期待できる。
また、ポインタデータPを読み出すことにより、セクタ1のエリアがいっぱいで追記できない場合に素早く判断することが可能になり、データの消去と書込み処理が速やかに行うことができ、さらに、読み出し時にもポインタデータPから使用されているエリアが分かるので、データ読み出しとXOR処理の無駄をなくすことができ、読み出し速度を速くできる。
実施の形態4.
図12は本発明の実施の形態4に係るメモリのデータ書換方法の説明図である。なお、図1及び図7で説明した実施の形態1、3と同一又は相当部分には同じ符号を付し説明を省略する。
実施の形態4におけるフラッシュメモリ10は、実施の形態3と同様に、データ書込用のセクタ1と、データが書き込まれているエリア番号を示す1バイトのポインタデータP(以下、単に「ポインタP」という)を格納するためのセクタ2とを有している。セクタ1は、実施の形態1と同様にmバイトサイズで分割された複数のエリア1〜nからなり、この各エリア1〜nには、XORされたデータを書き込むのではなく、直接、真のデータを書き込むようになっている。セクタ2は、実施の形態3で述べたように、nバイトで構成され、XORされたポインタPが格納されるようになっている。
次に、実施の形態4の動作について図13及び図14のフローチャートを用いて説明する。図13は実施の形態4におけるデータ書き換え時の動作を示すフローチャート、図14は実施の形態4におけるデータ読み出し時の動作を示すフローチャートである。なお、実施の形態3で用いた図8〜図11と同じStep No.については、動作が同じであるため、詳細な動作説明を省略する。
制御部(図示せず)は、例えば1バイトの書換データDp[i]の入力を検知すると、そのデータを一時的にワークメモリ20の変数領域WDに格納し、次いで、ポインタP(エリア番号)に応じたエリアからデータDp[0]〜Dp[m]を読み出して、ワークメモリ20のデータ書込領域21に格納する(Step51)。この読み出し処理については図14に基づいて後述する。そして、データ書込領域21に格納したデータDp[0]〜Dp[m]のうちデータDp[i]に書換データDp[i]を上書きして変更する(Step52)。その後、セクタ2からポインタPを読み出し(Step31)、セクタ1のエリア番号の「n」と比較する(Step32)。なお、ポインタPの読み出し処理については、図10で説明した実施の形態3と同様であるため説明は割愛する。
ポインタPと「n」と比較した際にP=nと確認したときは、セクタ1のエリアnまでデータでいっぱいと判断して、セクタ1に書き込まれている全データを消去し(Step35)、データ書込領域21に格納したデータDp[0]〜Dp[m]をセクタ1のエリア1に書き込む(Step36)。そして、ポインタPを「1」にし、セクタ2への書き込み処理に入る(Step40)。この処理については、図11で説明した実施の形態3と同様であるため説明は割愛する。
一方、ポインタPと「n」が等しくないときは、空きエリアがあると判断して、そのポインタPに「1」をインクリメントし(Step53)、その値と同じエリアpに前記のデータDp[0]〜Dp[m]を書き込んで(Step54)、「1」をインクリメントしたポインタPをセクタ2に書き込むための処理を行い(Step40)、データ書き換えの動作を終了する。
次に、図14に基づいてデータ読み出し時の動作を説明する。まず、図10で説明した実施の形態3と同じ方法でセクタ2からポインタPを読み出す(Step31)。その後、各エリア1〜nに配列されているデータの順番を示す変数領域kを「0」にし(Step21)、次いで、ポインタPが示すエリアpの1番目のデータDp[0]を読み出してワークメモリ20のデータ書込領域21に書き込む(Step62)。そして、変数領域kに「1」をインクリメントして「2」とし(Step26)、バイト数の「m」を超えたかどうかを判別する(Step27)。超えていたときはこの動作を終了するが、「k」が「m」を超えていないときは、同一エリアp内にデータがあると判断して、2番目のデータDp[2]を読み出してワークメモリ20のデータ書込領域21に書き込む(Step62)。この一連の動作を同一のエリアp内に書き込まれているデータが読み出されるまで繰り返し行う(Step62〜Step27)。
以上のように実施の形態4においては、実施の形態3のようにデータを書き換えるときや読み出すときにXORすることなく、セクタ2のポインタPの示すエリアに直接データを書き込んだり読み出すようにしたので、メモリセルの劣化の防止や、セレクトトランジスタを挿入することなくバイト単位やワード単位でデータの書き換えが可能になり、また、読み出しの際にXORして行く必要がないので、データの書き換えと読み出し処理が実施の形態3と比べ速くなるという効果がある。
実施の形態5.
図15は本発明の実施の形態5に係るメモリのデータ書換方法の説明図である。なお、図1及び図7で説明した実施の形態1、3と同一又は相当部分には同じ符号を付し説明を省略する。
実施の形態5は、フラッシュメモリ10に、データを書き込むための二つのセクタ0,1と、例えば1バイトのセレクタデータS(以下、単に「セレクタS」という)を書き込むためのセクタ2とを設けたものである。前記セレクタSは、セクタ0又はセクタ1を選択するためのデータで、例えば、その値が偶数のときはセクタ0が、奇数のときはセクタ1が選択される。
ワークメモリ20には、実施の形態1と同様の各種変数領域及びデータ格納領域21が設けられている上に、セレクタSに応じて1又は0を書き込むための変数領域q、q’と、セレクタSの書換時にセクタ2のエリア番号を書き込むための変数領域j’と、セレクタSの読出時にセクタ2のエリア番号を書き込むための変数領域L'と、書換セレクタSを保持するための変数領域SWD’と、書換セレクタS及びこの書換セレクタSのXORデータを書き込むための変数領域SWDと、セクタ2の各エリアに保存されたセレクタS1〜Snを書き込むための変数領域SRDと、セクタ2のセレクタS1〜SnをXORして得られる真のセレクタSを一時的に保存するためのデータ書込領域SDとが設けられている。
次に、実施の形態5の動作について図16及び図17のフローチャートを用いて説明する。図16は実施の形態5におけるデータ書き換え時の動作を示すフローチャート、図17は実施の形態5におけるデータ読み出し時の動作を示すフローチャートである。なお、図中に示す( )内のStep No.は、図2及び図3で説明した実施の形態1と同じであるため、動作の説明を省略する。
制御部(図示せず)は、例えば1バイトの書換データD[i]の入力を検知すると、その書換データD[i]をワークメモリ20の変数領域WDに格納し、セクタ2からセレクタSを読み出す処理を実行する(Step61)。この読み出し処理については、図10で説明した実施の形態3と同じで、この図に示すPDをSD、PL'をSL'と置き代えて処理する。制御部は、この処理によってセクタ2から読み出した真のセレクタSを一旦変数領域SDに格納し、そのセレクタSが偶数かどうかを判別する(Step62)。セレクタSが偶数のときは、セクタ0を選択するために変数領域qに「0」、変数領域q’に「1」を書き込み、また、セレクタSが奇数のときは、セクタ1を選択するために変数領域qに「1」、変数領域q’に「0」を書き込む。
その後は、図2で説明した実施の形態1と同様の動作を実行する(Step1〜Step7)。Step62においてセクタ0を選択した場合は、変数領域qの「0」に基づいてセクタ0の各エリア1〜nからデータD01[i]…を順に読み出してXORして行き、途中で「00h」のデータを確認したときは、その位置に、XORした書換データを書き込んで動作を終了する。一方、セクタ0の各エリア1〜nに「00h」以外のデータが書き込まれていた場合は、そのセクタ0から真のデータD[0]〜D[m]を読み出してデータ書込領域21に保存し(Step8)、かつ、その中のデータD[i]に変数領域WD内の書換データD[i]を上書きして変更する(Step9)。そして、真のデータD[0]〜D[m]をもう一方のセクタ1のエリア1に書き込む(Step65)。
また、Step62においてセクタ1を選択した場合は、変数領域qの「1」に基づいてセクタ1の各エリア1〜nからデータD11[i]…を順に読み出してXORして行き、途中で「00h」のデータを確認したときは、その位置に、XORした書換データを書き込んで動作を終了する。一方、セクタ1の各エリア1〜nに「00h」以外のデータが書き込まれていた場合は、そのセクタ1から真のデータD[0]〜D[m]を読み出してデータ書込領域21に保存し(Step8)、かつ、その中のデータD[i]に変数領域WD内の書換データD[i]を上書きして変更する(Step9)。そして、真のデータD[0]〜D[m]をもう一方のセクタ0のエリア1に書き込む(Step65)。なお、Step8の動作は、図3で説明した実施の形態1と同様であり、Step9は、前述したように実施の形態1と同じである。
セクタ0又はセクタ1へのデータ書込が終了すると、変数領域SDのセレクタSの値に「1」をインクリメントし(Step66)、そのセレクタSの書き込み処理の動作を実行する(Step67)。この書き込み処理については、図11で説明した実施の形態3と同じで、この図に示すPWDをSWD、PWD’をSWD’、Pj’をSj’、PRDをSRDとそれぞれ置き代えて処理する。この処理によって変数領域SWD’に書き込んだセレクタSをセクタ2の先頭エリアに書き込む。そして、Step62で選択したセクタ0のデータD01[0]〜D0n[m]、又はセクタ1のデータD11[0]〜D1n[m]を消去し(Step68)、データの書き換え処理を終了する。このデータの消去を最後に行うようにしたのは、もう一方のセクタのエリア1にデータを書き込む前に消去すると、処理の途中で電源が落ちたりして中断した場合にデータが消去してしまうので、これを防止するためである。
次に、図17に基づいてデータ読み出し時の動作を説明する。まず、図16で説明したようにセクタ2からセレクタSを読み出し、ワークメモリ20の変数領域SDに保存する(Step61)。そして、そのセレクタSが偶数かどうかを判別し(Step72)、セレクタSが偶数のときは変数領域qに「0」を書き込み(Step73)、セレクタSが奇数のときはその変数領域qに「1」を書き込む(Step74)。変数領域qに「0」を書き込んだ場合は、その変数に基づきセクタ0に書き込まれているデータD01[0]〜D0n[m]を読み出してXORして行き、データ書込領域21に一旦保存し(Step21〜Step27)、また、変数領域qに「1」を書き込んだ場合は、その変数に基づきセクタ1に書き込まれているデータD11[0]〜D1n[m]を読み出してXORして行き、データ書込領域21に一旦保存し(Step21〜Step27)、データの読み出し処理を終了する。この処理は、図3で説明した実施の形態1と同じである。
以上のように実施の形態5によれば、データを書き込むための二つのセクタ0,1を設け、さらに、セレクタSを書き込むためのセクタ2を設け、このセレクタSに基づいて二つのセクタ0,1を交互に使用するようにしたので、実施の形態1と同様に、メモリセルの劣化を防止でき、セレクトトランジスタを挿入しなくてもバイト単位やワード単位でデータの書き換えが可能になり、しかも、セクタ毎に書き込むデータがXOR値であるため、セキュリティの向上が期待でき、また、書き換え途中で電源が落ちて処理が中断されても、データが消失することがないという効果が期待できる。
実施の形態6.
図18は本発明の実施の形態6に係るメモリのデータ書換方法の説明図である。
実施の形態6は、図中の(a)に示すように、複数のセクタ01〜n、11〜nをそれぞれ有する2つのフラッシュメモリ0、1(以下、単に「メモリ」という)を備え、この2つのメモリ0、1の同一番目のセクタ01、11をデータ格納エリアとして使用する構成になっている。各セクタ01、11は、例えば同図(b)に示すように、所定のデータ長を格納可能な4つのエリア1〜4と管理エリア5a、5bとで構成されている。この管理エリア5a、5bは、例えば同図(c)に示すように、2ビットのメモリセレクタと4ビットのエリアセレクタとから構成されている。なお、管理エリア5aはメモリ0側のセクタ01に、もう一方の管理エリア5bはメモリ1側のセクタ11に設けられているものとする。
管理エリア5a、5bのメモリセレクタ内の2ビットの値は、メモリ0、1の何れかを選択するためのもので、各値の組み合わせをキーとして選択するようになっている。例えば、メモリ0(m0)側のメモリセレクタが「01」で、メモリ1(m1)側のメモリセレクタが「X0」のときはメモリ0と判断して、変数jを「0」にし、また、メモリ0側のメモリセレクタが「0X」で、メモリ1側のメモリセレクタが「01」のときはメモリ1と判断して、変数jを「1」にする。各メモリセレクタ内の値とメモリ番号は(図18(e)参照)、データとしてROM(図示せず)に格納されており、変数jはワークメモリ(図示せず)の所定エリアに書き込むようになっている。
管理エリア5a、5bのエリアセレクタ内の4ビットの値は、エリアを選択するためのもので、データ書き換え時と読み出し時に応じて異なっている。例えば、データ書き換え時において、管理エリア5a、5bのメモリセレクタからメモリ0と判断した場合、メモリ0の管理エリア5aのエリアセレクタに書き込まれている値に応じてそのメモリ0のセクタ01のエリア番号を判別する。このエリア番号は変数kとして前記のワークメモリの所定エリアに書き込むようになっており、エリアセレクタ内の値とエリア番号は(図18(d)参照)、前記と同様にデータとしてROMに格納されている。
次に、実施の形態6の動作について図19及び図20を用いて説明する。図19は実施の形態6におけるデータ書き換え時の動作を示すフローチャート、図20はデータ書き換え処理に基づくセクタの状態を示す図である。なお、動作説明の便宜上、各セクタ01、11のそれぞれのエリア1〜5が全て消去状態の「00h」になっているものとする(図20(a)参照)。
データの書き換えが1回目の場合は、まず、各セクタ01、11の管理エリア5a、5bのメモリセレクタからそれぞれ値を読み出し(Step81)、メモリ番号の選択に入る。この時点では、前述したように各メモリセレクタ内の値が共に「00」であるため、Step82においてメモリ0と判断して、変数jを「0」にする(Step83)。メモリ0を選択した場合は、セクタ01のエリアセレクタ内の値を読み出し、データを書き込むエリア番号の判別に入る。この時は、その値が「0000」であるため、Step92においてエリア1と判断して、変数kを「1」にする(Step93)。
以上の判別からメモリ0のセクタ01のエリア1にデータを書き込むと共に、もう一方のメモリ1のセクタ11に書き込まれているデータを1/4時間消去する(Step102)。これは、そのセクタ11のエリア1内のデータを消去することで、そのエリア1にデータが書き込まれているか否かの判別を行うことなく消去処理を実行するようになっている。このデータの消去について、例えば、消去時間を10mS、書き込み時間を20μSとした場合、データの消去時間を2.5mSで良く、書き込み速度は速いので、この消去の間に書き込むことは十分可能である。また、メモリを2つに分けた事により、ほぼ同時に書込みと消去を可能にしている。
データの書き込みが終了すると、セクタ01の管理エリア5a内の各値を更新する(Step103)。この処理も消去中の2.5mSの中で行い、更新には消去を伴わない「0」から「1」への変更のみとする。ここでは、管理エリア5aのメモリセレクタの値「00」を「01」に変更し、エリアセレクタの値「0000」を次回の書き込みエリアを示す「0001」に変更する。これで1回目の書き換え処理が完了し、図20(b)に示すような状態となる。
次に、データの書き換えが2回目の場合は、前記と同様に管理エリア5a、5bのメモリセレクタからそれぞれの値を読み出し(Step81)、メモリ番号の選択に入る。この場合は、管理エリア5aのメモリセレクタが「01」で、管理エリア5bのメモリセレクタが「00」であるため、Step84においてメモリ0と判断して、変数jを「0」にする(Step85)。その後は、選択したメモリ0側のエリアセレクタ内の値を読み出し、データを書き込むエリア番号の判別に入る。この時は、その値が「0001」であるため、Step94においてエリア2と判断して、変数kを「2」にする(Step95)。
そして、選択したメモリ0のセクタ01のエリア2にデータを書き込むと共に、もう一方のメモリ1のセクタ11に書き込まれているデータを1/4時間消去する(Step102)。そして、メモリ0の管理エリア5aのメモリセレクタの値「01」を保持し、エリアセレクタの値「0001」を「0011」に変更し(Step103)、2回目の書き換え処理が完了する。この時の状態は図20(c)である。
3回目の場合は、Step81からStep84に進んでメモリ番号を示す変数jを「0」にし(Step85)、その後は、メモリ0側のエリアセレクタ内の値が「0011」であるため、Step96からStep97に進んでエリア番号を示す変数kを「3」にする。そして、選択したメモリ0のセクタ01のエリア3にデータを書き込むと共に、前記と同様にメモリ1のセクタ11に書き込まれているデータの1/4を消去し(Step102)、メモリ0の管理エリア5a内の値を変更する。この場合は、メモリセレクタの値「01」を保持し、エリアセレクタの値「0011」を「0111」に変更し(Step103)、3回目の書き換え処理が完了する(図20(d)参照)。
4回目の場合は、Step81→Step84→Step85に進んで変数jを「0」にし、さらに、メモリ0側のエリアセレクタ内の値「0111」に基づいてStep98→Step99に進んで変数kを「4」にする。そして、この判別からメモリ0のセクタ01のエリア4にデータを書き込み、メモリ1のセクタ11に書き込まれている残り1/4時間データを消去し(Step102)、メモリ0の管理エリア5a内の値を変更する。この場合は、メモリセレクタの値「01」を保持し、エリアセレクタの値「0111」を「1111」に変更し(Step103)、4回目の書き換え処理が完了する(図20(e)参照)。これにより、メモリ0側の4つの全エリア1〜4にデータが書込まれた状態となる。
データの書き換えが5回目の場合は、管理エリア5a、5bのメモリセレクタからそれぞれの値を読み出す(Step81)。この時は、図20(e)に示すように、管理エリア5aのメモリセレクタが「01」で、管理エリア5bのメモリセレクタが「00」であるため、Step84においてメモリ0と判断して、変数jを「0」にする(Step85)。その後は、選択したメモリ0側のエリアセレクタ内の値を読み出し、データを書き込むエリアの番号の判別に入る。この時は、メモリ0側のエリアセレクタの値が「1111」であるため、Step100において、Step85で設定した変数jの「0」に「1」を加算し、その値を2で除算したときのMOD(余り)を変数jとする。この場合、MODは「1」となるので、メモリ番号を示す変数jを「1」に変更し、エリア番号を示す変数kを「1」に設定する。
この処理からメモリ1のセクタ11のエリア1にデータを書き込むと共に、メモリ0のセクタ01に書き込まれているデータを消去する(Step102)。この場合も消去時間が2.5mS(1/4時間消去)であるが、メモリセルにより消去時間にバラツキがあるので、メモリ0のセクタ01のデータは不定となり、図20(f)に示すような状態になる。メモリ1側のエリア1にデータを書き込んだ後は、前記と同様に、管理エリア5bのメモリセレクタの値「00」を「01」に変更し、エリアセレクタの値「0000」を次回の書き込みエリアを示す「0001」に変更する(Step103)。これで5回目の書き換え処理が完了する(図20(f)参照)。
これ以降にデータを書き換える場合は、メモリ1のセクタ11のエリア2から順に書き込んでいき、データの書き換えが8回目の場合は、そのセクタ11のエリア4に書き込み、管理エリア5bのメモリセレクタの値「01」を保持し、エリアセレクタの値を「1111」に変更する。この時、メモリ0のセクタ01は2.5mS×4回=10mSの消去を受けたことになり、完全に消去された状態「00h」になっている(図20(g)参照)。
また、データの書き換えが9回目の場合は、図20(g)に示すように、管理エリア5aのメモリセレクタが「00」で、管理エリア5bのメモリセレクタが「01」であるため、Step88においてメモリ1と判断して、変数jを「1」にするが(Step85)、そのメモリ1側のエリアセレクタの値が「1111」であるため、Step100において、Step89で設定した変数jの「1」に「1」を加算し、その値を2で除算したときのMOD(余り)を変数jとする。この場合、MODは「0」となるので、メモリ番号を示す変数jを「0」に変更し、エリア番号を示す変数kを「1」に設定する。つまり、メモリ1からメモリ0に変更し、そのエリアの番号を「1」にする。
そして、この処理からメモリ0のセクタ01のエリア1にデータを書き込み、メモリ1のセクタ11に書き込まれているデータを消去する(Step102)。この場合も、メモリセルにより消去時間にバラツキがあるので、メモリ1のセクタ11のデータは不定となり、図20(h)に示すような状態になる。その後は、前記と同様に、管理エリア5aのメモリセレクタの値を「10」に変更し、エリアセレクタの値「0000」を「0001」に変更し(Step103)、9回目の書き換え処理が完了する(図20(h)参照)。前述した管理エリア5aのメモリセレクタの変更は、メモリ1側の管理エリア5bのメモリセレクタの値を左に1回ローテーションさせてシフトした値である。その後は、同じように書き換え処理を行うとメモリ0のセクタ01がいっぱいになり、今度はメモリ1のセクタ11の消去が完了する(図20(i)参照)。
これ以降にデータを書き換える場合は、前述したようにStep100でメモリ0からメモリ1に切り換わり、データの書き換えが繰り返される(図20(j)(k)参照)。そして、メモリ1のセクタ11がいっぱいになったときは、メモリ0に切り換わって、再び図20(b)からデータの書き換えが繰り返し行われる(同図(b)〜(k)参照)。
次に、データ読み出し時の動作を図21に示すフローチャートに基づいて説明する。
例えば、メモリ0、1の各セクタ01、11内が図20(e)に示すような状態になっているときのデータを読み出す場合は、まず、各セクタ01、11の管理エリア5a、5bのメモリセレクタからそれぞれ値を読み出し(Step111)、メモリ番号の選択に入る。この時は、管理エリア5aのメモリセレクタの値が「01」で、管理エリア5bのメモリセレクタの値が「00」であるため、Step114においてメモリ0と判断して、変数jを「0」にする(Step115)。このメモリ0を選択した場合は、セクタ01のエリアセレクタに書き込まれている値を読み出し、データを読み出すエリアの番号の判別に入る。この時は、その値が「1111」であるため、Step130においてエリア4と判断して、変数kを「4」にする(Step131)。以上の判別からメモリ0のセクタ01のエリア4に書き込まれている最新のデータを読み出し(Step132)、前述した一連の動作を完了する。
以上のように実施の形態6においては、2つのメモリ0、1(フラッシュメモリ)を用意し、各セクタ01、11を所定のデータ長で複数のエリア1〜4に分割すると共に管理エリア5a、5bをそれぞれ設け、一方のメモリのエリアに追記書込みすると同時に他方のメモリのセクタ消去を分割して行い、一方のメモリのセクタの各エリアにデータを書き込んだときに、他方のメモリのセクタの消去が完了するようにして、2つのメモリに交互にデータを書き込むようにしたので、データの書き換え時間を大幅に短縮できる。
また、前述した実施の形態1〜5では、通常の書き換え時間は短いが、エリアがいっぱいになったときには、セクタ消去を行う必要があり、この時の書き換え処理時間は短くできなかったが、本実施の形態6では、データの書き込みと同時に分割消去を行っていくので、全てのデータの書き換えにおいて書き換え時間を短くできる。
さらに、本実施の形態6では、セレクトトランジスタの付加なしに、バイトやワード単位でのデータの書き換えが可能であり、メモリセル構成をシンプルにでき、また、セクタ内の複数のエリアに順に書き込んでいくので、書き換え回数を少なくすることが可能でメモリセルの劣化を防止できる。
実施の形態7.
図22は本発明の実施の形態7に係るメモリのデータ書換方法の説明図である。
実施の形態7は、複数のセクタ01〜n、11〜nをそれぞれ有する2つのフラッシュメモリ0、1と、キャッシュメモリ6とを備えたものである。その2つのフラッシュメモリ0、1のセクタ01、11には、前述した実施の形態6と同じ構成からなる4つのエリア1〜4と管理エリア5a、5bとが設けられている。前記のキャッシュメモリ6は、フラッシュメモリ0、1と同じデータ容量を有し、各セクタ01、11に設けられた4つのエリア1〜4にそれぞれ対応するエリア61〜64が設けられている。
次に動作について説明する。本実施の形態におけるデータの書き換え動作は、実施の形態6と殆ど同じであるが、フラッシュメモリ0又はフラッシュメモリ1の何れか一方の例えばエリア3にデータを書き込む際に、そのエリア3に対応するキャッシュメモリ6のエリア63にも同じデータを格納する。データを読み出すときは、フラッシュメモリ0、1から読み出すのではなく、キャッシュメモリ6に格納された最新のデータを読み出す。ただし、電源投入時には、実施の形態6に示す読み出し方法でフラッシュメモリ0又は1に書き込まれている最新のデータを読み出して、キャッシュメモリ6に格納する処理が必要になる。
以上のように実施の形態7によれば、実施の形態6の構成にキャッシュメモリ6を追加し、フラッシュメモリ0又は1にデータの書き換えを行う際に、その最新のデータをキャッシュメモリ6に格納するようにしたので、実施の形態6と同等の効果が得られる上にデータの読み出し処理が簡略化され、読み出し速度を上げることができる。また、キャッシュメモリ6からデータを読み出すようにしているので、データ読み出し時の消費電力を低減できるという効果も期待できる。
なお、前記の実施の形態1〜7では、フラッシュメモリの書き換え処理と読み出し処理をCPU等の制御部と制御プログラムによるシフト処理として説明したが、それに限定されるものではなく、ハードウェアによって行っても良い。また、消去状態を「0」、書き込み状態を「1」として説明したが、これに限定されるものではない。ただし、実施の形態1〜5において「1」を消去状態とした場合には、XOR追記する関係上nを奇数にするか、又はnが偶数の場合はXORする必要がある。
さらに、実施の形態1〜5についても、実施の形態7のようなキャッシュメモリ6を設けて、読み出し処理を速めるようにしても良い。また、実施の形態6では、1セクタ内のエリア数を4つの例で説明したが、これに限定されるものではなく、分割されて行われる消去時間の合計が消去に必要な時間になるようにエリア分割すれば良い。この方法を用いると、理論的には、書き込みに必要な時間まで書き換え時間を短縮できる。
本発明の実施の形態1に係るメモリのデータ書換方法の説明図である。 実施の形態1におけるデータ書き換え時の動作を示すフローチャートである。 実施の形態1におけるデータ読み出し時の動作を示すフローチャートである。 データを3回書き換えたときのデータの書換状態を示す図である。 本発明の実施の形態2に係るメモリのデータ書換方法の説明図である。 実施の形態2におけるデータ書き換え時の動作を示すフローチャートである。 本発明の実施の形態3に係るメモリのデータ書換方法の説明図である。 実施の形態3におけるデータ書き換え時の動作を示すフローチャートである。 実施の形態3におけるデータ読み出し時の動作を示すフローチャートである。 実施の形態3におけるポインタP読み出し時の動作を示すフローチャートである。 実施の形態3におけるポインタP書き換え時の動作を示すフローチャートである。 本発明の実施の形態4に係るメモリのデータ書換方法の説明図である。 実施の形態4におけるデータ書き換え時の動作を示すフローチャートである。 実施の形態4におけるデータ読み出し時の動作を示すフローチャートである。 本発明の実施の形態5に係るメモリのデータ書換方法の説明図である。 実施の形態5におけるデータ書き換え時の動作を示すフローチャートである。 実施の形態5におけるデータ読み出し時の動作を示すフローチャートである。 本発明の実施の形態6に係るメモリのデータ書換方法の説明図である。 実施の形態6におけるデータ書き換え時の動作を示すフローチャートである。 データ書き換え処理に基づくセクタの状態を示す図である。 実施の形態6におけるデータ読み出し時の動作を示すフローチャートである。 本発明の実施の形態7に係るメモリのデータ書換方法の説明図である。
符号の説明
10 フラッシュメモリ、20 ワークメモリ、21 データ書込領域、XOR 排他的論理和。

Claims (11)

  1. 複数のエリアに分割され、この各エリアの同一位置にそれぞれデータが書き込まれるセクタを有するメモリを備え、
    書換データを書き込む際、その書換データと1番目エリアの書換対象位置のデータとの排他的論理和をとり、さらに、この排他的論理和のデータと2番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むことを特徴とするメモリのデータ書き換え方法。
  2. 前記処理を最終エリアまで行った際に初期値がなかったときは、各エリアの同一位置毎に、1番目エリアのデータと2番目エリアのデータとの排他的論理和をとり、さらに、この排他的論理和のデータと3番目エリアのデータとの排他的論理和をとる処理を順次繰り返し、この処理の繰り返しによって前記セクタ内の全データを読み出して書換対象位置のデータを書換データに変更し、その後、前記セクタ内の全データを消去して、その変更データを含む新たな全データをそのセクタの1番目エリアに書き込むことを特徴とする請求項1記載のメモリのデータ書き換え方法。
  3. 複数のエリアに分割され、この各エリアに複数のデータが書き込まれるセクタを有するメモリを備え、
    書換データを書き込む際、その書換データと前記セクタの1番目エリアのデータとの排他的論理和をとり、さらに、この排他的論理和のデータと2番目エリアのデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアのデータが初期値であったとき、そのエリアにそれまでに求めた排他的論理和のデータを書き込むことを特徴とするメモリのデータ書き換え方法。
  4. 前記処理を最終エリアまで行った際に初期値がなかったときは、前記セクタ内の全エリアを消去した後に、前記書換データをそのセクタの1番目エリアに書き込むことを特徴とする請求項3記載のメモリのデータ書き換え方法。
  5. 複数のエリアに分割され、この各エリアにデータが書き込まれるセクタと、このセクタの各エリアに格納されたデータのエリア番号を指定する複数のポインタデータが書き込まれるポインタ用セクタとを有するメモリを備え、
    書換データを書き込む際、前記ポインタ用セクタの1番目ポインタデータと2番目ポインタデータとの排他的論理和をとり、さらに、この排他的論理和のポインタデータと3番目ポインタデータとの排他的論理和をとる処理を順次繰り返してエリア番号を読み出し、このエリア番号に基づく前記セクタのエリアからデータを読み出して前記書換データと変更し、その後、前記エリア番号と前記セクタのエリア数と比較し、前記エリア番号が前記エリア数より小さいときは、そのエリア番号に「1」をインクリメントしてその新たなエリア番号のエリアに変更データを書き込み、また、前記エリア番号と前記エリア数とが同一のときは、前記セクタ内の全データを消去した後に変更データをそのセクタの1番目エリアに書き込んで、前記エリア番号を「1」とすることを特徴とするメモリのデータ書き換え方法。
  6. 前記ポインタ用セクタに、「1」をインクリメントしたエリア番号、又は「1」のエリア番号を書き込む際、そのエリア番号と前記ポインタ用セクタの1番目ポインタデータとの排他的論理和をとり、さらに、この排他的論理和のポインタデータと2番目ポインタデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該ポインタデータが初期値であったとき、そのポインタデータにそれまでに求めた排他的論理和のポインタデータを上書きし、前記処理を最終まで行った際に初期値がなかったときは、前記ポインタ用セクタ内の全ポインタデータを消去した後に、前記エリア番号をそのポインタ用セクタの1番目に書き込むことを特徴とする請求項5に記載のメモリのデータ書き換え方法。
  7. 複数のエリアに分割され、この各エリアの同一位置にそれぞれデータが書き込まれる二つのセクタと、この二つのセクタの何れか一方を選択する複数のセレクタデータが書き込まれるセレクタ用セクタとを有するメモリを備え、
    書換データを書き込む際、前記セレクタ用セクタの1番目セレクタデータと2番目ポインタデータとの排他的論理和をとり、さらに、この排他的論理和のセレクタデータと3番目セレクタデータとの排他的論理和をとる処理を順次繰り返してセクタ選択データを読み出し、この選択データに基づく一方のセクタの1番目エリアの書換対象位置のデータと前記書換データとの排他的論理和をとり、さらに、この排他的論理和のデータと2番目エリアの前記位置のデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該エリアの前記位置のデータが初期値であったとき、そのエリアの前記位置にそれまでに求めた排他的論理和のデータを書き込むことを特徴とするメモリのデータ書き換え方法。
  8. 前記処理を最終エリアまで行った際に初期値がなかったときは、各エリアの同一位置毎に、1番目エリアのデータと2番目エリアのデータとの排他的論理和をとり、さらに、この排他的論理和のデータと3番目エリアのデータとの排他的論理和をとる処理を順次繰り返し、この処理の繰り返しによって前記セクタ内の全データを読み出して書換対象位置のデータを書換データに変更し、もう一方のセクタの1番目エリアに、その変更データを含む新たな全データを書き込んで、前記セクタ選択データに「1」をインクリメントすることを特徴とする請求項7記載のメモリのデータ書き換え方法。
  9. 前記セクタ選択データに「1」をインクリメントした際、そのセクタ選択データと前記セレクタ用セクタの1番目セレクタデータとの排他的論理和をとり、さらに、この排他的論理和のセレクタデータと2番目セレクタデータとの排他的論理和をとる処理を順次繰り返し、その過程で当該セレクタデータが初期値であったとき、そのセレクタデータにそれまでに求めた排他的論理和のセレクタデータを上書きし、前記処理を最終まで行った際に初期値がなかったときは、前記セレクタ用セクタ内の全セレクタデータを消去した後に、前記セクタ選択データをそのポインタ用セクタの1番目に書き込むことを特徴とする請求項8記載のメモリのデータ書き換え方法。
  10. データが書き込まれる複数のエリアと、メモリ選択データ及びエリア指定データが書き込まれた管理エリアとが設けられたセクタを有する二つのメモリを備え、
    書換データを書き込む際、二つのメモリに設けられた管理エリアのメモリ選択データに基づいて何れか一方のメモリを選択し、かつ、そのメモリの管理エリアのエリア指定データに基づくエリアに前記書換データを書き込むと共に、他方のメモリの複数のエリア内のデータを分割して消去し、一方のメモリの各エリアにデータを書き込んだときに他方のメモリの各エリア内のデータの消去が完了するようにし、二つのメモリに交互に書換データを書き込めるように前記二つの管理エリアの各データで誘導できるようにしたことを特徴とするメモリのデータ書き換え方法。
  11. 前記二つのメモリに加えてキャッシュメモリを備え、
    その二つのメモリのうち一方のメモリに書換データを書き込んだ際に、前記キャッシュメモリに同じ書換データを書き込み、その一方のメモリに書き込んだデータを読み出す際には、前記キャッシュメモリから同じデータを読み出すことを特徴とする請求項10記載のメモリのデータ書き換え方法。
JP2003274737A 2003-07-15 2003-07-15 メモリのデータ書き換え方法 Pending JP2005038518A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003274737A JP2005038518A (ja) 2003-07-15 2003-07-15 メモリのデータ書き換え方法
US10/759,096 US20050015408A1 (en) 2003-07-15 2004-01-20 Method for rewriting data in a memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003274737A JP2005038518A (ja) 2003-07-15 2003-07-15 メモリのデータ書き換え方法

Publications (1)

Publication Number Publication Date
JP2005038518A true JP2005038518A (ja) 2005-02-10

Family

ID=34056088

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003274737A Pending JP2005038518A (ja) 2003-07-15 2003-07-15 メモリのデータ書き換え方法

Country Status (2)

Country Link
US (1) US20050015408A1 (ja)
JP (1) JP2005038518A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010528380A (ja) * 2007-05-30 2010-08-19 メモライト メモリテック (シェンチェン) カンパニー リミテッド フラッシュメモリのリード・ライト処理方法
US8225051B2 (en) 2006-09-27 2012-07-17 Renesas Electronics Corporation Access control method for a memory, memory controller for controlling access to the memory, and data processing apparatus

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060106855A1 (en) * 2004-11-02 2006-05-18 International Business Machines Corporation Reusable row indices table
US8386116B2 (en) * 2006-10-26 2013-02-26 Service Solutions U.S., Llc Universal serial bus memory device for use in a vehicle diagnostic device

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6513142B1 (en) * 2000-06-27 2003-01-28 Adaptec, Inc. System and method for detecting of unchanged parity data

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225051B2 (en) 2006-09-27 2012-07-17 Renesas Electronics Corporation Access control method for a memory, memory controller for controlling access to the memory, and data processing apparatus
JP2010528380A (ja) * 2007-05-30 2010-08-19 メモライト メモリテック (シェンチェン) カンパニー リミテッド フラッシュメモリのリード・ライト処理方法

Also Published As

Publication number Publication date
US20050015408A1 (en) 2005-01-20

Similar Documents

Publication Publication Date Title
US6154808A (en) Method and apparatus for controlling data erase operations of a non-volatile memory device
TWI470429B (zh) 記憶體裝置及記憶體存取方法
US8364887B2 (en) Managing memory data recovery upon power loss
US5963970A (en) Method and apparatus for tracking erase cycles utilizing active and inactive wear bar blocks having first and second count fields
JP4999325B2 (ja) フラッシュメモリ
US7725646B2 (en) Method of using a flash memory for a circular buffer
US8046530B2 (en) Process and method for erase strategy in solid state disks
US20080250188A1 (en) Memory Controller, Nonvolatile Storage, Nonvolatile Storage System, and Memory Control Method
US20060129750A1 (en) Method and apparatus for storing multimedia data in nonvolatile storage device in units of blocks
US20030110343A1 (en) File system including non-volatile semiconductor memory device having a plurality of banks
WO2002019334A2 (en) Flash memory architecture with separate storage of overhead and user data
KR20030011924A (ko) 시스템 및 데이터 저장 방법
JP2006277921A (ja) 複数のストリングを使用して状態情報を保存する方法及び不揮発性保存装置
CN109918024B (zh) 存储管理方法、装置、单片机设备和可读存储介质
US7062630B2 (en) Storing device for writing data onto a plurality of installed storing mediums, storing control method for the storing device, and program thereof
JP2008123643A (ja) 半導体記憶装置および半導体記憶装置の制御方法
US7328302B2 (en) Device and method for treating a state of a memory
CN100364013C (zh) 在闪存中存放校验码的方法及装置
US8769377B2 (en) Error correction scheme for non-volatile memory
EP3057100B1 (en) Memory device and operating method of same
JP2005038518A (ja) メモリのデータ書き換え方法
US20130080690A1 (en) Method to emulate eeprom using flash memory
US20170046090A1 (en) Wom code emulation of eeprom-type devices
JP2007257283A (ja) メモリコントローラ及びフラッシュメモリシステム
US11182286B2 (en) Data storage device and control method for non-volatile memory

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060220

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20081126

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090414

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090811