(57)【要約】【課題】複数の種類が存在するフラッシュメモリを制御するメモリコントローラの汎用性を高める。【解決手段】ホストシステムから与えられるコマンドに基づいて、複数のページを含む物理ブロックを複数含むフラッシュメモリに対するアクセスを制御するメモリコントローラであって、管理情報の書き込み時に、所定の検索範囲のなかでフラッシュメモリ内のいずれかの物理ブロックを所定物理ブロックに割り当て、当該所定物理ブロックにフラッシュメモリにアクセスするために必要な管理情報を書き込み、フラッシュメモリに格納されている第２ファームウェアを読み出すときに、所定物理ブロックを検索するように動作し、管理情報を含む書き込み情報は、フラッシュメモリの種類に関わらず同一のフォーマットで所定物理ブロックに書き込まれており、所定物理ブロックの検索では、前記所定の検索範囲について、所定のページ間隔で、各ページに書き込まれている情報が順次読み出される。【選択図】図１
2020086535.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムから与えられるコマンドに基づいて、複数のページを含む物理ブロックを複数含むフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
第１ファームウェアが書き込まれているＲＯＭと、
前記フラッシュメモリから読み出された第２ファームウェアが書き込まれるＲＡＭと、
前記ホストシステムまたは前記フラッシュメモリとの間での送受信データを保持するバッファと、
を備え、
前記第１ファームウェアまたは前記第２ファームウェアに基づいて動作し、
管理情報の書き込み時に、所定の検索範囲のなかで前記フラッシュメモリ内のいずれかの前記物理ブロックを所定物理ブロックに割り当て、当該所定物理ブロックに前記フラッシュメモリにアクセスするために必要な前記管理情報を書き込み、前記フラッシュメモリから前記第２ファームウェアを読み出すときに、前記所定物理ブロックを検索するように動作し、
前記管理情報を含む書き込み情報は、前記フラッシュメモリの種類に関わらず同一のフォーマットで前記所定物理ブロックに書き込まれており、
前記所定物理ブロックの検索では、前記所定の検索範囲について、所定のページ間隔で、各ページに書き込まれている情報が順次読み出される、
メモリコントローラ。
【請求項２】
読み出された情報に含まれる誤り訂正符号により誤り訂正できた場合には、前記所定物理ブロックが見つかったと判定する、
請求項１に記載のメモリコントローラ。
【請求項３】
前記所定物理ブロックに前記所定物理ブロックを特定するための識別情報を書き込み、
前記起動時には、前記識別情報に基づいて前記所定物理ブロックを検索するように動作し、
前記所定物理ブロックが見つかったと判定する条件には、読み出された情報に前記所定物理ブロックを特定するための前記識別情報が含まれるという条件が含まれており、
前記管理情報と前記識別情報を含む前記書き込み情報は、前記フラッシュメモリの種類に関わらず前記同一のフォーマットで前記所定物理ブロックに書き込まれている、
請求項１または請求項２に記載のメモリコントローラ。
【請求項４】
前記所定のページ間隔は、使用されることが想定される複数の種類の前記フラッシュメモリについて１個のブロックに含まれるページの数の公約数に相当するページの数の間隔である、
請求項１から請求項３のいずれか１項に記載のメモリコントローラ。
【請求項５】
複数のページを含む物理ブロックを複数含むフラッシュメモリと、ホストシステムから与えられるコマンドに基づいて、前記フラッシュメモリに対するアクセスを制御するメモリコントローラと、を備えるメモリシステムであって、
前記メモリコントローラは、
第１ファームウェアが書き込まれているＲＯＭと、
前記フラッシュメモリから読み出された第２ファームウェアが書き込まれるＲＡＭと、
前記ホストシステムまたは前記フラッシュメモリとの間での送受信データを保持するバッファと、
を備え、
前記第１ファームウェアまたは前記第２ファームウェアに基づいて動作し、
管理情報の書き込み時に、所定の検索範囲のなかで前記フラッシュメモリ内のいずれかの前記物理ブロックを所定物理ブロックに割り当て、当該所定物理ブロックに前記フラッシュメモリにアクセスするために必要な前記管理情報を書き込み、前記フラッシュメモリから前記第２ファームウェアを読み出すときに、前記所定物理ブロックを検索するように動作し、
前記管理情報を含む書き込み情報は、前記フラッシュメモリの種類に関わらず同一のフォーマットで前記所定物理ブロックに書き込まれており、
前記所定物理ブロックの検索では、前記所定の検索範囲について、所定のページ間隔で、各ページに書き込まれている情報が順次読み出される、
メモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、及びメモリシステムに関する。
【背景技術】
【０００２】
フラッシュメモリに関する技術についての研究や開発が行われている。
【０００３】
フラッシュメモリには、複数の種類（説明の便宜上、タイプともいう。）が存在する。そして、フラッシュメモリのタイプごとに、当該タイプに適合したメモリコントローラが作成されて備えられていた。起動時に、メモリコントローラは、ＲＯＭ（Read Only Memory）に記憶された第１ファームウェアを実行することで、フラッシュメモリに記憶された管理情報を読み出し、これにより、フラッシュメモリに記憶された第２ファームウェアを読み出して実行する。この際、メモリコントローラは、フラッシュメモリに記憶された管理情報あるいは第２ファームウェアを読み出すことができなかった場合には、所定のリカバリ処理を実行する。当該リカバリ処理は、エラーの要因によって異なり得る。当該リカバリ処理は、一例として、初期化である。
【０００４】
例えば、特許文献１に記載されたフラッシュメモリ記憶システムでは、フラッシュメモリを制御するメモリコントローラが備えるＲＯＭに、フラッシュメモリの起動時の初期化を行うためのファームウェアが書き込まれている。ここで、本実施形態における初期化は、特許文献１の初期化の際にフラッシュメモリから読み出される第２ファームウェアをフラッシュメモリにロード（格納）する処理であり、特許文献１における起動時の初期化は本実施形態における初期化とは異なる。また、特許文献１におけるＲＯＭにはブートコードしか記憶されていない（特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００７−５１８１６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来では、複数のタイプが存在するフラッシュメモリのタイプごとに異なるメモリコントローラが作成されて備えられていたため、メモリコントローラの汎用性が低い場合があった。
【０００７】
本発明は、このような事情を考慮してなされたもので、複数の種類が存在するフラッシュメモリを制御するメモリコントローラの汎用性を高めることができるメモリコントローラ、及びメモリシステムを提供することを課題とする。
【課題を解決するための手段】
【０００８】
本発明の一態様は、ホストシステムから与えられるコマンドに基づいて、複数のページを含む物理ブロックを複数含むフラッシュメモリに対するアクセスを制御するメモリコントローラであって、第１ファームウェアが書き込まれているＲＯＭと、前記フラッシュメモリから読み出された第２ファームウェアが書き込まれるＲＡＭと、前記ホストシステムまたは前記フラッシュメモリとの間での送受信データを保持するバッファと、を備え、前記第１ファームウェアまたは前記第２ファームウェアに基づいて動作し、管理情報の書き込み時に、所定の検索範囲のなかで前記フラッシュメモリ内のいずれかの前記物理ブロックを所定物理ブロックに割り当て、当該所定物理ブロックに前記フラッシュメモリにアクセスするために必要な前記管理情報を書き込み、前記フラッシュメモリから前記第２ファームウェアを読み出すときに、前記所定物理ブロックを検索するように動作し、前記管理情報を含む書き込み情報は、前記フラッシュメモリの種類に関わらず同一のフォーマットで前記所定物理ブロックに書き込まれており、前記所定物理ブロックの検索では、前記所定の検索範囲について、所定のページ間隔で、各ページに書き込まれている情報が順次読み出される、メモリコントローラである。
【０００９】
本発明の一態様は、複数のページを含む物理ブロックを複数含むフラッシュメモリと、ホストシステムから与えられるコマンドに基づいて、前記フラッシュメモリに対するアクセスを制御するメモリコントローラと、を備えるメモリシステムであって、前記メモリコントローラは、第１ファームウェアが書き込まれているＲＯＭと、前記フラッシュメモリから読み出された第２ファームウェアが書き込まれるＲＡＭと、前記ホストシステムまたは前記フラッシュメモリとの間での送受信データを保持するバッファと、を備え、前記第１ファームウェアまたは前記第２ファームウェアに基づいて動作し、管理情報の書き込み時に、所定の検索範囲のなかで前記フラッシュメモリ内のいずれかの前記物理ブロックを所定物理ブロックに割り当て、当該所定物理ブロックに前記フラッシュメモリにアクセスするために必要な前記管理情報を書き込み、前記フラッシュメモリから前記第２ファームウェアを読み出すときに、前記所定物理ブロックを検索するように動作し、前記管理情報を含む書き込み情報は、前記フラッシュメモリの種類に関わらず同一のフォーマットで前記所定物理ブロックに書き込まれており、前記所定物理ブロックの検索では、前記所定の検索範囲について、所定のページ間隔で、各ページに書き込まれている情報が順次読み出される、メモリシステムである。
【発明の効果】
【００１０】
本発明によれば、複数の種類が存在するフラッシュメモリを制御するメモリコントローラの汎用性を高めることができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態に係るメモリシステムの構成の一例を示す図である。
【図２】実施形態に係るフラッシュメモリのブロックおよびページの構成の一例を示す図である。
【図３】実施形態に係るフラッシュメモリのアドレスの構成の一例を示す図である。
【図４】実施形態に係る管理情報のページフォーマットの一例を示す図である。
【図５】実施形態に係るユーザデータのページフォーマットの一例を示す図である。
【図６】実施形態に係る第１タイプのフラッシュメモリの領域の一例を示す図である。
【図７】実施形態に係る第２タイプのフラッシュメモリの領域の一例を示す図である。
【図８】実施形態に係る第３タイプのフラッシュメモリの領域の一例を示す図である。
【図９】実施形態に係る管理情報の読み出しの処理の手順の一例を示す図である。
【発明を実施するための形態】
【００１２】
＜実施形態＞
以下、本発明の実施形態について、図面を参照して説明する。
【００１３】
＜メモリシステムの構成＞
図１は、実施形態に係るメモリシステム１の構成の一例を示す図である。
メモリシステム１は、ホストシステム２と接続されている。
メモリシステム１は、フラッシュメモリ１１と、メモリコントローラ１２を備える。
【００１４】
実施形態では、第２ファームウェアを検索して読み出すソフトウェアを第１ファームウェアと呼んで説明する。
また、実施形態では、フラッシュメモリ１１へのアクセスを制御するソフトウェアを第２ファームウェアと呼んで説明する。
また、実施形態では、ホストシステム２からメモリシステム１に送信されるメモリシステム１の初期化用のソフトウェアを第３ファームウェアと呼んで説明する。
メモリシステム１の初期化は、フラッシュメモリ１１に第１領域１１Ａ、第２領域１１Ｂ、第３領域１１Ｃの領域を生成し、各領域に必要な情報を格納して（例えば、第２領域１１Ｂに管理情報を格納する）、第２ファームウェアをフラッシュメモリ１１にロード（格納）する、などの処理を行う。
【００１５】
フラッシュメモリ１１は、様々なフラッシュメモリであってもよい。例えば、フラッシュメモリ１１が備える各セルは、ＳＬＣ（Single  Level  Cell）であってもよく、ＭＬＣ（Multi Level Cell）であってもよく、ＴＬＣ（Triple  Level  Cell）であってもよい。
実施形態では、一例として、フラッシュメモリ１１が、ＮＡＮＤ型のフラッシュメモリである場合について説明する。
【００１６】
フラッシュメモリ１１では、ページの単位で、データの書き込み、および、データの読み出しを行う。また、フラッシュメモリ１１では、物理ブロック（実施形態では、単に、ブロックともいう。）の単位で、データの消去を行う。
１個のブロックに含まれるページの数は、規定の数である。当該規定の数は、複数タイプあり、例えば、３２、６４、１２８、２５６などである。
このように、フラッシュメモリ１１は、ブロック単位およびページ単位で管理される。
【００１７】
フラッシュメモリ１１は、メモリコントローラ１２によって制御される。実施形態において、フラッシュメモリ１１が備える複数のブロックのうちの少なくとも一部は、メモリコントローラ１２によって第１領域１１Ａ、第２領域１１Ｂ、第３領域１１Ｃのうちのいずれかとして指定されている。
【００１８】
ここで、本実施形態では、説明の便宜上、それぞれの領域（第１領域１１Ａ〜第３領域１１Ｃ）は、フラッシュメモリ１１の物理ブロックに相当しているとして説明する。
また、本実施形態では、説明の便宜上、３個の領域（第１領域１１Ａ〜第３領域１１Ｃ）を示したが、例えば、さらに他の領域が設けられてもよい。
【００１９】
第１領域１１Ａは、第２ファームウェアがメモリコントローラ１２によって書き込まれる物理ブロックの領域である。
第２ファームウェアが更新（アップデート）されるときには、例えば、当該第２ファームウェアが格納される先のブロックのすべてが消去されて書き込まれる。なお、第２ファームウェアの一部の書き換えは行われない。
【００２０】
第２領域１１Ｂは、管理情報がメモリコントローラ１２によって書き込まれる物理ブロックの領域である。管理情報には、例えば、フラッシュメモリ１１内における第１領域１１Ａの位置を示す情報、フラッシュメモリ１１内における第３領域１１Ｃの位置を示す情報、フラッシュメモリ１１内に他の領域がある場合に当該他の領域の位置を示す情報、フラッシュメモリ１１のタイプを示す情報、メモリシステム１の設定情報等の情報が含まれている。
【００２１】
ここで、メモリシステム１の設定情報は、例えば、１個のメモリシステム１に備えられるフラッシュメモリ１１の数（説明の便宜上、チップ数という。）を示す情報、コマンドのサポート情報、機能のサポート情報などのうちの１以上が含まれてもよい。
本実施形態では、説明の便宜上、メモリコントローラ１２に接続されているフラッシュメモリ１１の数を１個としてあり、つまり、チップ数が１である場合を示す。なお、チップ数が２以上であってもよく、この場合、メモリコントローラ１２は、複数のフラッシュメモリのそれぞれへのイネーブル信号をアサートすることで、一つのフラッシュメモリごとに命令を与える。なお、メモリコントローラ１２が複数のチャネルを使用して２個以上のフラッシュメモリにほぼ同時に命令を与えて、並列で制御してもよい。
【００２２】
ここで、フラッシュメモリ１１内における位置を示す情報は、例えば、フラッシュメモリ１１内におけるアドレスの情報であってもよい。
また、フラッシュメモリ１１のタイプを示す情報は、例えば、フラッシュメモリ１１が有するブロックの数を示す情報、１個のブロックに含まれるページの数を示す情報、１ページに格納することが可能な最大のバイト数を示す情報などを含む。１ページに格納することが可能な最大のバイト数は、ページサイズの大きさと捉えられてもよい。ページサイズは、１ページ当たりのバイト数であり、例えば、４Ｋバイト、８Ｋバイト、１６Ｋバイトなどのページサイズのフラッシュメモリがある。なお、ページサイズが４Ｋバイトという場合、それは名目上の表記であって、実際に格納することができるデータのバイト数は、４Ｋバイトより多いバイト数になっている。
また、フラッシュメモリ１１のタイプを示す情報は、例えば、複数のフラッシュメモリ１１が接続されて使用される場合には、その接続の順序を示す情報を含んでもよい。当該順序を示す情報は、例えば、番号（説明の便宜上、チップ番号という。）であってもよい。
【００２３】
なお、第２領域１１Ｂには、メモリシステム１の初期化以降、少なくとも、フラッシュメモリ１１のタイプを示す情報と、フラッシュメモリ１１内における第１領域１１Ａの位置を示す情報を含む。
【００２４】
第３領域１１Ｃは、ホストシステム２から受信されたユーザデータがメモリコントローラ１２によって書き込まれる物理ブロックの領域である。
【００２５】
ここで、メモリコントローラ１２は、ホストシステム２によって指定される論理アドレスと、フラッシュメモリ１１における物理アドレスとの対応関係を示す情報を記憶部に記憶して管理する。当該記憶部は、例えば、フラッシュメモリ１１内で管理情報を有する管理ブロックであってもよい。
【００２６】
また、第１領域１１Ａ〜第３領域１１Ｃに書き込まれるデータには、書き込まれた領域を識別する情報（説明の便宜上、領域識別情報という。）が書き込まれる。したがって、領域識別情報により、書き込まれているデータの種類（管理情報、ユーザデータなどの種類）を識別することができる。なお、ユーザデータは、ホストシステム２から与えられ、フラッシュメモリ１１に書き込まれるデータである。
【００２７】
ここで、図１では、説明の便宜上、フラッシュメモリ１１の内部に第１領域１１Ａ〜第３領域１１Ｃを示したが、フラッシュメモリ１１の内部に第１領域１１Ａ〜第３領域１１Ｃが生成されていない状態では、フラッシュメモリ１１の内部に第１領域１１Ａ〜第３領域１１Ｃは存在しない。
【００２８】
メモリコントローラ１２は、ホストシステム２から与えられたコマンドに基づいて、フラッシュメモリ１１に対するアクセスを制御する。
メモリコントローラ１２は、プロセッサー１２Ａと、ＲＯＭ１２Ｂと、第１ＲＡＭ１２Ｃと、第２ＲＡＭ１２Ｄと、バッファ１２Ｅと、第１インターフェース１２Ｆと、第２インターフェース１２Ｇを備える。
【００２９】
プロセッサー１２Ａは、メモリシステム１の全体を制御する。プロセッサー１２Ａは、例えば、ＣＰＵ（Central  Processing  Unit）である。なお、プロセッサー１２Ａは、ＣＰＵに代えて、ＦＰＧＡ（Field-Programmable  Gate  Array）等の他のプロセッサーであってもよい。
本実施形態では、メモリコントローラ１２において行われる処理は、プロセッサー１２Ａによって実行される。
【００３０】
ＲＯＭ１２Ｂは、例えばマスクＲＯＭであり、第１ファームウェアが書き込まれるＲＯＭである。この第１ファームウェアは、メモリコントローラ１２がフラッシュメモリ１１に格納されている第２ファームウェアを読み出す必要が生じたときに、プロセッサー１２Ａにより参照される。そして、プロセッサー１２Ａは、第１ファームウェアを読み出して、第１ファームウェアに基づく処理を行う。この第１ファームウェアに基づく処理に、第２ファームウェアを読み出す処理が含まれる。なお、メモリコントローラ１２がフラッシュメモリ１１に格納されている第２ファームウェアを読み出す必要がある場合としては、ホストシステム２が第２ファームウェアを更新した直後プロセッサー１２Ａがその更新した第２ファームウェアを実行するとき等があるが、本実施形態では、起動時を例として説明する。
本実施形態のメモリコントローラ１２では、プロセッサー１２Ａが、ＲＡＭ１２Ｃに保持された第２ファームウェアに基づいて、フラッシュメモリ１１へのアクセスを制御する。しかしながら、起動時には、ＲＡＭ１２Ｃに第２ファームウェアが保持されていないため、フラッシュメモリ１１から第２ファームウェアを読み出す必要がある。また、フラッシュメモリ１１から第２ファームウェアを読み出すためには、フラッシュメモリ１１から管理情報を読み出す必要がある。
【００３１】
例えば、本実施形態では、メモリコントローラ１２に駆動電圧が供給され、プロセッサー１２Ａが正常に動作可能になったタイミングで起動時の処理が開始される。具体的には、ホストシステム２にメモリシステム１が接続されることによって、メモリコントローラ１２に駆動電圧が供給され、その後、起動時の処理が開始される。
【００３２】
第２ＲＡＭ１２Ｄは、第２領域１１Ｂから読み出された管理情報が保持されるＲＡＭである。なお、管理情報は、プロセッサー１２Ａの制御のもと、第２領域１１Ｂから読み出され第２ＲＡＭ１２Ｄに書き込まれる。
また、第２ＲＡＭ１２Ｄは、例えば、プロセッサー１２Ａの作業領域として使用される。
【００３３】
第１ＲＡＭ１２Ｃは、第１領域１１Ａから読み出された第２ファームウェアがプロセッサー１２Ａによって書き込まれるＲＡＭである。また、第１ＲＡＭ１２Ｃは、ホストシステム２から与えられた第３ファームウェアがプロセッサー１２Ａによって書き込まれるＲＡＭでもある。
このように、第１ＲＡＭ１２Ｃは、プロセッサー１２Ａによって実行される第２ファームウェアおよび第３ファームウェアが保持される。
【００３４】
バッファ１２Ｅは、ホストシステム２から送信されてメモリコントローラ１２により受信されたデータを保持する。また、バッファ１２Ｅは、メモリコントローラ１２からホストシステム２へ送信するデータを保持する。
また、バッファ１２Ｅは、フラッシュメモリ１１からメモリコントローラ１２に読み出されたデータを保持する。また、バッファ１２Ｅは、メモリコントローラ１２からフラッシュメモリ１１へ書き込むデータを保持する。
このように、バッファ１２Ｅは、メモリコントローラ１２とホストシステム２との間のデータ転送、およびメモリコントローラ１２とフラッシュメモリ１１との間のデータ転送に使用される。
【００３５】
第１インターフェース１２Ｆは、メモリコントローラ１２とホストシステム２との間を通信可能に接続する。なお、第１インターフェース１２Ｆは、メモリコントローラ１２とホストシステム２との間を通信可能に接続することができるインターフェースであれば、如何なるインターフェースであってもよい。
【００３６】
第２インターフェース１２Ｇは、メモリコントローラ１２とフラッシュメモリ１１との間を接続する。なお、第２インターフェース１２Ｇは、メモリコントローラ１２とフラッシュメモリ１１との間を通信可能に接続することができるインターフェースであれば、如何なるインターフェースであってもよい。
【００３７】
ホストシステム２は、任意の機器であってもよく、一例として、ワークステーション等のように所定のＯＳ（Operating  System）によって動作する産業機器であってもよい。なお、他の例として、ホストシステム２は、産業機器に代えて、ＰＣ（Personal  Computer）等のように家庭用の機器であってもよく、あるいは、多機能携帯電話端末（スマートフォン）等の機器であってもよい。
【００３８】
本実施形態では、メモリシステム１は、ホストシステム２からの要求に応じて、ホストシステム２から受信されたユーザデータをフラッシュメモリ１１に書き込む。また、メモリシステム１は、ホストシステム２からの要求に応じて、フラッシュメモリ１１に書き込まれたユーザデータのうち、当該要求に応じたユーザデータをホストシステム２に送信する。
【００３９】
また、プロセッサー１２Ａは、ＲＯＭ１２Ｂに記憶された第１ファームウェアを読み出し、読み出された第１ファームウェアに基づいてフラッシュメモリ１１に書き込まれている第２ファームウェアを検索する。そして、プロセッサー１２Ａは、フラッシュメモリ１１に書き込まれている第２ファームウェアを検出すると、検出された第２ファームウェアを第１ＲＡＭ１２Ｃに読み出して実行する。これにより、プロセッサー１２Ａは、第２ファームウェアに基づいて、フラッシュメモリ１１へのアクセスを制御する。
【００４０】
一方、プロセッサー１２Ａは、第１ファームウェアに基づいてフラッシュメモリ１１に書き込まれている第２ファームウェアを検索した結果、フラッシュメモリ１１に書き込まれている第２ファームウェアを検出しなかった場合には、エラーを通知するための情報をホストシステム２に送信する。ホストシステム２は、当該情報を受信すると、第３ファームウェアをメモリシステム１に送信する。そして、プロセッサー１２Ａは、ホストシステム２から送信されて第１ＲＡＭ１２Ｃに書き込まれた第３ファームウェアを実行する。この後、ホストシステム２の要求により、メモリコントローラ１２は、第３ファームウェアに基づいてメモリシステム１の初期化を実行する。
【００４１】
なお、他の構成として、メモリシステム１において、第３ファームウェアと同様なメモリシステム１の初期化を実行するためのファームウェア（第４ファームウェア）がＲＯＭ１２Ｂに書き込まれている構成が用いられてもよい。この構成では、プロセッサー１２Ａは、第１ファームウェアに基づいてフラッシュメモリ１１に書き込まれている第２ファームウェアを検索した結果、フラッシュメモリ１１に書き込まれている第２ファームウェアを検出しなかった場合には、ホストシステム２の要求により、ＲＯＭ１２Ｂに書き込まれている第４ファームウェアを実行することで、メモリシステム１の初期化を実行する。
【００４２】
ここで、メモリコントローラ１２は、第１ファームウェアに基づいてフラッシュメモリ１１に書き込まれている第２ファームウェアを検索する場合、最初に、フラッシュメモリ１１の第２領域１１Ｂを検出して管理情報を読み出す。このため、フラッシュメモリ１１に第２領域１１Ｂが生成されていない場合、あるいは、他の原因により管理情報が読み出されない場合には、エラーが発生する。フラッシュメモリ１１に第２領域１１Ｂが生成されていない場合、ホストシステム２の要求により、メモリシステム１の初期化が行われる。他の原因により管理情報が読み出されない場合のリカバリ方法は、ホストシステム２に依存する。
メモリシステム１の初期化では、メモリコントローラ１２は、例えば、フラッシュメモリ１１に第１領域１１Ａ〜第３領域１１Ｃが生成されていない状態から、フラッシュメモリ１１に第１領域１１Ａ〜第３領域１１Ｃを生成する。また、メモリシステム１の初期化では、メモリコントローラ１２は、例えば、管理情報を第２領域１１Ｂに書き込む処理を実行し、その後、ホストシステム２から送信される第２ファームウェアを第１領域１１Ａに書き込む処理を実行する。
【００４３】
また、メモリコントローラ１２が管理情報を読み出した場合においても、第２ファームウェアが壊れているようなときには、エラーが発生する。
フラッシュメモリ１１に保存されているファームウェアが正常に読み出されない場合のリカバリ方法は、ホストシステム２に依存する。
【００４４】
なお、メモリシステム１の初期化は、例えば、メモリシステム１の工場出荷時に行われ、あるいは、メモリシステム１の工場出荷後に、メモリシステム１を使用するユーザなどにより行われる。
【００４５】
ホストシステム２の要求によって第２ファームウェアを更新する場合、メモリコントローラ１２は、ホストシステム２から受信した第２ファームウェアをフラッシュメモリ１１に保存した後、保存した第２ファームウェアを実行する。このために、プロセッサー１２Ａは、ＲＯＭ１２Ｂを参照し、第１ファームウェアを読み出して、第１ファームウェアに基づく処理を行い、当該保存した第２ファームウェアをフラッシュメモリ１１から読み出して第１ＲＡＭ１２Ｃに書き込み、第１ＲＡＭ１２Ｃを参照し、当該更新した第２ファームウェアを実行する。
このとき、フラッシュメモリ１１に保存されている第２ファームウェアが正常に読み出されない場合のリカバリ方法は、ホストシステム２に依存する。
【００４６】
＜フラッシュメモリの構造＞
図２は、実施形態に係るフラッシュメモリ１１のブロックおよびページの構成の一例を示す図である。
フラッシュメモリ１１は、複数であるｎ（ｎは２以上の整数）個のブロックを有する。本実施形態では、説明の便宜上、ｎ個のブロックを、ブロック０〜ブロックｎ−１と呼んで説明する。
それぞれのブロック０〜ｎ−１は、複数であるｍ（ｍは２以上の整数）個のページを有する。本実施形態では、説明の便宜上、ｍ個のページを、ページ０〜ページｍ−１と呼んで説明する。
ブロック０〜ｎ−１は消去単位であり、ページ０〜ｍ−１は読み書き単位である。ページサイズは、１ページのバイト数である。
【００４７】
図３は、実施形態に係るフラッシュメモリ１１のアドレスの構成の一例を示す図である。
図３には、Ｒｏｗアドレス（ロウアドレス）を示してある。本例では、Ｒｏｗアドレスの指定を２バイトで表す場合を示す。Ｒｏｗアドレスは、下位側にページ番号を詰めて、そこから、連続して（１ビットもあけずに）ブロック番号を詰める。残りの上位ビットは、フラッシュメモリ１１によって判断されず、通常は“０”値が設定される。
【００４８】
ここで、Ｒｏｗアドレスの指定を２進数で“００００  ００００  １０００  ００００”とした場合に、１個のブロック当たりのページ数が６４、１２８、あるいは、２５６のフラッシュメモリ１１のどこのページに指定するかを説明する。まず、１個のブロック当たりのページ数が６４ページであるフラッシュメモリ１１では、当該Ｒｏｗアドレスはブロック番号２の物理ブロック内のページ番号０のページを指定する。１個のブロック当たりのページ数が１２８ページであるフラッシュメモリ１１では、当該Ｒｏｗアドレスはブロック番号１の物理ブロック内のページ番号０のページを指定する。１個のブロック当たりのページ数が２５６ページであるフラッシュメモリ１１では、当該Ｒｏｗアドレスはブロック番号０の物理ブロック内のページ番号１２８のページを指定する。
【００４９】
１ページのＣｏｌｕｍｎアドレス（コラムアドレス）をバイト単位で、０〜ｚ−１とする。ページサイズは、ｚバイトとなる。
ページサイズが６４Ｋバイトまで２バイトのアドレスである。
フラッシュメモリ１１では、アドレス指定は、例えば、上位の３バイトのＲｏｗアドレスと、下位の２バイトのＣｏｌｕｍｎアドレスとの組み合わせとなる。
【００５０】
本実施形態で使用されるフラッシュメモリ１１では、例えば、読み出しのプロトコルが規定されており、メモリコントローラ１２は当該プロトコルに対応している。当該プロトコルは、例えば、第一コマンド、読み出し開始のアドレス、第二コマンドの順にフラッシュメモリ１１へ送信して、フラッシュメモリ１１のビジー信号がネゲートするのを待ち、フラッシュメモリ１１からデータを読み出す。
本実施形態で使用されるフラッシュメモリ１１では、例えば、ページのアドレス（Ｒｏｗアドレス）が連続している範囲が規定されており、メモリコントローラ１２は当該範囲に対応している。当該範囲は、例えば、ブロックの数が２のべき乗ではない場合には、途中で途切れる。
本実施形態では、１個のブロック当たりのページ数は、２のべき乗個である。
【００５１】
＜ページフォーマット＞
本実施形態では、管理情報およびユーザデータのそれぞれについて、１ページ内におけるフォーマットがページフォーマットとして定められている。
各ページには、例えば、ブロック情報であるＢＩ、誤り訂正符号（ＥＣＣ：Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）、データが含まれる。
ページフォーマットでは、例えば、ＢＩとＥＣＣとデータについて、位置およびサイズが規定される。
なお、ページフォーマットにおいて、ページサイズは任意であってもよい。
また、データは、ホストシステム２によってセクタ単位で管理されており、当該セクタ単位のバイト数であれば任意のバイト数であってもよい。当該セクタ単位は、５１２バイトである。
ユーザデータの領域については、さらに、１ページのセクタ数が２のべき乗である場合に、ユーザデータの領域を管理し易い。
【００５２】
図４は、実施形態に係る管理情報のページフォーマット１１１の一例を示す図である。
管理情報は、ブロック情報であるＢＩと、０番目からｘ−１（実施形態では、ｘ−１は１以上の整数）番目のデータと、０番目からｘ−１番目の誤り訂正符号（ＥＣＣ）を含む。
これらは、ＢＩ、０番目のデータ、０番目のＥＣＣ、１番目のデータ、１番目のＥＣＣ、・・・、ｘ−１番目のデータ、ｘ−１番目のＥＣＣという順序で配置されている。
ここで、図４および本実施形態では、説明の便宜上、ｉ（ｉは０からｘ−１までの整数）番目のデータを「ＭＤ  ＳＣＴｉ」と示し、ｉ番目のＥＣＣを「ＥＣＣ  Ａｉ」と示す。
本実施形態では、任意のｉについて、データｉの長さ（バイト数）が同じであり、ＥＣＣｉの長さが同じである。
【００５３】
ここで、管理情報の先頭では、ＢＩおよびデータ０の並びの部分の直後にＥＣＣ０が付加されている。つまり、ＢＩおよびデータ０の部分が、ＥＣＣ０によって、誤り訂正される。
また、ｉ＝１〜ｘ−１については、データｉの直後にＥＣＣｉが付加されている。つまり、データｉが、ＥＣＣｉによって誤り訂正される。
「ＭＤ  ＳＣＴｉ」は、管理情報におけるｉ番目のセクタを表す。
「ＥＣＣ  Ａｉ」は、「ＭＤ  ＳＣＴｉ」の直後に配置されるＥＣＣデータである。
【００５４】
図５は、本実施形態に係るユーザデータのページフォーマット１２１の一例を示す図である。
ページデータは、ブロック情報であるＢＩと、０番目からｙ−１（実施形態では、ｙ−１は１以上の整数）番目のデータと、０番目から（ｙ−２）／２番目の誤り訂正符号（ＥＣＣ）を含む。
これらは、ＢＩ、０番目のデータ、１番目のデータ、０番目のＥＣＣ、２番目のデータ、３番目のデータ、１番目のＥＣＣ、・・・、ｙ−２番目のデータ、ｙ−１番目のデータ、（ｙ−２）／２番目のＥＣＣという順序で配置されている。
ここで、図５および本実施形態では、説明の便宜上、ｊ（ｊは０からｙ−１までの整数）番目のデータを「ＵＤ  ＳＣＴｊ」と示し、ｋ（ｋは０から（ｙ−２）／２までの整数）番目のＥＣＣを「ＥＣＣ  Ｂｋ」と示す。
本実施形態では、任意のｊについて、データｊの長さ（バイト数）が同じである。本実施形態では、任意のｋについて、ＥＣＣｋの長さが同じである。
【００５５】
「ＵＤ  ＳＣＴｊ」は、ユーザデータの該当ページに保存されたｊ番目のセクタを表す。
「ＥＣＣ  Ｂｋ」は、「ＭＤ  ＳＣＴ２ｋ＋１」の直後に配置されるＥＣＣデータである。
【００５６】
管理情報は、メモリシステム１を構築するために必要な情報のため、管理情報が読み出せないと、メモリシステム１が動作しない。そのため、管理情報には、より高い訂正能力が要求される。
ユーザデータは、フラッシュメモリ１１のページ内のセクタ数を少なくすると、フラッシュメモリ１１に記憶されるデータ容量が小さくなってしまうので、フラッシュメモリ１１に要求される訂正能力より低くならないＥＣＣで、フラッシュメモリ１１の規定のページ内のセクタ数を設定する必要がある。例えば、フラッシュメモリ１１のページサイズが８Ｋバイトであれば、一つのページに１６セクタが要求される。
一方、管理情報は、ユーザデータよりも少ないセクタ数、例えば、３セクタなので、ＥＣＣ自体のバイト数を大きくできる。ＥＣＣは、訂正方式が同じであれば、ＥＣＣ自体のバイト数が大きい方が訂正可能なビット数が多くなる。また、管理情報は、少ないデータのバイト数に対して一つのＥＣＣを割り当てることができるので、管理情報のＥＣＣの訂正能力は、ユーザデータのＥＣＣの訂正能力よりも高いものが搭載できる。
【００５７】
具体例として、管理情報のページフォーマット１１１では５１２バイトなどの情報ごとにＥＣＣが付加され、ユーザデータのページフォーマット１２１では１０２４バイトなどの情報ごとにＥＣＣが付加される構成が用いられてもよい。なお、ＢＩを含めたデータに対してＥＣＣが付加される場合には、当該ＥＣＣに対応するバイト数がＢＩの分だけ多くなる。
この場合、管理情報とユーザデータで同じ訂正ビット数のＥＣＣとしても、誤り訂正するデータ量が少ない管理情報の方が高い訂正能力となる。
したがって、管理情報には、メモリコントローラ１２がサポートしている最大のＥＣＣ訂正能力が使用される。
ユーザデータのＥＣＣによる訂正能力は、フラッシュメモリ１１ごとに異なり得る。
また、ページサイズは、フラッシュメモリ１１ごとに異なり得る。
ユーザデータでは、例えば、要求される訂正能力以上のＥＣＣが確保されても１ページ内に規定のセクタ数が収容可能である場合には、１個のセクタごとに１個のＥＣＣが設けられてもよい。
【００５８】
第２ファームウェアが保存される領域のページフォーマットは、図４に示されるページフォーマット１１１または図５に示されるページフォーマット１２１のいずれかと同じであってもよく、あるいは、別のページフォーマットであってもよい。
また、テーブルのデータが保存される領域のページフォーマットは、図４に示されるページフォーマット１１１または図５に示されるページフォーマット１２１のいずれかと同じであってもよく、あるいは、別のページフォーマットであってもよい。テーブルのデータは、管理情報およびユーザデータ以外のデータであり、ユーザデータの論理アドレスと物理アドレスとの対応関係を表す。
別のページフォーマットでは、例えば、ｘの値、ｙの値、ＥＣＣの訂正能力などが異なってもよい。
【００５９】
ホストシステム２では、データを論理セクタの単位で管理する。このため、ホストシステム２により制御されるフラッシュメモリ１１内のデータは、すべて、物理セクタの単位で管理されるように、統一される。１個のセクタのバイト数は、例えば、５１２バイトである。
ユーザデータのページフォーマット１２１は、要求されるＥＣＣの訂正能力、ページサイズに基づいて計算される。例えば、物理セクタの数は、ページサイズが８Ｋバイトのフラッシュメモリの場合、１６個となる。
本実施形態では、管理情報のページフォーマット１１１は、フラッシュメモリ１１のタイプに依存せずに同じになっている。さらに、本実施形態では、管理情報は、フラッシュメモリ１１のサポートされるすべてのフラッシュメモリタイプのうちで、最小のページサイズに設定可能な構成とされている。
【００６０】
なお、本実施形態では、管理情報のページフォーマット１１１とユーザデータのページフォーマット１２１とが異なる場合を示したが、他の構成例として、管理情報のページフォーマット１１１とユーザデータのページフォーマット１２１とが同じである構成が用いられてもよい。
【００６１】
一例として、管理情報のページフォーマット１１１に対して、ユーザデータなどの他のデータのページフォーマット（ページフォーマット１２１など）が異なる場合には、メモリコントローラ１２は、フラッシュメモリ１１に存在する各ページのページフォーマットが管理情報のページフォーマット１１１と一致するか否かに基づいて、当該各ページが管理情報を含むか否かを判定することが可能である。つまり、メモリコントローラ１２は、フラッシュメモリ１１に存在するあるページのページフォーマットが管理情報のページフォーマット１１１と一致する場合には、当該ページが管理情報を含むと判定し、一方、フラッシュメモリ１１に存在するあるページのページフォーマットが管理情報のページフォーマット１１１と一致しない場合には、当該ページが管理情報を含まないと判定する。
ここで、あるページフォーマットが所定のページフォーマットであるか否かを判定する方法としては、特に限定はない。一例として、あるページフォーマットが所定のページフォーマットであるとみなしてＥＣＣを用いた誤り訂正を行ったときに正常に誤り訂正されたと判定した場合に、当該あるページフォーマットが当該所定のページフォーマットであると判定する方法が用いられてもよい。他の例として、あるページフォーマットを特定する情報が所定のページフォーマットを特定する情報と一致すると判定した場合に、当該あるページフォーマットが当該所定のページフォーマットであると判定する方法が用いられてもよい。
【００６２】
ここで、管理情報を更新する例を示す。管理情報は、管理ブロックに書き込まれる。
メモリコントローラ１２は、管理情報が更新されるとき、または、読み出した管理情報に規定のエラー条件を満たしたときに管理情報の書き込みを行う。
例えば、管理ブロックの現在有効な管理情報が書かれているページの次のページが存在するなら、当該ページに管理情報が書き込まれる。
例えば、管理ブロックの現在有効な管理情報が書かれているページの次のページが存在しなければ、予備のブロックに管理情報が書き込まれる。
例えば、第２ファームウェアが保存されているブロックが書き込みエラーなどにより使用できなくなったとき、メモリコントローラ１２が新しいブロックに第２ファームウェアを書き込む場合がある。この場合、メモリコントローラ１２は、予備のブロックに管理情報を書き込む。
したがって、管理ブロックのどのページの管理情報も、第２ファームウェアを保存するブロックのアドレス情報は同じになる。また、第２ファームウェアを読み出すために必要な他の情報（フラッシュメモリのタイプなど）は、メモリシステム１の初期化で設定した後、途中で変更されることはない。このため、現在有効な管理ブロックでは、任意のページの管理情報が読み出されても、第２ファームウェアを読み出すことが可能である。つまり、一つの管理ブロックでは、任意のページの管理情報が読み出されても、第２ファームウェアを読み出すために必要な情報は同じである。これは、管理情報の検索ですべての管理ブロックのすべてのページを検索するのではないので、第２ファームウェアを保存するブロックのアドレス情報が管理ブロックの途中ページで変更されると、検索できなくなることがあるためである。現在有効な管理ブロックに書き込まれている管理情報を検索すれば、第２ファームウェアを読み出すために必要な情報を取得できる。
予備のブロックは、メモリシステム１の初期化で管理ブロックと一緒に生成され、管理ブロックとして使用できるブロックである。管理ブロックへの書き込みで、現在有効な管理ブロックに書き込めなくなったとき、予備のブロックの先頭ページに管理情報を書き込む。これによって、管理情報が書き込まれた予備のブロックが現在有効な管理ブロックになり、以前の管理ブロックが予備のブロックになる。当該以前の管理ブロックは、消去を行わない。予備のブロックは、先頭ページにデータを書き込むときに消去を行う。
データの消去がブロックの先頭ページにデータを書き込む前に行われるため、消去前における電源遮断は問題ない。メモリコントローラ１２が現在有効な管理ブロックから管理情報を読み出せないとき、予備ブロックの管理情報を読み出すようにするために、予備のブロックは、書き込みの前に消去する。
フラッシュメモリ１１のブロックは、書き込みエラーまたは、消去エラーなどが発生すると、使用できなくなる。
【００６３】
ここで、複数の管理情報が検出される場合の例を示す。
例えば、メモリコントローラ１２が、コピーブロックを生成して、データが二重化された場合がある。この場合、同じ管理情報が二つ検出されるが、コピーブロックのデータとコピー元のブロックのデータとは同じであるため、メモリコントローラ１２は、いずれのデータを読み出してもよい。
例えば、予備のブロックの先頭ページに管理情報を書き込んだ場合、以前の管理ブロックのデータは、消去されないので、異なる管理情報が検出される。
例えば、管理情報を検索するとき、１個のブロック当たりのページ数が１２８で、ページの検索間隔が６４の場合、同じブロックに対してページ０および、ページ６４を検出するので、どちらのページにも管理情報が存在すると、異なる管理情報が検出される。
これに関して、ページ数が大きいブロックでは、最後のページまで書かずに、書き込むページ数を制限することが行われている。つまり、管理情報を書き込む範囲を最小ページ数のブロックのページ数に合わせれば、大きいページ数のブロックの途中ページが検索されても消去状態であるため、管理情報無しの状態になる。
メモリコントローラ１２は、メモリシステム１の初期化で、管理ブロックとして、４個のブロックを選択し、２個ずつのペアで情報を書き込む。これらのブロックが使用できなくなっても、メモリコントローラ１２は、新たにブロックを追加しない。メモリコントローラ１２が管理ブロックを選択する範囲は、起動時などに検索することができる範囲である。
【００６４】
このため、メモリコントローラ１２は、例えば、それぞれの管理ブロックに、管理情報を書き込むごとにインクリメントする情報を書き込む。当該情報は、例えば、１、２、３、・・・といった番号（説明の便宜上、更新番号という。）であってもよい。この場合、検索した管理情報の中で最大の更新番号を持つ管理情報は、現在有効な管理ブロックの中に存在することを示す。つまり、この検索した管理情報の中で最大の更新番号を持つ管理情報は、現在有効な管理情報が持つ第２ファームウェアを読み出すために必要な情報と同じ情報を持つことになる。これにより、メモリコントローラ１２は、フラッシュメモリ１１に複数の管理情報が存在する場合においても、現在有効な管理情報が持つ第２ファームウェアを読み出すために必要な情報を取得することができる。なお、二重化されてコピーブロックがある場合、コピーブロックとコピー元のブロックとで同じ更新番号が書き込まれる。
管理情報は、ページ単位で一つのデータであるため、ページ単位で更新される。このため、更新番号は、ページごとに必ず書き込まれる。
【００６５】
＜ＢＩ、ＥＣＣ、データ＞
ＢＩは、当該ＢＩが含まれるページのデータに関する情報を含む。ＢＩには、例えば、最小限の情報として、領域識別情報が含められる。さらに、ＢＩには、更新番号が含められると好ましい。ＢＩのバイト数は、例えば、メモリコントローラ１２ごとに規定される。
なお、図４および図５の例では、ＢＩがブロックの先頭（ページの先頭）に配置される場合を示したが、ＢＩはブロック内の他の位置（ページ内の他の位置）に配置されてもよい。例えば、ＢＩは、データ０の直後に配置されてもよく、あるいは、ＥＣＣ０以降の任意の箇所に配置されてもよい。
検索時には、読み出す管理情報は、必ずしもすべてのセクタでなくてもよく、第２ファームウェアを読み出すために必要な情報があるセクタおよびＢＩだけであってもよい。ＢＩと一緒のＥＣＣであるセクタに第２ファームウェアを読み出すために必要な情報が含められればよい。さらに、ここに、領域識別情報、更新番号があればより好ましい。なお、ＢＩ自体がなくてもよく、セクタのデータに領域識別情報、更新番号が含まれてもよい。
【００６６】
ＥＣＣは、ＢＩとデータについて誤り訂正を行うための情報である。訂正能力によって、ＥＣＣのバイト数が異なる。図１の例では、例えば、第１領域１１Ａ〜第３領域１１ＣのそれぞれごとにＥＣＣの訂正能力が異なってもよく、あるいは、第１領域１１Ａ〜第３領域１１Ｃのうちの２つ以上についてＥＣＣの訂正能力が同じであってもよい。
具体例として、８ビットの訂正能力を持つＥＣＣでは、８ビット以下の誤りについては誤りのビット位置が把握されて正常に誤り訂正がなされるが、９ビット以上の誤りについては正常に誤り訂正を行うことができない。
メモリコントローラ１２は、ＥＣＣデコードの結果によって読み出したデータを訂正するまたは、訂正不可能を通知する。なお、消去状態（すべて１値）を読み出したとき、訂正不可能を通知するようにＥＣＣデコーダを作成すると、管理情報の検索で消去状態のページを読み出したときに管理情報でないと判断できる。
メモリコントローラ１２は、フラッシュメモリ１１のサポートするフラッシュメモリのタイプが複数あり、それぞれのフラッシュタイプによって要求される訂正能力が異なるものがあるため、複数のＥＣＣを使用する機能を有する。
【００６７】
ＢＩは、セクタデータに比べてバイト数が小さいので、隣接するセクタデータと一緒にＥＣＣを割り当てる。他の例として、ＢＩに単独でＥＣＣが付けられてもよい。この場合、ＢＩに対するＥＣＣの回路を作成する必要があり、ページにＢＩに対するＥＣＣ領域が必要となる。
【００６８】
本実施形態では、第１領域１１Ａ〜第３領域１１Ｃのそれぞれに保存されるデータには、データの種類を識別する情報である領域識別情報が含まれる。
領域識別情報は、ページフォーマット１１１、１２１において、例えば、ＢＩに含まれてもよく、データに含まれてもよく、あるいは、これらの両方に含まれてもよい。
また、第２領域１１Ｂについては、領域識別情報は、例えば、管理情報とは別体であってもよく、あるいは、管理情報と一体化されてもよい。
ここで、データの種類を識別する領域識別情報は、それぞれの領域に書き込まれているデータの種類を示す。
例えば、管理情報を識別する領域識別情報は、書き込まれているデータが管理情報であることを識別する。また、管理情報以外のデータの領域識別情報についても同様に、それぞれの書き込まれているデータの種類を識別する。
【００６９】
＜管理ブロック＞
管理ブロックは、管理情報を書き込むブロックで、当該管理情報は、当該管理ブロックに１ページ単位に書き込まれる。例えば、管理情報の領域識別情報、更新番号が同時に書き込まれる。
例えば、管理ブロックにおいて、最初はページ０に管理情報が書き込まれるが、当該管理情報の内容が更新されるときにはページ１に新たな管理情報が書き込まれる。同様にページ１の後にはページ２に新たな管理情報が書き込まれ、以降も同様である。
管理情報は、主に、当該管理情報の内容が更新されるときに更新される。また、リカバリ処理として、管理情報は、読み出された当該管理情報のデータが規定のエラー条件を満たす場合に、更新される。
ここで、管理ブロックにおける更新回数は、任意に規定されてもよい。更新回数は、例えば、管理ブロックの最初のページから最後のページまでの回数でもよく、あるいは、管理ブロックに含まれるページの数に関わらず、所定のページ番号までの回数であってもよい。
【００７０】
管理ブロックは、例えば、コピーの管理ブロックが設けられ、これにより、同一の内容の管理ブロックが２個存在する。さらに、予備の２個の管理ブロックが設けられる。このような場合、管理ブロックとして識別されるブロックはフラッシュメモリ１１に４個存在することになる。
これら４個の管理ブロックが存在する状態は、初期状態であり、例えば、最大数である。なお、このような管理ブロックの数は、理論上は、さらに多くてもよいが、多くなるほどユーザデータを保存する領域が小さくなる。
予備のブロックには、無効な情報が書かれており、具体的には、情報が消去されているか、あるいは、古い管理情報が存在する。
【００７１】
＜複数のタイプのフラッシュメモリ＞
実施形態では、図６〜図８に示される３個の異なるタイプのフラッシュメモリ２１１、３１１、４１１を例として説明する。
異なるタイプのフラッシュメモリ２１１、３１１、４１１では、当該フラッシュメモリ２１１、３１１、４１１の領域に生成されるブロックのサイズが異なる。図６〜図８の例では、ブロックのサイズが異なる場合として、１個のブロックに含まれるページの数が異なる場合を例として説明する。
なお、フラッシュメモリ２１１、３１１、４１１について、読み出し命令と、少なくともＲｏｗアドレスのアドレス指定は、インターフェースが同じであり、データ読み出しのプロトコルが同じである。つまり、これらは、メモリコントローラ１２から見て同じ方法で読み出すことができる。
なお、使用される信号が異なるデータは読み出すことができない。ただし、フラッシュメモリ１１の端子位置が違っても、メモリコントローラ１２との接続ができていれば、データを読み出すことができる。
【００７２】
図６は、実施形態に係る第１タイプのフラッシュメモリ２１１の領域の一例を示す図である。
図７は、実施形態に係る第２タイプのフラッシュメモリ３１１の領域の一例を示す図である。
図８は、実施形態に係る第３タイプのフラッシュメモリ４１１の領域の一例を示す図である。
【００７３】
ここで、図６〜図８の例では、第１タイプのフラッシュメモリ２１１と、第２タイプのフラッシュメモリ３１１と、第３タイプのフラッシュメモリ４１１とでは、１個のブロックに含まれるページの数が異なっている。
具体的には、図６に示される第１タイプのフラッシュメモリ２１１では、同じサイズの複数のブロックが生成されており、１個のブロックに６４ページが含まれる。また、図７に示される第２タイプのフラッシュメモリ３１１では、同じサイズの複数のブロックが生成されており、１個のブロックに１２８ページが含まれる。また、図８に示される第３タイプのフラッシュメモリ４１１では、同じサイズの複数のブロックが生成されており、１個のブロックに２５６ページが含まれる。
【００７４】
本実施形態では、管理情報のページフォーマット１１１については、第１タイプのフラッシュメモリ２１１と、第２タイプのフラッシュメモリ３１１と、第３タイプのフラッシュメモリ４１１とで、同一のページフォーマットが用いられている。
なお、管理情報以外のユーザデータなどのページフォーマットについては、第１タイプのフラッシュメモリ２１１と、第２タイプのフラッシュメモリ３１１と、第３タイプのフラッシュメモリ４１１とで、例えば、同一のページフォーマットが用いられてもよく、あるいは、異なるページフォーマットが用いられてもよい。
【００７５】
図６に示される第１タイプのフラッシュメモリ２１１では、先頭からの６４ページが１個目のブロックを構成し、それに続く６４ページが２個目のブロックを構成し、それ以降も同様である。
それぞれのブロックに保存されているデータには、当該データが第１領域１１Ａ〜第３領域１１Ｃのうちのいずれのデータを保存しているかを識別する領域識別情報が書き込まれている。
本実施形態では、第１領域１１Ａ〜第３領域１１Ｃのすべての領域において、各ブロックにおける先頭ページ２２１〜２２４およびそれに続く各ページの同じ位置に領域識別情報２３１〜２３４が配置されている場合を示す。
なお、領域識別情報は、データフォーマットが異なる場合には、他のデータを読み出せないため、存在しなくてもよい。一方、データフォーマットが同じである場合には、領域識別情報でチェックするため、同じ位置に配置される。
また、フラッシュメモリ２１１において、複数のブロックのうちで１個以上のブロックが第２領域１１Ｂとして割り当てられており、第２領域１１Ｂにおける一定の位置に領域識別情報が書き込まれている。本実施形態では、第２領域１１Ｂは１個の管理ブロックである。なお、フラッシュメモリ２１１には４個の管理ブロックが存在し得るが、本例では、現在有効な１個の管理ブロックを示して説明している。
【００７６】
図７に示される第２タイプのフラッシュメモリ３１１では、先頭からの１２８ページが１個目のブロックを構成し、それに続く１２８ページが２個目のブロックを構成し、それ以降も同様である。
それぞれのブロックに保存されているデータには、当該データが第１領域１１Ａ〜第３領域１１Ｃのうちのいずれのデータを保存しているかを識別する領域識別情報が書き込まれている。
本実施形態では、第１領域１１Ａ〜第３領域１１Ｃのすべての領域において、各ブロックにおける先頭ページ３２１〜３２２およびそれに続く各ページの同じ位置に領域識別情報３３１〜３３２が配置されている場合を示す。
なお、領域識別情報は、データフォーマットが異なる場合には、他のデータを読み出せないため、存在しなくてもよい。一方、データフォーマットが同じである場合には、領域識別情報でチェックするため、同じ位置に配置される。
また、フラッシュメモリ３１１において、複数のブロックのうちで１個以上のブロックが第２領域１１Ｂとして割り当てられており、第２領域１１Ｂにおける一定の位置に領域識別情報が書き込まれている。本実施形態では、第２領域１１Ｂは１個の管理ブロックである。なお、フラッシュメモリ３１１には４個の管理ブロックが存在し得るが、本例では、現在有効な１個の管理ブロックを示して説明している。
【００７７】
図８に示される第３タイプのフラッシュメモリ４１１では、先頭からの２５６ページが１個目のブロックを構成し、それに続く２５６ページが２個目のブロックを構成し、それ以降も同様である。
それぞれのブロックに保存されているデータには、当該データが第１領域１１Ａ〜第３領域１１Ｃのうちのいずれのデータを保存しているかを識別する情報（領域識別情報）が書き込まれている。
本実施形態では、第１領域１１Ａ〜第３領域１１Ｃのすべての領域において、各ブロックにおける先頭ページ４２１およびそれに続く各ページの同じ位置に領域識別情報４３１が配置されている場合を示す。
なお、領域識別情報は、データフォーマットが異なる場合には、他のデータを読み出せないため、存在しなくてもよい。一方、データフォーマットが同じである場合には、領域識別情報でチェックするため、同じ位置に配置される。
また、フラッシュメモリ４１１において、複数のブロックのうちで１個以上のブロックが第２領域１１Ｂとして割り当てられており、第２領域１１Ｂにおける一定の位置に領域識別情報が書き込まれている。本実施形態では、第２領域１１Ｂは１個の管理ブロックである。なお、フラッシュメモリ４１１には４個の管理ブロックが存在し得るが、本例では、現在有効な１個の管理ブロックを示して説明している。
【００７８】
図６〜図８の例のように、各ブロックの先頭ページ以外のページにも領域識別情報が配置される。これにより、メモリコントローラ１２によって先頭以外の途中のページを検索したときにおいても、領域の識別が可能である。これは、例えば、メモリコントローラ１２によって先頭ページを読み出せないが途中のページを読み出せる場合に有効である。
【００７９】
図６〜図８の例のように、１個のフラッシュメモリ１１（図６〜図８の例では、フラッシュメモリ２１１、３１１、４１１）に管理情報が書き込まれている。そして、メモリコントローラ１２によってフラッシュメモリ１１にアクセスする領域の順番が決まっている。本実施形態では、１番目にアクセスされる領域に管理ブロックが割り当てられている。メモリコントローラ１２は、１番目に先頭の領域のブロックにアクセスするが、先頭の領域のブロックに管理情報があってもその情報が検索できる管理情報のうちで最新とは限らないため、検索範囲をすべて検索する。
【００８０】
ここで、検索範囲の設定方法の例を示す。
サポートするすべてのフラッシュのタイプのフラッシュメモリ１１の検索するすべてのブロックで、少なくともページ０を読み出せる開始Ｒｏｗアドレスとページ間隔を決める。ページ間隔は、サポートするすべてのフラッシュのタイプのフラッシュメモリ１１の１個のブロック当たりのページ数の最大公約数とする。
検索開始の箇所は、サポートするすべてのフラッシュのタイプのフラッシュメモリ１１で、任意のブロックのページ０になるＲｏｗアドレスとする。Ｒｏｗアドレス０（ブロック０のページ０）から検索を開始すると処理が簡単である。
検索数は、サポートするすべてのフラッシュのタイプのフラッシュメモリ１１のうち、１個のブロック当たりのページ数が最大のもので、何ブロック分と決める。当該検索数が小さすぎると、サポートするすべてのフラッシュのタイプのフラッシュメモリ１１のうち、１個のブロック当たりのページ数が最大のもので、メモリシステム１の初期化で管理ブロックを生成するとき、規定数を満たさないことがある。また、当該検索数が大きすぎると、検索時間が長くなってしまう。
例えば、１個のブロック当たり６４ページ、１２８ページ、２５６ページをサポートした場合、６４ページのフラッシュメモリ１１でブロック１から検索すると、１２８ページまたは２５６ページのフラッシュメモリ１１では、ブロック０のページ６４からとなり、無駄な検索から開始される。
検索するすべてのページは、サポートするすべてのフラッシュのタイプのフラッシュメモリ１１で実際に存在するアドレスになるようにする。
例えば、１個のブロック当たり６４ページ、１２８ページ、２５６ページをサポートした場合、６４ページのフラッシュメモリ１１が一つのチップ内に１０２４ブロックあり（ブロック番号は０から１０２３）、２５６ページのフラッシュメモリ１１で検索するブロックの一つをブロック２５６とすると、６４ページのフラッシュメモリ１１では、ブロック１０２４となり、存在しないブロックのため無駄な検索となる。
なお、検索の順序は、例えば、Ｒｏｗアドレスが大きい方から小さい方へ行うことも可能である。
【００８１】
なお、フラッシュメモリ１１の領域に対する検索は、例えば、当該フラッシュメモリ１１の一つのＥＣＣで誤り訂正する範囲ごとの単位で行われてもよい。
また、各ページに所定数のセクタが存在する場合に、検索は、例えば、検索対象の情報が書き込まれることが定められたセクタを含む一つのＥＣＣで誤り訂正する範囲のみに対して行われてもよい。検索対象の情報のすべてが当該セクタに含まれる構成とすると、当該情報の読み出し時間が短くなる。このようなセクタは、任意のセクタであってもよく、例えば、各ページの先頭のセクタであってもよい。また、１ページに含まれるセクタの数は、任意の数であってもよく、例えば、３個であってもよい。
【００８２】
管理情報の検索時において、メモリコントローラ１２は、管理情報を検出することが可能であれば、フラッシュメモリ１１の領域に存在するすべての情報を読み出す必要はなく、例えば、フラッシュメモリ１１から第２ファームウェアを読み出すために必要な情報だけを読み出せばよい。
一例として、図４に示される管理ブロックのページフォーマット１１１が用いられる場合、メモリコントローラ１２は、先頭にあるＢＩとデータ０とＥＣＣ０の領域部分を読み出して、正常に誤り訂正ができるか否かを判定することで、対象としているデータが管理情報であるか否かを判定してもよい。
【００８３】
＜複数のフラッシュメモリの取り付け＞
本実施形態では、１個のメモリシステム１に複数のフラッシュメモリ１１が備えられてもよい。
例えば、メモリシステム１にＬ（Ｌは２以上の整数）個のフラッシュメモリが備えられる場合、Ｌ個のフラッシュメモリ１１のそれぞれに異なるチップ情報が設定される。当該チップ情報としては、例えば、チップ番号が用いられる。本例では、チップ番号は、例えば、０、１、２、・・・、（Ｌ−１）となる。１個のメモリシステム１に備えられるフラッシュメモリの最大数としては、任意の数であってもよく、例えば、１６であってもよい。
メモリコントローラ１２は、複数のフラッシュメモリ１１が備えられる場合、それぞれのフラッシュメモリ１１のチップ番号によって、それぞれのフラッシュメモリ１１を識別し、それぞれのフラッシュメモリ１１へのアクセスを制御する。
【００８４】
このように１個のメモリシステム１で複数のフラッシュメモリ１１が備えられる場合には、例えば、メモリコントローラ１２により管理情報を検索する対象とする１以上のフラッシュメモリ１１が設定される。管理情報を検索する対象とする１以上のフラッシュメモリ１１は、例えば、一部のフラッシュメモリ１１であってもよく、あるいは、すべてのフラッシュメモリ１１であってもよい。
検索時に読み出されるセクタの数は、チップの数に関わらず、同じである。
ここで、管理情報の検索時は、メモリコントローラ１２に接続されているフラッシュメモリ１１のタイプが不明であるが、接続されているチップの数も不明であるため、チップ番号が０であるフラッシュメモリ１１の接続を必須として、常にチップ番号が０であるフラッシュメモリ１１だけから検索した方が確実であり簡易である。なお、メモリコントローラ１２では、いずれのチップ番号にフラッシュメモリ１１が接続されているかをチェックすることができるため、例えば、チップ番号が０であるフラッシュメモリ１１が接続されていないと判定した場合にエラー終了としてもよい。
他の例として、メモリコントローラ１２では、複数のチップ番号について並列でフラッシュメモリ１１からの読み出しを行うことで、複数のチップ番号についてフラッシュメモリ１１の検索を短時間で行うことが可能である。
【００８５】
＜管理情報および領域識別情報の書き込み＞
メモリコントローラ１２は、フラッシュメモリ１１にデータを書き込むときに、必ず、領域識別情報を書き込む。
本実施形態では、メモリコントローラ１２は、フラッシュメモリ１１から領域識別情報を読み出すとき、所定のページ数ごとの単位で、所定の領域部分の情報を参照し、領域識別情報が存在するか否かを判定する。
【００８６】
図６〜図８の例では、メモリコントローラ１２は、フラッシュメモリ１１から領域識別情報を読み出すとき、フラッシュメモリ１１の領域の先頭から６４ページごとの単位で、領域識別情報が存在するか否かを判定する。
この場合、図６〜図８に示されるいずれのタイプのフラッシュメモリ１１（フラッシュメモリ２１１、３１１、４１１）においても、フラッシュメモリ１１の領域の先頭から６４ページごとの単位のなかでは同じ位置に領域識別情報が配置され、６４ページごとの単位で検索されると同じ位置に領域識別情報が存在することとなる。
なお、管理情報についても、領域識別情報と同様である。
【００８７】
＜管理情報の読み出しの処理の手順＞
図９は、実施形態に係る管理情報の読み出しの処理の手順の一例を示す図である。メモリコントローラ１２は、フラッシュメモリ１１に保存された管理情報を検索する。
本実施形態では、フラッシュメモリ１１として、複数の異なるタイプのフラッシュメモリ２１１、３１１、４１１が取り付けられることが可能である。
また、本実施形態では、メモリコントローラ１２は、ページの単位で情報の書き込みおよび読み出しを行い、また、ブロックの単位で情報の消去を行う。
また、管理情報、領域識別情報と更新番号は、同時に（ここでは、一度の書き込み処理で一緒に）書き込みが行われる。
【００８８】
メモリコントローラ１２には、所定の検索範囲と、メモリシステム１の初期化で管理ブロックを選択する範囲が設定される。所定の検索範囲は、本実施形態においてメモリコントローラ１２が管理情報を検索する範囲である。所定の検索範囲としては、所定のページ数のブロックを用いて、連続した複数のブロックの範囲が設定される。
メモリコントローラ１２は、メモリシステム１の初期化で管理ブロックのブロックを決める際に、検索範囲のなかで管理ブロックのブロックを決める。これにより、管理ブロックは検索範囲に含まれることになる。
なお、本実施形態では、検索範囲はＲｏｗアドレスを用いて決められている。このため、１個のブロック当たりのページ数が小さいフラッシュメモリ１１の方が、実際に検索されるブロックの数は大きくなる。
【００８９】
以降の処理は、メモリコントローラ１２が複数のフラッシュメモリ１１に対して並列の読み出しを行わない方法の例である。
【００９０】
（ステップＳ１）
メモリコントローラ１２は、フラッシュメモリ１１について、検索開始アドレスを設定する。そして、ステップＳ２の処理へ移行する。
ここで、検索開始アドレスは、例えば、アドレスの最小値であり、“０”であってもよい。つまり、チップ０のＲｏｗアドレス０（ブロック０のページ０）から検索されてもよい。なお、チップ０でなくてもよく、０以外の規定のチップ番号であってもよい。
本実施形態では、検索開始アドレスの情報としては、チップ番号、Ｒｏｗアドレス（ブロック番号、ページ番号）、Ｃｏｌｕｍｎアドレス、読み出すバイト数が設定される。チップ番号の指定は、例えばチップ０しか存在しない場合にも、必要である。Ｃｏｌｕｍｎアドレスは、読み出す先頭のバイト位置を表す。読み出すバイト数は、例えばフラッシュメモリ１１ごとに指定されているのではなく、そのバイト数に対応する回数だけメモリコントローラ１２がデータの読み出しを行う。ただし、Ｃｏｌｕｍｎアドレスと読み出すバイト数は、最後まで固定される。
なお、Ｒｏｗアドレスの小さい方から検索が開始されなくてもよく、規定の範囲のすべてを検索することができれば、Ｒｏｗアドレスの大きい方から検索が開始されてもよい。
（ステップＳ２）
メモリコントローラ１２は、検索対象のページのデータを読み出す。検索対象のページは、最初は、検索開始アドレスのページである。そして、ステップＳ３の処理へ移行する。
なお、本例では、少なくとも、検索されたページが管理情報のページであるか否かを判定することが可能なデータが読み出されればよく、必ずしもページのすべてのデータが読み出されなくてもよい。
【００９１】
（ステップＳ３）
メモリコントローラ１２は、読み出されたデータについて、正常なデータであるか否かの検査（チェック）を行う。本例では、正常なデータとしては、管理情報のデータが想定されている。
この結果、メモリコントローラ１２は、読み出されたデータについて、正常なデータであると判定した場合には（ステップＳ３：ＹＥＳ）、ステップＳ４の処理へ移行する。
一方、メモリコントローラ１２は、読み出されたデータについて、正常なデータではないと判定した場合には（ステップＳ３：ＮＯ）、ステップＳ５の処理へ移行する。
【００９２】
ここで、正常な管理ブロックのデータであることは、例えば、ＥＣＣによる誤り訂正が正常に行われたことと、領域識別情報が管理情報の領域識別情報と一致することによって確認される。なお、正常な管理情報のデータであることは、他の条件によって確認されてもよい。
【００９３】
（ステップＳ４）
メモリコントローラ１２は、読み出されたデータについて、正常なデータであると判定した場合には、読み出したページのチップ番号およびＲｏｗアドレス、更新番号を記憶する。そして、ステップＳ５の処理へ移行する。
また、このとき、読み出した管理情報から、第２ファームウェアをフラッシュメモリ１１から読み出すための情報（保存したフラッシュメモリ１１のアドレス、フラッシュメモリのタイプなど）も記憶してよい。この場合、検索終了後、再度、管理情報を読み出す必要がない。
また、このとき、現在、検索した管理情報のデータとして記憶されている更新番号と、今回読み出した更新番号を比較して値の大きい方の情報だけを記憶してもよい。この場合、検索した管理情報のデータを記憶する領域が一つだけでよい。
なお、第２ＲＡＭ１２Ｄまたはバッファ１２Ｅの容量の大きさが十分であれば、すべての管理情報を第２ＲＡＭ１２Ｄまたはバッファ１２Ｅに読み出したままにすることもできる。毎回、更新番号を比較する方法が用いられる場合には、例えば、第２ＲＡＭ１２Ｄまたはバッファ１２Ｅの容量は２セクタ分あればよい。
【００９４】
（ステップＳ５）
メモリコントローラ１２は、所定の検索範囲について、検索が完了したか否かを判定する。
この結果、メモリコントローラ１２は、所定の検索範囲について、検索が完了したと判定した場合（ステップＳ５：ＹＥＳ）、ステップＳ７の処理へ移行する。
一方、メモリコントローラ１２は、所定の検索範囲について、検索が完了していないと判定した場合（ステップＳ５：ＮＯ）、ステップＳ６の処理へ移行する。
また、複数のフラッシュメモリ１１から検索が行われる場合には、メモリコントローラ１２は、チップ番号とＲｏｗアドレスとの両方を検査して、これら両方に基づいて、検索範囲での検索が完了したかどうかを判定する。
また、検索範囲終了の判断として、検索回数で行ってもよい。
【００９５】
（ステップＳ６）
メモリコントローラ１２は、次の検索対象のページを設定する。そして、ステップＳ２の処理へ移行する。
ここで、次の検索対象のページは、例えば、現在のＲｏｗアドレスに所定のページ数を加算する。例えば、使用されることが想定される複数のタイプのフラッシュメモリが図６〜図８に示されるフラッシュメモリ２１１、３１１、４１１である場合には、６４ページごとのページが検索対象となる。他の例として、さらに、管理ブロックに含まれるページの数が３２であるフラッシュメモリが使用され得る場合には、３２ページごとのページが検索対象となる。
また、複数のチップについて検索が行われる場合には、メモリコントローラ１２は、次の検索対象のページを指定するために、チップ番号の更新も行う。ただし、チップ番号については、加算あるいは減算とは限られず、そのとき（現在）のままでもよい。
なお、ページの番号が大きい方から検索を開始してページの番号が小さい方へ検索する場合には、上記の加算とは逆に、所定のページ数を減算していく。
【００９６】
（ステップＳ７）
メモリコントローラ１２は、管理情報があったか否かを判定する。本例では、正常な管理情報が１個以上見つけられた場合に、管理情報があったとする。
この結果、メモリコントローラ１２は、管理情報があったと判定した場合（ステップＳ７：ＹＥＳ）、ステップＳ９の処理へ移行する。
一方、メモリコントローラ１２は、管理情報がなかったと判定した場合（ステップＳ７：ＮＯ）、ステップＳ８の処理へ移行する。
【００９７】
（ステップＳ８）
メモリコントローラ１２は、管理情報が見つからなかったため、異常（管理ブロックのデータなし）と判定する。そして、本フローの処理を終了する。
【００９８】
（ステップＳ９）
メモリコントローラ１２は、管理情報があった場合には、第２ファームウェアをフラッシュメモリ１１から第１ＲＡＭ１２Ｃに読み出す処理を行う。そして、本フローの処理を終了する。なお、第２ファームウェアが正常に読み出せない場合もある。
このとき、検索した管理情報として記憶したデータが複数存在する場合は、それぞれの更新番号を比較して、値が最も大きいものが必要な情報とする。
なお、第２ファームウェアをフラッシュメモリ１１から読み出すための情報（保存したフラッシュメモリ１１のアドレス、フラッシュメモリのタイプなど）が検索した管理情報として記憶されている場合は、当該情報を使用して第２ファームウェアを読み出す。そうでない場合は、記憶しているチップ番号およびＲｏｗアドレスによって再度、管理情報をフラッシュメモリ１１から読み出し、第２ファームウェアをフラッシュメモリ１１から読み出すための情報（保存したフラッシュメモリ１１のアドレス、フラッシュメモリのタイプなど）を取得した後、取得した情報を使用して第２ファームウェアを読み出す。
【００９９】
本実施形態では、領域識別情報に関しては、メモリコントローラ１２は、第２領域１１Ｂの領域識別情報が検出されたか否かに基づいて第２領域１１Ｂが検出されたか否かを判定する。
すなわち、メモリコントローラ１２は、対象とした領域部分について、第２領域１１Ｂの領域識別情報が配置される位置の情報を読み出し、読み出された情報が第２領域１１Ｂの領域識別情報であった場合には、当該領域部分が第２領域１１Ｂに含まれる領域部分であると判定する。
一方、メモリコントローラ１２は、対象とした領域部分について、第２領域１１Ｂの領域識別情報が配置される位置の情報を読み出し、読み出された情報が第２領域１１Ｂの領域識別情報ではなかった場合には、当該領域部分が第２領域１１Ｂに含まれないと判定し、第２領域１１Ｂが検出されなかったと判定する。
【０１００】
本実施形態では、メモリコントローラ１２は、フラッシュメモリ１１の対象とした領域部分の情報を第２ＲＡＭ１２Ｄまたはバッファ１２Ｅに格納し、格納された情報のうち、先頭から所定のバイトの位置に存在する情報が第２領域１１Ｂの領域識別情報であるか否かを判定する。当該所定のバイトの位置は、例えば、あらかじめ定められている。
【０１０１】
例えば、本実施形態では、図６〜図８に示される複数の異なるタイプのフラッシュメモリ２１１、３１１、４１１のうちで、１個のブロックに含まれるページの数の最大公約数となるページ数（実施形態では、６４ページ）ごとの単位で、メモリコントローラ１２が、対象となる領域部分が第２領域１１Ｂであるか否かを判定する場合を示した。
他の例として、複数の異なるタイプのフラッシュメモリ２１１、３１１、４１１のうちで１個のブロックに含まれるページの数の最大公約数となるページ数（実施形態では、６４ページ）ごとの単位の代わりに、当該ページ数の約数（例えば、３２ページ、あるいは、１６ページなど）ごとの単位が用いられてもよい。
このように、複数の異なるタイプのフラッシュメモリ２１１、３１１、４１１について、１個のブロックに含まれるページの数の公約数ごとの単位が用いられてもよい。公約数としては、最大公約数が用いられてもよく、最大公約数以外の公約数が用いられてもよい。
【０１０２】
また、他の例として、メモリコントローラ１２は、第２領域１１Ｂのページフォーマットが他の領域である第１領域１１Ａ、第３領域１１Ｃのページフォーマットとは異なる場合に、検索の対象とする領域部分が第２領域１１Ｂのページフォーマットに合致するか否かに基づいて第２領域１１Ｂが検出されたか否かを判定することが可能である。
【０１０３】
ここで、検索の対象とする領域部分が第２領域１１Ｂのページフォーマットに合致するか否かの判定の手法としては、様々な手法が用いられてもよい。
一例として、メモリコントローラ１２は、フラッシュメモリ１１の領域の先頭から順に所定のページ数ごとの領域部分を対象として、当該領域部分に含まれる任意のページについて、第２領域１１Ｂのページフォーマットが使用されていると仮定して、ＥＣＣを用いた誤り訂正処理を実行する。この結果、メモリコントローラ１２は、正常に誤り訂正をすることができた場合には、当該領域部分が第２領域１１Ｂに含まれる領域部分であると判定し、第２領域１１Ｂが検出されたと判定する。一方、メモリコントローラ１２は、正常に誤り訂正をすることができなかった場合には、当該領域部分が第２領域１１Ｂに含まれないと判定し、第２領域１１Ｂが検出されなかったと判定する。
この際、メモリコントローラ１２は、ＥＣＣの処理に関して、訂正可能と判断した場合、読み出したデータを訂正する。また、メモリコントローラ１２は、エラービット数が訂正能力を超える場合には、訂正不可能であるという情報を出力する。
【０１０４】
つまり、ページフォーマットではＥＣＣの配置の仕方が規定されていると捉えることができる。例えば、第２領域１１Ｂと第３領域１１Ｃについて、正常な誤り訂正が行われるために第２領域１１Ｂから読み出されるべきバイト数と、正常な誤り訂正が行われるために第３領域１１Ｃから読み出されるべきバイト数とが異なる構成とすることができる。
ここで、読み出しはページ単位で行われ、検索対象ではないデータが書き込まれたページあるいはデータが書き込まれていないページが読み出されると、メモリコントローラ１２が訂正不可能であるという情報を出力する。
【０１０５】
なお、それぞれの領域部分について、ＥＣＣを用いた誤り訂正処理を実行するページとしては、当該領域部分における任意のページが用いられてもよい。
例えば、ＥＣＣを用いた誤り訂正処理を実行するページとして、それぞれの領域部分の先頭のページが用いられると効率的であるが、先頭以外のページが用いられてもよい。
また、ＥＣＣを用いた誤り訂正処理は、例えば、それぞれのページに含まれる１個のＥＣＣについて行われてもよく、あるいは、それぞれのページに含まれる２個以上のＥＣＣについて行われてもよい。この場合、誤り訂正処理が行われるＥＣＣの数が少ないほど時間的に効率的であると考えられ、誤り訂正処理が行われるＥＣＣの数が多いほど第２領域１１Ｂの検出精度が向上すると考えられる。
ただし、通常はＥＣＣの計算よりもデータの読み出しの方が時間がかかるため、不要なデータは読み出さない方が効率的である。
例えば、フラッシュメモリ１１からページ読み出しを行っても、１セクタしか情報が必要なければ、そのデータとそのデータのＥＣＣだけを読み出す方が効率的である。つまり、そのページのデータをすべて読み出す必要はない。フラッシュメモリ１１からデータを読み出せば、必然的にＥＣＣのデコーダを通過するため、フラッシュメモリ１１からデータを読み出す（転送する）時間を削除した方がよい。
【０１０６】
ここで、メモリコントローラ１２が、第２領域１１Ｂのページフォーマットに基づいて正常な誤り訂正が行われたか否かを判定することにより検索対象が見つかったか否かを判定する構成では、必ずしも領域識別情報に基づいて検索対象が見つかったか否かを判定することが行われなくてもよく、例えば、各データに領域識別情報が設けられない構成が用いられてもよい。当該検索対象は、フラッシュメモリ１１から第２ファームウェアを読み出すために必要な保存されている管理情報である。
また、メモリコントローラ１２が、第２領域１１Ｂのページフォーマットに基づいて正常な誤り訂正が行われたか否かを判定するとともに、領域識別情報に基づいて第２領域１１Ｂが見つかったか否かを判定することが行われてもよく、これらの両方の結果において検索対象が見つかったと判定された場合に、検索対象が見つかったという最終的な判定結果を得る構成が用いられてもよい。
なお、管理情報の検索では、管理ブロックのページフォーマットと他のブロックのページフォーマットとが異なる場合においても、ＥＣＣの誤り訂正の成否で必ず識別可能ではないため、領域識別情報も使用される方が好ましい。
【０１０７】
［実施形態のまとめ］
以上のように、実施形態に係るメモリシステム１では、ホストシステム２から与えられるコマンドに基づいて、複数のページを含む物理ブロックを複数含むフラッシュメモリ１１に対するアクセスを制御するメモリコントローラ１２において、第１ファームウェアが書き込まれているＲＯＭ１２Ｂと、フラッシュメモリ１１から読み出された第２ファームウェアが書き込まれるＲＡＭ（実施形態では、第１ＲＡＭ１２Ｃ）と、ホストシステム２から受信したデータまたはホストシステム２へ送信するデータおよび、フラッシュメモリ１１から読み出したデータまたはフラッシュメモリ１１へ書き込むデータを保持するバッファ１２Ｅと、を備える。
メモリコントローラ１２は、第１ファームウェアまたは第２ファームウェアに基づいて動作する。
メモリコントローラ１２は、管理情報の書き込み時に、所定の検索範囲のなかでフラッシュメモリ１１内のいずれかの物理ブロックを所定物理ブロック（実施形態では、管理ブロック）に割り当て、当該所定物理ブロックにフラッシュメモリ１１にアクセスするために必要な管理情報を書き込み、起動時などには、所定物理ブロックを検索するように動作する。
管理情報を含む書き込み情報は、フラッシュメモリ１１の種類（例えば、タイプ）に関わらず同一のフォーマットで所定物理ブロックに書き込まれている。
管理情報の検索では、所定の検索範囲について、所定のページ間隔で、各ページに書き込まれている情報が順次読み出される。
しがたって、実施形態に係るメモリシステム１では、メモリコントローラ１２は、複数の異なるタイプのフラッシュメモリ１１に対して、アクセスを制御することが可能である。これにより、複数の種類が存在するフラッシュメモリ１１を制御するメモリコントローラ１２の汎用性を高めることができる。
【０１０８】
実施形態に係るメモリコントローラ１２では、読み出された情報に含まれる誤り訂正符号（ＥＣＣ）により誤り訂正できた場合には、管理情報が見つかったと判定する。
しがたって、メモリコントローラ１２は、所定物理ブロックのページフォーマットで規定された誤り訂正符号（ＥＣＣ）に基づいて、管理情報が見つかったか否かを判定することができる。
【０１０９】
実施形態に係るメモリコントローラ１２では、所定物理ブロックに管理情報を特定するための識別情報（実施形態では、領域識別情報）を書き込む。
メモリコントローラ１２では、起動時などには、識別情報に基づいて管理情報を検索するように動作する。
管理情報が見つかったと判定する条件には、読み出された情報に管理情報を特定するための識別情報が含まれるという条件が含まれている。
メモリコントローラ１２では、管理情報と識別情報を含む書き込み情報は、フラッシュメモリ１１の種類に関わらず同一のフォーマットで所定物理ブロックに書き込まれている。
しがたって、メモリコントローラ１２は、管理情報を特定するための識別情報に基づいて、管理情報が見つかったか否かを判定することができる。
【０１１０】
実施形態に係るメモリコントローラ１２では、所定のページ間隔は、使用されることが想定される複数の種類のフラッシュメモリ１１について１個のブロックに含まれるページの数の公約数に相当するページの数の間隔である。
しがたって、メモリコントローラ１２は、フラッシュメモリ１１の種類が特定されなくても、管理情報を特定するための識別情報を確実に見つけることができ、これにより、管理情報を見つけることができる。
【０１１１】
実施形態に係るメモリシステム１では、複数のページを含む物理ブロックを複数含むフラッシュメモリ１１と、ホストシステム２から与えられるコマンドに基づいて、フラッシュメモリ１１に対するアクセスを制御するメモリコントローラ１２と、を備える。
メモリコントローラ１２は、第１ファームウェアが書き込まれているＲＯＭ１２Ｂと、フラッシュメモリ１１から読み出された第２ファームウェアが書き込まれるＲＡＭ（実施形態では、第１ＲＡＭ１２Ｃ）と、ホストシステム２から受信したデータまたはホストシステム２へ送信するデータおよび、フラッシュメモリ１１から読み出したデータまたはフラッシュメモリ１１に書き込まれるデータを保持するバッファ１２Ｅと、を備える。
メモリコントローラ１２は、第１ファームウェアまたは第２ファームウェアに基づいて動作する。
メモリコントローラ１２は、管理情報の書き込み時に、所定の検索範囲のなかでフラッシュメモリ１１内のいずれかの物理ブロックを所定物理ブロック（実施形態では、管理ブロック）に割り当て、当該所定物理ブロックにフラッシュメモリ１１にアクセスするために必要な管理情報を書き込み、起動時などには、管理情報を検索するように動作する。
管理情報を含む書き込み情報は、フラッシュメモリ１１の種類（例えば、タイプ）に関わらず同一のフォーマットで所定物理ブロックに書き込まれている。
管理情報の検索では、所定の検索範囲について、所定のページ間隔で、各ページに書き込まれている情報が順次読み出される。
しがたって、実施形態に係るメモリシステム１では、メモリコントローラ１２は、複数の異なるタイプのフラッシュメモリ１１に対して、アクセスを制御することが可能である。これにより、複数の種類が存在するフラッシュメモリ１１を制御するメモリコントローラ１２の汎用性を高めることができる。
【０１１２】
以上、本発明の実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【０１１３】
また、以上に説明した装置（例えば、メモリコントローラ１２）における任意の構成部の機能を実現するためのプログラムを、コンピューター読み取り可能な記録媒体に記録し、そのプログラムをコンピューターシステムに読み込ませて実行するようにしてもよい。なお、ここでいう「コンピューターシステム」とは、ＯＳ（Operating  System）あるいは周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ（Compact  Disk）−ＲＯＭ等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークあるいは電話回線等の通信回線を介してプログラムが送信された場合のサーバーあるいはクライアントとなるコンピューターシステム内部の揮発性メモリー（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【０１１４】
また、上記のプログラムは、このプログラムを記憶装置等に格納したコンピューターシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピューターシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）あるいは電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記のプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、上記のプログラムは、前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【符号の説明】
【０１１５】
１…メモリシステム、２…ホストシステム、１１、２１１、３１１、４１１…フラッシュメモリ、１１Ａ…第１領域、１１Ｂ…第２領域、１１Ｃ…第３領域、１２…メモリコントローラ、１２Ａ…プロセッサー、１２Ｂ…ＲＯＭ、１２Ｃ…第１ＲＡＭ、１２Ｄ…第２ＲＡＭ、１２Ｅ…バッファ、１１１、１２１…ページフォーマット、２２１〜２２４、３２１〜３２２、４２１…先頭ページ、２３１〜２３４、３３１〜３３２、４３１…領域識別情報
【図１】
2020086535.tif 000003
【図２】
2020086535.tif 000004
【図３】
2020086535.tif 000005
【図４】
2020086535.tif 000006
【図５】
2020086535.tif 000007
【図６】
2020086535.tif 000008
【図７】
2020086535.tif 000009
【図８】
2020086535.tif 000010
【図９】
2020086535.tif 000011