(57)【要約】【課題】フラッシュメモリの記憶領域が小さくなってしまうことを抑制することができるメモリコントローラを提供する。【解決手段】ホストシステムから与えられたコマンドに基づいて、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、プロセッサーと、ＲＡＭ（Random  Access  Memory）と、第１ファームウェアが書き込まれているマスクＲＯＭ（Read  Only  Memory）と、を備え、前記プロセッサーは、起動時において、前記第１ファームウェアに基づいて前記フラッシュメモリに書き込まれている第２ファームウェアの検索を実行し、当該検索によって前記第２ファームウェアが見つからなかった場合、前記ホストシステムから与えられる第３ファームウェアを前記ＲＡＭに書き込み、前記ＲＡＭに書き込まれた前記第３ファームウェアに基づく初期化を行う、メモリコントローラ。【選択図】図１
2020067835.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムから与えられたコマンドに基づいて、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、
プロセッサーと、
ＲＡＭ（Random  Access  Memory）と、
第１ファームウェアが書き込まれているマスクＲＯＭ（Read  Only  Memory）と、
を備え、
起動時において、前記第１ファームウェアに基づいて前記フラッシュメモリに書き込まれている第２ファームウェアの検索を実行し、前記検索によって前記第２ファームウェアが見つからなかった場合、前記ホストシステムから与えられる第３ファームウェアを前記ＲＡＭに書き込み、前記ＲＡＭに書き込まれた前記第３ファームウェアに基づく初期化を行う、
メモリコントローラ。
【請求項２】
前記初期化において行われる処理には、前記フラッシュメモリが有する記憶領域のうち前記第２ファームウェアが書き込まれる領域を指定する処理と、前記ホストシステムから与えられる第２ファームウェアを、指定した前記領域に書き込む処理とが含まれている、
請求項１に記載のメモリコントローラ。
【請求項３】
前記検索によって前記第２ファームウェアが見つからなかった場合、エラー情報を前記ホストシステムに送信し、前記ホストシステムがファームウェアをメモリコントローラに送信するコマンドを受信した後、前記ホストシステムから前記第３ファームウェアが与えられる、
請求項１又は２に記載のメモリコントローラ。
【請求項４】
前記初期化を行った後、前記第２ファームウェアに基づく動作を開始する、
請求項１から３のうちいずれか一項に記載のメモリコントローラ。
【請求項５】
フラッシュメモリと、ホストシステムから与えられたコマンドに基づいて、前記フラッシュメモリに対するアクセスを制御するメモリコントローラと、を備えるメモリシステムであって、
前記メモリコントローラは、
プロセッサーと、
ＲＡＭ（Random  Access  Memory）と、
第１ファームウェアが書き込まれているマスクＲＯＭ（Read  Only  Memory）と、
を備え、
前記プロセッサーは、起動時において、前記第１ファームウェアに基づいて前記フラッシュメモリに書き込まれている第２ファームウェアの検索を実行し、前記検索によって前記第２ファームウェアが見つからなかった場合、前記ホストシステムから与えられる第３ファームウェアを前記ＲＡＭに書き込み、前記ＲＡＭに書き込まれた前記第３ファームウェアに基づく初期化を行う、
メモリシステム。
【請求項６】
フラッシュメモリと、ホストシステムから与えられたコマンドに基づいて、前記フラッシュメモリに対するアクセスを制御するメモリコントローラと、を備えるメモリシステムであって、
前記メモリコントローラは、
プロセッサーと、
ＲＡＭ（Random  Access  Memory）と、
前記メモリシステムを起動させる処理を前記メモリコントローラに行わせる複数のコマンドを含む第１ファームウェアが書き込まれているマスクＲＯＭ（Read  Only  Memory）と、
を備え、
前記フラッシュメモリは、ファームウェアが記憶されていない、
メモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、及びメモリシステムに関する。
【背景技術】
【０００２】
フラッシュメモリに関する技術についての研究、開発が行われている。
【０００３】
これに関し、フラッシュメモリと、フラッシュメモリを制御するメモリコントローラとを備えたメモリシステムであって、メモリコントローラは、プロセッサーと、メモリシステムを起動させるファームウェアが予め記憶されているマスクＲＯＭ（Read  Only  Memory）と、フラッシュメモリに記憶されたファームウェアが読み出されるＲＡＭ（Random  Access  Memory）とを有する、メモリシステムが知られている（特許文献１参照）。当該ファームウェアには、規格で決められた通常の処理を主に行うファームウェアと、メモリシステムの初期化を行うファームウェアとが含まれている。ここで、本背景技術の説明においては、説明の便宜上、規格で決められた通常の処理を行うファームウェアを通常処理用ファームウェアと称し、メモリシステムの初期化を行うファームウェアを、初期化用ファームウェアと称して説明する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００７−５１８１６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、特許文献１に記載されたような従来のメモリシステムでは、フラッシュメモリに記憶されたファームウェアは、前述した通り、通常処理用ファームウェアと、初期化用ファームウェアとの両方が含まれている。このため、当該メモリシステムでは、フラッシュメモリに記憶されたファームウェアには、データ量が大きくなる場合が多い。
【０００６】
一方、特許文献１に記載されたような従来のメモリシステムでは、当該メモリシステムの初期化を行う際、当該メモリシステムを制御するホストシステムから、通常処理用ファームウェアと初期化用ファームウェアとの両方を含むファームウェアを受信し、受信した当該ファームウェアをＲＡＭに書き込む。そして、当該メモリシステムは、ＲＡＭに書き込んだ当該ファームウェアに基づいて当該メモリシステムの初期化を行い、その後、当該ファームウェアをフラッシュメモリに記憶させる。その結果、当該メモリシステムでは、当該メモリシステムの初期化が行われた後、フラッシュメモリの記憶領域のうちユーザーが所望のデータを記憶させる領域が初期化用ファームウェアの分だけ小さくなってしまう。また、当該メモリシステムでは、ＲＡＭの記憶領域の大きさが、当該ファームウェアを書き込める程度の大きさとする必要があり、ＲＡＭの記憶領域を小さくすることが困難な場合があった。
【０００７】
本発明は、このような事情を考慮してなされたもので、第１ＲＡＭの記憶領域と、フラッシュメモリの記憶領域のうちファームウェアが記憶される記憶領域との両方を小さくすることができるメモリコントローラ、及びメモリシステムを提供することを課題とする。
【課題を解決するための手段】
【０００８】
本発明の一態様は、ホストシステムから与えられたコマンドに基づいて、フラッシュメモリに対するアクセスを制御するメモリコントローラであって、プロセッサーと、ＲＡＭと、第１ファームウェアが書き込まれているマスクＲＯＭと、を備え、起動時において、前記第１ファームウェアに基づいて前記フラッシュメモリに書き込まれている第２ファームウェアの検索を実行し、前記検索によって前記第２ファームウェアが見つからなかった場合、前記ホストシステムから与えられる第３ファームウェアを前記ＲＡＭに書き込み、前記ＲＡＭに書き込まれた前記第３ファームウェアに基づく初期化を行う、メモリコントローラである。
【０００９】
また、本発明の一態様は、フラッシュメモリと、ホストシステムから与えられたコマンドに基づいて、前記フラッシュメモリに対するアクセスを制御するメモリコントローラと、を備えるメモリシステムであって、前記メモリコントローラは、プロセッサーと、ＲＡＭと、第１ファームウェアが書き込まれているマスクＲＯＭと、を備え、前記プロセッサーは、起動時において、前記第１ファームウェアに基づいて前記フラッシュメモリに書き込まれている第２ファームウェアの検索を実行し、前記検索によって前記第２ファームウェアが見つからなかった場合、前記ホストシステムから与えられる第３ファームウェアを前記ＲＡＭに書き込み、前記ＲＡＭに書き込まれた前記第３ファームウェアに基づく初期化を行う、メモリシステムである。
【００１０】
また、本発明の一態様は、フラッシュメモリと、ホストシステムから与えられたコマンドに基づいて、前記フラッシュメモリに対するアクセスを制御するメモリコントローラと、を備えるメモリシステムであって、前記メモリコントローラは、プロセッサーと、ＲＡＭと、前記メモリシステムを起動させる処理を前記メモリコントローラに行わせる複数のコマンドを含む第１ファームウェアが書き込まれているマスクＲＯＭと、を備え、前記フラッシュメモリは、ファームウェアが記憶されていない、メモリシステムである。
【発明の効果】
【００１１】
本発明によれば、第１ＲＡＭの記憶領域と、フラッシュメモリの記憶領域のうちファームウェアが記憶される記憶領域との両方を小さくすることができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態に係るメモリシステム１の構成の一例を示す図である。
【図２】メモリコントローラ１２の起動時においてメモリコントローラ１２が行う処理の流れの一例を示す図である。
【図３】メモリコントローラ１２の起動時においてメモリコントローラ１２が行う処理の流れの一例を示す図である。
【図４】メモリコントローラ１２が第２ファームウェアの検索において第２ファームウェアを検出できなかった場合においてホストシステム２が行う処理の流れの一例を示す図である。
【発明を実施するための形態】
【００１３】
＜実施形態＞
以下、本発明の実施形態について、図面を参照して説明する。
【００１４】
＜メモリシステムの構成＞
図１は、実施形態に係るメモリシステム１の構成の一例を示す図である。
メモリシステム１は、ホストシステム２と接続されている。
メモリシステム１は、フラッシュメモリ１１と、メモリコントローラ１２を備える。
【００１５】
実施形態では、メモリシステム１を起動させる処理をメモリコントローラ１２に行わせるソフトウェアを、第１ファームウェアと称して説明する。
また、実施形態では、フラッシュメモリ１１へのアクセスを制御する処理をメモリコントローラ１２に行わせるソフトウェアを、第２ファームウェアと称して説明する。
また、実施形態では、ホストシステム２からメモリシステム１に送信され、メモリシステム１の初期化をメモリコントローラ１２に行わせるソフトウェアを、第３ファームウェアと称して説明する。
【００１６】
フラッシュメモリ１１は、様々なフラッシュメモリであってもよい。例えば、フラッシュメモリ１１が備える各セルは、ＳＬＣ（Single  Level  Cell）であってもよく、ＭＬＣ（Multi  Level  Cell）であってもよく、ＴＬＣ（Triple  Level  Cell）であってもよい。
実施形態では、一例として、フラッシュメモリ１１が、ＮＡＮＤ型のフラッシュメモリである場合について説明する。なお、他の例として、フラッシュメモリ１１は、ＮＯＲ型のフラッシュメモリであってもよい。
【００１７】
フラッシュメモリ１１は、１つ以上のチップを含む。フラッシュメモリ１１に含まれる１つ以上のチップのそれぞれは、チャネルと呼ばれる１つ以上の信号線によってメモリコントローラ１２と接続されている。ここで、フラッシュメモリ１１に含まれるチップの数と、フラッシュメモリ１１とメモリコントローラ１２との間を接続するチャネルの数とは、一致している構成であってもよく、一致していない構成であってもよい。
【００１８】
フラッシュメモリ１１に含まれる各チップには、複数のブロックが含まれている。メモリシステム１において、フラッシュメモリ１１に記憶されたデータの消去は、このブロック単位で行われる。また、当該複数のブロックのそれぞれには、複数のページが含まれている。メモリシステム１において、フラッシュメモリ１１へのデータの書き込み、又は、フラッシュメモリ１１からのデータの読み出しは、このページ単位で行われる。また、当該複数のページのそれぞれには、複数のセルが含まれている。フラッシュメモリ１１が有する記憶領域は、このようなセルの集まりによって構成されている。なお、チップ、ブロック、ページのそれぞれについては、公知であるため、これ以上の詳細な説明を省略する。
【００１９】
フラッシュメモリ１１は、メモリコントローラ１２によって制御される。実施形態において、フラッシュメモリ１１が有する記憶領域のうちの少なくとも一部は、メモリコントローラ１２によって第１領域１１Ａ〜第３領域１１Ｃのうちのいずれかとして指定される。ここで、第１領域１１Ａ〜第３領域１１Ｃのそれぞれには、フラッシュメモリ１１が有する記憶領域のうち、２つ以上のブロックのそれぞれに含まれるセルによって構成される記憶領域であってもよく、単一のブロックに含まれるセルの全部によって構成される記憶領域であってもよく、単一のブロックに含まれるセルの一部によって構成される記憶領域であってもよい。
【００２０】
第１領域１１Ａは、フラッシュメモリ１１が有する記憶領域のうち、第２ファームウェアがメモリコントローラ１２によって書き込まれる領域のことである。
【００２１】
第２領域１１Ｂは、フラッシュメモリ１１が有する記憶領域のうち、管理情報がメモリコントローラ１２によって書き込まれる領域のことである。管理情報には、例えば、フラッシュメモリ１１内における第１領域１１Ａの位置を示す情報、フラッシュメモリ１１内における第３領域１１Ｃの位置を示す情報、フラッシュメモリ１１のタイプを示す情報、メモリシステム１の設定情報等の情報が含まれている。
【００２２】
ここで、メモリシステム１の設定情報は、例えば、フラッシュメモリ１１に含まれているチップの数を示す情報、コマンドのサポート情報、機能のサポート情報などのうちの１以上が含まれてもよい。
【００２３】
また、フラッシュメモリ１１内における位置を示す情報は、例えば、フラッシュメモリ１１内におけるアドレスの情報であってもよい。
また、フラッシュメモリ１１のタイプを示す情報は、例えば、フラッシュメモリ１１に含まれるブロックの数を示す情報、単一の当該ブロックに含まれるページの数を示す情報、単一の当該ページ（すなわち、１ページ）に格納することが可能な最大のバイト数を示す情報などを含む。
【００２４】
第３領域１１Ｃは、フラッシュメモリ１１が有する記憶領域のうち、ホストシステム２から受信されたデータがメモリコントローラ１２によって書き込まれる領域のことである。
【００２５】
なお、フラッシュメモリ１１が有する記憶領域には、例えば、ホストシステム２によって指定される論理アドレスと、フラッシュメモリ１１における物理アドレスとの対応関係を示す情報が書き込まれる領域が含まれてもよい。また、当該領域は、前述の第２領域１１Ｂに含まれる構成であってもよい。
【００２６】
また、第１領域１１Ａ〜第３領域１１Ｃのそれぞれには、それぞれの領域が第１領域１１Ａ〜第３領域１１Ｃのうちのいずれであるかを識別する情報が書き込まれる。以下では、説明の便宜上、当該情報を、領域識別情報と称して説明する。
【００２７】
メモリコントローラ１２は、ホストシステム２から与えられたコマンドに基づいて、フラッシュメモリ１１に対するアクセスを制御する。
メモリコントローラ１２は、プロセッサー１２Ａと、マスクＲＯＭ１２Ｂと、第１ＲＡＭ（Random  Access  Memory）１２Ｃと、第２ＲＡＭ１２Ｄと、バッファ１２Ｅと、第１インターフェース１２Ｆと、第２インターフェース１２Ｇを備える。なお、メモリコントローラ１２は、これらに加えて、レジスタ等の他のハードウェア機能部を備える構成であってもよい。
【００２８】
プロセッサー１２Ａは、メモリシステム１の全体を制御する。換言すると、プロセッサー１２Ａは、メモリコントローラ１２の動作を制御する。すなわち、メモリコントローラ１２の動作は、プロセッサー１２Ａの動作である。プロセッサー１２Ａは、例えば、ＣＰＵ（Central  Processing  Unit）である。なお、プロセッサー１２Ａは、ＣＰＵに代えて、ＦＰＧＡ（Field-Programmable  Gate  Array）等の他のプロセッサーであってもよい。
【００２９】
マスクＲＯＭ１２Ｂは、第１ファームウェアが書き込まれるＲＯＭである。このため、マスクＲＯＭ１２Ｂは、メモリコントローラ１２の起動時に、メモリコントローラ１２により参照される。すなわち、メモリコントローラ１２は、メモリコントローラ１２の起動時に、マスクＲＯＭ１２Ｂを参照し、第１ファームウェアに基づく動作を行う。当該動作には、例えば、第２ファームウェアの検索が含まれる。
【００３０】
ここで、実施形態では、メモリコントローラ１２の起動時とは、プロセッサー１２Ａに駆動電圧が供給され、プロセッサー１２Ａが正常に動作可能になったタイミングのことである。例えば、メモリシステム１がリムーバブル機器である場合、プロセッサー１２Ａには、ホストシステム２にメモリシステム１が接続されることによって駆動電圧が供給される。また、例えば、メモリシステム１がリムーバブル機器ではない場合、プロセッサー１２Ａには、メモリシステム１が予め接続されたホストシステム２の電源を投入することによって駆動電圧が供給される。
なお、メモリコントローラ１２の起動時は、プロセッサー１２Ａが正常に動作可能になったタイミングよりも後のタイミングであってもよい。
また、メモリコントローラ１２の起動時は、プロセッサー１２Ａが正常に動作可能になったタイミングまたはそれよりも後のタイミングに代えて、プロセッサー１２Ａに応じた他のタイミングであってもよい。
【００３１】
第１ＲＡＭ１２Ｃは、第１領域１１Ａから読み出された第２ファームウェアがメモリコントローラ１２によって書き込まれるＲＡＭである。また、第１ＲＡＭ１２Ｃは、ホストシステム２から与えられた第３ファームウェアがメモリコントローラ１２によって書き込まれるＲＡＭである。
【００３２】
第２ＲＡＭ１２Ｄは、フラッシュメモリ１１から読み出された各種のデータのうちメモリコントローラ１２が必要とするデータがメモリコントローラ１２によって書き込まれるＲＡＭである。例えば、第２ＲＡＭ１２Ｄには、第２領域１１Ｂから読み出された管理情報がメモリコントローラ１２によって書き込まれる。
【００３３】
バッファ１２Ｅは、例えば、ホストシステム２から送信されてメモリコントローラ１２により受信されたデータ（受信データ）をメモリコントローラ１２がフラッシュメモリ１１に書き込む際、メモリコントローラ１２が当該データを用いた処理を行う際等において、当該データを一時的に保持する。また、バッファ１２Ｅは、例えば、メモリコントローラ１２からホストシステム２へ送信するデータ（送信データ）をメモリコントローラ１２がフラッシュメモリ１１から読み出して送信する際、当該データを一時的に保持する。なお、バッファ１２Ｅの動作は、既知のバッファの動作と同様の動作である。このため、バッファ１２Ｅについて、これ以上の詳細の説明を省略する。
【００３４】
第１インターフェース１２Ｆは、メモリコントローラ１２とホストシステム２との間を通信可能に接続する。第１インターフェース１２Ｆは、メモリコントローラ１２とホストシステム２との間を通信可能に接続することができるインターフェースであれば、如何なるインターフェースであってもよい。
【００３５】
第２インターフェース１２Ｇは、メモリコントローラ１２とフラッシュメモリ１１との間を接続する。第２インターフェース１２Ｇは、メモリコントローラ１２とフラッシュメモリ１１との間を通信可能に接続することができるインターフェースであれば、如何なるインターフェースであってもよい。
【００３６】
ホストシステム２は、任意の機器であってもよく、一例として、ワークステーション等のように所定のＯＳ（Operating  System）によって動作する産業機器であってもよい。なお、他の例として、ホストシステム２は、産業機器に代えて、ＰＣ（Personal  Computer）等のように家庭用の機器であってもよく、あるいは、多機能携帯電話端末（スマートフォン）等の機器であってもよい。
【００３７】
実施形態では、メモリシステム１は、ホストシステム２からの要求に応じて、ホストシステム２から受信されたデータをフラッシュメモリ１１に記憶する。また、メモリシステム１は、ホストシステム２からの要求に応じて、フラッシュメモリ１１に記憶されたデータのうち、当該要求に応じたデータをホストシステム２に送信する。
【００３８】
また、メモリコントローラ１２は、前述した通り、起動時において、マスクＲＯＭ１２Ｂを参照し、マスクＲＯＭ１２Ｂに記憶された第１ファームウェアに基づく動作を行う。この際、メモリコントローラ１２は、フラッシュメモリ１１に書き込まれている第２ファームウェアの検索を実行する。
【００３９】
メモリコントローラ１２は、このような第２ファームウェアの検索において、フラッシュメモリ１１に書き込まれている第２ファームウェアを検出できた場合、検出した第２ファームウェアを第１ＲＡＭ１２Ｃに読み出す。その後、メモリコントローラ１２は、参照先をマスクＲＯＭ１２Ｂから第１ＲＡＭ１２Ｃへと変更し、第１ＲＡＭ１２Ｃに読み出した第２ファームウェアに基づいて、パワーオンリセット（Power  On  Reset）を行う。そして、パワーオンリセットが正常に終了した後、メモリコントローラ１２は、第１ＲＡＭ１２Ｃに読み出した第２ファームウェアに基づいて、ホストシステム２から要求されるフラッシュメモリ１１へのアクセスを制御する。なお、パワーオンリセットが正常に終了した後においてホストシステム２から要求される処理には、フラッシュメモリ１１へのアクセスの制御を行う処理以外の処理も含まれる。しかしながら、実施形態において、当該処理についての説明は、省略する。
【００４０】
一方、メモリコントローラ１２は、第２ファームウェアの検索において、フラッシュメモリ１１に書き込まれている第２ファームウェアを検出できなかった場合、エラー情報をホストシステム２に送信する。当該エラー情報は、フラッシュメモリ１１に書き込まれている第２ファームウェアをメモリコントローラ１２が検出できなかったことをホストシステム２が判断するための情報である。ホストシステム２は、当該エラー情報を受信すると、ホストシステム２がファームウェアをメモリコントローラ１２に送信するコマンドをメモリコントローラ１２に送信（発行）する。メモリコントローラ１２は、ホストシステム２がファームウェアをメモリコントローラ１２に送信するコマンドを受信した場合、当該コマンドへの応答として、ファームウェアの受信を許可する情報をホストシステム２に送信する。ホストシステム２は、当該情報を受信すると、第３ファームウェアをメモリシステム１に送信する。
【００４１】
メモリコントローラ１２は、ホストシステム２から第３ファームウェアを受信すると、受信した第３ファームウェア（すなわち、ホストシステム２から与えられた第３ファームウェア）を第１ＲＡＭ１２Ｃに書き込む。その後、メモリコントローラ１２は、参照先をマスクＲＯＭ１２Ｂから第１ＲＡＭ１２Ｃへと変更し、第１ＲＡＭ１２Ｃに書き込んだ第３ファームウェアに基づく動作を開始する。その後、メモリコントローラ１２は、ホストシステム２からの要求に応じて、メモリシステム１の初期化を行う。メモリシステム１の初期化に関するメモリコントローラ１２の動作についての詳細は、後述する。メモリシステム１の初期化において、メモリコントローラ１２は、ホストシステム２から第２ファームウェアを受信し、受信した第２ファームウェアをフラッシュメモリ１１に記憶させる。
【００４２】
このように、メモリシステム１は、ホストシステム２から与えられた第３ファームウェアに基づいて、フラッシュメモリ１１の初期化を行う。すなわち、メモリシステム１では、第３ファームウェアがフラッシュメモリ１１に書き込まれている必要がない。このため、メモリシステム１は、第３ファームウェアがフラッシュメモリ１１に書き込まれている構成と比べて、第１ＲＡＭ１２Ｃの記憶容量を小さくすることができるとともに、フラッシュメモリ１１の記憶領域が第３ファームウェアの分だけ小さくなってしまうことを抑制することができる。以下では、フラッシュメモリ１１の初期化を行う際にメモリコントローラ１２とホストシステム２とのそれぞれが行う処理について詳しく説明する。また、以下では、一例として、メモリコントローラ１２の起動時において当該初期化を行う場合を例に挙げて、当該初期化を行う際にメモリコントローラ１２とホストシステム２とのそれぞれが行う処理について説明する。なお、実施形態では、当該処理と異なる処理については、説明を省略する。
【００４３】
＜起動時においてメモリコントローラが行う処理＞
以下、図２及び図３を参照し、メモリコントローラ１２の起動時においてメモリコントローラ１２が行う処理について説明する。図２及び図３は、メモリコントローラ１２の起動時においてメモリコントローラ１２が行う処理の流れの一例を示す図である。
【００４４】
メモリコントローラ１２が起動された場合、メモリコントローラ１２には、駆動電圧が供給される（ステップＳ１１０）。
【００４５】
次に、メモリコントローラ１２は、マスクＲＯＭ１２Ｂに書き込まれている第１ファームウェアを参照し、第１ファームウェアに基づいて、フラッシュメモリ１１に書き込まれている第２ファームウェアの検索を実行する（ステップＳ１２０）。
【００４６】
ここで、第２ファームウェアを検索する方法は、既知の方法であってもよく、これから開発される方法であってもよい。例えば、メモリコントローラ１２は、ステップＳ１２０において、フラッシュメモリ１１の中から第２領域１１Ｂを検索し、第２領域１１Ｂに書き込まれている管理情報を、第２ＲＡＭ１２Ｄに読み出す。メモリコントローラ１２は、第２ＲＡＭ１２Ｄに読み出した管理情報に基づいて、フラッシュメモリ１１内における第１領域１１Ａの位置を特定する。メモリコントローラ１２は、特定した当該位置に基づいて、第１領域１１Ａの中から第２ファームウェアを検索する。
【００４７】
ステップＳ１２０の処理が行われた後、メモリコントローラ１２は、ステップＳ１２０において行われた検索によって、第２ファームウェアが検出できたか否かを判定する（ステップＳ１３０）。ここで、ステップＳ１３０の処理について説明する。
【００４８】
例えば、メモリコントローラ１２は、ステップＳ１２０においてフラッシュメモリ１１の中から第２領域１１Ｂが検出されなかった場合、ステップＳ１３０において第２ファームウェアが検出できなかったと判定する。また、例えば、メモリコントローラ１２は、ステップＳ１２０において第２領域１１Ｂに第２ファームウェアが書き込まれていなかった場合、ステップＳ１３０において第２ファームウェアが検出できなかったと判定する。なお、メモリコントローラ１２は、これらの場合に代えて、ステップＳ１２０において他の理由によって第２ファームウェアにアクセスできなかった場合、ステップＳ１３０において第２ファームウェアが検出できなかったと判定する構成であってもよく、これらの場合に加えて、ステップＳ１２０において他の理由によって第２ファームウェアにアクセスできなかった場合、ステップＳ１３０において第２ファームウェアが検出できなかったと判定する構成であってもよい。
【００４９】
メモリコントローラ１２は、第２ファームウェアが検出できたと判定した場合（ステップＳ１３０−ＹＥＳ）、第２ファームウェアをフラッシュメモリ１１から（すなわち、第１領域１１Ａから）第１ＲＡＭ１２Ｃに読み出す。そして、メモリコントローラ１２は、第２ファームウェアの第１ＲＡＭ１２Ｃへの読み出しが正常に終了したか否かを判定する（ステップＳ１３５）。
【００５０】
メモリコントローラ１２は、第２ファームウェアの第１ＲＡＭ１２Ｃへの読み出しが正常に終了したと判定した場合（ステップＳ１３５−ＹＥＳ）、ファームウェアの参照先をマスクＲＯＭ１２Ｂから第１ＲＡＭ１２Ｃへと変更する。そして、メモリコントローラ１２は、第１ＲＡＭ１２Ｃに読み出された第２ファームウェアに基づいて、パワーオンリセットを行う（ステップＳ３９０）。そして、メモリコントローラ１２は、パワーオンリセットを行った後、処理を終了する。その後、メモリコントローラ１２は、ホストシステム２から与えられた各種のコマンドに基づいて、フラッシュメモリ１１に対するアクセスを制御する。すなわち、メモリコントローラ１２は、パワーオンリセットが行われた後、第１ＲＡＭ１２Ｃに読み出された第２ファームウェアに基づいて、ホストシステム２からの要求に応じた動作を行う。実施形態では、パワーオンリセットの詳細について、及び、メモリコントローラ１２が当該コマンドに基づいて当該アクセスを制御する処理の詳細については、説明を省略する。このため、図２では、パワーオンリセットの流れについて省略されている。
【００５１】
一方、メモリコントローラ１２は、第２ファームウェアの第１ＲＡＭ１２Ｃへの読み出しが正常に終了していないと判定した場合（ステップＳ１３５−ＮＯ）、前述のエラー情報をホストシステム２に送信する（ステップＳ１４０）。
【００５２】
また、ステップＳ１３０において、メモリコントローラ１２は、第２ファームウェアが検出されなかったと判定した場合（ステップＳ１３０−ＮＯ）、ステップＳ１４０に遷移し、エラー情報をホストシステム２に送信する。
【００５３】
ステップＳ１４０の処理が行われた後、メモリコントローラ１２は、ホストシステム２からの要求を受信するまで待機する。ここでは、一例として、ステップＳ１４０の処理が行われた後に、ホストシステム２がファームウェアをメモリコントローラ１２に送信するコマンドを、メモリコントローラ１２が当該要求としてホストシステム２から受信した場合（ステップＳ１５０）について説明する。なお、メモリコントローラ１２は、ステップＳ１５０において、当該コマンドと異なるコマンドを当該要求としてホストシステム２から受信した場合、受信したコマンドに応じた処理を行う。
【００５４】
次に、メモリコントローラ１２は、ステップＳ１５０においてホストシステム２から受信したコマンドの内容が実行可能であり、当該コマンドの処理としてデータを受信する準備ができたことを示す情報を、当該コマンドへの応答としてホストシステム２に送信する（ステップＳ１６０）。なお、本実施形態では、当該コマンドの内容の間違いによる異常終了と、当該異常終了に伴う処理とのそれぞれについては、説明を省略する。
【００５５】
次に、メモリコントローラ１２は、ホストシステム２からデータを受信するまで待機する。そして、メモリコントローラ１２は、ホストシステム２からデータを受信する（ステップＳ１７０）。当該データは、第３ファームウェアである。しかし、メモリコントローラ１２は、ステップＳ１７０において受信したデータが第３ファームウェアか否かを判定していない。
【００５６】
次に、メモリコントローラ１２は、ステップＳ１７０において受信したデータ（すなわち、第３ファームウェア）を、第１ＲＡＭ１２Ｃに書き込む（ステップＳ１８０）。この際、メモリコントローラ１２は、バッファ１２Ｅを経由させて当該データを第１ＲＡＭ１２Ｃに書き込む構成であってもよく、バッファ１２Ｅを経由させずに当該データを第１ＲＡＭ１２Ｃに書き込む構成であってもよい。
【００５７】
次に、メモリコントローラ１２は、ファームウェアの参照先をマスクＲＯＭ１２Ｂから第１ＲＡＭ１２Ｃへと変更し（ステップＳ１９０）、第１ＲＡＭ１２Ｃに書き込まれたデータ、すなわち、第１ＲＡＭ１２Ｃに書き込まれた第３ファームウェアに基づく動作を開始する。
【００５８】
次に、メモリコントローラ１２は、ステップＳ１５０において受信したコマンドの正常終了を示す情報をホストシステム２に送信する（ステップＳ２００）。
【００５９】
次に、メモリコントローラ１２は、ホストシステム２からの要求を受信するまで待機する。ここでは、一例として、ステップＳ２００の処理が行われた後に、メモリシステム１の初期化をメモリコントローラ１２に行わせるコマンドをメモリコントローラ１２が当該要求としてホストシステム２から受信した場合（ステップＳ２１０）について説明する。なお、メモリコントローラ１２は、ステップＳ２１０において、当該コマンドと異なるコマンドを当該要求としてホストシステム２から受信した場合、受信したコマンドに応じた処理を行う。
【００６０】
次に、メモリコントローラ１２は、ステップＳ２１０においてホストシステム２から受信したコマンドの内容が実行可能であり、当該コマンドの処理としてデータを受信する準備ができたことを示す情報を、当該コマンドへの応答としてホストシステム２に送信する（ステップＳ２２０）。なお、本実施形態では、当該コマンドの内容の間違いによる異常終了と、当該異常終了に伴う処理とのそれぞれについては、説明を省略する。
【００６１】
次に、メモリコントローラ１２は、ホストシステム２からデータを受信するまで待機する。そして、メモリコントローラ１２は、ホストシステム２からデータを受信する（ステップＳ２３０）。そして、メモリコントローラ１２は、受信した当該データをバッファ１２Ｅに書き込む。メモリコントローラ１２は、バッファ１２Ｅに書き込んだ当該データが、如何なるデータであるのかをチェックする。当該データは、メモリシステム１の初期化に必要なデータである。すなわち、メモリコントローラ１２は、このチェックによって、バッファ１２Ｅに書き込んだデータが、メモリシステム１の初期化に必要なデータであることを特定する。ステップＳ２３０において当該データをバッファ１２Ｅに書き込んだ後、メモリコントローラ１２は、バッファ１２Ｅに書き込んだ当該データをバッファ１２Ｅから第２ＲＡＭ１２Ｄに転送する。
【００６２】
次に、メモリコントローラ１２は、ステップＳ１８０において第１ＲＡＭ１２Ｃに書き込まれた第３ファームウェアに基づいて、ステップＳ２３０において第２ＲＡＭ１２Ｄに書き込まれたデータを用いたメモリシステム１の初期化を実行する（ステップＳ２４０）。ここで、ステップＳ２４０においてメモリコントローラ１２により実行されるメモリシステム１の初期化について説明する。
【００６３】
メモリシステム１の初期化は、メモリコントローラ１２によるフラッシュメモリ１１の初期化である。当該初期化において、メモリコントローラ１２は、フラッシュメモリ１１が有する記憶領域のうちの少なくとも一部の中から、第１領域１１Ａ、第２領域１１Ｂ、第３領域１１Ｃのそれぞれとして機能させる領域を指定する。すなわち、メモリコントローラ１２は、フラッシュメモリ１１が有する記憶領域内において、第１領域１１Ａ、第２領域１１Ｂ、第３領域１１Ｃのそれぞれを生成する。そして、メモリコントローラ１２は、ステップＳ２３０において受信したデータを用いて、前述の管理情報を生成する。メモリコントローラ１２は、生成した管理情報を、生成した第２領域１１Ｂに書き込む。このように、メモリコントローラ１２は、第１領域１１Ａ、第２領域１１Ｂ、第３領域１１Ｃそれぞれの指定から、生成した管理情報の第２領域１１Ｂへの書き込みまでの処理を、当該初期化において行う。なお、当該初期化には、当該処理に加えて、他の処理が含まれる構成であってもよい。また、実際のメモリシステム１の初期化には、フラッシュメモリ１１に含まれている不良ブロックを検出する処理等が含まれているが、ここでは、説明を簡略化するため、説明を省略している。
【００６４】
メモリシステム１の初期化が行われた後、メモリコントローラ１２は、当該初期化が正常に終了したか否かを判定する（ステップＳ２５０）。例えば、メモリコントローラ１２は、第１領域１１Ａ、第２領域１１Ｂ、第３領域１１Ｃそれぞれの指定から、生成した管理情報の第２領域１１Ｂへの書き込みまでの処理に成功した場合、当該初期化が正常に終了したと判定する。一方、メモリコントローラ１２は、第１領域１１Ａ、第２領域１１Ｂ、第３領域１１Ｃそれぞれの指定から、生成した管理情報の第２領域１１Ｂへの書き込みまでの処理のうちの少なくとも一部に失敗した場合、当該初期化が正常に終了しなかったと判定する。
【００６５】
メモリコントローラ１２は、メモリシステム１の初期化が正常に終了しなかったと判定した場合（ステップＳ２５０−ＮＯ）、ステップＳ２１０においてホストシステム２から受信したコマンドの異常終了を示す情報をホストシステム２に出力する（ステップＳ４００）。その後、メモリコントローラ１２は、ホストシステム２からの要求に応じたリカバリ処理を行う。リカバリ処理は、例えば、初期化処理を再び実行する処理等である。リカバリ処理の内容については、ホストシステム２に応じて異なるため、これ以上の説明を省略する。このため、図２では、ステップＳ４００が行われた後にメモリコントローラ１２が行う処理の流れについて省略されている。
【００６６】
一方、メモリコントローラ１２は、メモリシステム１の初期化が正常に終了したと判定した場合（ステップＳ２５０−ＹＥＳ）、ステップＳ２１０においてホストシステム２から受信したコマンドの正常終了を示す情報をホストシステム２に送信する（ステップＳ２６０）。
【００６７】
次に、メモリコントローラ１２は、ホストシステム２からの要求を受信するまで待機する。ここでは、一例として、ステップＳ２６０の処理が行われた後に、ホストシステム２がファームウェアをメモリコントローラ１２に送信するコマンドを、メモリコントローラ１２が当該要求としてホストシステム２から受信した場合（ステップＳ２７０）について説明する。なお、メモリコントローラ１２は、ステップＳ２７０において、当該コマンドと異なるコマンドを当該要求としてホストシステム２から受信した場合、受信したコマンドに応じた処理を行う。
【００６８】
次に、メモリコントローラ１２は、ステップＳ２７０においてホストシステム２から受信したコマンドの内容が実行可能であり、当該コマンドの処理としてデータを受信する準備ができたことを示す情報を、当該コマンドへの応答としてホストシステム２に送信する（ステップＳ２８０）。なお、本実施形態では、当該コマンドの内容の間違いによる異常終了と、当該異常終了に伴う処理とのそれぞれについては、説明を省略する。
【００６９】
次に、メモリコントローラ１２は、ホストシステム２からデータを受信するまで待機する。そして、メモリコントローラ１２は、ホストシステム２からデータを受信する（ステップＳ２９０）。当該データは、第２ファームウェアである。しかし、メモリコントローラ１２は、ステップＳ２９０において受信したデータが第２ファームウェアか否かを判定していない。
【００７０】
次に、メモリコントローラ１２は、ステップＳ２９０において受信したデータ（すなわち、第２ファームウェア）を、バッファ１２Ｅに書き込む。そして、メモリコントローラ１２は、バッファ１２Ｅに書き込んだ当該データを、フラッシュメモリ１１の第１領域１１Ａに書き込む（ステップＳ３００）。この際、メモリコントローラ１２は、バッファ１２Ｅを経由させて当該データを第１領域１１Ａに書き込む構成であってもよく、バッファ１２Ｅを経由させずに当該データを第１領域１１Ａに書き込む構成であってもよい。
【００７１】
次に、メモリコントローラ１２は、ステップＳ３００においてデータの第１領域１１Ａへの書き込みが正常に終了したか否かを判定する（ステップＳ３１０）。
【００７２】
メモリコントローラ１２は、ステップＳ３００においてデータの第１領域１１Ａへの書き込みが正常に終了していないと判定した場合（ステップＳ３１０−ＮＯ）、第１異常終了処理を行う（ステップＳ４１０）。第１異常終了処理には、例えば、第２ファームウェアの第１領域１１Ａへの書き込みが正常に終了していないことを示す情報をホストシステム２に送信する処理が含まれる。実施形態では、第１異常終了処理の詳細については、これ以上の説明を省略する。このため、図３では、第１異常終了処理の流れについて省略されている。
【００７３】
一方、メモリコントローラ１２は、ステップＳ３００においてデータの第１領域１１Ａへの書き込みが正常に終了したと判定した場合（ステップＳ３１０−ＹＥＳ）、ファームウェアの参照先を第１ＲＡＭ１２ＣからマスクＲＯＭ１２Ｂへと変更し（ステップＳ３２０）、マスクＲＯＭ１２Ｂに書き込まれたデータ、すなわち、マスクＲＯＭ１２Ｂに書き込まれた第１ファームウェアに基づく動作を開始する。
【００７４】
次に、メモリコントローラ１２は、第１ファームウェアに基づいて、フラッシュメモリ１１に書き込まれている第２ファームウェアを検索する（ステップＳ３３０）。ここで、ステップＳ３３０の処理は、ステップＳ１２０の処理と同様の処理であるため、説明を省略する。
【００７５】
次に、メモリコントローラ１２は、ステップＳ３３０において第２ファームウェアが検出できたか否かを判定する（ステップＳ３４０）。
【００７６】
メモリコントローラ１２は、ステップＳ３３０において第２ファームウェアが検出できなかったと判定した場合（ステップＳ３４０−ＮＯ）、第２異常終了処理を行う（ステップＳ４２０）。第２異常終了処理には、例えば、ステップＳ２７０においてホストシステム２から受信したコマンドの異常終了を示す情報をホストシステム２に送信する処理が含まれる。実施形態では、第２異常終了処理の詳細については、これ以上の説明を省略する。このため、図３では、第２異常終了処理の流れについて省略されている。
【００７７】
一方、メモリコントローラ１２は、ステップＳ３３０において第２ファームウェアが検出できたと判定した場合（ステップＳ３４０−ＹＥＳ）、ステップＳ３３０において検出した第２ファームウェア（すなわち、フラッシュメモリ１１に記憶された第２ファームウェア）を、第１ＲＡＭ１２Ｃに読み出す（ステップＳ３５０）。
【００７８】
次に、メモリコントローラ１２は、メモリシステム１にエラーが生じているか否かを判定する（ステップＳ３６０）。例えば、メモリコントローラ１２は、フラッシュメモリ１１に記憶された第２ファームウェアを第１ＲＡＭ１２Ｃに正常に読み出せないこと、フラッシュメモリ１１から必要なデータを読み出せないこと、フラッシュメモリ１１から読み出したデータが正常な状態ではないこと等の現象が起っているか否かを判定し、これらの現象が起っていた場合、メモリシステム１にエラーが生じていると判定する。
【００７９】
メモリコントローラ１２は、メモリシステム１にエラーが生じていると判定した場合（ステップＳ３６０−ＹＥＳ）、第３異常終了処理を行う（ステップＳ４３０）。第３異常終了処理には、例えば、ステップＳ２７０においてホストシステム２から受信したコマンドの異常終了を示す情報をホストシステム２に送信する処理が含まれる。実施形態では、第３異常終了処理の詳細については、これ以上の説明を省略する。このため、図３では、第３異常終了処理の流れについて省略されている。
【００８０】
一方、メモリコントローラ１２は、メモリシステム１にエラーが生じていないと判定した場合（ステップＳ３６０−ＮＯ）、ファームウェアの参照先をマスクＲＯＭ１２Ｂから第１ＲＡＭ１２Ｃへと変更する。そして、メモリコントローラ１２は、第１ＲＡＭ１２Ｃに読み出された第２ファームウェアに基づいて、ステップＳ２７０においてホストシステム２から受信したコマンドの正常終了を示す情報をホストシステム２に送信する（ステップＳ３７０）。なお、実際には、メモリコントローラ１２は、ステップＳ３７０において、メモリシステム１のシステム構築、当該システム構築が正常に終了したか否かの判定等の処理を行うが、これらの処理については、説明を省略する。
【００８１】
その後、メモリコントローラ１２は、ホストシステム２からの要求を受信するまで待機する（ステップＳ３７５）。ステップＳ３７５の処理が行われた後にメモリコントローラ１２が行う処理については、説明を省略する。このため、図３では、当該処理の流れについて省略されている。
【００８２】
このように、メモリコントローラ１２は、起動時においてフラッシュメモリ１１が有する記憶領域内に第２ファームウェアが検出されなかった場合（すなわち、第２ファームウェアが見つからなかった場合）、ホストシステム２からの要求に応じて、メモリシステム１の初期化を行い、フラッシュメモリ１１に第２ファームウェアを書き込む。すなわち、このようなメモリコントローラ１２を備えたメモリシステム１では、第２ファームウェアと第３ファームウェアとの両方を同時期に第１ＲＡＭ１２Ｃに書き込む必要がなく、更に、第３ファームウェアをフラッシュメモリ１１に書き込む必要がない。このため、メモリシステム１は、第１ＲＡＭ１２Ｃの記憶領域と、フラッシュメモリ１１の記憶領域のうちファームウェアが記憶される記憶領域との両方を小さくすることができる。
【００８３】
＜メモリシステムが第２ファームウェアの検索において第２ファームウェアを検出できなかった場合においてホストシステムが行う処理＞
以下、図４を参照し、図２に示したステップＳ１２０においてメモリシステム１（すなわち、メモリコントローラ１２）が第２ファームウェアの検索において第２ファームウェアを検出できなかった場合においてホストシステム２が行う処理について説明する。図４は、図２に示したステップＳ１２０においてメモリシステム１が第２ファームウェアの検索において第２ファームウェアを検出できなかった場合においてホストシステム２が行う処理の流れの一例を示す図である。
【００８４】
ホストシステム２は、メモリシステム１からエラー情報を受信した後、ファームウェアをメモリシステム１に送信するコマンドを送信（発行）する（ステップＳ５１０）。ここで、ステップＳ５１０においてホストシステム２がメモリシステム１に送信する当該コマンドは、図２に示したステップＳ１５０においてメモリコントローラ１２が受信するコマンド（すなわち、メモリシステム１が受信するコマンド）のことである。なお、本実施形態では、当該コマンドの内容の間違いによる異常終了と、当該異常終了に伴う処理とのそれぞれについては、説明を省略する。
【００８５】
次に、ホストシステム２は、ステップＳ５１０においてメモリシステム１に送信したコマンドへの応答として、コマンドの内容がメモリシステム１によって実行可能であり、当該コマンドの処理としてデータをメモリシステム１が受信する準備ができたことを示す情報をメモリシステム１から受信するまで待機する。そして、ホストシステム２は、メモリシステム１から当該応答（すなわち、当該情報）を受信する（ステップＳ５２０）。
【００８６】
次に、ホストシステム２は、第３ファームウェアをメモリシステム１に送信する（ステップＳ５３０）。
【００８７】
次に、ホストシステム２は、ステップＳ５１０においてメモリシステム１に送信したコマンドの正常終了を示す情報をメモリシステム１から受信するまで待機する。そして、ホストシステム２は、当該情報をメモリシステム１から受信する（ステップＳ５４０）。
【００８８】
次に、ホストシステム２は、メモリシステム１の初期化をメモリシステム１（すなわち、メモリコントローラ１２）に行わせるコマンドをメモリシステム１に送信（発行）する（ステップＳ５５０）。なお、本実施形態では、当該コマンドの内容の間違いによる異常終了と、当該異常終了に伴う処理とのそれぞれについては、説明を省略する。
【００８９】
次に、ホストシステム２は、ステップＳ５５０においてメモリシステム１に送信したコマンドへの応答として、コマンドの内容がメモリシステム１によって実行可能であり、当該コマンドの処理としてデータをメモリシステム１が受信する準備ができたことを示す情報をメモリシステム１から受信するまで待機する。そして、ホストシステム２は、メモリシステム１から当該応答（すなわち、当該情報）を受信する（ステップＳ５６０）。
【００９０】
次に、ホストシステム２は、メモリシステム１の初期化に必要なデータをメモリシステム１に送信する（ステップＳ５７０）。
【００９１】
次に、ホストシステム２は、ステップＳ５５０においてメモリシステム１に送信したコマンドの正常終了又は異常終了を示す情報をメモリシステム１から受信するまで待機する。そして、ホストシステム２は、メモリシステム１から当該情報を受信する（ステップＳ５８０）。以下では、一例として、ホストシステム２が、当該正常終了を示す情報をメモリシステム１から受信した場合について説明する。そして、以下では、ホストシステム２が、当該異常終了を示す情報をメモリシステム１から受信した場合の処理についての説明を省略する。
【００９２】
次に、ホストシステム２は、ファームウェアをメモリシステム１に送信するコマンドを送信（発行）する（ステップＳ５９０）。ここで、ステップＳ５９０においてホストシステム２がメモリシステム１に送信するコマンドは、図２に示したステップＳ２８０においてメモリコントローラ１２が受信するコマンド（すなわち、メモリシステム１が受信するコマンド）のことである。なお、本実施形態では、当該コマンドの内容の間違いによる異常終了と、当該異常終了に伴う処理とのそれぞれについては、説明を省略する。
【００９３】
次に、ホストシステム２は、ステップＳ５９０においてメモリコントローラ１２に送信したコマンドへの応答として、コマンドの内容がメモリシステム１によって実行可能であり、当該コマンドの処理としてデータをメモリシステム１が受信する準備ができたことを示す情報をメモリシステム１から受信するまで待機する。そして、ホストシステム２は、メモリシステム１から当該応答（すなわち、当該情報）を受信する（ステップＳ６００）。
【００９４】
次に、ホストシステム２は、第２ファームウェアをメモリシステム１に送信する（ステップＳ６１０）。
【００９５】
次に、ホストシステム２は、ステップＳ５９０においてメモリシステム１に送信したコマンドの正常終了又は異常終了を示す情報をメモリシステム１から受信するまで待機する。そして、ホストシステム２は、当該情報をメモリシステム１から受信する（ステップＳ６２０）。以下では、一例として、ホストシステム２が、当該正常終了を示す情報をメモリシステム１から受信した場合について説明する。そして、以下では、ホストシステム２が、当該異常終了を示す情報をメモリシステム１から受信した場合の処理についての説明を省略する。
【００９６】
次に、ホストシステム２は、通常処理を行う（ステップＳ６３０）。ここで、ステップＳ６３０においてホストシステム２が行う通常処理には、例えば、ユーザーからの操作に応じて、各種のデータの書き込みを行う処理、各種のデータの読み出しを行う処理等が含まれている。本実施形態では、当該通常処理の詳細については、これ以上の説明を省略する。このため、図４では、当該通常処理の流れについて省略している。
【００９７】
なお、ホストシステム２は、ステップＳ５１０の処理が行われるよりも前のタイミングにおいて、エラー情報に代えて、メモリシステム１から正常終了を示す情報を受信した場合、ステップＳ６３０に遷移し、通常処理を行う。当該情報は、ステップＳ１２０の処理において第２ファームウェアの検索が正常終了したこと（すなわち、第２ファームウェアが検出されたこと）を示す情報である。当該情報は、ステップＳ１３０において第２ファームウェアが見つかった場合においてメモリコントローラ１２がホストシステム２に送信する情報である。
【００９８】
このように、ホストシステム２は、図２に示したステップＳ１２０においてメモリシステム１（すなわち、メモリコントローラ１２）が第２ファームウェアの検索において第２ファームウェアを検出できなかった場合、メモリシステム１の初期化をメモリシステム１に行わせ、フラッシュメモリ１１への第２ファームウェアの書き込みをメモリシステム１に行わせる。これにより、メモリシステム１は、第２ファームウェアと第３ファームウェアとの両方を同時期に第１ＲＡＭ１２Ｃに書き込む必要がなく、更に、フラッシュメモリ１１に第３ファームウェアを書き込む必要がない。このため、メモリシステム１は、第１ＲＡＭ１２Ｃの記憶領域と、フラッシュメモリ１１の記憶領域のうちファームウェアが記憶される記憶領域との両方を小さくすることができる。
【００９９】
以上のように、実施形態に係るメモリコントローラ（上記において説明した実施形態では、メモリコントローラ１２）は、ホストシステム（上記において説明した実施形態では、ホストシステム２）から与えられたコマンドに基づいて、フラッシュメモリ（上記において説明した実施形態では、フラッシュメモリ１１）に対するアクセスを制御するメモリコントローラである。メモリコントローラは、プロセッサー（上記において説明した実施形態では、プロセッサー１２Ａ）と、ＲＡＭ（上記において説明した実施形態では、第１ＲＡＭ１２Ｃ）と、第１ファームウェアが書き込まれているマスクＲＯＭ（上記において説明した実施形態では、マスクＲＯＭ１２Ｂ）と、を備える。また、プロセッサーは、起動時において、第１ファームウェアに基づいてフラッシュメモリに書き込まれている第２ファームウェアの検索を実行し、当該検索によって第２ファームウェアが見つからなかった場合、ホストシステムから与えられる第３ファームウェアをＲＡＭに書き込み、ＲＡＭに書き込れた第３ファームウェアに基づく初期化を行う。これにより、メモリコントローラは、第１ＲＡＭの記憶領域と、フラッシュメモリの記憶領域のうちファームウェアが記憶される記憶領域との両方を小さくすることができる。
【０１００】
また、メモリコントローラでは、初期化において行われる処理には、フラッシュメモリが有する記憶領域のうち第２ファームウェアが書き込まれる領域（上記において説明した実施形態では、第１領域１１Ａ）を生成する処理と、ホストシステムから与えられる第２ファームウェアを、生成した第１領域に書き込む処理とが含まれている、構成が用いられてもよい。
【０１０１】
また、メモリコントローラは、第２ファームウェアの検索によって第２ファームウェアが見つからなかった場合、エラー情報をホストシステムに送信し、ホストシステムがファームウェアをメモリコントローラに送信するコマンドを受信した後、ホストシステムから第３ファームウェアが与えられる、構成が用いられてもよい。
【０１０２】
また、メモリコントローラは、初期化を行った後、第２ファームウェアに基づく動作を開始する、構成が用いられてもよい。
【０１０３】
以上、この発明の実施形態を、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない限り、変更、置換、削除等されてもよい。
【０１０４】
また、以上に説明した装置（例えば、メモリコントローラ１２）における任意の構成部の機能を実現するためのプログラムを、コンピューター読み取り可能な記録媒体に記録し、そのプログラムをコンピューターシステムに読み込ませて実行するようにしてもよい。なお、ここでいう「コンピューターシステム」とは、ＯＳ（Operating  System）や周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ（Compact  Disk）−ＲＯＭ等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバーやクライアントとなるコンピューターシステム内部の揮発性メモリー（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【０１０５】
また、上記のプログラムは、このプログラムを記憶装置等に格納したコンピューターシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピューターシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記のプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、上記のプログラムは、前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【符号の説明】
【０１０６】
１…メモリシステム、２…ホストシステム、１１…フラッシュメモリ、１１Ａ…第１領域、１１Ｂ…第２領域、１１Ｃ…第３領域、１２…メモリコントローラ、１２Ａ…プロセッサー、１２Ｂ…マスクＲＯＭ、１２Ｃ…第１ＲＡＭ、１２Ｄ…第２ＲＡＭ、１２Ｅ…バッファ
【図１】
2020067835.tif 000003
【図２】
2020067835.tif 000004
【図３】
2020067835.tif 000005
【図４】
2020067835.tif 000006