以下に、図面を参照しながら本発明の実施の形態を説明する。
〔第1の実施の形態〕
図1には、本発明の基本構成とするシステムコントローラ10の概略構成を示している。このシステムコントローラ10は、CPU12及び、SRAM等を用いたRAM14等を備え、CPU12とRAM14等が、コントロールバス、アドレスバス及びデータバスを含んで構成されているバス16によって接続されている。
このシステムコントローラ10は、各種の電子機器に設けられ、CPU12が予め設定されたプログラムに基づいた制御処理等を実行する。
システムコントローラ10は、ブートコードなどの各種のプログラムを記憶するROMとして、不揮発性メモリの一種であるNAND型フラッシュメモリ(Flash Memory、以下、フラッシュメモリ18とする)が設けられている。このフラッシュメモリ18では、格納されているデータの保存と共に、データの書込み及び更新等が可能となっている。
システムコントローラ10では、システム起動時に、CPU12がフラッシュメモリ18に格納されているブートコードを読み込んで、このブートコードに基づいた処理を実行することにより立ち上がる。
このフラッシュメモリ18では、予め設定されたメモリ容量(ブロックサイズ、例えば64KB)を一つのブロックとして、記憶容量に応じたブロック数が設けられている。また、フラッシュメモリ18では、ブロック単位で情報の書込み及び読み取りが行なわれるようになっている。
このシステムコントローラ10には、フラッシュメモリ18を制御するNAND型フラッシュメモリコントローラ(以下、メモリコントローラ20とする)が設けられており、フラッシュメモリ18は、メモリコントローラ20を介してバス16に接続している。
CPU12では、ブートコードなどを読み出すときに、例えばブートコードが記憶されているメモリ領域の論理アドレスを指定する。このとき、フラッシュメモリ18では、ブロック単位でデータの書込み及び読出しが行なわれることから、メモリコントローラ20では、論理アドレスに対して、フラッシュメモリ18上のブロックごとの物理アドレスを設定し、この物理アドレスに基づいてフラッシュメモリ18を制御し、CPU12が要求するデータを読み出す。
また、データ(ブートコード)は、ブロック単位で読み出されることから、CPU12では、例えば、フラッシュメモリ18から読み出したデータを、RAM14上に展開して、RAM14から展開したデータを順に読み込む。
なお、フラッシュメモリ18にSRAMが設けられているときには、RAM14に換えてフラッシュメモリ18内のSRAM上にデータを展開して、SRAMからデータを読み取るものであってもよい。
ところで、図2に示されるように、システムコントローラ10に設けているメモリコントローラ20は、NANDインターフェイスモジュール(NAND I/Fモジュール)22及び、アドレス変換部24が形成されている。
フラッシュメモリ18(図2では図示省略)に記憶されているブートコードなどのデータを読み出すときには、CPU12などのバスマスターから、制御信号、アドレス信号が入力され、これに基づいたデータ信号が出力される。
メモリコントローラ20では、アドレス変換部24にアドレス信号が入力される。このアドレス信号は、論理アドレスとなっており、アドレス変換部24では、この論理アドレスを、フラッシュメモリ18に対応する物理アドレスに変換する。このとき、フラッシュメモリ18では、ブロック単位でデータ管理が行なわれており、アドレス変換部24では、ブロックごとに設定される物理ブロックアドレスに変換して、NANDインターフェイスモジュール22へ出力する。
NANDインターフェイスモジュール22は、制御信号とアドレス変換部24から入力される物理ブロックアドレスに基づいて、フラッシュメモリ18の該当するブロックに格納されているデータを読み出す。
このように、フラッシュメモリ18では、データの読出し及び書き込みを、1ブロック分ずつ行なわれるようになっており、ここから、CPU12では、フラッシュメモリ18の物理ブロックアドレスに対応する論理アドレスを設定し、論理アドレスを、物理ブロックアドレスに変換する。
図3(A)には、論理アドレスから論理ブロックアドレスに変換するマップの一例を示しており、例えば、CPU12がこのマップを記憶し、論理アドレスを論理ブロックアドレスに変換し、アドレス変換部24で論理ブロックアドレスを物理ブロックアドレスに変換することにより、容易に論理アドレスに応じた物理ブロックのデータを読み出すことができる。
なお、このような論理アドレスを論理ブロックアドレスに変換する処理は、メモリコントローラ20で行うものであっても良い。
また、図3(B)には、アドレス変換部24で論理−物理アドレス変換に用いるLUT(Look Up table)とする変換テーブルの一例を示しており、図3(C)には、フラッシュメモリ18内の物理ブロックごとのデータマップの一例を示している。
ここで、以下では、一例としてフラッシュメモリ18の各ブロックのサイズ(記憶容量)を64KB(216Byte)として、論理ブロックアドレスが00h、01h、02h、03h、・・・の論理ブロックLBを論理ブロックLB0、LB1、LB2、LB3、・・・とし、物理ブロックアドレスが00h、01h、02h、03h、・・・の物理ブロックPBを物理ブロックPB0、PB1、PB2、PB3、・・・として説明する。
アドレス変換部24では、論理ブロックアドレスが入力されることにより、フラッシュメモリ18上の物理ブロックアドレスに変換し、NANDインターフェイスモジュール22は、この物理ブロックアドレスに基づいてデータの読出しを行なう。
これにより、例えば、論理ブロックアドレス01hの論理ブロックLB(論理ブロックLB0)のデータの読出しが要求されることにより、論理ブロックLB0に対応する物理ブロックPB0のデータData0が読み出される。
一方、NAND型フラッシュメモリを用いているフラッシュメモリ18では、製造過程や経時的に不良ブロックが発生する可能性がある。この不良ブロックでは、データの書込みを行ったとしても、読出しの不良、データ化け等を生じ、これにより、例えば、ブートコードが格納されたブロックに不良が生じると、システムコントローラ10が立ち上がらなくなる起動不良を生じさせてしまう。
ここで、メモリコントローラ20では、不良ブロックでない(良ブロック)の物理ブロックPBのみを使用してデータを書き込む。すなわち、フラッシュメモリ18にデータを書き込むときや、データが書き込まれている物理ブロックPBから不良ブロックが検出されると、不良ブロックでなく(良ブロック)かつ空きとなっている物理ブロックPBから、不良ブロックに対するブロック(以下、代替ブロックとする)を設定し、不良ブロックに格納されているデータを、代替ブロックとなる物理ブロックPBに格納する。なお、不良ブロックの検出及び、フラッシュメモリ18内でのデータの書き換え(更新)についての一例は、別の実施形態で詳述する。
一方、代替ブロックとする物理ブロックPBにデータを格納すると、論理ブロックLBと物理ブロックPBの間で不一致が生じ、論理−物理アドレスの適正な変換が困難となる。すなわち、図3(B)の変換テーブル上で不整合が生じる。
ここから、本実施の形態では、不良ブロックとなった物理ブロックPBと不良ブロックに対する代替ブロックとする物理ブロックPBを示すテーブル(以下、代替ブロックテーブルとする)を作成し、この代替ブロックテーブルを用いて、論理ブロックアドレス−物理ブロックアドレス変換のあとに、物理ブロックアドレス−物理ブロックアドレス変換を行うか、論理ブロックアドレス−物理ブロックアドレス変換を行うようにしている。
これにより、メモリコントローラ20では、フラッシュメモリ18からのデータの読出し要求があったときには、不良ブロックに対する代替ブロックテーブルを参照しながら、要求に基づいたデータの読出しを行なう。
図4には、メモリコントローラ20で適用する代替ブロックテーブルの一例を示している。この代替ブロックテーブルでは、不良ブロックごとにテーブル番号を付与し、不良ブロックとなった物理ブロックPBと、代替ブロックとする物理ブロックPBの情報を格納している。
なお、図4では、物理ブロックPB0が不良ブロックとなっており、この物理ブロックPB1に対して、代替ブロックとして物理ブロックPB5が設定されていることを示している。
ここで、図5には、この代替ブロックテーブルを用いた論理ブロックアドレス−物理ブロックアドレス変換の一例を示している。なお、このフローチャートでは、論理ブロックアドレス=物理ブロックアドレスを基本としており、これにより、不良ブロックに対しては、論理ブロックアドレス≠物理ブロックアドレスとなる。
このフローチャートは、論理ブロックアドレスが入力されることにより実行され、最初のステップ100では、論理ブロックアドレスを読み込み、次のステップ102では、例えば、図3(B)に示す標準の変換テーブルを用いて論理ブロックアドレスから物理ブロックアドレスを仮設定する。これにより、最初の論理ブロックLB0に対して、物理ブロックPB0が仮設定される。
この後、ステップ104では、テーブル番号を初期値(テーブル番号=0)に設定し、ステップ106では、物理ブロックPB0がテーブル番号に対応する不良ブロックであるか否か、仮設定した物理ブロックPB0が不良ブロックであるか否かを確認する。
ここで、不良ブロックと一致しないときには、ステップ106で否定判定してステップ108へ移行し、現在のテーブル番号が最終であるか否かを確認し、テーブル番号が最終の番号であるときには、ステップ108で肯定判定して終了する。
これにより、論理ブロックLB0に対して物理ブロックPB0が設定されて、この論理ブロックLB0に対するアドレス変換(ブロック変換)を終了する。
また、テーブル番号が最終番号でないときには、ステップ108で否定判定してステップ110へ移行し、次のテーブル番号に設定した後、ステップ106へ移行し、仮設定した物理ブロックが次のテーブルの不良ブロックの物理ブロック番号と一致するか否かを確認する。
ここで、仮設定した物理ブロックが、いずれかのテーブル番号の不良ブロックの物理ブロックと一致すると、ステップ106で肯定判定してステップ112へ移行する。
このステップ112では、該当テーブル番号の代替ブロックの物理ブロックを読み出し、代替ブロックの物理ブロックを、論理ブロックに対する物理ブロックに設定する。
すなわち、図4に示される代替ブロックテーブルが作成されているとき、論理ブロックLB1のデータが要求されたときには、この論理ブロックLB1に対応する物理ブロックPB1が不良ブロックに設定されているので、論理ブロックLB1に対しては、代替ブロックとして設定されている物理ブロックPB5にアドレス変換される。
これにより、同一のデータを複数のブロックに格納することによるメモリ領域の使用効率の低下を防止しながら、各ブロックについての良否判定を順に行なうときに比べて、データを読み出すための処理時間の短縮を図ることができる。
なお、ここでは、論理アドレスではなく、論理ブロックアドレスを用いてデータの処理(読出し)を要求するように説明したが、論理アドレスでデータの読み出しを要求されるもので当ても良い。このときには、論理アドレスと1ブロック分のデータ量に基づいて物理ブロックアドレスを設定した後に、図5の処理を行うものであれば良い。たとえば、1ブロック分の記憶容量が64KB(216Byte)であるときには、入力された論理アドレスを16bit分右シフトして論理ブロックアドレスを設定し、この論理ブロックアドレスに基づいて物理ブロックを仮設定するなどの任意の方法を適用することができる。
一方、不良ブロックと、不良ブロックに対する代替ブロックのテーブルを用いて、論理−物理アドレス変換用の変換テーブル(以下、代替変換テーブルとする)を作成し、この代替変換テーブルを用いて論理−物理アドレス変換(論理−物理ブロック変換)を行なうものであっても良い。
例えば、図3(B)の変換テーブルと図4の代替ブロックテーブルから、図6(A)に示される代替変換テーブルが得られる。この代替変換テーブルでは、図6(B)に示されるように、フラッシュメモリ18上で物理ブロックPB1が不良ブロックとなっており、この代替ブロックとして物理ブロック番号PB5が設定されていることを示す。
これにより、例えば、論理ブロックLB1のデータが要求されることにより、物理ブロックPB1の代替ブロックとなっている物理ブロックPB5に格納されているデータData1が読み出される。
一方、論理−物理ブロック変換は、書き換え可能な不揮発性メモリ(以下、ROMとする)を用いて行なうものであっても良い。このときには、例えば、図7(A)に示されるように、論理アドレス又は論理ブロックアドレスを、ROM上の物理アドレス(Address)とし、対応するフラッシュメモリ18内の物理ブロックアドレスを、該当アドレス内のデータ(Data)として記憶する。
このときには、図7(B)に示されるように、アドレス変換部24に、ROM26と、論理アドレスをROM上の物理アドレスに変換するアドレス変換手段28を設け、このアドレス変換手段28から出力されるROM26上の物理アドレスに基づいて、ROM26から該当アドレスのデータを読み出す。このときのデータがフラッシュメモリ18の物理ブロックアドレスであることにより、論理−物理アドレス変換がなされる。
このように構成することにより、例えば、メモリコントローラ20を、ROM26が含まれるASICなどの素子によって構成することができる。
このように、代替ブロックテーブルを作成して、この代替ブロックテーブル又は、代替ブロックテーブルに基づいた代替変換テーブルを用いて、論理−物理ブロック変換(論理−物理アドレス変換)を行うことにより、個々のブロックについて、例えば、図5のフローチャートに相当するソフトウェアを用いて不良ブロックとなっているか否かを確認するときと比較して、論理−物理アドレス変換を行うときの変換時間の短縮、データ読出し等の処理時間の短縮を図ることができる。
〔第2の実施の形態〕
次に本発明の第2の実施の形態を説明する。なお、第2の実施の形態の基本的構成は、前記した第1の実施の形態と同じであり、第2の実施の形態において第1の実施の形態と同一の構成には、同一の符号を付与してその説明を省略する。
図8には、第2の実施の形態に係るシステムコントローラ30の概略構成を示している。このシステムコントローラ30は、SRAMなどの記憶媒体(以下、RAM32とする)を備えており、このRAM32が、メモリコントローラ20Aに接続している。
また、システムコントローラ30には、情報の書き換えが可能な不揮発性メモリ(例えば、EEPROMなど)としてROM34が設けられている。メモリコントローラ20Aは、このROM34に代替ブロックテーブルを記憶するようにしている。
メモリコントローラ20Aは、ROM34に記憶される不良ブロックに対する代替ブロックの情報(代替ブロックテーブル)に基づいて、論理−物理アドレス変換に用いる変換テーブル(代替変換テーブル)を作成し、作成した代替変換テーブルをRAM32に格納するようにしている。
これにより、RAM32の代替変換テーブルから、論理アドレス(又は論理ブロックアドレス)に対応するフラッシュメモリ18上の物理ブロックアドレス(ないし物理ブロック)が得られるようにしている。
例えば、メモリコントローラ30では、論理−物理アドレス変換を行うアドレス変換部24(図8では図示省略、図2参照)で、論理アドレスをRAM32上の変換テーブルのアドレスに変換し、変換したアドレスに基づいたデータをRAM32から読み出すことにより、論理アドレス(論理ブロックアドレス)に対応するフラッシュメモリ18上の物理ブロックアドレス(物理ブロック)が得られる。
なお、このようなメモリコントローラ20AとRAM32は、ひとつのASIC(Application Specific Integrated Circuit)内に形成することができる。また、フラッシュメモリ(NAND型フラッシュメモリ)18には、通常の記憶領域と別に、SRAMが設けられているものがあり、このようなフラッシュメモリ18を用いるときには、このフラッシュメモリ18内のSRAMをRAM32として使用することもできる。
システムコントローラ30に設けているメモリコントローラ20Aでは、CPU12の起動に先立って、RAM32上に代替変換テーブルを作成し、CPU12からフラッシュメモリ18に記憶されているブートコードなどの読出しが要求されたときに、このRAM32に格納した代替変換テーブルを用いる。
次に、第2の実施の形態の作用として、システムコントローラ30での代替変換テーブルの作成を説明する。なお、メモリコントローラ20Aの基本的構成は、第1の実施の形態に適用したメモリコントローラ20と同等となっている。
ここで、図9(A)には、予めROM34に格納される代替ブロックテーブルの一例を示している。この代替ブロックテーブルは、ROM34上の代替ブロックテーブルのベースアドレスをベースアドレスTBTBとし、例えば、不良ブロックのアドレス(物理ブロックアドレス)と代替ブロックのアドレス(物理ブロックアドレス)を2Byteで格納している。また、この代替ブロックテーブルでは、終端の不良ブロックと代替ブロックのデータ(アドレス)を同一の値(ここでは、一例としてFFh)としている。
また、図9(B)、図9(C)には、RAM32に形成する代替変換テーブルの一例を示している。この代替変換テーブルでは、RAM32上のベースアドレスをベースアドレスLUTBとして、フラッシュメモリ18の物理ブロックPBのアドレス(ブロックアドレス)を2Byteで格納している。
さらに、システムコントローラ20Aでは、論理ブロックのアドレス(論理ブロックアドレス)が、フラッシュメモリ18の物理ブロックのアドレス(物理ブロックアドレス)としている。
このときの代替変換テーブルは、論理ブロックアドレス00hに対応する物理ブロックアドレスが格納されるRAM32上のアドレスは、「LUTB+00h」となるようにしている。なお、図9(B)は、不良ブロックが検出されていないときの代替変換テーブルを示し、図9(C)は図9(A)の代替ブロックテーブルに基づいて作成された代替変換テーブルを示している。
フラッシュメモリ18の不良ブロックが経時的に増加する可能性があるので、RAM32及びROM34には、これを見越した領域を予め確保している。例えば、一般的なNAND型フラッシュメモリでは、製造過程などで発生する初期の不良ブロックが、全記憶容量に対して2%以下であり、また、10万回の消去/書込みに対して発生する不良ブロックは1.8%以下であり、ここから、全記憶容量に対して3.8%以下の不良ブロックに対応可能となるように、RAM32及びROM34に記憶領域を確保できるようにすれば良い。
図10には、第2の実施の形態における代替変換テーブルの作成処理の概略を示している。このフローチャートでは、最初のステップ120で論理ブロックのアドレスAddの初期値(ここではAdd=00h)を設定し、ステップ122では、このアドレスAddに対応するRAM上のアドレス(LUTB+Add)に、Addを格納する。
次のステップ124では、論理ブロックのアドレスAddが代替変換テーブルのサイズ以下か否かを確認し、肯定判定されることにより、ステップ126へ移行し、次の論理ブロックのアドレスに設定する。これにより、論理ブロックのアドレスAddがAdd=01hにセットされ、この論理ブロックに対応するRAM32のアドレスに、フラッシュメモリ18上の物理ブロックのアドレスとして「01h」が格納される。
このようにして、論理ブロックのアドレスAddが代替変換テーブルのサイズに達すると、ステップ124で否定判定されて、RAM32に代替ブロックテーブルの情報を付加する前のLUTとなる代替変換テーブル(変換テーブル)が作成される。図9(B)には、このときの代替変換テーブルの概略を示している。
変換テーブルを作成するとステップ128では、アドレスAddに初期値を設定し(Add=0)、ステップ130では、代替ブロックテーブルからこのアドレスAddに対応する不良ブロックのデータと、代替ブロックのデータを読み込み、ステップ132で不良ブロックのデータと代替ブロックのデータが一致しているか否かを確認する。
ここで、不良ブロックに対して代替ブロックが設定されているときには、不良ブロックを示すデータ(アドレス)と、代替ブロックを示すデータ(アドレス)が異なることから、不一致であるときには、ステップ132で否定判定してステップ134へ移行する。このステップ134では、不良ブロックのアドレスに対応する代替変換テーブル内のデータとして、代替ブロックのデータを格納する。
これにより、図9(C)に示されるように、不良ブロックのアドレスが「01」であり、このアドレスに対応する代替ブロックのアドレスが「05h」であるときには、代替変換テーブルが形成されているRAM32のアドレス「LUTB+01h」に、代替ブロックのアドレス「05h」が格納される。
この後、図10のフローチャートでは、ステップ136で、代替ブロックテーブルの次のアドレスAddを設定し、ステップ130へ移行する。
ここで、代替ブロックテーブルでは、終端の不良ブロックと代替ブロックのデータを同じにしており、ステップ132で肯定判定されることにより、代替ブロックテーブル内の全ての不良ブロックに対する代替ブロックの設定が終了したと判断して、代替変換テーブルの作成を終了する。これにより、図9(C)に示されように、代替ブロックテーブルの情報(図9(A)参照)に基づいた代替変換テーブルが得られる。
このようにして、予め代替変換テーブルを作成することにより、CPU12がフラッシュメモリ18からブートコードを読み込んでシステムコントローラ30や、システムコントローラ30が設けられている装置を起動するときに、迅速で正確な起動が可能となる。これと共に、フラッシュメモリ18の不良ブロックが起因して、起動不良が生じてしまうことがない。
一方、前記したように、代替ブロックテーブルは、ROM34でなく、フラッシュメモリ18上に形成することができる。このとき、代替ブロックテーブルは、フラッシュメモリ18内の少なくとも一つの物理ブロックPBを用いる必要があるが、代替ブロックテーブルに用いる物理ブロックPBが不良ブロックとなると、代替ブロックテーブルを移動する必要があり、これに伴って、他の物理ブロックに格納しているデータの更新や、代替ブロックテーブルの更新が必要となる。
ここで、第3の実施の形態として、フラッシュメモリ18への代替ブロックテーブルの格納及び、フラッシュメモリ18に格納しているデータの更新、代替ブロックテーブルの更新を説明する。
〔第3の実施の形態〕
図11には、第3の実施の形態に係るシステムコントローラ40の概略構成を示している。なお、システムコントローラ40の基本構成は、前記したシステムコントローラ10又はシステムコントローラ30と同じであり、ここでは、先ず、代替ブロックテーブルを用いた論理−物理アドレス変換についての説明は省略する。
システムコントローラ40には、メモリコントローラ20Bが設けられ、このメモリコントローラ20Bにフラッシュメモリ18とRAM32が接続されている。このようなメモリコントローラ20BはRAM32と一体でASICを用いて形成することができる。
このメモリコントローラ20Bでは、代替ブロックテーブルを、フラッシュメモリ18上に形成するようにしている。
図12(A)には、第3の実施の形態でのフラッシュメモリ18のマップを示している。フラッシュメモリ18をプログラムROMとして用いるときには、先頭の物理ブロックPB0に、論理ブロックLB0に対応するデータ(ブートコードなどのプログラム)が格納されるようになっているが、本実施の形態では、この先頭の物理ブロックPB0に、代替ブロックテーブルを格納するようにしている。また、本実施の形態では、代替ブロックテーブルは、不良ブロックを除く最初の物理ブロックPBに格納されるようにしている。
一方、代替ブロックテーブルを、先頭の物理ブロックPBに格納することにより、この物理ブロックPB0に入れられるべきデータData0は、終端の物理ブロックPBに格納される。すなわち、フラッシュメモリ18に、物理ブロックPB0から物理ブロックPBNまでのN+1個の物理ブロックPBが設けられているときには、論理ブロックLB0に対応するデータData0が、物理ブロックPBNに格納されるようにしている。
図12(B)には、このときの代替ブロックテーブルを示している。この代替ブロックテーブルでは、実際のデータが格納されていない物理ブロックPB0を不良ブロックとみなして、代替ブロックとして物理ブロックPBNを割り当てている。
ここで、例えば、代替ブロックテーブルの更新などを行ったときに、代替ブロックテーブルを格納していた物理ブロックPBが不良ブロックとなると、代替ブロックテーブルを次の物理ブロックPBに格納する。このときに、格納先の物理ブロックPBに格納されているデータを、終端側の空き物理ブロックPBへ移動する。
すなわち、図12(C)に示されるように、物理ブロックPB0が不良ブロックとなると、代替ブロックテーブルを次の物理ブロックPB1に格納する。このとき、この物理ブロックPB1に格納されていたデータData1を、終端側の空きブロックとなっている物理ブロックPBN−1へ移動する。
これにより、新たに物理ブロックPB1に格納される代替ブロックテーブルは、図12(D)に示されるように、物理ブロックPB0、PB1を不良ブロックとみなして、物理ブロックPB0、PB1のそれぞれの代替ブロックとして物理ブロックPBN、PBN−1が設定される。
さらに、図12(E)に示されるように、物理ブロックPB0、PB1が不良ブロックと判定されたときには、代替ブロックテーブルを、良ブロックの最初となる物理ブロックPB2に格納し、この物理ブロックPB2に格納されていたデータData2を物理ブロックPBN−2へ移動する。
これに伴い、図12(F)に示されるように、物理ブロックPB0、PB1を不良ブロックとすると共に、物理ブロックPB2を不良ブロックとみなした代替ブロックテーブルが作成される。
一方、フラッシュメモリ18では、NAND型フラッシュメモリルを用いており、図13(A)に示されるように、NAND型フラッシュメモリは、管理用の単位ブロックが、メインエリア42とスペアエリア44によって構成されており、メインエリア42には、データが格納され、スペアエリア44には、管理情報が格納される。なお、ここでは、2つのメインエリア42A、42Bと、スペアエリア44A、44Bによって一つの単位ブロックが形成されており、メインエリア42Aの管理情報がスペアエリア44Aに格納され、メインエリア42Bの管理情報がスペアエリア44Bに格納される。
図13(B)には、スペアエリア44の概略構成を示している。スペアエリア44は、16Byteで構成され、8Byte〜10Byteには、スペアエリア44対応するメインエリア42のECCコードが格納され、11〜12Byteにスペアエリア44のECCコードが格納されるようになっている。
また、このスペアエリア44では、0〜1の2Byteの領域に、スペアエリア44が対応するメインエリア42が不良ブロックであるか否かを判断可能とする情報(Invalid Block Info)が格納されている。
ここから、フラッシュメモリ18では、スペアエリア44の最初の2Byte分の情報を読み出すことにより、対応するメインエリア42(物理ブロックPB)が不良ブロックである否かを判断することができ、不良ブロックと判断されたメインエリア42が形成する物理ブロックPBに対して代替ブロックを設定すれば良い。
なお、この情報(Invalid Block Info)は、格納されているデータが「FFFFh」であるときにのみ良ブロックであり、これ以外の情報(≠FFFFh)であるときには不良ブロックであることを示す。
一方、スペアエリア44では、2〜4の3Byte及び14、15の2Byte分が、ユーザーエリア(Usable Area)となっており、実際にフラッシュメモリ18を使用するときに、フラグ等の利用に割り当てることができるようになっている。
ここで、本実施の形態では、14、15の2Byte分を有効判定エリア46として、該当するメインエリア42に格納されているデータが有効に設定されているか無効に設定されているかの情報(Valid Data Info)を格納する。
このとき、メインエリア42のデータが有効とするときに、有効判定エリア46のデータを「00FFh」とし、利用判定エリア46のデータが、これ以外の値(≠00FFh)であるときには、メインエリア42のデータを無効とするように規定している。
図14には、このように設定したときのスペアエリア44の状態と、これに対する有効/無効をまとめて示している。この図14に示されるように、本実施の形態では、スペアエリア44の先頭の2Byte(0−1Byte)のデータによって、メインエリア42に格納される代替ブロックテーブルなどのデータが無効な不良ブロックか否かを判定し、不良ブロックであるときには、メインエリア42のデータは無効となる。また、不良ブロックでないとき(良ブロックであるとき)には、有効判定エリア46の情報(Valid Data Info)から、メインエリア42のデータを有効とするか無効とするかの設定が可能となっている。
なお、フラッシュメモリ18(NAND型フラッシュメモリ)では、初期化を行なうときに、全てのbitのデータを「1」とするようになっており、スペアエリア44内のユーザーエリアのデータが初期化されることにより、有効判定エリア46は、「FFFFh」となり、メインエリア42内のデータを無効としている。
メモリコントローラ20Bは、フラッシュメモリ18内に格納している代替ブロックテーブルの更新や、物理ブロックPB間でのデータの移動、データの更新(プログラムアップデート)などを行なうときに、スペアエリア44に設定している有効判定エリア46を用いる。
ここで、物理ブロックPB1を用いて、物理ブロックPB0に格納されている代替ブロックテーブルTBTD0を更新して、更新した代替ブロックテーブルTBTD1を格納する。このときに、更新した代替ブロックテーブルTBTD1を、一旦、物理ブロックPB1格納した後、物理ブロックPB0へ移動するものとしている。
図15(A)、図15(B)及び図15(C)に示されるように、このときの初期状態(更新前の状態、図15(A)のステップ140)では、物理ブロックPB0のメインエリア42に代替ブロックテーブルTBTD0が格納され、有効判定エリア46の情報(Valid Data Info)は「00FFh」となっている(図15(B)参照)。
ここで、先ず、ステップ142で物理ブロックPB1のデータを消去(初期化)する。これにより、物理ブロックPB1のメインエリア42では、各Byteのデータが「FFh」となると共に、有効判定エリア46のデータが「FFFFh」となる(図15(C)参照)。
次に、ステップ144では、更新した代替ブロックテーブルTBTD1を物理ブロックPB1のメインエリア42に格納すると共に、物理ブロックPB1の有効判定エリア46に、物理ブロックPB1のデータを有効とする情報「00FFh」を書き込む(図15(C)参照)。
このとき、物理ブロックBL0のメインエリア42に、代替ブロックテーブルTBTD0が残っており、また、有効判定エリア46のデータが「00FFh」となっていることにより、物理ブロックPB0、PB1の何れも有効となっているが、代替ブロックデータを、最初の物理ブロックPBに格納するとした設定により、この時点では、物理ブロックPB0に格納している代替ブロックテーブルTBTD0が有効となっている。
この後、物理ブロックPB0へ代替ブロックテーブルTBTD1を格納する。物理ブロックPB0へ代替ブロックテーブルTBTD1を格納するときには、先ず、ステップ146で物理ブロックPB0の有効判定エリア46に、物理ブロックPB0のデータを無効とするデータ(例えば、「0000h」)を書き込む。
この有効判定エリア46へデータの書込みを行なうときには、所定のデータをオーバーライトする。これにより、書込み途中で電源が遮断されたとしても、書込みが完了してなければ、物理ブロックPB0の代替ブロックテーブルTBTD0が有効となっており、書込みが完了していれば、その瞬間に、物理ブロックPB0のデータが無効となり、物理ブロックPB1のデータ(代替ブロックテーブルTBTD1)が有効となるので、代替ブロックテーブルが消失して、システムコントローラ40が起動しなくなってしまうのを確実に防止することができる。
次に、ステップ148では、物理ブロックPB0のデータを消去し、ステップ150で、物理ブロックPB0のメインエリア42に、代替ブロックテーブルTBTD1を格納すると共に、物理ブロックPB0の有効判定エリア46に、物理ブロックPB0を有効とするデータ「00FFh」を書き込む。
ここで、物理ブロックPB0の有効判定エリア46に「00FFh」が書き込まれることにより、物理ブロックPB0に格納した代替ブロックデータTBTD1が有効となり、更新された代替ブロックテーブルTBTD1を用いた論理−物理アドレス変換が可能となる。
このようにして、代替ブロックテーブルTBTDの更新を行うことにより、更新途中で、システムダウンや電源が遮断されるなどの支障が生じても、更新前の代替ブロックテーブルTBTD0又は、更新された代替ブロックテーブルTBTD1の何れかが必ず有効となる。なお、代替ブロックテーブルTBTD0が有効となったままであれば、起動時に、再度、代替ブロックテーブルTBTD0の更新を行うようにすれば良い。
一方、以上の説明では、代替ブロックテーブルの更新を例に説明したが、これに限らず、フラッシュメモリ18の各物理ブロックPBに格納しているデータの更新、ソフトウェアのアップデートなどに適用することもできる。
ここで、図16及び図17を参照しながら、フラッシュメモリ18に格納しているソフトウェアの更新を説明する。なお、図16(A)に示されるように、ここでは、一例として物理ブロックPB0に格納されているソフトウェアSWを更新するものとし、このときに、物理ブロックPB1が不良ブロック、物理ブロックPB4が空きとなっており、代替ブロックテーブルTBTDは、別に設けているROM(例えばROM34)に格納されているものとしている。
また、このソフトウェアSWは、ブートコードなどであり、図17(A)に示されるように、CPU12が起動時に最初に読み取るリセットポインタとなる論理ブロックLB0に対応する物理ブロックPBにソフトウェアSWが格納されるようになっている。
図16(A)に示すように、このような条件でソフトウェアSWのアップデートを行なうときのフラッシュメモリ18は、物理ブロックPB0にソフトウェアSWが格納され、物理ブロックPB5にData1が格納されている。また、物理ブロックPB2、PB3には、Data2、Data3が格納されている。
図16(B)には、このときの代替ブロックテーブルTBTDを示しており、この代替ブロックテーブルTBTDでは、物理ブロックPB1を不良ブロックとして、この物理ブロックPB1の代替ブロックとして物理ブロックPB5が設定されている。
図17(A)には、この代替ブロックテーブルTSTDに基づいて設定される代替変換テーブルLUTDを示しており、この代替変換テーブルLUTDでは、リセットポインタとなる論理ブロックLB0を物理ブロックPB0に変換するように設定されていると共に、論理ブロックLB1、LB2、LB3がそれぞれ物理ブロックPB5、PB2、PB3に変換されるように設定されている。
ここで、図16(C)に示されるように、最初は、物理ブロックPB0に格納されているソフトウェアSWを、空き(未使用状態)となっている物理ブロックPB4にコピーする。これにより、物理ブロックPB0、PB4にソフトウェアSWが格納された状態となっており、このときに、代替ブロックテーブルTBTDが変更されず、論理ブロックLB0に対する物理ブロックPBとして物理ブロックPB0が設定されていることにより、物理ブロックPB0に格納されているソフトウェアSWが有効となっている。
ここ状態で、図16(D)に示されるように、代替ブロックテーブルTBTDを更新し、物理ブロックPB0の代替ブロックとして物理ブロックPB4を設定するように代替ブロックテーブルの更新を行う。これにより、代替変換テーブルLUTDが更新される。
図17(B)には、このときに更新された代替変換テーブルLUTDを示しており、この代替変換テーブルLUTDでは、論理ブロックLB0を、物理ブロックPB4にアドレス変換されるように設定される。
この後、図17(E)に示されるように、物理ブロックPB0に格納されているソフトウェアSWを消去し(物理ブロックPB0の初期化)、次に、図17(F)に示されるように、物理ブロックPB0に新たなソフトウェアSWを格納する。
物理ブロックPB0へ新たなソフトウェアSWの格納が終了すると、図17(G)に示されるように、物理ブロックPB0を有効とするように代替ブロックテーブルTBTDを更新する。すなわち、物理ブロックPB4を代替ブロックテーブルから消去し、代替ブロックテーブルTBTDをソフトウェアSWの更新前に戻す(図16(B)参照)。
これにより、図17(C)に示されるように、代替変換テーブルLUTDが更新され、論理ブロックPB0が、更新したソフトウェアSWを格納した物理ブロックPB0に変換されるように設定される。
このようにして、ソフトウェアSWの更新が行われることにより、例えば、更新途中でシステムコントローラ40の電源が遮断されるなどしても、ソフトウェアSWが消滅してしまうことが無く、また、CPU12が再起動した時に、少なくとも更新前のソフトウェアSWを確実に読み取ることができるので、CPU12やシステムコントローラ40、システムコントローラ40が設けられている装置に起動不良が生じてしまうことがない。
なお、以上説明した本実施の形態は、本発明の構成を限定するものではない。本発明は、記憶媒体としてNAND型フラッシュメモリ18を例に説明したが、本発明はこれに限るものではなく、例えば、ハードディスクドライブ(HDD)など、書き換え可能な不揮発性記憶媒体であり、かつ、ブロック単位でデータの管理が行なわれる任意の構成の記憶媒体及び、記憶媒体を用いた任意のシステムに適用することができる。