(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024126252
(43)【公開日】2024-09-20
(54)【発明の名称】メモリシステム、ファームウェア更新方法、及びプログラム
(51)【国際特許分類】
G06F 12/02 20060101AFI20240912BHJP
G06F 12/00 20060101ALI20240912BHJP
G06F 8/654 20180101ALI20240912BHJP
【FI】
G06F12/02 510A
G06F12/00 597U
G06F8/654
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023034522
(22)【出願日】2023-03-07
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】100083806
【弁理士】
【氏名又は名称】三好 秀和
(74)【代理人】
【識別番号】100111235
【弁理士】
【氏名又は名称】原 裕子
(74)【代理人】
【識別番号】100170575
【弁理士】
【氏名又は名称】森 太士
(72)【発明者】
【氏名】松本 真梨子
【テーマコード(参考)】
5B160
5B376
【Fターム(参考)】
5B160AC03
5B376CA81
5B376CA88
(57)【要約】
【課題】ファームウェア更新時にメモリブロックを効率的に使用することができ、書き込みブロック数を削減して、書き込み時間を短縮する。
【解決手段】実施形態に係るメモリシステムは、半導体メモリと、半導体メモリに電気的に接続されたメモリコントローラと、を備える。半導体メモリは、データ消去動作の単位であるブロックを少なくとも1つ含み、少なくとも1つのブロックのうちの第1ブロックは、複数のファームウェアがそれぞれ格納された複数のスロットを含み、複数のスロットのうちアクティブなスロットを示すアクティブスロット情報を格納する。メモリコントローラは、複数のファームウェアのうちの少なくとも1つの更新を指示するコマンドをホスト装置から受信したことに応じ、第1ブロックの複数のスロットのうちのいずれか1つに格納されたファームウェアと、第1ブロックに格納されたアクティブスロット情報と、のうちの少なくとも一方を変更する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
データ消去動作の単位であるブロックを少なくとも1つ含み、少なくとも1つの前記ブロックのうちの第1ブロックは、複数のファームウェアがそれぞれ格納された複数のスロットを含み、前記複数のスロットのうちアクティブなスロットを示すアクティブスロット情報を格納する、半導体メモリと、
前記半導体メモリに電気的に接続され、前記複数のファームウェアのうちの少なくとも1つの更新を指示するコマンドをホスト装置から受信したことに応じ、前記第1ブロックの前記複数のスロットのうちのいずれか1つに格納された前記ファームウェアと、前記第1ブロックに格納された前記アクティブスロット情報と、のうちの少なくとも一方を変更するように構成されたメモリコントローラと、を備える、
メモリシステム。
【請求項2】
前記複数のファームウェアは、互いに異なるファームウェアである、
請求項1に記載のメモリシステム。
【請求項3】
異なる前記複数のファームウェアは、第1ファームウェアと、第2ファームウェアと、を少なくとも含み、
前記複数のスロットは、前記第1ファームウェアを格納する第1スロットと、前記第2ファームウェアを格納する第2スロットと、を少なくとも含み、
前記メモリコントローラは、前記コマンドを前記ホスト装置から受信したことに応じ、
前記第1ブロックの前記第1スロットに格納された前記第1ファームウェアを読み出し、
前記第1ブロックに対して前記データ消去動作を実行し、
前記読み出された第1ファームウェアを変更し、
前記変更された第1ファームウェアを前記データ消去動作が実行された第1ブロックに書き込む、ように構成された、
請求項2に記載のメモリシステム。
【請求項4】
異なる前記複数のファームウェアは、第1ファームウェアと、第2ファームウェアと、を少なくとも含み、
前記複数のスロットは、前記第1ファームウェアを格納する第1スロットと、前記第2ファームウェアを格納する第2スロットと、を少なくとも含み、
前記メモリコントローラは、前記コマンドを前記ホスト装置から受信したことに応じ、
前記第1ブロックに格納された前記アクティブスロット情報を読み出し、
前記第1ブロックに対して前記データ消去動作を実行し、
前記読み出されたアクティブスロット情報が示す前記アクティブなスロットを、前記第1スロットから前記第2スロットに変更し、
前記変更されたアクティブスロット情報を前記データ消去動作が実行された第1ブロックに書き込む、ように構成された、
請求項2に記載のメモリシステム。
【請求項5】
少なくとも1つのブロックは第2ブロックをさらに含み、前記第2ブロックは、異なる前記複数のファームウェアのそれぞれの複製がそれぞれ格納された複数のスロットを含み、前記アクティブスロット情報の複製を格納し、
前記メモリコントローラは、前記コマンドを前記ホスト装置から受信したことに応じ、前記第1ブロックと前記第2ブロックのそれぞれに対して、前記複数のスロットのうちいずれか1つに格納された前記ファームウェアと、前記アクティブスロット情報と、のうちの少なくとも一方を更新する、ように構成された、
請求項2に記載のメモリシステム。
【請求項6】
前記メモリコントローラは、前記コマンドが前記アクティブスロット情報の変更を指示していることに応じ、前記第1ブロックの前記複数のスロットにそれぞれ格納された前記複数のファームウェアのいずれも変更せず、前記第1ブロックに格納された前記アクティブスロット情報を変更する、ように構成された、
請求項1に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、前記コマンドが前記ファームウェアの変更を指示していることに応じ、前記第1ブロックの前記複数のスロットにそれぞれ格納された前記複数のファームウェアのうちのいずれか1つを変更し、前記第1ブロックに格納された前記アクティブスロット情報を変更しない、ように構成された、
請求項1に記載のメモリシステム。
【請求項8】
前記アクティブスロット情報は、前記アクティブなスロットに格納された前記ファームウェアの起動に失敗した場合に別のスロットに格納されたファームウェアを起動する起動順序に関する情報を含む、
請求項1に記載のメモリシステム。
【請求項9】
データ消去動作の単位であるブロックを少なくとも1つ含む半導体メモリに格納されたファームウェアの更新方法であって、
少なくとも1つのブロックのうちの第1ブロックに設けられた複数のスロットのそれぞれに、複数のファームウェアをそれぞれ格納することと、
前記第1ブロックに、前記複数のスロットのうちアクティブなスロットを示すアクティブスロット情報を格納することと、
前記複数のファームウェアのうちの少なくとも1つの更新を指示するコマンドをホスト装置から受信することと、
前記第1ブロックの前記複数のスロットのうちのいずれか1つに格納された前記ファームウェアと、前記第1ブロックに格納された前記アクティブスロット情報と、のうちの少なくとも一方を変更することと、を備える、
ファームウェア更新方法。
【請求項10】
データ消去動作の単位であるブロックを少なくとも1つ含む半導体メモリに格納されたファームウェアを更新する、コンピュータにより実行可能なプログラムであって、
少なくとも1つのブロックのうちの第1ブロックに設けられた複数のスロットのそれぞれに、複数のファームウェアをそれぞれ格納することと、
前記第1ブロックに、前記複数のスロットのうちアクティブなスロットを示すアクティブスロット情報を格納することと、
前記複数のファームウェアのうちの少なくとも1つの更新を指示するコマンドをホスト装置から受信することと、
前記第1ブロックの前記複数のスロットのうちのいずれか1つに格納された前記ファームウェアと、前記第1ブロックに格納された前記アクティブスロット情報と、のうちの少なくとも一方を変更することと、を前記コンピュータに実行させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステム、ファームウェア更新方法、及びプログラムに関する。
【背景技術】
【0002】
NAND型フラッシュメモリ(以降、NANDフラッシュメモリともいう)のような半導体メモリを含むメモリシステムが、様々な電子機器に用いられている。このようなメモリシステムは、例えば、SSD(Solid State drives)である。
【0003】
例えば、メモリシステム内に備えられているメモリコントローラは、NANDフラッシュメモリに対する各種の処理及び動作を、指示(又は命令)できる。メモリコントローラは、メモリシステム内(例えば、NANDフラッシュメモリ内)に記憶されたファームウェアに基づいて、NANDフラッシュメモリに対する各種の処理及び動作を制御する。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願公開第2016/0275011号明細書
【特許文献2】米国特許第8,463,986号明細書
【特許文献3】米国特許第10,884,947号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の一実施形態は、ファームウェア更新時にNAND型フラッシュメモリのメモリブロックを効率的に使用することができると共に、ファームウェア更新時の書き込みブロック数を削減して、書き込み時間を短縮することができる、メモリシステム、ファームウェア更新方法、及びプログラムを提供する。
【課題を解決するための手段】
【0006】
実施形態に係るメモリシステムは、半導体メモリと、半導体メモリに電気的に接続されたメモリコントローラと、を備える。半導体メモリは、データ消去動作の単位であるブロックを少なくとも1つ含み、少なくとも1つのブロックのうちの第1ブロックは、複数のファームウェアがそれぞれ格納された複数のスロットを含み、複数のスロットのうちアクティブなスロットを示すアクティブスロット情報を格納する。メモリコントローラは、複数のファームウェアのうちの少なくとも1つの更新を指示するコマンドをホスト装置から受信したことに応じ、第1ブロックの複数のスロットのうちのいずれか1つに格納されたファームウェアと、第1ブロックに格納されたアクティブスロット情報と、のうちの少なくとも一方を変更する。
【図面の簡単な説明】
【0007】
【
図1】比較例のNAND型フラッシュメモリにおける、メモリブロックの概略構成例を模式的に示す図。
【
図2A】比較例のNAND型フラッシュメモリにおける、アクティブスロットが設けられたメモリブロックの例を模式的に示す図。
【
図2B】比較例のNAND型フラッシュメモリにおける、アクティブスロットの変更例を模式的に示す図。
【
図3】実施形態に係るメモリシステムとホスト装置の概略構成例を模式的に示すブロック図。
【
図4】実施形態に係るメモリコントローラの内部構成例を模式的に示すブロック図。
【
図5】実施形態に係るNAND型フラッシュメモリにおける、メモリブロックの概略構成例を模式的に示す図。
【
図6】実施形態に係るメモリブロックのうち、ファームウェアを格納するスロットが設けられたメモリブロックの内部構成例を模式的に示す図。
【
図7】実施形態に係るメモリブロックにおいて、スロットに格納されたファームウェアを変更する例を模式的に示す図。
【
図8】実施形態に係るメモリブロックにおいて、アクティブスロットを変更する例を模式的に示す図。
【
図9】実施形態に係るファームウェア更新処理の手順の概略例を示すフローチャート。
【
図10】実施形態に係るファームウェアの変更処理の手順の概略例を示すフローチャート。
【
図11】実施形態に係るアクティブスロットの変更処理の手順の概略例を示すフローチャート。
【
図12A】比較例におけるメモリブロック群の概略構成例を模式的に示す図。
【
図12B】実施形態におけるメモリブロック群の概略構成例を模式的に示す図。
【
図13A】比較例におけるメモリブロックの使用状況の例を模式的に示す図。
【
図13B】実施形態におけるメモリブロックの使用状況の例を模式的に示す図。
【発明を実施するための形態】
【0008】
次に、図面を参照して、実施形態について説明する。以下に説明する明細書又は図面の記載において、同様の構成要素には同一の符号を付して説明を省略する。図面は模式的なものである。また、以下に示す実施形態は、技術的思想を具体化するための装置や方法を例示するものである。実施形態は、特許請求の範囲において、種々の変更を加えることができる。
【0009】
(実施形態)
NAND型フラッシュメモリ(以降、NANDフラッシュメモリともいう)のような半導体メモリを含むメモリシステムは、ホスト装置からのコマンドに応じた各種の処理を実行する。メモリシステム内に備えられているメモリコントローラは、メモリシステム内(例えば、NAND型フラッシュメモリ内)に記憶されたファームウェアに基づいて、NAND型フラッシュメモリに対する各種の処理及び動作を制御する。ファームウェアは、例えば、NAND型フラッシュメモリの特定のメモリブロック(以降、単に、ブロックともいう)内に設けられたファームウェアスロット(以降、単に、スロットともいう)内に記憶される。NAND型フラッシュメモリにおいて、ブロックは、データ消去動作の単位である。
【0010】
メモリコントローラは、概して、実行する各種の動作に応じて、複数種類のファームウェアを使い分ける。
【0011】
また、ロバスト性の向上などのために、同一のファームウェアがメモリシステム内の複数箇所に格納される。以下では、このように、同一のファームウェアを複数箇所に格納することを「ファームウェアを多重化する」という。例えば、同一のファームウェアを4箇所に格納することを「ファームウェアの多重度を4にする」ともいう。
【0012】
ファームウェアの更新は、例えば、ホスト装置から受信した更新リクエストに応じて、メモリコントローラが実行する。ファームウェアが更新されると、ファームウェアに従ってメモリコントローラが制御する動作内容が変更される。尚、ファームウェアの更新は、本明細書では、スロット内のファームウェアを変更する狭義のファームウェアの更新と、スロット内のファームウェアの内容はそのままで、アクティブなスロット(以降、アクティブスロットともいう)を変更する広義のファームウェアの更新と、の2つの様態を含む。ここで、アクティブなスロットとは、現在実行されているファームウェアが格納されているスロットである。
【0013】
図1は、比較例におけるNANDフラッシュメモリ20Cのメモリブロックの概略構成の一例を模式的に示している。
図1に示す例では、3種類のファームウェアそれぞれの多重度を4にするために12個のスロットが設けられている。すなわち、3スロット分のファームウェアそれぞれの多重度を4にするために、1ブロックあたりに1スロットが設けられ、計12ブロックがファームウェアの格納用として確保されている。つまり、多重度×スロットの数に等しい数のブロックが最低限確保される必要がある。
【0014】
より具体的には、3種類のうちの1種類目のファームウェアを格納するためのスロット1が、4個のブロック1_1~1_4にそれぞれ1個ずつ設けられている。同様に、3種類のうちの2種類目のファームウェアを格納するためのスロット2が、4個のブロック2_1~2_4にそれぞれ1個ずつ設けられ、3種類目のファームウェアを格納するためのスロット3が、4個のブロック3_1~3_4にそれぞれ1個ずつ設けられている。4つのスロット1に格納された4つのファームウェアは、すべて同一のファームウェアである。4つのスロット2に格納された4つのファームウェアは、すべて同一のファームウェアである。4つのスロット3に格納された4つのファームウェアは、すべて同一のファームウェアである。また、スロット1に格納されたファームウェアは、スロット2に格納されたファームウェアともスロット3に格納されたファームウェアとも異なるファームウェアであってもよく、同一のファームウェアであってもよい。スロット2に格納されたファームウェアは、スロット3に格納されたファームウェアとは異なるファームウェアであってもよく、同一のファームウェアであってもよい。
【0015】
尚、ブロック1_5~1_n、ブロック2_5~2_n、ブロック3_5~3_n(ここで、nは7以上の自然数)は、ユーザデータ用のブロックである。ここで、ユーザデータ用のブロックとは、例えば、ホスト装置が読み書きするデータ用のブロックである。
【0016】
図2Aは、
図1に示したNANDフラッシュメモリ20Cにおける、アクティブスロットであるスロット1が設けられているブロック1_1~1_4の例を模式的に示している。
図2Bは、
図2Aに示したNANDフラッシュメモリ20Cにおける、アクティブスロットの変更例を模式的に示している。
【0017】
図2A及び
図2Bに示す例では、特定のブロック1_1~1_4にアクティブスロットが設けられることが予め(例えば設計時点で)決められている。すなわち、
図2Aの例では、ブロック1_1~1_4に設けられたスロットがアクティブスロットとして固定的に認識される。このように、特定のブロック1_1~1_4にアクティブスロットを設けるのは、どのブロックにアクティブスロットが設けられているのかを示す情報の保存先を決定することが難しいからである。仮に、12個のブロック1_1~1_4、2_1~2_4、3_1~3_4にアクティブスロットを示す情報をそれぞれ格納した場合、例えばアクティブスロットを変更するだけであっても、12個のブロックのすべてに書き込み処理を行う必要が生じてしまう。また、アクティブスロットを示す情報を格納する専用のブロックを1ブロック確保した場合、その専用のブロックに対して書き込み処理を行う必要が生じ、書き込み処理の回数の増加につながる。
【0018】
図2Bに示す比較例において、アクティブスロットをスロット1からスロット2に変更するためには、ブロック1_1~1_4それぞれに格納されているデータと、ブロック2_1~2_4それぞれに格納されているデータと、をスワップする必要がある。そのためには、計8ブロック1_1~1_4、2_1~2_4について更新処理(書き込み処理)を行う必要がある。このような更新処理をNANDフラッシュメモリに対して行う場合、各ブロックに格納されているデータを別なブロックにバックアップし、元のブロックに対してデータ消去動作を実行したあと、バックアップしておいたデータを元のブロックに書き戻す処理を行う必要がある。
【0019】
また、ファームウェアのサイズは、例えば、NANDフラッシュメモリのブロックサイズの3分の1以下である。よって、1ブロックあたりに1スロットを設けるような使い方ではブロックのメモリ領域を有効に活用できない。ブロックサイズは増えていく傾向にあるため、ブロックの効果的な使い方が求められている。
【0020】
(実施形態に係るメモリシステム)
図3は、実施形態に係るメモリシステム1とホスト装置5の概略構成例を模式的に示している。また、
図4は、
図3に示したメモリシステム1に備えられたメモリコントローラ10の内部構成例を模式的に示している。
【0021】
実施形態に係るメモリシステム1は、ホスト装置5からのリクエストに応じて、メモリシステム1内におけるデータの書き込み、データの読み出し、及びデータの消去などを行う。
【0022】
ホスト装置5は、プロセッサ50と、記憶装置51と、RAM(Random Access Memory)52と、インタフェース回路(I/F)53を備える。ホスト装置5は、 例えば、サーバ、パーソナルコンピュータ、スマートフォン、フューチャーフォン、携帯端末(例えば、タブレット端末)、ゲーム機器、情報家電、車載機器、ルータ、基地局などである。
【0023】
プロセッサ50は、ホスト装置5の各種の処理及び動作を、制御する。プロセッサ50は、メモリシステム1に対する各種の処理及び動作をリクエスト(例えば、命令、指示)するためのコマンドCMDを発行する。
【0024】
記憶装置51は、HDD(Hard Disc Drive)のようなストレージデバイスである。RAM52は、プロセッサ50による各種のデータ処理のための作業領域として機能する。
【0025】
インタフェース回路53は、所定のインタフェース規格及び(又は)通信プロトコルに基づいて、メモリシステム1との通信を行う。尚、ホスト装置5からメモリシステム1に対するコマンドCMDは、インタフェース回路53が準拠するインタフェース規格に基づく。例えば、インタフェース回路53が準拠するインタフェース規格(又は通信プロトコル)は、SAS(Serial Attached SCSI)規格、SATA(Serial ATA)規格、PCIexpress(登録商標)規格、NVM Express(登録商標)規格、Universal Flash Strage規格などである。尚、インタフェース回路53は、ここで例示されたインタフェース規格以外の他のインタフェース規格に準拠してもよい。
【0026】
実施形態に係るメモリシステム1は、メモリコントローラ10と、NANDフラッシュメモリ20とを備えている。
【0027】
メモリコントローラ10は、ホスト装置5からのコマンドCMDに呼応して、NANDフラッシュメモリ20に対するデータの書き込み、データの読み出し及びデータの消去などの各種の処理及び動作を、NANDフラッシュメモリ20に指示する。メモリコントローラ10は、システムLSI(Large-Scale Integrated Circuit)又はSoC(System-on-a-Chip)で構成され得る。メモリコントローラ10の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、又は、これらの組み合わせにより実現され得る。
【0028】
メモリコントローラ10は、プロセッサ100と、RAM110と、バッファ部120と、インタフェース回路(I/F)130及び140とを備えている。
【0029】
プロセッサ100は、NANDフラッシュメモリ20に対する各種の処理及び動作を、指示、命令する。例えば、プロセッサ100は、NANDフラッシュメモリ20に対する指示を示すコマンドを生成する。プロセッサ100は、例えば、メモリシステム1内(例えば、NANDフラッシュメモリ20のメモリ領域内)に格納されたファームウェアに従って、NANDフラッシュメモリ20に対する各種の処理及び動作を制御する。
【0030】
図4に示すように、プロセッサ100は、CPU101と、解析部102と、実行部103と、メモリ104を備えている。プロセッサ100は、これらの構成要素によって、ホスト装置5からのコマンドCMDの実行のための機能、ファームウェアの更新のための機能などを実現する。
【0031】
CPU101は、プロセッサ100内で実行される各種の処理及びプロセッサ100内の各種の動作を制御する。解析部102は、ホスト装置5からのコマンドCMDを解析する。実行部103は、コマンドCMDの解析結果に基づいた動作を実行する。解析部102及び実行部103の機能は、専用ハードウェア(回路)によって実現されてもよいし、CPU101がソフトウェア(プログラム)を実行することによって実現されてもよい。
【0032】
RAM110は、メモリコントローラ10内における、プロセッサ100による各種の処理及び動作のための作業領域として機能する。RAM110は、プロセッサ100による各種の処理に用いられるファームウェアFW、プログラムUDP及びデータ等を一時的に記憶する。例えば、RAM110は、CPU101や実行部103によりアクセスされる。尚、RAM110と同様の機能・構成を有するメモリ104がプロセッサ100内に設けられてもよい。プログラムUDPは、本実施形態に係るファームウェア更新用のプログラムである。プログラムUDPは、NANDフラッシュメモリ20内に保存されており、メモリコントローラ10がファームウェアFWの更新を実行する際には、プログラムUDPはNANDフラッシュメモリ20からRAM110又はメモリ104にロードされる。メモリコントローラ10は、RAM110又はメモリ104にロードされたプログラムUDPを実行して、ファームウェアFWの更新を行う。なお、プログラムUDPは、ファームウェアFWの一部であってもよい。
【0033】
バッファ部120は、メモリコントローラ10とホスト装置5との間で転送されるデータ、及び、メモリコントローラ10とフラッシュメモリ20との間で転送されるデータを、一時的に記憶する。例えば、バッファ部120は、コマンドバッファ121とデータバッファ122とを含む。
【0034】
コマンドバッファ121は、ホスト装置5からのコマンドCMDを一時的に記憶する。データバッファ122は、メモリコントローラ10とホスト装置5との間で転送されるデータDAT、及び、メモリコントローラ10とフラッシュメモリ20との間で転送されるデータDATを一時的に記憶する。
【0035】
インタフェース(I/F)回路130は、所定のインタフェース規格に基づいて、ホスト装置5とメモリコントローラ10との間のデータ転送を行う。インタフェース回路130が準拠するインタフェース規格(及び通信プロトコル)は、ホスト装置5のインタフェース回路53が準拠するインタフェース規格と同じ規格である。
【0036】
インタフェース(I/F)回路140は、NANDインタフェース規格に基づいて、メモリコントローラ10とNANDフラッシュメモリ20との間の通信(例えばデータ転送)を行う。
【0037】
メモリコントローラ10がNANDフラッシュメモリ20に或る動作を命令する場合、メモリコントローラ10は、コマンド及びアドレス情報を含むデータDATを、NANDフラッシュメモリ20に送る。尚、メモリコントローラ10がデータの書き込みをNANDフラッシュメモリ20に命令する場合、データDATは、書き込みデータをさらに含む。尚、メモリコントローラ10は、上記の構成に加えて、ECC回路(図示せず)のような他の構成を含んでもよい。
【0038】
NANDフラッシュメモリ20は、不揮発性の半導体メモリデバイスである。NANDフラッシュメモリ20は、データやファームウェアを実質的に不揮発に記憶することができる。
【0039】
(NAND型フラッシュメモリのブロック構成)
図5は、実施形態に係るNANDフラッシュメモリ20におけるメモリブロックの概略構成の一例を模式的に示している。実施形態におけるNAND型フラッシュメモリ20では、複数種類のファームウェアを格納するための複数のスロットと、アクティブスロットに関する情報(以降、アクティブスロット情報ともいう)格納する領域と、が1ブロック内に設けられている。
【0040】
図5に示す例では、3種類のファームウェアを格納するための3個のスロット1~3と、アクティブスロット情報を格納する領域とが、1ブロック内に設けられている。そして、3スロット分のファームウェアそれぞれの多重度を4にするために、4個のブロック1_1~1_4がファームウェア格納用として確保される。つまり、本実施形態においては、多重度の数に等しい数のブロック(この場合4個のブロック)が確保される。
【0041】
より具体的には、多重度4のうちの1つ目のブロック1_1に3種類のファームウェアを格納するためのスロット1~3が設けられ、更に、アクティブスロット情報1_1が格納される。同様に、多重度4のうちの2つ目のブロック1_2に3種類のファームウェアを格納するためのスロット1~3が設けられ、更に、アクティブスロット情報1_2が格納される。多重度4のうちの3つ目のブロック1_3に3種類のファームウェアを格納するためのスロット1~3が設けられ、更に、アクティブスロット情報1_3とが格納される。多重度4のうちの4つ目のブロック1_4に3種類のファームウェアを格納するためのスロット1~3が設けられ、更に、アクティブスロット情報1_4が格納される。ブロック1_1~1_4の4つのスロット1に格納された4つのファームウェアは、すべて同一のファームウェアである。同様に、4つのスロット2に格納された4つのファームウェアは、すべて同一のファームウェアである。4つのスロット3に格納された4つのファームウェアは、すべて同一のファームウェアである。また、スロット1に格納されたファームウェアは、スロット2に格納されたファームウェアともスロット3に格納されたファームウェアとも異なるファームウェアであってもよく、同一のファームウェアであってもよい。スロット2に格納されたファームウェアは、スロット3に格納されたファームウェアとは異なるファームウェアであってもよく、同一のファームウェアであってもよい。
【0042】
尚、ブロック1_5~1_n、ブロック2_1~2_n、ブロック3_1~3_n(ここで、nは7以上の自然数)は、ユーザデータ用のブロックである。ここで、ユーザデータ用のブロックとは、例えば、ホスト装置5が読み書きするデータ用のブロックである。
【0043】
図6は、
図5に示したメモリブロックのうち、ファームウェアを格納するスロットが設けられたブロック1_1の内部構成の一例を模式的に示している。ブロック1_1には、アクティブスロット情報1_1が格納され、更に、スロット1~3が設けられている。
【0044】
アクティブスロット情報1_1は、多重度数、スロット数、アクティブスロット番号、起動失敗時の起動順情報、ファームウェアバージョン情報などを含む。例えば、現在のアクティブスロットがスロット1である場合、アクティブスロット情報1_1の多重度数には「4」、スロット数には「3」、アクティブスロット番号には「1」、起動失敗時の起動順情報には「2→3」が設定される。ここで、「起動失敗時の起動順」とは、現在アクティブなスロット1のファームウェアの起動が失敗した場合に、次に起動されるファームウェアのスロットの番号を示す。現在アクティブなスロットがスロット1である場合、次に起動されるファームウェアのスロットはスロット2であり、スロット2のファームウェアの起動も失敗した場合に、その次に起動されるファームウェアのスロットはスロット3である。尚、アクティブスロット情報のうち、アクティブスロット番号以外の情報は、オプショナルな情報である。
【0045】
(ファームウェアの更新)
図7は、
図5に示したメモリブロック1_1~1_4において、スロット1に格納されたファームウェアを変更する例を模式的に示している。
【0046】
図7に示すように、スロット1に格納されたファームウェアを変更する場合(すなわち、狭義のファームウェア更新の場合)、各ブロック1_1~1_4内のスロット1に格納されたファームウェアとアクティブスロット情報とが変更される。すなわち、書き替える必要があるブロックは、ブロック1_1~1_4の4つのブロックのみである。4つのブロック1_1~1_4を書き換える際には、メモリコントローラ10は、各ブロックに格納されているデータを別なブロックにバックアップし、ブロック1_1~1_4に対してデータ消去動作を実行したあと、バックアップしておいたデータをブロック1_1~1_4に書き戻す。
【0047】
尚、
図7において、アクティブスロット情報の丸括弧「()」内の数字は、アクティブなスロットの番号と、起動失敗時の起動順とを示している。
図7において「(スロット1(→2→3))」は、アクティブスロットがスロット1で、起動失敗時の起動順がスロット2、スロット3の順序であることを示している。
【0048】
このように、実施形態に係るメモリシステム1では、ファームウェアを変更する場合も、多重度の数と等しい数のブロックを書き換えるだけで良い。
【0049】
図8は、
図5に示したメモリブロック1_1~1_4において、アクティブスロットをスロット1からにスロット2に変更する例を模式的に示している。
図8の例では、アクティブスロットがスロット1からにスロット2に変更される(すなわち、広義のファームウェア更新)だけで、ファームウェア自体は変更されない。
【0050】
図8に示すように、アクティブスロットをスロット1からにスロット2に変更する場合、メモリコントローラ10は、各ブロック1_1~1_4内のアクティブスロット情報1_1~1_4のアクティブスロット番号をそれぞれ「1」から「2」に変更して、ブロック1_1~1_4の4つのブロックを書き換えれば良い。この際、メモリコントローラ10は、
図7を参照して説明した狭義のファームウェア更新の場合と同様に、各ブロック1_1~1_4の書き替え処理を行う。
【0051】
このように、実施形態に係るメモリシステム1では、アクティブスロットを変更する場合も、多重度の数と等しい数のブロックを書き換えるだけで良い。
【0052】
尚、実施形態に係るメモリシステム1では、狭義のファームウェア更新と広義のファームウェア更新とを同時に行う場合でも、多重度の数と等しい数のブロックを書き換えるだけで良い。
【0053】
以上説明したように、実施形態に係るメモリシステム1は、半導体メモリ(NAND型フラッシュメモリ)20と、半導体メモリ20に電気的に接続されたメモリコントローラ10と、を備える。半導体メモリ20は、データ消去動作の単位であるブロックを少なくとも1つ含み、少なくとも1つのブロックのうちの第1ブロック(例えば
図5のブロック1_1)は、複数のファームウェアがそれぞれ格納された複数のスロット(例えば
図5のスロット1~3)を含み、複数のスロットのうちアクティブなスロットを示すアクティブスロット情報(例えば
図5のアクティブスロット情報1_1)を格納する。メモリコントローラ10は、複数のファームウェアのうちの少なくとも1つの更新を指示するコマンドCMDをホスト装置5から受信したことに応じ、第1ブロックの複数のスロットのうちのいずれか1つに格納されたファームウェアと、第1ブロックに格納されたアクティブスロット情報と、のうちの少なくとも一方を変更するように構成される。
【0054】
複数のファームウェアは、互いに異なるファームウェアであってもよい。
【0055】
また、複数の異なるファームウェアは、第1ファームウェア(例えば
図5のスロット1に格納されたファームウェア)と、第2ファームウェア(例えば
図5のスロット2に格納されたファームウェア)と、を少なくとも含む。複数のスロットは、第1ファームウェアを格納する第1スロット(例えば
図5のスロット1)と、第2ファームウェアを格納する第2スロット(例えば
図5のスロット2)と、を少なくとも含む。メモリコントローラ10は、コマンドCMDをホスト装置5から受信したことに応じ、第1ブロックの第1スロットに格納された第1ファームウェアを読み出し、第1ブロックに対してデータ消去動作を実行し、読み出された第1ファームウェアを変更し、変更された第1ファームウェアをデータ消去動作が実行された第1ブロックに書き込む、ように構成される。
【0056】
また、複数の異なるファームウェアは、第1ファームウェアと(例えば
図5のスロット1に格納されたファームウェア)、第2ファームウェア(例えば
図5のスロット2に格納されたファームウェア)と、を少なくとも含む。複数のスロットは、第1ファームウェアを格納する第1スロット(例えば
図5のスロット1)と、第2ファームウェアを格納する第2スロット(例えば
図5のスロット2)と、を少なくとも含む。メモリコントローラ10は、コマンドCMDをホスト装置5から受信したことに応じ、第1ブロックに格納されたアクティブスロット情報を読み出し、第1ブロックに対してデータ消去動作を実行し、読み出されたアクティブスロット情報が示すアクティブなスロットを、第1スロットから第2スロットに変更し、変更されたアクティブスロット情報をデータ消去動作が実行された第1ブロックに書き込む、ように構成される。
【0057】
また、少なくとも1つのブロックは第2ブロック(例えば
図5のブロック1_2)をさらに含み、第2ブロックは、複数の異なるファームウェアのそれぞれの複製がそれぞれ格納された複数のスロットを含み、アクティブスロット情報の複製を格納する。メモリコントローラ10は、コマンドCMDをホスト装置5から受信したことに応じ、第1ブロックと第2ブロックのそれぞれに対して、複数のスロットのうちいずれか1つに格納されたファームウェアと、アクティブスロット情報と、のうちの少なくとも一方を更新する、ように構成される。
【0058】
また、メモリコントローラ10は、コマンドCMDがアクティブスロット情報の変更を指示していることに応じ、第1ブロックの複数のスロットにそれぞれ格納された複数のファームウェアのいずれも変更せず、第1ブロックに格納されたアクティブスロット情報を変更する、ように構成される。
【0059】
また、メモリコントローラは、コマンドCMDがファームウェアの変更を指示していることに応じ、第1ブロックの複数のスロットにそれぞれ格納された複数のファームウェアのうちのいずれか1つを変更し、第1ブロックに格納されたアクティブスロット情報を変更しない、ように構成される。
【0060】
また、アクティブスロット情報は、アクティブなスロットに格納されたファームウェアの起動に失敗した場合に別のスロットに格納されたファームウェアを起動する起動順序に関する情報を含む。
【0061】
(ファームウェアの更新処理)
次に、本実施形態に係るメモリシステム1におけるファームウェアの更新処理の手順について説明する。以下に説明するファームウェアの更新処理では、ホスト装置5とメモリシステム1とのインタフェース規格に、上述したインタフェース規格のうち、NVMExpress(登録商標)規格(NVM Express TM Revision 1.4,[online],2019年6月10日,[令和5年1月10日検索],インターネット <https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4-2019.06.10-Ratified.pdf>)を用いた場合を例として説明する。
【0062】
また、以下に説明するファームウェア更新処理の一部若しくは全部を、コンピュータに実行させる命令として、コンピュータプログラムに記述することもできる。コンピュータプログラムは、例えば、非一時的なコンピュータ可読媒体に格納され、実施形態に係るメモリシステム1のコントローラ10に用いられる。このコンピュータプログラムは、例えば、NANDフラッシュメモリ20に格納される。また、このコンピュータプログラムは、各スロットに格納されるファームウェアに含まれていてもよい。
【0063】
図9は本実施形態に係るファームウェア更新処理の手順の一例を概略的に示している。また、
図10は、
図9に示したファームウェア更新処理の手順うち、ファームウェアの変更処理(すなわち、狭義のファームウェア更新処理)の手順の概略例を示している。
図11は、
図9に示したファームウェア更新処理の手順うち、アクティブスロットの変更処理(すなわち、広義のファームウェア更新処理)の手順の概略例を示している。
【0064】
図9のステップS100において、ホスト装置5からメモリシステム1へのアクション(例えばコミットアクション(Commit Action))に応じて、処理が開始される。
【0065】
ステップS110において、メモリコントローラ10は、ホスト装置5からメモリシステム1に対して送信されたファームウェアコミット(Firmware Commit)コマンドCMDを受信する。ファームウェアコミットコマンドCMDは、例えばバッファ部120のコマンドバッファ121に一時的に格納される。また、ファームウェアコミットコマンドがファームウェア自体の変更を指示する場合には、ホスト装置5からメモリシステム1に対して更新ファームウェアと更新ファームウェアを識別するための情報が送信される。更新ファームウェアと更新ファームウェアを識別するための情報は、例えばバッファ部120のデータバッファ122に一時的に格納される。
【0066】
ステップS115において、解析部102は、コマンドバッファ121に格納されているファームウェアコミットコマンドCMDの内容を解析する。
【0067】
ステップS115における解析部102による解析の結果、ファームウェアコミットコマンドCMDが「000b」、「001b」、「011b」(ファームウェア変更指示)のいずれかであれば、メモリコントローラ10による処理はステップS120に進み、プロセッサ100の実行部103は、ファームウェアの変更処理を実行する。
【0068】
ステップS115における解析の結果、ファームウェアコミットコマンドCMDが「010b」(アクティブスロットの変更指示)であれば、処理はステップS140に進み、実行部103は、アクティブスロットの変更処理を実行する。
【0069】
ステップS120のファームウェアの変更処理又はステップS140アクティブスロットの変更処理が完了すると、ステップS160において、一連の処理は終了する。
【0070】
(ファームウェア変更)
次に、
図10を参照して、ステップS120のファームウェアの変更処理の具体的な手順を説明する。
【0071】
ステップS1210において、例えばプロセッサ100内の実行部103は、ホスト装置5から送信されてきた更新ファームウェアに添付されている署名を検証する。この署名は、ホスト装置5から送信されてきた更新ファームウェアが安全で且つ正しいものであるか否かを検証するためのものである。署名の検証処理が正常に行われれば、処理はステップS1220に進む。署名の検証処理が正常に行われなければ、メモリコントローラ10は、以降の各ステップS1220~S1270をスキップして処理を終了する(ステップS1280)。
【0072】
ステップS1220において、実行部103は、ファームウェアを変更するために、ブロック1_1~1_4に対するリード処理を行う。ブロック1_1~1_4からリードされたデータは、NANDフラッシュメモリ20の空きブロック、或いはメモリコントローラ10内のデータバッファ122若しくはRAM110などに退避される。なお、ブロック1_1~1_4のそれぞれには同一のデータが格納されているので、実行部103は、ブロック1_1~1_4に対して並列してリード処理を行い、これら4つのブロックから読み出されたデータを用いて1ブロック分のデータを再構築し、再構築された1ブロック分のデータを退避させてもよい。あるいは、実行部103は、ブロック1_1~1_4のうちの何れか一つに対してのみリード処理を行ってもよい。
【0073】
ステップS1230において、実行部103は、ブロック1_1~1_4に対してイレース処理を実行する。
【0074】
ステップS1240において、ステップS115における解析結果に基づき、ファームウェアコミットコマンドCMDが「001b」、「011b」のいずれかであれば、処理はステップS1250に進む。ファームウェアコミットコマンドCMDが「000b」であれば、処理はステップS1270に進む。
【0075】
ステップS1250において、解析部102は、今回のファームウェアの変更が、アクティブスロットの変更を伴うか否かを判定する。ステップS1250における判定の結果、アクティブスロットの変更を伴う場合には、処理はステップS1260に進む。ステップS1250における判定の結果、アクティブスロットの変更を伴わない場合には、処理はステップS1270に進む。
【0076】
ステップS1260において、実行部103は、アクティブスロットの変更処理を、退避させておいたデータを用いて、ブロック1_1~1_4に対して実行する。アクティブスロットの変更処理は、例えば
図8を参照して説明した処理である。
【0077】
ステップS1270において、実行部103は、ファームウェアの変更処理を、退避させておいたデータを用いて、ブロック1_1~1_4に対して実行する。ファームウェアの変更処理は、例えば
図7を参照して説明した処理である。
【0078】
そして、ステップS1280において、一連の処理が終了する。
【0079】
なお、実行部103は、ステップS1230~ステップS1270の処理を、1ブロックずつ行ってもよい。すなわち、実行部103は、ブロック1_1に対してステップS1230~ステップS1270の処理を行い、次にブロック1_2に対してステップS1230~ステップS1270の処理を行い、次にブロック1_3に対してステップS1230~ステップS1270の処理を行い、次にブロック1_4に対してステップS1230~ステップS1270の処理を行ってもよい。
【0080】
(アクティブスロット変更)
次に、
図11を参照して、ステップS140のアクティブスロットの変更処理の具体的な手順を説明する。
【0081】
ステップS1410において、実行部103は、アクティブスロットを変更するために、
図10を参照して説明したステップS1220の処理と同様に、ブロック1_1~1_4に対するリード処理を行う。ブロック1_1~1_4からリードされたデータは、NANDフラッシュメモリ20の空きブロック、或いはメモリコントローラ10内のデータバッファ122若しくはRAM110などに退避される。
【0082】
ステップS1420において、実行部103は、ブロック1_1~1_4に対してイレース処理を実行する。
【0083】
ステップS1430において、実行部103は、アクティブスロットの変更処理を、退避させておいたデータを用いて、ブロック1_1~1_4に対して実行する。アクティブスロットの変更処理は、
図8を参照して説明した処理である。
【0084】
そして、ステップS1440において、一連の処理が終了する。
【0085】
なお、実行部103は、ステップS1420~ステップS1430の処理を、1ブロックずつ行ってもよい。
【0086】
(作用効果)
本実施形態によれば、以下のような作用効果を有する。
(1)本実施形態に係るメモリシステム1では、複数個のスロット分のファームウェアが1ブロック内に格納されるため、ファームウェア格納用として確保する必要のあるブロック数を低減することができる。
【0087】
図12Aは、
図1~
図2を参照して説明した比較例におけるメモリブロック群の概略構成例を模式的に示している。
図12Bは、本実施形態におけるメモリブロック群の概略構成例を模式的に示している。
【0088】
図12Aに示すように、比較例においては、ブロック1_1~1_4、2_1~2_4、3_1~3_4の12個のブロックを、ファームウェア格納用として確保する必要があった。
【0089】
それに対して、本実施形態に係るメモリシステム1では、
図12Bに示すように、ブロック1_1~1_4の4個のブロックを、ファームウェア格納用として確保すれば良い。従って、本実施形態に係るメモリシステム1では、比較例に比べて、ファームウェア格納用として確保すべきメモリ領域を67%程度低減することができる。
(2)本実施形態に係るメモリシステム1では、複数個のスロット分のファームウェアが1ブロック内に格納されるため、ファームウェア格納用として確保されたブロック内の使用効率を向上することができる。
【0090】
図13Aは、比較例におけるメモリブロックの使用状況の例を模式的に示している。
図13Bは、実施形態におけるメモリブロックの使用状況の例を模式的に示している。
【0091】
図示したように、1ブロックの記憶容量を10MiB、スロット1つ分のサイズを3MiB、アクティブスロット情報のサイズを数B、と仮定する。
図13Aに示すように、比較例においては、メモリブロックは約7MiB程度の未使用領域を含む。それに対して、本実施形態に係るメモリシステム1では、
図13Bに示すように、未使用領域を約1MiB程度まで低減することができる。
(3)本実施形態に係るメモリシステム1では、ファームウェア自体を変更する場合も、アクティブスロットを変更する場合も、ファームウェア自体の変更とアクティブスロットの変更との双方を行う場合も、多重度の数と等しい数のブロックを書き換えるだけで良い。
【0092】
そのため、例えば、ファームウェア自体を変更する際には、比較例では12ブロックの書き込みが必要であったのに対して、本実施形態に係るメモリシステム1では、4ブロックの書き込みで済む。すなわち、本実施形態に係るメモリシステム1は書き込みブロックの数を削減することができる。その結果として、本実施形態に係るメモリシステム1では、約67%程度の書き込み時間の短縮が見込める。
【0093】
また、本実施形態に係るメモリシステム1では、ファームウェア更新時に、書き込みや消去が必要となるブロック数が削減されるため、ブロックの劣化を抑制し、メモリシステムの寿命を延ばすことができる。
【0094】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【0095】
例えば、1ブロックに設けられるスロットの数は、3に限定されず、必要に応じて適宜変更することができる。また、多重度の数も4に限定されず、必要に応じて適宜変更することができる。
【符号の説明】
【0096】
1…メモリシステム
5…ホスト装置
10…メモリコントローラ
20…NAND型フラッシュメモリ(半導体メモリ)
20C…NAND型フラッシュメモリ
50…プロセッサ
51…記憶装置
52…RAM
53…インタフェース回路
100…プロセッサ
101…CPU
102…解析部
103…実行部
104…メモリ
110…RAM
120…バッファ部
121…コマンドバッファ
122…データバッファ
130…インタフェース回路
140…インタフェース回路