(57)【要約】【課題】電源が遮断した後に再起動した場合、データの解析、復旧を容易にする。【解決手段】コントローラ２０にバックアップ部２７を備え、マイクロプロセッサ２２は、フラッシュメモリ１０へのアクセス時に、シーケンスコード、シーケンスポインタの値、物理ブロックアドレスのデータをバックアップ部２７に書き込む。電源が遮断した後に再起動した場合、マイクロプロセッサ２２は、バックアップ部２７を参照して、電源遮断時のシーケンスコードと、シーケンスポインタと、物理ブロックアドレスと、を取得し、中断した処理の状態を判別する。【選択図】図１
2006338083.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリに対する制御処理を示す情報としてステート情報を保持する不揮発性のステート情報記憶部と、
前記制御処理を構成する一連の制御を実行する制御処理実行部と、
前記制御処理実行部が実行する前記一連の制御によって構成される前記制御処理に対応する前記ステート情報を前記ステート情報記憶部に書き込む処理制御部と、を備えた、
ことを特徴とするメモリコントローラ。
【請求項２】
前記フラッシュメモリに対する前記一連の制御のうちの１つの制御を指し示す制御ステート情報を保持する不揮発性の制御ステート情報記憶部を更に備え、
前記処理制御部は、前記制御処理実行部が実行する前記制御に対応する前記制御ステート情報を前記制御ステート情報記憶部に書き込む、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記フラッシュメモリの処理実行状態を示すメモリステート情報を保持する不揮発性のメモリステート情報記憶部を更に備え、
前記処理制御部は、前記一連の制御に対して前記フラッシュメモリから出力された応答信号に基づいて前記フラッシュメモリの処理状態を判別し、対応するメモリステート情報を前記メモリステート情報記憶部に書き込む、
ことを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
前記フラッシュメモリ内のブロックを指定するためのアドレス情報を保持する不揮発性のアドレス情報記憶部を更に備え、
前記処理制御部は、前記制御処理実行部が実行する一連の制御処理でアクセスするブロックを指定するアドレス情報を前記アドレス情報記憶部に書き込む、
ことを特徴とする請求項１乃至３のいずれか１項に記載のメモリコントローラ。
【請求項５】
前記処理制御部は、電源遮断後、前記電源の復旧により再起動したときに、前記ステート情報記憶部に保持されているステート情報を参照し、参照した情報に基づいて、前記電源遮断時に中断した一連の制御処理を判別する、
ことを特徴とする請求項１乃至４のいずれか１項に記載のメモリコントローラ。
【請求項６】
前記処理制御部は、電源遮断後、前記電源の復旧により再起動したときに、前記アドレス情報記憶部に記憶されているアドレス情報を参照し、参照したアドレス情報に基づいて、前記電源遮断時における前記フラッシュメモリ内の処理実行対象領域を判別する、
ことを特徴とする請求項４に記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラに関する。
【背景技術】
【０００２】
半導体メモリは、メモリカードやシリコンディスクといったメモリシステムに用いられる。また、近年、この半導体メモリには、フラッシュメモリが広く採用されている。フラッシュメモリは、不揮発性メモリの一種であり、電力が供給されていないときでも、データを保持することが要求される。
【０００３】
特に、ＮＡＮＤ型フラッシュメモリは、上記メモリシステムに多く用いられる。ＮＡＮＤ型フラッシュメモリでは、複数のメモリセルを含んでおり、論理値“１”を示すデータが格納されているとき、各メモリセルは消去状態となる。また、論理値“０”を示すデータが格納されているとき、各メモリセルは書き込み状態となる。
【０００４】
ＮＡＮＤ型フラッシュメモリに対する書き込み処理若しくは読み出し処理は、ページと称される予め定められた数のメモリ単位で行われる。一方、消去処理は、複数のページによって構成されたブロック単位で行われる。
【０００５】
このようなフラッシュメモリにコマンドを送出して、書き込み処理、読み出し処理等を行うメモリコントローラがあり、また、フラッシュメモリとメモリコントローラとを備えたメモリシステムが知られている。
【０００６】
このメモリシステムでは、ホストシステムに装着されて使用される場合、例えば、メモリカードとして使用される場合、ふたなどでアクセス中の取り出しを防止したり、規格上、そのような動作を禁止したりするなどの方策によって対応している。
【０００７】
しかしながら、ＮＡＮＤ型フラッシュメモリのビット単価が低下し、メモリシステムが従来のメモリカード用途だけでなく、組込み機器などのシステムのＳｔｏｒａｇｅとしても使用されるようになると、電源遮断に対する耐性がより重要視される。
【０００８】
特に、ＮＡＮＤ型フラッシュメモリの場合、メモリシステムは、システム側の論理アドレスとフラッシュメモリ側の物理アドレスとの対応関係等、ユーザデータ以外に管理情報を持つことが多い。
【０００９】
従って、ＮＡＮＤ型フラッシュメモリを用いたシステムでは、管理情報を書き込んでいるときに電源遮断が発生した場合であっても、電源遮断がシステム全体に影響を与えることがある。
【００１０】
このような問題に対処するため、ＮＡＮＤ型フラッシュメモリを用いたメモリシステムでは、特に電源遮断に対する耐性が要求される。このため、フラッシュの各制御のタイミングでステータスを示すフラグを書き込んだり、あるいは、システムから供給される電源に高容量のコンデンサを搭載したりすることによって、このような耐性を備えるようにしたものがある（例えば、特許文献１参照）。
【特許文献１】特開平１１−１４９４１９号公報（第３頁、図１）
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかし、各制御の段階でフラッシュメモリ上にフラグを書き込むようにした従来のメモリシステムでは、メモリシステムのパフォーマンス低下を招くだけでなく、フラグ書き込み時に電源が遮断した場合には、あるレベルでの単位でしかリカバリーできないし、中断した処理を判別することもできない。このように、フラッシュメモリ上にフラグを書き込むようにしただけでは、本質的な対策にはならない。
【００１２】
また、高容量のコンデンサなどでバックアップするようにした従来のメモリシステムでは、コストやスペースの問題が発生する。特に、近年、不揮発性メモリをＳｔｏｒａｇｅとして使用するアプリケーションが拡大し、ワンチップ化が進められている状況では、このような従来のメモリシステムは、近年の傾向に対応することができない。
【００１３】
本発明は、このような従来の問題点に鑑みてなされたもので、処理中断後に、中断した処理の解析と復旧を容易に行うことが可能なメモリコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１４】
この目的を達成するため、本発明の第１の観点に係るメモリコントローラは、
フラッシュメモリに対する制御処理を示す情報としてステート情報を保持する不揮発性のステート情報記憶部と、
前記制御処理を構成する一連の制御を実行する制御処理実行部と、
前記制御処理実行部が実行する前記一連の制御によって構成される前記制御処理に対応する前記ステート情報を前記ステート情報記憶部に書き込む処理制御部と、を備えたことを特徴とする。
【００１５】
前記フラッシュメモリに対する前記一連の制御のうちの１つの制御を指し示す制御ステート情報を保持する不揮発性の制御ステート情報記憶部を更に備え、
前記処理制御部は、前記制御処理実行部が実行する前記制御に対応する前記制御ステート情報を前記制御ステート情報記憶部に書き込むようにしてもよい。
【００１６】
前記フラッシュメモリの処理実行状態を示すメモリステート情報を保持する不揮発性のメモリステート情報記憶部を更に備え、
前記処理制御部は、前記一連の制御に対して前記フラッシュメモリから出力された応答信号に基づいて前記フラッシュメモリの処理状態を判別し、対応するメモリステート情報を前記メモリステート情報記憶部に書き込むようにしてもよい。
【００１７】
前記フラッシュメモリ内のブロックを指定するためのアドレス情報を保持する不揮発性のアドレス情報記憶部を更に備え、
前記処理制御部は、前記制御処理実行部が実行する一連の制御処理でアクセスするブロックを指定するアドレス情報を前記アドレス情報記憶部に書き込むようにしてもよい。
【００１８】
前記処理制御部は、電源遮断後、前記電源の復旧により再起動したときに、前記ステート情報記憶部に保持されているステート情報を参照し、参照した情報に基づいて、前記電源遮断時に中断した一連の制御処理を判別するようにしてもよい。
【００１９】
前記処理制御部は、電源遮断後、前記電源の復旧により再起動したときに、前記アドレス情報記憶部に記憶されているアドレス情報を参照し、参照したアドレス情報に基づいて、前記電源遮断時における前記フラッシュメモリ内の処理実行対象領域を判別するようにしてもよい。
【発明の効果】
【００２０】
本発明によれば、処理中断後に、中断した処理の解析と復旧を容易に行うことがことができる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施形態に係るメモリコントローラについて、図面を参照して説明する。尚、本実施形態では、メモリコントローラを含むフラッシュメモリシステムとして説明する。
【００２２】
本実施形態に係るフラッシュメモリシステムの構成を図１に示す。
本実施形態に係るフラッシュメモリシステム１は、ホストシステム２に内蔵又は着脱可能に装着されて使用され、ホストシステム２の記憶装置として用いられるものである。
【００２３】
ホストシステム２は、コンピュータ、デジタルスチルカメラのように、文字、音声、あるいは画像情報等の種々の情報を処理するものである。ホストシステム２は、フラッシュメモリシステム１に論理アドレスを与えてフラッシュメモリ１０にアクセスする。
【００２４】
フラッシュメモリシステム１は、フラッシュメモリ１０と、コントローラ２０と、を備える。フラッシュメモリ１０は、ハードディスクの代わりになるストレージデバイスへの用途として開発されたものであり、ＮＡＮＤ型フラッシュメモリからなるチップを備える。
【００２５】
このＮＡＮＤ型のフラッシュメモリ１０は、不揮発性メモリであり、一般的には、レジスタとメモリセルアレイとによって構成され、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
【００２６】
メモリセルアレイは、複数のメモリセル群と、ワード線と、を備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、即ち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルからレジスタへのデータの複写が行われる。
【００２７】
メモリセルアレイを構成するメモリセルは、２つのゲートを備えたＭＯＳトランジスタによって構成される。ここで、上側のゲート、下側のゲートは、それぞれ、コントロールゲート、フローティングゲートと呼ばれており、フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００２８】
このフローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。尚、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧を印加して電子が注入される。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧を印加して電子が排出される。
【００２９】
ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００３０】
このようなＮＡＮＤ型のフラッシュメモリ１０のアドレス空間を図２に示す。フラッシュメモリ１０のアドレス空間は、“ページ”と“ブロック”に基づいて分割されている。
【００３１】
ページは、フラッシュメモリ１０にて行われるデータ読出動作及びデータ書込動作における処理単位である。ブロックは、フラッシュメモリ１０にて行われるデータ消去動作における処理単位である。
【００３２】
１つのページは、５１２バイトのデータ領域１１と、１６バイトの冗長領域１２とを含んでいる。データ領域１１は、ホストシステム２から供給されるユーザデータを格納する。
【００３３】
冗長領域１２は、エラーコレクションコード、対応論理ブロックアドレス、ブロックステータス（フラグ）等の付加データを記録するための領域である。
【００３４】
エラーコレクションコードは、ユーザ領域に記憶されているデータに含まれる誤りを検出し、訂正するためのデータである。
【００３５】
対応論理ブロックアドレスは、１つのブロックに含まれている少なくとも１つのデータ領域１１に有効なデータが格納されているとき、そのブロックが対応付けられている論理ブロックのアドレスを示す。
【００３６】
論理ブロックアドレスは、ホストシステム２から与えられるホストアドレスに基づいて決定されるブロックのアドレスである。一方、フラッシュメモリ１０内における実際のブロックのアドレスは、物理ブロックアドレスと称される。
【００３７】
１つのブロックに含まれている全てのデータ領域１１に有効なデータが格納されていないときには、そのブロックに含まれている冗長領域１２に、対応論理ブロックアドレスは格納されていない。
【００３８】
従って、冗長領域１２に対応論理ブロックアドレスが格納されているか否かを判定することにより、その冗長領域１２が含まれているブロックにてデータが消去されたか否かを判定することができる。冗長領域１２に対応論理ブロックアドレスが格納されていないとき、そのブロックは、データが消去された状態となっている。
【００３９】
１つのブロックは、３２個のページを含んでいる。フラッシュメモリ１０では、データの上書きができない。このため、１つのページに格納されたデータのみを書き換えるときであっても、そのページが含まれたブロック内の全ページに格納されたデータが、書き換えられなければならない。
【００４０】
１つのブロック内の全ページから読み出されたデータの少なくとも一部が変更された後、そのデータは、消去されているブロックの１つに、ブロック単位で書き込まれなければならない。
【００４１】
上記のようにデータを書き換えるにあたっては、書き換えられたデータは、以前に格納されていたブロックとは異なるブロックに書き込まれる。このため、論理ブロックアドレスと物理ブロックアドレスの間の対応関係は、フラッシュメモリ１０にてデータが書き換えられる毎に、動的に変化する。
【００４２】
従って、論理ブロックアドレスと物理ブロックアドレスとの対応関係を管理する必要があり、通常、この対応関係は、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、各ページの冗長領域１２に記憶されている対応論理ブロックアドレスに基づいて作成される。尚、このような動的なアドレス管理手法は、ＮＡＮＤ型フラッシュメモリを用いたメモリシステムでは一般的に行われている手法である。
【００４３】
ブロックステータスは、ブロックの良否を示すフラグである。正常にデータの書き込み等を行うことができないブロックは、不良ブロックと判別され、冗長領域１２には、不良ブロックであることを示すブロックステータスが書き込まれる。
【００４４】
このようなフラッシュメモリ１０は、コントローラ２０から、一連の制御信号を受信して、データの読出し処理、書込み処理、ブロック消去処理、転送処理等の各処理を行う。
【００４５】
この一連の制御信号には、内部コマンドを指示するコマンド信号、アドレスを指示するアドレス信号、コマンド信号やアドレス信号をフラッシュメモリ１０に読み込ませるためのライトイネーブル信号等が含まれる。
【００４６】
ここで、内部コマンドとは、コントローラ２０がフラッシュメモリ１０に処理の実行を指示するためのコマンドであり、フラッシュメモリ１０は、コントローラ２０からの内部コマンドに従って動作する。これに対して、外部コマンドとは、ホストシステム２がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。
【００４７】
コントローラ２０は、図１に示すように、ホストインターフェース２１と、マイクロプロセッサ２２と、ワークエリア２３と、バッファ２４と、ＥＣＣブロック２５と、ＲＯＭ２６と、バックアップ部２７と、フラッシュメモリインターフェースブロック２８と、を備える。このコントローラ２０は、フラッシュメモリ１０に一連の制御信号を送出してフラッシュメモリ１０に対する制御処理を実行するものである。
【００４８】
ホストインターフェース２１は、ホストシステム２との間でデータ、アドレス情報、ステータス情報及び外部コマンド情報等の授受を行うための機能ブロックであり、動作設定レジスタ、タスクファイルレジスタ、エラーレジスタ等を備える（いずれも図示せず）。
【００４９】
このうち、タスクファイルレジスタは、ホストシステム２より供給されるホストアドレス及び外部コマンドを一時的に格納するためのレジスタである。エラーレジスタは、エラーが発生した場合にデータがセットされるレジスタである。
【００５０】
ホストシステム２に内蔵又は装着されたフラッシュメモリシステム１は、外部バスを介してホストシステム２に接続される。ホストインターフェース２１は、ホストシステム２からデータ等が供給されると、フラッシュメモリシステム１の入口として、供給されたデータ等をコントローラ２０の内部に取り込む。
【００５１】
また、フラッシュメモリシステム１がホストシステム２にデータ等を供給する場合、ホストインターフェース２１は、データ等をホストシステム２に供給するフラッシュメモリシステム１の出口として機能する。
【００５２】
バッファ２４は、フラッシュメモリ１０から読み出されたデータをホストシステム２の受け取り準備ができるまで保持し、また、フラッシュメモリ１０に書き込むデータを、フラッシュメモリ１０への書き込み準備ができるまで一時的に保持するための機能ブロックである。
【００５３】
ＥＣＣブロック２５は、フラッシュメモリ１０に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出したデータに付加されたエラーコレクションコードに基づいて、読み出したデータの誤り検出を行い、検出した誤りを訂正すための機能ブロックである。
【００５４】
ＲＯＭ２６は、コマンドコードセットCmd_setを記憶するものである。コマンドコードセットCmd_setは、フラッシュメモリ１０に対する処理を実行するための命令セットであり、予め設定されたものである。命令セットには、例えば、書込み処理、消去処理といった各処理を実行するためのものがあり、このコマンドコードセットCmd_setは、このような処理を実行するための複数の命令を含んでいる。各コマンドコードセットCmd_setには、シーケンスコードSeq_codeが割り当てられている。
【００５５】
ワークエリア２３は、フラッシュメモリ１０の制御に必要なデータを一時的に格納する作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。
【００５６】
ワークエリア２３は、処理に必要なデータとして、論理ブロックアドレスと物理ブロックアドレスとの対応関係を管理する前述のアドレス変換テーブルも格納する。また、ワークエリア２３は、マイクロプロセッサ２２がＲＯＭ２６から読み出したコマンドコードセットCmd_setを格納する。
【００５７】
フラッシュメモリインターフェースブロック２８は、内部バスを介して、フラッシュメモリ１０との間でデータ、アドレス情報、ステータス情報、内部コマンド情報及びデバイスＩＤ情報等の授受を行うために備えられた機能ブロックである。フラッシュメモリインターフェースブロック２８は、図３に示すように、アドレスレジスタ２８ａと、コマンドレジスタ２８ｂと、命令処理ブロック２８ｃと、を備える。
【００５８】
アドレスレジスタ２８ａは、アクセス先の物理ブロックアドレスB_addrを格納するためのレジスタである。物理ブロックアドレスB_addrは、フラッシュメモリインターフェースブロック２８が実行する一連の制御処理でアクセスするフラッシュメモリ１０内のブロックを指定するためのアドレス情報である。
【００５９】
フラッシュメモリインターフェースブロック２８は、アドレスレジスタ２８ａに格納された物理ブロックアドレスB_addrに５ビットのページ番号（０〜３２のページ番号）を付加してアドレスデータを生成する。このアドレスデータは、上位側が物理ブロックアドレスで、下位側がページ番号になる。
【００６０】
コマンドレジスタ２８ｂは、コマンドコードセットCmd_setの各命令を格納するためのレジスタである。
【００６１】
命令処理ブロック２８ｃは、コマンドレジスタ２８ｂに格納されている命令に従って制御信号を出力するものである。
【００６２】
フラッシュメモリインターフェースブロック２８は、命令処理ブロック２８ｃによって出力される一連の制御信号をフラッシュメモリ１０に供給することにより、前述のコマンドコードセットCmd_setに含まれている各命令を実行し、一連の制御を行う。
【００６３】
命令処理ブロック２８ｃがコマンドレジスタ２８ｂに読み込まれた命令（コマンドコードセットCmd_setに含まれる命令）に従って処理を実行することにより、フラッシュメモリ１０に対する所望の機能が実現される。
【００６４】
フラッシュメモリインターフェースブロック２８は、命令がコマンドレジスタ２８ｂに読み込まれると、例えば、何番目の命令であるかを示す値のように、このコマンドレジスタ２８ｂに読み込んだ命令を示す情報Cmd_noをマイクロプロセッサ２２に出力する。
【００６５】
フラッシュメモリインターフェースブロック２８は、コマンドコードセットCmd_setに従って実行した処理が終了した場合、マイクロプロセッサ２２に処理が終了したことを示す割込み信号Ｉｒｑを出力する。
【００６６】
バックアップ部２７は、電源遮断等によって処理が中断し、電源が再起動した時に中断した処理を解析、復旧させるための情報を保持するためのものである。
【００６７】
バックアップ部２７は、アドレスバックアップ領域２７ａと、シーケンスコードバックアップ領域２７ｂと、ポインタバックアップ領域２７ｃと、を備える。
【００６８】
アドレスバックアップ領域２７ａは、アクセス先の物理ブロックアドレスB_addrを保持するための領域である。
【００６９】
シーケンスコードバックアップ領域２７ｂは、上述のシーケンスコードSeq_codeを、フラッシュメモリ１０に対する制御処理を示すステート情報として保持するための領域である。
【００７０】
ポインタバックアップ領域２７ｃは、ポインタｐの値を保持するための領域である。ポインタｐは、シーケンスコードSeq_codeに対応するコマンドセットCmd_setに含まれる命令を指示するためのものであり、ポインタバックアップ領域２７ｃは、このポインタｐの値を、フラッシュメモリ１０に対する一連の制御のうちの１つの制御を指し示す制御ステート情報として保持する。
【００７１】
このバックアップ部２７には、例えば、ＦＲＡＭ（Ferroelectric RAM）が用いられる。ＦＲＡＭは、ＤＲＡＭセルにおいて電荷を保持する誘電体キャパシタを使用した重ね書きが可能な不揮発性メモリである。
【００７２】
マイクロプロセッサ２２は、ＲＯＭ２６に記憶されている制御ソフトウェアに従ってコントローラ２０内の制御処理を実行する。この制御ソフトウェアに従って、マイクロプロセッサ２２は、コントローラ２０を構成する各機能ブロック全体の動作を制御する。
【００７３】
具体的に、マイクロプロセッサ２２は、ワークエリア２３のアドレス変換テーブルを参照して、ホストシステム２から供給されたアドレスを、アクセス先の物理ブロックアドレスB_addrに変換する。
【００７４】
マイクロプロセッサ２２は、変換した物理ブロックアドレスB_addrをフラッシュメモリインターフェースブロック２８のアドレスレジスタ２８ａに書き込むとともに、バックアップ部２７のアドレスバックアップ領域２７ａに書き込む。
【００７５】
マイクロプロセッサ２２は、フラッシュメモリ１０に対して、例えば、書込み処理、消去処理等の処理を実行するとき、シーケンスコードSeq_codeに基づいてコマンドコードセットCmd_setをＲＯＭ２６から読み出す。
【００７６】
マイクロプロセッサ２２は、コマンドコードセットCmd_setをＲＯＭ２６から読み出してワークエリア２３に書き込む。また、マイクロプロセッサ２２は、読み出したコマンドセットCmd_setに対応するシーケンスコードSeq_codeをバックアップ部２７のシーケンスコードバックアップ領域２７ｂに書き込む。
【００７７】
尚、コマンドセットCmd_setに含まれる各命令は、コマンドレジスタ２８ｂに保持されている命令に基づいた処理が実行される毎にワークエリア２３からコマンドレジスタ２８ｂに読み込まれる。
【００７８】
マイクロプロセッサ２２は、フラッシュメモリインターフェースブロック２８から出力された情報Cmd_noに基づいてシーケンスポインタｐの値を設定し、このシーケンスポインタｐの値をシーケンスコードバックアップ領域２７ｂに書き込む。
【００７９】
マイクロプロセッサ２２は、フラッシュメモリインターフェースブロック２８から割込み信号Ｉｒｑを受信した場合、次に実行すべき処理があれば、その処理に対応するコマンドコードセットCmd_setをＲＯＭ２６から読み出す。そして、マイクロプロセッサ２２は、その処理に対応するシーケンスコードSeq_codeをシーケンスコードバックアップ領域２７ｂに書き込む。
【００８０】
一方、次に実行すべき処理がない場合、マイクロプロセッサ２２は、シーケンスコードバックアップ領域２７ｂに書込まれているシーケンスコードSeq_codeをクリアする。
【００８１】
更に、マイクロプロセッサ２２は、電源遮断等により処理が中断した後に、電源の復旧により再起動したとき、バックアップ部２７に保持されている情報を参照する。
【００８２】
即ち、マイクロプロセッサ２２は、アドレスバックアップ領域２７ａ、シーケンスコードバックアップ領域２７ｂ、ポインタバックアップ領域２７ｃにそれぞれ保持されている物理ブロックアドレスB_addr、シーケンスコードSeq_code、ポインタｐの値を取得する。そして、マイクロプロセッサ２２は、取得したこれらの情報に基づいて電源遮断時に中断した一連の制御を判別する。
【００８３】
次に本実施形態に係るフラッシュメモリシステム１の動作を説明する。
ホストシステム２は、フラッシュメモリ１０からデータを読み出す場合、外部バスを介してフラッシュメモリシステム１に外部コマンドとアドレスとを供給する。また、ホストシステム２は、データをフラッシュメモリ１０に書き込む場合、外部コマンドとアドレスとに加えて、書き込むデータをフラッシュメモリシステム１に供給する。
【００８４】
マイクロプロセッサ２２は、ワークエリア２３のアドレス変換テーブルを参照し、ホストシステム２から供給されたアドレスを、アクセス先の物理ブロックアドレスB_addrに変換する。
【００８５】
マイクロプロセッサ２２は、変換した物理ブロックアドレスB_addrをフラッシュメモリインターフェースブロック２８内のアドレスレジスタ２８ａに書き込むとともに、バックアップ部２７のアドレスバックアップ領域２７ａに書き込む。
【００８６】
フラッシュメモリインターフェースブロック２８は、アドレスレジスタ２８ａに格納された物理ブロックアドレスB_addrに５ビットのページ番号を付加したアドレス信号を生成する。
【００８７】
また、マイクロプロセッサ２２は、外部コマンドに従って、フラッシュメモリインターフェースブロック２８に実行させる処理に対応したコマンドコードセットCmd_setをＲＯＭ２６から読み出す。
【００８８】
マイクロプロセッサ２２は、読み出したコマンドコードセットCmd_setをワークエリア２３に書き込み、そのコマンドコードセットCmd_setに対応するシーケンスコードSeq_codeをシーケンスコードバックアップ領域２７ｂに書き込む。
【００８９】
ワークエリア２３に書き込まれたコマンドコードセットCmd_setに含まれる最初の命令がフラッシュメモリインターフェースブロック２８のコマンドレジスタ２８ｂに読み込まれる。
【００９０】
命令処理ブロック２８ｃは、コマンドレジスタ２８ｂに読み込まれた命令に基づいて処理を実行する。
【００９１】
フラッシュメモリインターフェースブロック２８は、コマンドコードセットCmd_setに従い、制御信号として、コマンド信号、アドレス信号、書き込みデータ等をフラッシュメモリ１０に送出する。
【００９２】
１つの処理が実行されると、ワークエリア２３に書き込まれたコマンドコードセットCmd_setに含まれる次の命令がコマンドレジスタ２８ｂに読み込まれる。フラッシュメモリインターフェースブロック２８は、命令がコマンドレジスタ２８ｂに読み込まれる毎に、読み込んだ命令を示す情報Cmd_noをマイクロプロセッサ２２に出力する。
【００９３】
フラッシュメモリ１０は、受信したコマンド信号、アドレス信号、書き込みデータ等に基づいて書き込み処理、読み出し処理といった処理を実行する。例えば、複数のページ読み出し処理では、読み出すページ分の制御信号とアドレス信号とが繰り返し送出される。
【００９４】
マイクロプロセッサ２２は、フラッシュメモリインターフェースブロック２８から出力された情報Cmd_noに基づいてシーケンスポインタｐの値を設定し、このシーケンスポインタｐの値をシーケンスコードバックアップ領域２７ｂに書き込む。
【００９５】
フラッシュメモリインターフェースブロック２８は、命令処理ブロック２８ｃの処理が終了した場合、マイクロプロセッサ２２に、処理が終了したことを示す割込み信号Ｉｒｑを出力する。
【００９６】
マイクロプロセッサ２２は、フラッシュメモリインターフェースブロック２８から割込み信号Ｉｒｑを受信した場合に、次に実行すべき処理があれば、その処理に対応するシーケンスコードSeq_code、先頭の命令を示すシーケンスポインタｐの値を、それぞれ、シーケンスコードバックアップ領域２７ｂ、ポインタバックアップ領域２７ｃに書き込む。
【００９７】
一方、次に実行すべき処理がない場合、マイクロプロセッサ２２は、シーケンスコードバックアップ領域２７ｂ、ポインタバックアップ領域２７ｃにそれぞれ書込まれているシーケンスコードSeq_code、シーケンスポインタｐの値をクリアする。
【００９８】
コマンドコードセットCmd_setに従った処理の実行中に、電源が遮断した場合、バックアップ部２７のシーケンスコードバックアップ領域２７ｂには、コマンドコードセットCmd_setを示すシーケンスコードSeq_codeが保持され、ポインタバックアップ領域２７ｃには、シーケンスポインタｐの値が保持される。
【００９９】
また、アドレスバックアップ領域２７ａには、アクセス先の物理ブロックアドレスB_addrが格納されている。
【０１００】
再起動後、マイクロプロセッサ２２は、バックアップ部２７を参照して、シーケンスコードバックアップ領域２７ｂに保持されているシーケンスコードSeq_codeと、ポインタバックアップ領域２７ｃに保持されているシーケンスポインタｐの値と、を取得する。
【０１０１】
また、マイクロプロセッサ２２は、アドレスバックアップ領域２７ａに保持されている物理ブロックアドレスB_addrを取得する。
【０１０２】
マイクロプロセッサ２２は、取得したシーケンスコードSeq_codeに基づいて、電源遮断時に実行されていた処理を判別する。
【０１０３】
例えば、シーケンスコードバックアップ領域２７ｂに、読み出し処理を示すシーケンスコードSeq_codeが格納されていた場合、マイクロプロセッサ２２は、フラッシュメモリインターフェースブロック２８が、読み出し処理を実行しているときに処理が中断したと判定する。
【０１０４】
また、シーケンスポインタｐが読み出し処理のコマンドセットCmd_setの内部読み出しコマンドの送出命令を指し示していた場合、マイクロプロセッサ２２は、内部読み出しコマンドの送出中に処理が中断したと判定する。
【０１０５】
また、対応する処理でアクセスされていたブロックは、アドレスバックアップ領域２７ａに格納されている物理ブロックアドレスB_addrに基づいて判別される。例えば、物理ブロックアドレスB_addrのデータがB_addr＝＃０の場合、マイクロプロセッサ２２は、アクセスが中断したときのアクセス先は物理ブロック＃０であると判定する。
【０１０６】
一方、シーケンスコードバックアップ領域２７ｂのシーケンスコードSeq_codeがクリアされている場合、マイクロプロセッサ２２は、中断した処理がなかったと判定する。
【０１０７】
このように、マイクロプロセッサ２２は、シーケンスコードバックアップ領域２７ｂ、ポインタバックアップ領域２７ｃにそれぞれ保持されているシーケンスコードSeq_code、シーケンスポインタｐの値に基づいて、電源が遮断したときの処理内容を判別する。
【０１０８】
以上説明したように、本実施形態によれば、コントローラ２０にバックアップ部２７を備え、マイクロプロセッサ２２は、フラッシュメモリ１０へのアクセス時に、シーケンスコードSeq_code、シーケンスポインタｐの値、物理ブロックアドレスB_addrを、バックアップ部２７に書き込むようにした。
【０１０９】
従って、電源遮断等により処理が中断した場合、単に電源遮断がフラッシュメモリ１０ヘの処理の内容を判別するだけでなく、シーケンスポインタｐの値から、書き込み時における制御ステータスを判別することができる。
【０１１０】
即ち、マイクロプロセッサ２２は、フラッシュメモリ１０のデータレジスタに対してデータを転送している最中に電源遮断が発生したのか、データをフラッシュメモリ１０のセルに書き込んでいる際に起きたのかを判別することができる。
【０１１１】
このため、再起動後に中断したときのデータの復旧を容易に行うことができ、フラッシュメモリ１０に記憶したデータの信頼性を向上させることができる。
【０１１２】
また、この中断した処理の内容に関する情報とアドレスバックアップ領域２７ａに格納されている物理ブロックアドレスB_addrの情報とから、データが正常に書き込まれていない可能性の高いブロックを正確に把握することができるとともに、そのブロックの状態を診断することができる。
【０１１３】
また、不正な電源遮断が発生した場合に、ＥＣＣの誤訂正により、エラーを検出することができなかった場合でも、シーケンスコードバックアップ領域２７ｂに格納されているシーケンスコードSeq_codeに基づいて、不正な電源遮断が発生したことを検出することができる。
【０１１４】
尚、本発明を実施するにあたっては、種々の形態が考えられ、上記実施の形態に限られるものではない。
例えば、フラッシュメモリ１０の制御シーケンスの操作やコマンド処理等は、マイクロプロセッサの代わりにハードウェアロジック等で実施することも可能である。
【０１１５】
また、バックアップ対象は、コントローラ２０が出力する制御情報に限られるものではなく、フラッシュメモリ１０から出力される信号に基づいて、フラッシュメモリ１０の処理実行状態を示す情報を含めるようにすることもできる。
【０１１６】
この場合、図４に示すように、バックアップ部２７は、フラッシュメモリ１０の処理実行状態を示すメモリステート情報M_stateを記憶するためのメモリステート情報バックアップ領域２７ｄを備える。
【０１１７】
フラッシュメモリインターフェースブロック２８は、一連の制御に対してフラッシュメモリ１０が出力する応答信号として、RDY（レディー）/BSY（ビジー）信号の状態を取り込む。
【０１１８】
フラッシュメモリインターフェースブロック２８は、RDY/BSY信号に基づいて、フラッシュメモリ１０の処理実行状態を判別し、対応するメモリステート情報M_stateをマイクロプロセッサ２２に出力する。マイクロプロセッサ２２は、このメモリステート情報M_stateをバックアップ部２７に書き込む。
【０１１９】
このように構成されることによって、電源遮断が発生した時点でフラッシュメモリ１０が実行している処理の状態を判別することができる。ビジー状態で電源遮断が発生した場合、フラッシュメモリ１０内での処理も中断しているため、レディー状態で電源遮断が発生した場合よりも、処理途中で残されたデータの信頼性は低くなる。
【０１２０】
マイクロプロセッサ２２は、保持されているこのメモリステート情報M_stateに基づいてフラッシュメモリ１０の状態を判別することにより、復帰制御の手順を換えることも可能になる。
【０１２１】
また、上記実施の形態では、バックアップ部２７には、ＦＲＡＭを用いるようにした。しかし、バックアップ部２７には、ＦＲＡＭだけでなく、ＯＵＭ（Ovonics Unified Memory）、ＭＲＡＭ（Magnetic RAM）等を使用することもできる。
【０１２２】
ＯＵＭは、熱によりアモルファス状態と結晶状態を切替えて抵抗値を変化させることで“１”又は“０”を記憶するものである。
【０１２３】
ＭＲＡＭは、強磁性トンネル磁気抵抗効果（ＴＭＲ：Tunnel Magneto Resistance）素子を用いて抵抗値の変化を論理値の“１”又は“０”に対応させるものである。
【０１２４】
さらに、バックアップ部２７には、ＥＥＰＲＯＭ（Electrically Erasable Programmable ROM）、ＳＲＡＭのデータを電池でバックアップしたもの（Battery Back Up SRAM）を用いてもよい。
【０１２５】
上記実施形態では、バックアップ部２７にシーケンスコードSeq_codeを格納するようにした。しかし、バックアップ部２７には、シーケンスコードSeq_codeの代わりに、コマンドコードセットCmd_setを格納するようにしてもよい。
【０１２６】
上記実施形態では、バックアップ部２７にアドレスバックアップ領域２７ａと、シーケンスコードバックアップ領域２７ｂと、を備えるようにした。しかし、物理ブロックアドレスB_addrのデータを保持する不揮発性メモリと、シーケンスコードSeq_codeを保持する不揮発性メモリと、を個別に設けるようにしてもよい。
【図面の簡単な説明】
【０１２７】
【図１】本発明の実施形態に係るフラッシュメモリシステムの構成を示すブロック図である。
【図２】図１のフラッシュメモリのアドレス空間を示す図である。
【図３】フラッシュメモリシステムの動作を示す図である。
【図４】フラッシュメモリシステムの応用例を示す図である。
【符号の説明】
【０１２８】
１    フラッシュメモリシステム
２    ホストシステム
１０  フラッシュメモリ
２０  コントローラ
２２  マイクロプロセッサ
２３  ワークエリア
２４  バッファ
２６  ＲＯＭ
２７  バックアップ部
２７ａ  アドレスバックアップ領域
２７ｂ  シーケンスコードバックアップ領域
２７ｃ  ポインタバックアップ領域
２８  フラッシュメモリインターフェースブロック
２８ａ  アドレスレジスタ
２８ｂ  コマンドレジスタ
２８ｃ  命令処理ブロック
【図１】
2006338083.tif 000003
【図２】
2006338083.tif 000004
【図３】
2006338083.tif 000005
【図４】
2006338083.tif 000006