(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022049882
(43)【公開日】2022-03-30
(54)【発明の名称】ホスト装置およびメモリシステム
(51)【国際特許分類】
G06F 12/06 20060101AFI20220323BHJP
G06F 3/00 20060101ALI20220323BHJP
G06F 13/38 20060101ALI20220323BHJP
G06F 11/14 20060101ALI20220323BHJP
【FI】
G06F12/06 524
G06F3/00 A
G06F13/38 320A
G06F11/14 638
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2020156163
(22)【出願日】2020-09-17
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】藤本 曜久
【テーマコード(参考)】
5B077
5B160
【Fターム(参考)】
5B077AA02
5B160MM07
5B160MM09
(57)【要約】
【課題】2種類の動作モードをサポートするメモリカードの制御に有用なホスト装置を実現する。
【解決手段】メモリカードが第2動作モードである間、ホストコントローラは、第2動作モード用のリセット信号を監視し、カード存在検出信号と第2動作モード用のリセット信号の双方が共にアサートされている期間が第1期間以上続いたことを条件に、第2動作モードにおいてエラーが発生したことを検出する。ホストコントローラは、エラーの発生の検出に応じて、第1のドライバを起動するための第1の割り込み信号を発生する。第1のドライバは、第1の割り込み信号の発生に起因して起動された場合、ホストコントローラを制御することによって、メモリカードの動作モードを第2動作モードから第1動作モードに変更する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
第1インタフェースを介してホスト装置と通信する第1動作モードおよび前記第1インタフェースとは異なる第2インタフェースを介して前記ホスト装置と通信する第2動作モードをサポートするメモリカードを制御可能なホスト装置であって、
前記ホスト装置内のプロセッサによって実行されるプログラムである第1のドライバの制御の下、前記第1インタフェースを介して前記メモリカードを制御するホストコントローラと、
前記第1動作モードおよび前記第2動作モードの双方に必要な第1電源電圧と、前記第2動作モードのみに必要な、前記第1電源電圧よりも低い第2電源電圧とを、前記メモリカードに供給可能な電源回路と、
前記プロセッサによって実行されるプログラムである第2のドライバの制御の下、カード存在検出信号のアサートに応じて、前記第2インタフェースを介して前記メモリカードとの通信を開始する通信制御回路とを具備し、
前記ホストコントローラは、
前記メモリカードが前記第2動作モードをサポートしている場合、前記メモリカードの動作モードが前記第1動作モードから前記第2動作モードに変更されるように、前記第1電源電圧がオンされている状態で前記第2電源電圧をオンし、且つ前記通信制御回路へ前記カード存在検出信号をアサートし、
前記メモリカードの動作モードが前記第2動作モードである間、前記通信制御回路から出力される前記第2動作モード用のリセット信号を監視し、
前記カード存在検出信号と前記第2動作モード用の前記リセット信号の双方が共にアサートされている期間が第1期間以上続いた場合、前記第2動作モードにおいてエラーが発生したことを検出し、
前記エラーの発生の検出に応じて、前記第1のドライバを起動するための第1の割り込み信号を生成するように構成され、
前記第1のドライバは、前記第1の割り込み信号に起因して前記プロセッサによって起動された場合、前記ホストコントローラを制御することによって、前記メモリカードの動作モードを前記第2動作モードから前記第1動作モードに変更するように構成されている、ホスト装置。
【請求項2】
前記ホストコントローラは、前記カード存在検出信号と前記リセット信号の双方が共にアサートされている期間を測定するタイマを含み、前記タイマによって測定された期間が前記第1期間に達した場合、前記第2動作モードにおいて前記エラーが発生したことを検出するように構成されている、請求項1記載のホスト装置。
【請求項3】
前記第1のドライバは、
前記第1の割り込み信号に応じて、
前記ホストコントローラを制御することによって前記カード存在検出信号をデアサートし、
前記ホストコントローラを制御することによって前記第2電源電圧をオフし、
前記ホストコントローラを制御することによって前記第1動作モードの初期化処理を実行するように構成されている、請求項1記載のホスト装置。
【請求項4】
前記ホストコントローラは、前記ホストコントローラに電源が供給されている間は前記第2動作モードにおいて前記エラーが発生したことを示す第1の値に設定されるフラグを保持し、前記ホストコントローラへの電源の供給が停止された場合、前記フラグはエラーがないことを示す初期値に設定され、
前記第1のドライバは、
前記ホスト装置のオペレーティングシステムが再起動された場合、
前記ホストコントローラから前記フラグを読み出し、
前記メモリカードが前記第2動作モードをサポートしており且つ前記フラグが前記第1の値に設定されていない場合、前記メモリカードの動作モードが前記第1動作モードから前記第2動作モードに変更されるように前記ホストコントローラを制御し、
前記フラグが前記第1の値に設定されている場合、前記メモリカードが前記第2動作モードをサポートしているか否かにかかわらず、前記メモリカードが前記第1動作モードで動作するように前記ホストコントローラを制御するように構成されている、請求項1記載のホスト装置。
【請求項5】
前記ホストコントローラは、前記ホスト装置のコネクタにメモリカードが挿入されたことを示すカード検出信号に応じて、前記第1のドライバを起動するための第2の割り込み信号を生成し、
前記第1のドライバは、
前記第2の割り込み信号に起因して前記プロセッサによって起動された場合、前記フラグをエラーがないことを示す初期値にリセットするように構成されている、請求項4記載のホスト装置。
【請求項6】
ホスト装置とメモリカードとを具備するメモリシステムであって、
前記メモリカードは、第1インタフェースを介して前記ホスト装置と通信する第1動作モードおよび前記第1インタフェースとは異なる第2インタフェースを介して前記ホスト装置と通信する第2動作モードで動作するように構成され、
前記ホスト装置は、
前記ホスト装置内のプロセッサによって実行されるプログラムである第1のドライバの制御の下、前記第1インタフェースを介して前記メモリカードを制御するホストコントローラと、
前記第1動作モードおよび前記第2動作モードの双方に必要な第1電源電圧と、前記第2動作モードのみに必要な、前記第1電源電圧よりも低い第2電源電圧とを、前記メモリカードに供給可能な電源回路と、
前記プロセッサによって実行されるプログラムである第2のドライバの制御の下、カード存在検出信号のアサートに応じて、前記第2インタフェースを介して前記メモリカードとの通信を開始する通信制御回路とを具備し、
前記ホストコントローラは、
前記メモリカードが前記第2動作モードをサポートしている場合、前記メモリカードの動モードが前記第1動作モードから前記第2動作モードに変更されるように、前記第1電源電圧がオンされている状態で前記第2電源電圧をオンし、且つ前記通信制御回路へ前記カード存在検出信号をアサートし、
前記メモリカードが前記第2動作モードである間、前記通信制御回路から出力される前記第2動作モード用のリセット信号を監視し、
前記カード存在検出信号と前記第2動作モード用の前記リセット信号の双方が共にアサートされている期間が第1期間以上続いた場合、前記第2動作モードにおいてエラーが発生したことを検出し、
前記エラーの発生の検出に応じて、前記第1のドライバを起動するための第1の割り込み信号を生成するように構成され、
前記第1のドライバは、前記第1の割り込み信号に起因して前記プロセッサによって起動された場合、前記ホストコントローラを制御することによって、前記メモリカードの動作モードを前記第2動作モードから前記第1動作モードに変更するように構成されている、メモリシステム。
【請求項7】
前記ホストコントローラは、前記カード存在検出信号と前記リセット信号の双方が共にアサートされている期間を測定するタイマを含み、前記タイマによって測定された期間が前記第1期間に達した場合、前記第2動作モードにおいて前記エラーが発生したことを検出するように構成されている、請求項6記載のメモリシステム。
【請求項8】
前記第1のドライバは、
前記第1の割り込み信号に応じて、
前記ホストコントローラを制御することによって前記カード存在検出信号をデアサートし、
前記ホストコントローラを制御することによって前記第2電源電圧をオフし、
前記ホストコントローラを制御することによって前記第1動作モードの初期化処理を実行するように構成されている、請求項6記載のメモリシステム。
【請求項9】
前記ホストコントローラは、前記ホストコントローラに電源が供給されている間は前記第2動作モードにおいて前記エラーが発生したことを示す第1の値に設定されるフラグを保持し、前記ホストコントローラへの電源の供給が停止された場合、前記フラグはエラーがないことを示す初期値に設定され、
前記第1のドライバは、
前記ホスト装置のオペレーティングシステムが再起動された場合、
前記ホストコントローラから前記フラグを読み出し、
前記メモリカードが前記第2動作モードをサポートしており且つ前記フラグが前記第1の値に設定されていない場合、前記メモリカードの動作モードが前記第1動作モードから前記第2動作モードに変更されるように前記ホストコントローラを制御し、
前記フラグが前記第1の値に設定されている場合、前記メモリカードが前記第2動作モードをサポートしているか否かにかかわらず、前記メモリカードが前記第1動作モードで動作するように前記ホストコントローラを制御するように構成されている、請求項7記載のメモリシステム。
【請求項10】
前記ホストコントローラは、前記ホスト装置のコネクタにメモリカードが挿入されたことを示すカード検出信号に応じて、前記第1のドライバを起動するための第2の割り込み信号を生成し、
前記第1のドライバは、
前記第2の割り込み信号に起因して前記プロセッサによって起動された場合、前記フラグをエラーがないことを示す初期値にリセットするように構成されている、請求項9記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリカードを制御するホスト装置およびメモリシステムに関する。
【背景技術】
【0002】
近年、様々なメモリカードが広く普及している。メモリカードは、パーソナルコンピュータ、モバイル通信デバイス、ゲーム機、カメラ、車載機器等の様々なホスト装置において使用されている。
【0003】
メモリカードの例としては、SD(登録商標)カードが知られている。最近では、2種類の動作モードをサポートする新たなメモリカードも開発されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願公開第2020/0090020号明細書
【特許文献2】国際公開第2018/186457号
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明が解決しようとする課題は、2種類の動作モードをサポートするメモリカードの制御に有用なホスト装置およびメモリシステムを提供することである。
【課題を解決するための手段】
【0006】
実施形態によれば、第1インタフェースを介してホスト装置と通信する第1動作モードおよび前記第1インタフェースとは異なる第2インタフェースを介して前記ホスト装置と通信する第2動作モードをサポートするメモリカードを制御可能なホスト装置は、前記ホスト装置内のプロセッサによって実行されるプログラムである第1のドライバの制御の下、前記第1インタフェースを介して前記メモリカードを制御するホストコントローラと、前記第1動作モードおよび前記第2動作モードの双方に必要な第1電源電圧と、前記第2動作モードのみに必要な、前記第1電源電圧よりも低い第2電源電圧とを、前記メモリカードに供給可能な電源回路と、前記プロセッサによって実行されるプログラムである第2のドライバの制御の下、カード存在検出信号のアサートに応じて、前記第2インタフェースを介して前記メモリカードとの通信を開始する通信制御回路とを具備する。前記ホストコントローラは、前記メモリカードが前記第2動作モードをサポートしている場合、前記メモリカードの動作モードが前記第1動作モードから前記第2動作モードに変更されるように、前記第1電源電圧がオンされている状態で前記第2電源電圧をオンし、且つ前記通信制御回路への前記カード存在検出信号をアサートし、前記メモリカードが前記第2動作モードである間、前記通信制御回路から出力される前記第2動作モード用のリセット信号を監視し、前記カード存在検出信号と前記第2動作モード用の前記リセット信号の双方が共にアサートされている期間が第1期間以上続いた場合、前記第2動作モードにおいてエラーが発生したことを検出し、前記エラーの発生の検出に応じて、前記第1のドライバを起動するための第1の割り込み信号を生成する。前記第1のドライバは、前記第1の割り込み信号に起因して前記プロセッサによって起動された場合、前記ホストコントローラを制御することによって、前記メモリカードの動作モードを前記第2動作モードから前記第1動作モードに変更する。
【図面の簡単な説明】
【0007】
【
図1】実施形態に係るホスト装置を含むメモリシステムの構成例を示すブロック図。
【
図2】実施形態に係るホスト装置に含まれるSDホストコントローラとPCIeインタフェースコントローラとの間の接続関係を示すブロック図。
【
図3】実施形態に係るホスト装置において実行されるPCIeエラー検出処理におけるタイマーカウントについて説明する図。
【
図4】実施形態に係るホスト装置において実行される割り込み要因識別処理の手順を示すフローチャート。
【
図5】実施形態に係るホスト装置において実行されるPCIeエラー割り込み処理の手順を示すフローチャート。
【
図6】実施形態に係るホスト装置において実行される動作モード切り替え処理の手順を示すフローチャート。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。
【0009】
図1は、実施形態に係るホスト装置2を含むメモリシステム1の構成例を示すブロック図である。
【0010】
メモリシステム1は、ホスト装置2とメモリカード3とを含む。メモリカード3は、ホスト装置2内のコネクタに挿入可能なリムーバブルストレージデバイスである。メモリカード3は、例えば、不揮発性メモリと、この不揮発性メモリを制御するコントローラとを含む。メモリカード3は、メモリカード3内の不揮発性メモリにデータを書き込み、この不揮発性メモリからデータを読み出すように構成されている。
【0011】
メモリカード3は、第1インタフェースを介してホスト装置2と通信する第1動作モードと、第1インタフェースとは異なる第2インタフェースを介してホスト装置2と通信する第2動作モードとの2種類の動作モードをサポートしている。つまり、メモリカード3は、第1動作モードおよび第2動作モードでそれぞれ動作するように構成されている。
【0012】
第1インタフェースは、例えば、メモリカード用の既存のインタフェースである。第2インタフェースは、例えば、PCI Express(PCIe)(登録商標)のような汎用インタフェースである。
【0013】
メモリカード3は、これに限定されないが、例えば、SD Expressカード(登録商標)として実現されていてもよい。メモリカード3がSD Express カードとして実現されている場合においては、SDカード用の既存のインタフェースであるSDインタフェースが第1インタフェースとして使用され、PCIeインタフェースが第2インタフェースとして使用される。
【0014】
SD Expressカードは、SDモードと、PCIe/NVMeモードの2種類の動作モードの双方をサポートしている。SDモードは、SDインタフェースを介してホスト装置2と通信する動作モードである。PCIe/NVMeモードは、PCIeインタフェースを介してホスト装置2と通信する動作モードである。
【0015】
ホスト装置2は、第1インタフェースと第2インタフェースの双方を備えている。ホスト装置2は、第1動作モードを使用してメモリカード3を制御することができ、また第2動作モードを使用してメモリカード3を制御することもできる。
【0016】
以下では、メモリカード3がSD Expressカードである場合を例示して、ホスト装置2の構成について説明する。
【0017】
ホスト装置2は、メモリカード3と接続可能な情報処理装置である。ホスト装置2の例は、パーソナルコンピュータ、サーバコンピュータ、携帯端末、車載機器などである。ホスト装置2は、CPU21と、システムメモリ22と、システムコントローラ23と、SDホストコントローラ24と、電源回路25と、スイッチ回路26とを含む。
【0018】
CPU21は、システムコントローラ23と、SDホストコントローラ24とを制御するように構成されたプロセッサである。CPU21は、システムコントローラ23を介してシステムメモリ22へアクセスする。また、CPU21は、システムコントローラ23を介してSDホストコントローラ24を制御する。システムコントローラ23とSDホストコントローラ24との間のインタフェースは特に限定されないが、SDホストコントローラ24は、例えばPCIeインタフェースを介してシステムコントローラ23に接続される。システムコントローラ23には、PCIeインタフェースコントローラ231、および割り込みコントローラ232等が含まれている。
【0019】
CPU21は、システムメモリ22に格納されている制御プログラム(オペレーティングシステム(OS)、ホストドライバ、PCIe/NVM Express(NVMe)(登録商標)ドライバ、等)を実行するように構成されたプロセッサである。ホストドライバは、CPU21によって実行されるプログラム(ソフトウェアドライバ)である。CPU21は、ホストドライバを実行することによってSDホストコントローラ24の動作を制御する。PCIe/NVMeドライバは、CPU21によって実行されるプログラム(ソフトウェアドライバ)である。CPU21は、PCIe/NVMeドライバを実行することによってPCIeインタフェースコントローラ231の動作を制御する。
【0020】
以下では、ホストドライバおよびPCIe/NVMeドライバを実行することによってCPU21によって行われる動作を、ホストドライバおよびPCIe/NVMeドライバによって実行される動作として説明する。
【0021】
システムメモリ22は、ホスト装置2に設けられたメインメモリである。システムメモリ22は、例えば、ダイナミックRAM(DRAM)によって実現される。
【0022】
電源回路25は、SDホストコントローラ24の制御の下、ホスト装置2のコネクタに挿入されたメモリカード3に、二種類の電源電圧、つまり第1電源電圧であるVDD1(3.3V)と、第2電源電圧であるVDD2(1.8V)とを供給する。VDD1(3.3V)は、メモリカード3がSDモードで動作するために必要な電源電圧である。一方、メモリカード3がPCIe/NVMeモードで動作するためには、VDD1(3.3V)とVDD2(1.8V)の双方をメモリカード3に供給することが必要とされる。
【0023】
電源回路25は、SDホストコントローラ24からの第1の電源電圧制御信号VDD1―ONに応じて電源電圧VDD1のオン/オフを制御する。また、電源回路25は、SDホストコントローラ24からの第2の電源電圧制御信号VDD2―ONに応じて電源電圧VDD2のオン/オフを制御する。
【0024】
より詳しくは、電源回路25は、第1の電源制御信号VDD1-ONがHighレベルになると第1電源電圧VDD1をオンし、第1の電源制御信号VDD1-ONがLowレベルになると、第1電源電圧VDD1をオフする。また、電源回路25は、第2の電源制御信号VDD2-ONがHighレベルになると第2電源電圧VDD2をオンし、第2の電源制御信号VDD2-ONがLowレベルになると第2電源電圧VDD2をオフする。
【0025】
メモリカード3においては、電源電圧VDD1はメモリカード3の電源端子であるVDD1端子に供給される。電源電圧VDD2はメモリカード3のもう一つの電源端子であるVDD2端子に供給される。
【0026】
SDホストコントローラ24は、ホストドライバの制御の下、第1インタフェース(ここではSDインタフェース)を介してメモリカード3を制御するように構成されたホストコントローラである。SDインタフェースは、クロック信号SD CLK、SDコマンドSD CMD、4ビットデータ信号DAT[3:0]を含む。本実施形態では、SDホストコントローラ24は、SDインタフェースを介してメモリカード3と通信する他、ホストドライバの制御の下、メモリカード3の動作モードをSDモードからPCIe/NVMeモードに変更するための処理と、メモリカード3の動作モードをPCIe/NVMeモードからSDモードに戻すための処理も実行する。
【0027】
具体的には、SDホストコントローラ24は、ホストドライバの制御の下、第1電源電圧VDD1のオン/オフを制御する第1の電源制御信号VDD1―ONと、第2電源電圧VDD2のオン/オフを制御する第2の電源制御信号VDD2―ONとを、電源回路25に個別に供給する。
【0028】
SDホストコントローラ24は、まず、第1電源電圧VDD1をオンし且つクロック信号SD CLKをメモリカード3に供給することによって、メモリカード3をSDモードで一旦動作させる。クロック信号SD CLKは、メモリカード3内のSDインタフェース回路(不図示)の動作タイミングをSDホストコントローラ24の動作タイミングに同期させるために使用される。クロック信号SD CLKは、メモリカード3のクロックCLK端子に供給される。
【0029】
また、SDホストコントローラ24は、SDコマンドSD CMDをメモリカード3に送信する。SDコマンドSD CMDはSDモードを使用してメモリカード3を制御するための様々なコマンドを含む。例えば、このSDコマンドSD CMDには、リード/ライトコマンドのようなI/Oコマンドの他、SDモード用のリセットコマンドであるCMD0、メモリカード3がサポートしている機能をチェックするためのコマンドであるCMD8、等が含まれる。SDコマンドSD CMDは、メモリカード3のコマンドCMD端子に供給される。
【0030】
また、SDホストコントローラ24は、スイッチ回路26を介して4ビットデータ信号DAT[3:0]をメモリカード3に送信する処理、およびスイッチ回路26を介して4ビットデータ信号DAT[3:0]をメモリカード3から受信する処理を実行する。
【0031】
また、SDホストコントローラ24は、メモリカード3が挿入可能なコネクタ(不図示)からカード検出信号Card Detectionを受信する。カード検出信号Card Detectionは、コネクタにメモリカード3が挿入されたこと、およびコネクタからメモリカード3が抜かれた(以下、取り出しと称する)ことを示す信号である。コネクタにメモリカード3が挿入されると、コネクタは、コネクタにメモリカード3が挿入されたことを示すカード検出信号Card Detectionを出力する。また、コネクタからメモリカード3が取り出されると、コネクタは、コネクタからメモリカード3が取り出されたことを示すカード検出信号Card Detectionを出力する。SDホストコントローラ24は、カード検出信号Card Detectionの電圧レベルの変化に基づいて、メモリカード3の挿入/取り出しを検出することができる。カード検出信号Card Detectionの信号電圧レベルは、メモリカード3の検出方式によって異なる。例えば、カード検出信号Card Detection線をプルアップするプルアップ方式が使用された場合には、コネクタにメモリカード3が挿入されると、コネクタは、コネクタにメモリカード3が挿入されたことを示すロウレベルのカード検出信号Card Detectionを出力する。また、コネクタからメモリカード3が取り出されると、コネクタは、コネクタからメモリカード3が取り出されたことを示すハイレベルのカード検出信号Card Detectionを出力する。
【0032】
また、コネクタにメモリカード3が挿入され、且つこのメモリカード3がPCIe/NVMeモードをサポートしていることをCMD8で検出した場合、メモリカード3の動作モードがSDモードからPCIe/NVMeモードに変更されるように、SDホストコントローラ24は、第1電源電圧VDD1がオンされている状態で第2電源電圧VDD2をオンし且つPCIeインタフェースコントローラ231へのカード存在検出信号PRSNT#をアサートする。カード存在検出信号PRSNT#は、ホスト装置2にPCIe/NVMeモードをサポートしているメモリカード3が接続されたこと、換言すれば、PCIeインタフェースコントローラ231にPCIe/NVMeデバイスが接続されたことを示す信号である。なお、信号をアサートするとは、信号の電圧レベルをアクティブレベルに設定することを意味する。また、信号をデアサートするとは、信号の電圧レベルをインアクティブレベルに設定することを意味する。
【0033】
カード存在検出信号PRSNT#はロウアクティブ信号であるので、PCIeインタフェースコントローラ231へのカード存在検出信号PRSNT#がアサートされると、カード存在検出信号PRSNT#の電圧はLowレベルに設定される。PCIeインタフェースコントローラ231は、カード存在検出信号PRSNT#のアサートに応じて、PCIe/NVMeドライバを用いてPCIeインタフェースを介してメモリカード3との通信を開始するように構成されている。このようにして、メモリカード3の動作モードはPCIeモードに変更される。
【0034】
メモリカード3の動作モードがPCIe/NVMeモードである間、SDホストコントローラ24は、PCIeインタフェースコントローラ231からスイッチ回路26へ出力されるPCIeインタフェース用のサイドバンド信号の一つであるリセット信号PERST#を監視する。つまり、SDホストコントローラ24は、PCIeインタフェースコントローラ231からスイッチ回路26へ出力されるリセット信号PERST#を入力するための入力端子を有している。この入力端子は、PCIeインタフェースコントローラ231とスイッチ回路26との間のリセット信号PERST#線に接続されている。リセット信号PERST#は、PCIe/NVMeモード用のリセット信号である。リセット信号PERST#は、PCIeインタフェースコントローラ231からスイッチ回路26を介してメモリカード3へ供給される。リセット信号PERST#がアサートされると、メモリカード3内に含まれているPCIeインタフェース回路(不図示)が初期状態にリセットされる(リセット状態)。また、リセット信号PERST#がPCIeインタフェースコントローラ231によってデアサートされると、メモリカード3内に含まれているPCIeインタフェース回路のリセット状態が解除され、メモリカード3内に含まれているPCIeインタフェース回路が動作を開始する。
【0035】
システムコントローラ23は、CPU21、システムメモリ22、およびSDホストコントローラ24にそれぞれ接続されている。またシステムコントローラ23には、上述したPCIeインタフェースコントローラ231と割り込みコントローラ232とが含まれている。
【0036】
PCIeインタフェースコントローラ231は、PCIe/NVMeドライバの制御の下、PCIeインタフェースを介してメモリカード3と通信する通信制御回路である。
【0037】
SDホストコントローラ24によってカード存在検出信号PRSNT#がアサートされた場合、PCIeインタフェースコントローラ231は、PCIeインタフェースを介してメモリカード3との通信を開始する。より詳しくは、カード存在検出信号PRSNT#がアサートされると、PCIe/NVMeドライバが起動され、PCIe/NVMeドライバの制御の下、PCIeインタフェースコントローラ231がPCIeインタフェースの初期化処理を開始する。PCIeインタフェースの初期化処理が完了すると、PCIe/NVMeドライバの制御の下、PCIeインタフェースコントローラ231は、PCIeインタフェースを介してメモリカード3へのリード/ライトアクセスを開始する。
【0038】
PCIeインタフェースは、信号群、つまり、2つのサイドバンド信号(リセット信号PERST#、クロック要求信号CLKREQ#)と、差動レファレンスクロック信号REFCLK―P、REFCLK―Nと、差動送信信号Tx―P、Tx―Nと、差動受信信号Rx―P、Rx―Nとを含む。信号名に後続する記号#は、この信号がロウアクティブ信号であることを表している。
【0039】
リセット信号PERST#は、上述したように、PCIe/NVMeモード用のリセット信号である。クロック要求信号CLKREQ#は、PCIeインタフェースコントローラ231に対して差動レファレンスクロック信号の送信を要求する信号である。クロック要求信号CLKREQ#は、メモリカード3からスイッチ回路26を介してPCIeインタフェースコントローラ231に供給される。差動レファレンスクロック信号REFCLK―P、REFCLK―Nは、メモリカード3内にクロック発振器を不要とし、メモリカード3内のクロック回路の構成を簡素化できるようにしている。
【0040】
2本のサイドバンド信号線(リセット信号PERST#線、クロック要求信号CLKREQ#線)と、2本のレファレンスクロック信号REFCLK―P、REFCLK―N線は、スイッチ回路26を介してメモリカード3のDAT[3:0]端子に接続される。
【0041】
差動送信信号Tx―P、Tx―Nは、PCIeインタフェースコントローラ231からメモリカード3へコマンド、データ等を伝送するために使用される。差動受信信号Rx―P、Rx―Nは、メモリカード3からPCIeインタフェースコントローラ231へレスポンス、データ等を伝送するために使用される。
【0042】
ところで、メモリカード3の動作モードがPCIe/NVMeモードである間は、メモリカード3およびPCIeインタフェースコントローラ231の各々の動作はPCIe/NVMeドライバによって制御される。PCIeインタフェースコントローラ231を最新のPCIe/NVMe仕様に準拠して制御できるようにするために、このPCIe/NVMeドライバとしては、標準PCIe/NVMeドライバを使用することが好ましい。PCIe/NVMeドライバをカスタマイズしてしまうと、標準PCIe/NVMeドライバが更新される毎に、PCIe/NVMeドライバをカスタマイズし直す必要が発生してしまう。
【0043】
標準PCIe/NVMeドライバはホストドライバとは独立したソフトウェアドライバであるので、ホストドライバと通信するための特別な機能は有していない。また、メモリカード3がPCIe/NVMeモードである間は、ホストドライバは、CPU21のリソースを消費しないように、スリープ状態に設定される。
【0044】
このため、標準PCIe/NVMeドライバが使用されている環境においては、PCIeの初期化処理中にまたはPCIe/NVMeモードにおけるメモリアクセス動作中に何らかのエラーが発生すると、メモリカード3はPCIe/NVMeモードにおいてフリーズしてしまい、これによってメモリカード3を使用することができなくなる。
【0045】
この場合、メモリカード3の動作モードをPCIe/NVMeモードからSDモードに戻すためには、ユーザが一旦メモリカード3を抜いてコネクタに再度挿入するか、OSを再起動しなければならない。また、PCIe/NVMeモードでエラーが発生したことをどこかに保持しておき、メモリカード3をSDモードで起動するようにする必要がある。
【0046】
本実施形態では、標準PCIe/NVMeドライバが使用されている環境においても、PCIe/NVMeモードにおいて発生するエラーに対処できるようにするために、SDホストコントローラ24によってPCIe/NVMeモードにおけるエラーの発生が検出される。そして、PCIe/NVMeモードにおけるエラーの発生の検出に応じて、SDホストコントローラ24は、ホストドライバを起動するための割り込み信号を生成する。この割り込み信号に起因して、CPU21によってホストドライバが起動された場合、ホストドライバは、SDホストコントローラ24を制御することによって、メモリカード3の動作モードをPCIe/NVMeからSDモードに変更するための処理を実行する。
【0047】
これにより、PCIe/NVMeドライバにホストドライバと通信するための特別な機能を追加することなく、メモリカード3の動作モードをSDモードに自動的に戻すことができる。よって、ユーザが一旦メモリカード3を抜いて挿し直すという操作を行わずとも、メモリカード3をSDモードで動作させることが可能となる。
【0048】
PCIeインタフェースの初期化処理中またはPCIe/NVMeモードにおけるメモリアクセス中に何らかのエラー(例えば、メモリカード3内のPCIeインタフェース回路のエラー、等)が発生した場合、通常、リセット信号PERST#がアサートされた状態が比較的長い間続く。リセット信号PERST#がアサートされた状態が長い間続くという現象を利用して、SDホストコントローラ24は、PCIe/NVMeモードにおいてエラーが発生したことを検出する。PCIeインタフェースの初期化処理中またはPCIe/NVMeモードにおけるメモリアクセス中においては、PCIe/NVMeドライバは、ある失敗した処理のリトライのためにPCIeインタフェースコントローラ231を制御してリセット信号PERST#をアサートする。リトライのためにリセット信号PERST#がアサート状態に維持される期間は、比較的短い。本実施形態では、SDホストコントローラ24は、このようなリトライのための短いリセットを、エラーとして検出しないように構成されている。
【0049】
より詳しくは、SDホストコントローラ24は、カード存在検出信号PRSNT#とリセット信号PERST#の双方が共にアサートされている期間が第1期間以上続いたことを条件に、PCIe/NVMeモードにおいてエラーが発生したことを検出する。このエラーは、以下では、PCIeエラー(PCIe Error)としても参照される。
【0050】
PCIe/NVMeモードにおいて発生するエラー(PCIeエラー)には回復可能なエラーと、回復不能なエラーとがある。回復可能なエラーとは、たとえある処理に関するエラーが発生しても、所定回数以内のリトライによってこの処理が成功するエラーを意味する。回復不能なエラーとは、所定回数のリトライを実行しても、処理が失敗し続けるエラーを意味する。PCIe仕様においては、回復不能なエラーはFatalエラーとしても参照される。SDホストコントローラ24によって検出されるべきエラーは、PCIe/NVMeモードにおける回復不能なエラーである。回復可能なエラーは、SDホストコントローラ24による検出対象から除外される。
【0051】
スイッチ回路26は、4本のデータ信号DAT[3:0]線と、4本のPCIe信号線(リセット信号PERST#線、クロック要求信号CLKREQ#線、差動レファレンスクロック信号REFCLK―P、REFCLK―N線)のいずれか一方を選択し、選択した信号線とメモリカード3のDAT[3:0]端子との間を接続する。
【0052】
メモリカード3の動作モードがSDモードである場合、つまり第2の電源電圧制御信号VDD2-ONがLowである場合、スイッチ回路26は、4つのデータ信号DAT[3:0]線を選択し、4つのデータ信号DAT[3:0]線とメモリカード3のDAT[3:0]端子との間をそれぞれ接続する。メモリカード3の動作モードがPCIe/NVMeモードである場合、つまり第2の電源電圧制御信号VDD2-ONがHighである場合、スイッチ回路26は、4つのPCIe信号線(リセット信号PERST#線、クロック要求信号CLKREQ#線、差動レファレンスクロック信号REFCLK―P、REFCLK―N線)を選択し、4つのPCIe信号線とメモリカード3のDAT[3:0]端子との間を接続する。
【0053】
次に、SDホストコントローラ24によって生成される割り込み信号について説明する。
【0054】
SDホストコントローラ24によって割り込み信号が生成される際の要因には、「カード挿入」、「カード取り出し」、「PCIeエラー」がある。
【0055】
「カード挿入」、「カード取り出し」、または「PCIeエラー」が検出されると、CPU21に対する割り込み信号がSDホストコントローラ24によって生成される。この割り込み信号は、割り込みコントローラ232を介してCPU21に供給される。
【0056】
「カード挿入」、「カード取り出し」、または「PCIeエラー」の検出に起因する割り込み信号は、ホストドライバを起動するために使用される。割り込み信号によってホストドライバが起動された場合、ホストドライバは、割り込み信号の生成要因(「カード挿入」、「カード取り出し」、または「PCIeエラー」)に応じた割り込み処理を実行する。割り込み処理が終了すれば、ホストドライバをスリープ状態にでき、次の割り込みが入るまで無駄にCPU21を使うことがない。
【0057】
「PCIeエラー」に起因する割り込み信号によってホストドライバが起動された場合、ホストドライバは、メモリカード3の動作モードをPCIe/NVMeモードからSDモードに変更するための処理を実行する。
【0058】
このように、本実施形態では、SDホストコントローラ24によって「PCIeエラー」の発生が検出された場合、SDホストコントローラ24によって割り込み信号が生成され、これによってホストドライバが起動される。したがって、標準PCIe/NVMeドライバが使用される環境においても、メモリカード3の動作モードをSDモードに戻すことができる。
【0059】
図2は、実施形態に係るホスト装置2に含まれるSDホストコントローラ24とPCIeインタフェースコントローラ231との間の接続関係を説明するブロック図である。
【0060】
SDホストコントローラ24は、ホスト装置2のコネクタから送信されるカード検出信号Card Detectionの電圧レベルが例えばハイレベルからロウレベルに変化したことを検出して、メモリカード3がコネクタに挿入されたことを検出する。このメモリカード3の挿入の検出に応じて、SDホストコントローラ24は、ホストドライバを起動するための割り込み信号(「カード挿入」割り込み)を生成する。割り込み信号は、割り込みコントローラ232を介してCPU21に入力される。
【0061】
ホストドライバは、挿入されたメモリカード3をSDモードで起動し、メモリカード3がPCIe/NVMeモードをサポートしているか否かを確認する。PCIe/NVMeモードをサポートしている場合、ホストドライバは、SDホストコントローラ24を制御してカード存在検出信号PRSNT#をアサートする。カード存在検出信号PRSNT#がアサートされると、PCIeドライバは、PCIeインタフェースコントローラ231を制御してPCIeインタフェースを介してメモリカード3との通信を開始する。
【0062】
また、SDホストコントローラ24は、コネクタから送信されたカード検出信号Card Detectionの電圧レベルが例えばロウレベルからハイレベルに変化したことを検出して、メモリカード3がホスト装置2から取り外されたことを検出する。このメモリカード3の取り外しの検出に応じて、SDホストコントローラ24は、ホストドライバを起動するための割り込み信号(「カード取り出し」割り込み)を生成する。ホストドライバは、カード電源(二種類の電源電圧VDD1,VDD2)をオフにする処理などを行う。
【0063】
PCIeインタフェースコントローラ231は、PCIe/NVMeモードにおいてエラーが生じた際などに、PCIe/NVMeモード用のリセット信号PERST#をアサートする。SDホストコントローラ24は、PCIeインタフェースコントローラ231から出力されるPCIe/NVMeモード用のリセット信号PERST#を監視する。カード存在検出信号PRSNT#とリセット信号PERST#が同時にアサートされている期間がある期間以上続いた場合、SDホストコントローラ24はPCIeエラーが発生したと判定し、ホストドライバを起動するための割り込み信号(「PCIeエラー」割り込み)を生成する。
【0064】
このように、SDホストコントローラ24によって割り込み信号が生成される要因には、「カード挿入」と、「カード取り出し」と、「PCIeエラー」との三種類がある。
【0065】
SDホストコントローラ24内のステータスレジスタ(不図示)には割り込み要因を示す割り込みステータスが格納されている。ホストドライバは、SDホストコントローラ24内のステータスレジスタから割り込みステータスをリードすることによって、割り込み要因が「カード挿入」、「カード取り出し」、「PCIeエラー」のいずれであるかを特定することができる。
【0066】
次に、SDホストコントローラ24の構成要素について説明する。SDホストコントローラ24は、リセットタイマ(ResTimer)241を含む。
【0067】
リセットタイマ(ResTimer)241は、カード存在検出信号PRSNT#とリセット信号PERST#の双方が共にアサートされている期間を測定する。
【0068】
PCIeドライバは、リトライを行う時にPCIeインタフェースコントローラ231を制御してPCIe/NVMeモード用リセット信号PERST#を一旦アサートする。この場合、リセット信号PERST#がアサート状態(アクティブ状態=ロウレベル)に維持される期間は比較的短い(短いリセット)。リトライのためにリセット信号PERST#がアサート状態に維持される期間は、例えば、最大1秒である。リセットタイマ(ResTimer)241は、リトライのための短いリセットを検出対象から除外するために使用される。
【0069】
リセットタイマ(ResTimer)241は、PCIeインタフェースコントローラ231へのカード存在検出信号PRSNT#がアサートされている状態で、PCIe/NVMeモード用のリセット信号PERST#がアサートされると、初期値(例えば、ゼロ)からカウントを開始する。カード存在検出信号PRSNT#がアサートされている状態でリセット信号PERST#がデアサートされると、リセットタイマ(ResTimer)241によるカウント動作が終了する。デアサートされたリセット信号PERST#が再びアサートされた場合、リセットタイマ(ResTimer)241は、初期値(例えば、ゼロ)からカウントを再び開始する。
【0070】
SDホストコントローラ24は、リセットタイマ(ResTimer)241のカウント値と、SDホストコントローラ24のタイムアウト値レジスタ242に格納されているタイムアウト値とを比較する。リセットタイマ(ResTimer)241のカウント値がタイムアウト値以上であることを条件に、SDホストコントローラ24は、PCIe/NVMeモードにおいてPCIeエラー(回復不能エラー)が発生したことを検出する。PCIeエラーの発生の検出に応じて、SDホストコントローラ24は、割り込み信号を生成することによって、ホストドライバを起動する。
【0071】
PCIeエラーの発生に起因する割り込みの処理(PCIeエラー割り込み処理)において、ホストドライバは、SDホストコントローラ24を制御することによって、カード存在検出信号PRSNT#をデアサート、電源電圧VDD2をオフにし、これによってメモリカード3の動作モードをSDモードに戻す。これにより、メモリカード3がPCIe/NVMeモードでフリーズしてしまうことを防止でき、メモリカード3を継続して使用することができる。ホストドライバは、PCIe/NVMeモードにおいてPCIeエラーが発生したことを、OSを介してユーザに通知する処理を実行することもできる(ワーニング)。
【0072】
ホストドライバは、SDホストコントローラ24内のタイムアウト値レジスタ242にタイムアウト値を書き込むことによって、タイムアウト値をSDホストコントローラ24に対して指定することができる。あるいは、タイムアウト値は予め決定された固定値であってもよい。
【0073】
また、SDホストコントローラ24は、PCIe/NVMeモードにおいてPCIeエラーが発生したことを示すフラグ(PCIeFerr:PCIe Fatel error)を保持する。このフラグ(PCIeFerr)は、例えば、SDホストコントローラ24内のフラグレジスタ243に格納される。
【0074】
フラグ(PCIeFerr)=0は、PCIeエラーが発生していないことを示す(デフォルト値)。フラグ(PCIeFerr)=1は、PCIeエラーの発生を検出したことを示す。「カード挿入」イベントが発生した場合、フラグ(PCIeFerr)はクリアされて、デフォルト値に設定される。なお、このフラグ(PCIeFerr)はホストコントローラ24に電源が供給されている間保持されるが、ホストコントローラ24への電源の供給が停止されると、フラグ(PCIeFerr)は保持されない。つまり、ホストコントローラ24は、ホストコントローラ24に電源が供給されている間は、PCIeエラーの発生を検出したことを示す値(=1)を示すフラグ(PCIeFerr)を保持する。ホストコントローラ24内のレジスタ群は揮発性である。このため、ホストコントローラ24への電源の供給が停止されると、フラグレジスタ243に格納されているフラグ(PCIeFerr)の内容(=1)は失われる。フラグ(PCIeFerr)は、次のホストコントローラ24の起動時に、PCIeエラーが発生していないことを示すデフォルト値(=0)に設定される。なお、「カード挿入」イベントが発生した場合のみならず、「カード取り出し」イベントが発生した場合も、フラグ(PCIeFerr)をクリアしてデフォルト値に設定することができる。
【0075】
OSがユーザによって再起動された場合、ホストドライバは、フラグ(PCIeFerr)をSDホストコントローラ24のフラグレジスタ243から読み出す。
【0076】
コネクタに挿入されているメモリカード3がPCIe/NVMeモードをサポートしており且つフラグ(PCIeFerr)が「1」に設定されていない場合、ホストドライバは、メモリカード3の動作モードがSDモードからPCIe/NVMeモードに変更されるようにSDホストコントローラ24を制御する。
【0077】
一方、フラグ(PCIeFerr)が「1」に設定されている場合、ホストドライバは、コネクタに挿入されているメモリカード3がPCIe/NVMeモードをサポートしているか否かにかかわらず、メモリカード3がSDモードで動作するようにSDホストコントローラ24を制御する。つまり、たとえメモリカード3がPCIe/NVMeモードをサポートしていても、ホストドライバは、メモリカード3を、SDモードを使用して制御する。これにより、メモリカード3が再びPCIe/NVMeモードで使用され始め、これによってPCIeエラーが再び発生することを防止することができる。なお、ホストコントローラ24への電源の供給が停止されると、フラグレジスタ243に格納されているフラグ(PCIeFerr)の内容(=1)は失われる。そして、フラグ(PCIeFerr)は、次のホストコントローラ24の起動時に、PCIeエラーが発生していないことを示すデフォルト値(=0)に設定される。したがって、ホストコントローラ24への電源の供給が停止されている間にメモリカード3がPCIe/NVMeモードをサポートしている新たなメモリカードに交換された場合は、ホストドライバは、この新たなメモリカードの動作モードがSDモードからPCIe/NVMeモードに変更されるようにSDホストコントローラ24を制御することができる。
【0078】
図3は、実施形態に係るホスト装置2において実行されるPCIeエラー検出におけるタイマーカウントについて説明する図である。
【0079】
図3においては、横軸方向が時間を表しており、上段がカード存在検出信号PRSNT#、下段がリセット信号PERST#を表している。実線は、ある時刻におけるそれぞれの信号(カード存在検出信号PRSNT#、リセット信号PERST#)の電圧レベルを表している。
【0080】
カード存在検出信号PRSNT#信号における破線は、カード存在検出信号PRSNT#がデアサート状態である場合の電圧レベル(Highレベル)を表している。
図3においては、メモリカード3がPCIe/NVMeモードである場合が想定されている。このちため、カード存在検出信号PRSNT#はアサート状態(Lowレベル)に維持されている。
【0081】
また、リセット信号PERST#も同様に、デアサート状態よりも電圧が落ちている状態がリセット信号PERST#がアサートされている状態である。つまり、タイミング(a)、(c)でリセット信号PERST#はデアサート状態からアサート状態に遷移している。
【0082】
タイミング(a)および(c)の各々において、リセット信号PERST#がデアサート状態からアサート状態に遷移されると、ResTimer241は、初期値(例えば0)から経過時間のカウントを開始する。このカウント動作によって、カード存在検出信号PRSNT#信号およびリセット信号PERST#の双方がアサートされている時間長が測定される。ResTimer241は、経過時間のカウント値がタイムアウト値レジスタ242のタイムアウト値に到達すると、タイムアウトイベントを発生させる。
【0083】
タイミング(b)は、タイミング(a)からの経過時間がタイムアウト値に到達する時点を示している。
図3に示されているように、例えば、タイミング(a)でリトライのための短いリセットが発生した場合には、タイミング(b)の前に、リセット信号PERST#がアサート状態からデアサート状態に遷移される。この場合、タイムアウトイベントは発生しない。よって、リトライのための短いリセットが、PCIe/NVMeモードにおけるPCIeエラー(回復不能エラー)として検出されてしまうことを防ぐことができる。
【0084】
タイミング(d)は、タイミング(c)からの経過時間がタイムアウト値に到達する時点を示している。
図3に示されているように、PCIe/NVMeモードにおいてPCIeエラー(回復不能エラー)が発生した場合、タイミング(c)でアサートされたリセット信号PERST#は、タイムアウト値以上の間、アサート状態に維持される。したがって、タイミング(d)でタイムアウトイベントが発生する。このタイムアウトイベントが発生したことを条件に、SDホストコントローラ24は、PCIe/NVMeモードにおいてPCIeエラー(回復不能エラー)が発生したことを検出する。
【0085】
次に、ホスト装置2において実行される割り込み要因識別処理について説明する。
図4は、実施形態に係るホスト装置2において実行される割り込み要因識別処理の手順を示すフローチャートである。
【0086】
SDホストコントローラ24によって生成された割り込み信号が割り込みコントローラ232を介してCPU21に入力されると、ホストドライバがCPU21によって起動される。
【0087】
ホストドライバは、まず、SDホストコントローラ24内のステータスレジスタに格納されている割り込みステータスを読み出し(ステップS11)、読み出した割り込みステータスに基づいて、生成された割り込み信号の要因が「カード挿入」、「カード取り出し」、「PCIeエラー」のいずれであるかを識別する(ステップS12)。
【0088】
生成された割り込み信号の要因が「カード挿入」であった場合、ホストドライバは、カード挿入割り込み処理を実行する(ステップS13)。メモリカード3の挿入割り込み処理では、ホストドライバは、メモリカード3の動作モードを一旦SDモードとし、CMD8を用いてメモリカード3がPCIe/NVMeモードをサポートしているか否かを確認し、フラグ(PCIeFerr)を読み出してPCIeエラーが発生したか否かを確認し、これら確認結果に基づいて、SDモードの初期化処理、またはメモリカード3の動作モードをPCIe/NVMeモードに変更する処理を実行する。カード挿入割り込み処理の詳細は
図6で後述する。
【0089】
生成された割り込み信号の要因が「カード取り出し」であった場合、ホストドライバは、カード取り出し割り込み処理を実行する。カード取り出し割り込み処理では、例えば、カード存在検出信号PRSNT#信号をデアサートする処理、VDD1およびVDD2をオフする処理等が実行される。
【0090】
生成された割り込み信号の要因が「PCIeエラー」であった場合、ホストドライバは、PCIeエラー割り込み処理を実行する。PCIeエラー割り込み処理では、メモリカード3の動作モードをPCIe/NVMeモードからSDモードに変更する処理が実行される。
【0091】
図5は、実施形態に係るホスト装置2において実行されるPCIeエラー割り込み処理の手順を示すフローチャートである。
【0092】
「PCIeエラー」に起因する割り込み信号によってホストドライバがCPU21によって起動された場合、まず、ホストドライバは、SDホストコントローラ24を制御して、カード存在検出信号PRSNT#をデアサート状態に遷移させる(ステップS21)。カード存在検出信号PRSNT#がアサート状態からデアサート状態に遷移されたことに応じて、PCIeインタフェースコントローラ231とメモリカード3との間の接続が解除される。
【0093】
次に、ホストドライバは、SDホストコントローラ24を制御して、第2電源電圧VDD2をオフする(ステップS22)。次いで、ホストドライバは、SDホストコントローラ24を制御して、メモリカード3へのSDクロック(SD CLK)の供給を開始する(ステップS23)。SDクロックの供給が開始された後、ホストドライバは、SDモードの初期化処理を開始する(ステップS24)。
【0094】
この動作により、PCIe/NVMeモードでの動作時にエラーが発生し、PCIeエラーの判定がなされた場合、SDホストコントローラ24からシステムコントローラ231にPCIeエラーによる割り込み信号が送信されることによってPCIe/NVMeモードからSDモードへの移行を行うことができる。
【0095】
図6は、実施形態に係るホスト装置2において実行される動作モード切り替え処理の手順を示すフローチャートである。
【0096】
まず、「カード挿入」に起因する割り込み信号の生成によってホストドライバがCPU21によって起動された場合に実行されるカード挿入割り込み処理について説明する。
【0097】
まず、ホストドライバは、SDホストコントローラ24を制御して、フラグレジスタ243に格納されているフラグ(PCIeFerr)をクリアすることによって、フラグ(PCIeFerr)をPCIeエラーが発生していないことを示すデフォルト値(=0)にリセットする(ステップS31)。フラグ(PCIeFerr)をデフォルト値(初期値)にリセットするのは、新たなメモリカードがコネクタに挿入された場合に、PCIe/NVMeモードの使用が禁止されないようにするためである。
【0098】
次いで、ホストドライバは、SDホストコントローラ24を制御して、第1電源電圧VDD1をオンする(ステップS32)。具体的には、SDホストコントローラ24は、VDD1をオンするための第1の電源電圧制御信号VDD1―ONを電源回路25に供給する。そして、ホストドライバは、SDホストコントローラ24を制御して、メモリカード3へSDクロックを供給する(ステップS33)。これにより、メモリカード3はSDモードで動作を開始する。
【0099】
そして、ホストドライバは、SDホストコントローラ24を制御して、メモリカード3がPCIe/NVMeモードをサポートしているか否かをチェックするためのビット「PCIe Availability」が1に設定されたSDコマンド「CMD8」をメモリカード3に送信する。SDコマンド「CMD8」は、メモリカード3の能力をメモリカード3に問い合わせるためのコマンドである。SDコマンド「CMD8」を受信すると、メモリカード3は、PCIe/NVMeモードをサポートしているか否かを示すビット「PCIe Response」を含むレスポンス「R7」をSDホストコントローラ24に返す。
【0100】
PCIe Response=1は、メモリカード3がPCIe/NVMeモードをサポートしていることを示す。PCIe Response=0は、メモリカード3がPCIe/NVMeモードをサポートしていないことを示す。
【0101】
メモリカード3からのレスポンス「R7」の受信に失敗した場合(ステップS35のErrorリトライ)、ホストドライバは、ビット「PCIe Availability」が1に設定されたSDコマンド「CMD8」をメモリカード3に再び発行する。SDコマンド「CMD8」の発行をリトライする上限回数はホストドライバの実装に応じて決定される。
【0102】
ホストドライバは、レスポンス「R7」に含まれるビット「PCIe Response」をSDホストコントローラ24から読み出し、またフラグ(PCIeFerr)をSDホストコントローラ24から読み出す。
【0103】
ホストドライバは、読み出したビット「PCIe Response」と、読み出したフラグ(PCIeFerr)とに基づいて、メモリカード3を制御するために使用すべき動作モードを決定する(ステップS35)。
【0104】
メモリカード3がPCIe/NVMeモードをサポートしていない場合(PCIe Response=0)、またはPCIeFerr=1である場合、ホストドライバは、SDモード初期化処理を実行する(ステップS36)。これにより、メモリカード3はSDモードに維持される。
【0105】
一方、メモリカード3がPCIe/NVMeモードをサポートしており(PCIe Response=1)且つPCIeFerr=0である場合、ホストドライバは、SDホストコントローラ24を制御して、PCIe/NVMeモードへの切り替えを実行する(ステップS37)。
【0106】
ステップ37では、ホストドライバは、SDホストコントローラ24を制御して、メモリカード3へのSDクロックの供給を停止する。またホストドライバは、SDホストコントローラ24を制御して、「カード挿入」イベントに起因する割り込み信号の生成、「カード取り出し」イベントに起因する割り込み信号の生成、「PCIeエラー」イベントに起因する割り込み信号の生成を有効にする。またホストドライバは、SDホストコントローラ24を制御してVDD2をオンし、そして、SDホストコントローラ24を制御してカード存在検出信号PRSNT#をアサートする。カード存在検出信号PRSNT#がアサートされることにより、PCIeインタフェースコントローラ231が動作を開始する。これにより、メモリカード3の動作モードはPCIe/NVMeモードに変更される。そして、ホストドライバは、スリープ状態に遷移する(ステップS38)。
【0107】
OSの再起動に起因してホストドライバがCPU21によって起動された場合には、ホストドライバは、まず、コネクタにメモリカード3が挿入されているか否かを示すSDホストコントローラ24内の特定のレジスタの値をチェックすることによって、コネクタにメモリカード3が挿入されているか否かを判定する(ステップS41)。OSの再起動中にホストコントローラ24に電源が供給され続ける場合は、ホストコントローラ24内の各レジスタの値は保存されている。OSの再起動中にホストコントローラ24への電源の供給が停止された場合は、各レジスタの値は初期値に設定される。コネクタにメモリカード3が挿入されている場合は、コネクタにメモリカード3が挿入されているか否かを示す特定のレジスタの値は、OSの再起動中にホストコントローラ24への電源の供給が停止された時に、コネクタにメモリカード3が挿入されていないことを示す値に一旦設定されるが、ホストコントローラ24に電源が再び供給された時に、コネクタにメモリカード3が挿入されていることを示す値に再び設定される。フラグ(PCIeFerr)はホストコントローラ24内のフラグレジスタ243に格納されているので、OSの再起動中にホストコントローラ24に電源が供給され続ける場合は、ホストコントローラ24は、PCIeエラーの発生を検出したことを示す値(=1)を示すフラグ(PCIeFerr)を保持し続ける。一方、OSの再起動中にホストコントローラ24への電源の供給が停止されると、フラグ(PCIeFerr)は、PCIeエラーが発生していないことを示すデフォルト値(初期値=0)に設定される。このように、フラグ(PCIeFerr)が初期値(=0)に設定されるようにしているのは、ホストコントローラ24への電源の供給が停止されている間にメモリカード3が別のメモリカードに交換される場合があるためである。
【0108】
なお、OSが再起動された場合にフラグ(PCIeFerr)の内容(=1)を有効に利用できるようにするために、ホスト装置2は、OSの再起動中、少なくともホストコントローラ24へ電源を供給し続けるように構成されていてもよい。この場合、フラグ(PCIeFerr)の内容(=1)は失われない。また、ホストコントローラ24に電源が供給されている間は、ホストコントローラ24のカード検出機能は有効に機能する。したがって、OSの再起動中にメモリカード3が新たなメモリカードに交換された場合には、ホストコントローラ24は、新たなメモリカードの挿入を検出することができ、そしてフラグ(PCIeFerr)をPCIeエラーが発生していないことを示すデフォルト値(初期値=0)に設定することができる。
【0109】
メモリカード3のPCIeエラーの発生が検出された後に、メモリカード3が交換されることなくOSが再起動され且つOSの再起動中にホストコントローラ24への電源の供給がされた場合には、メモリカード3の動作モードはSDモードからPCIe/NVMeモードに再び変更され、そして、PCIeエラーの発生が再び検出される。しかし、ホストドライバは、PCIeエラーの発生を認識することができるので、メモリカード3の動作モードをSDモードに戻すことができ。さらに、ホストドライバは、PCIe/NVMeモードにおけるエラーの発生をユーザに通知することもできる。
【0110】
図6の説明に戻る。ホストドライバは、コネクタにメモリカード3が挿入されていると判定した場合(ステップS41のYES)、ステップS32の処理に進む。
【0111】
ホストドライバは、SDホストコントローラ24を制御して、第1電源電圧VDD1をオンする(ステップS32)。具体的には、SDホストコントローラ24は、VDD1をオンするための第1の電源電圧制御信号VDD1―ONを電源回路25に供給する。そして、ホストドライバは、SDホストコントローラ24を制御して、メモリカード3へSDクロックを供給する(ステップS33)。これにより、メモリカード3はSDモードで動作を開始する。
【0112】
そして、ホストドライバは、SDホストコントローラ24を制御して、ビット「PCIe Availability」が1に設定されたSDコマンド「CMD8」をメモリカード3に送信する。SDコマンド「CMD8」を受信すると、メモリカード3は、PCIe/NVMeモードをサポートしているか否かを示すビット「PCIe Response」を含むレスポンス「R7」をSDホストコントローラ24に返す。
【0113】
ホストドライバは、レスポンス「R7」に含まれるビット「PCIe Response」をSDホストコントローラ24から読み出し、またフラグ(PCIeFerr)をSDホストコントローラ24から読み出す。
【0114】
ホストドライバは、読み出したビット「PCIe Response」と、読み出したフラグ(PCIeFerr)とに基づいて、メモリカード3を制御するために使用すべき動作モードを決定する(ステップS35)。
【0115】
メモリカード3がPCIe/NVMeモードをサポートしていない場合(PCIe Response=0)、またはPCIeFerr=1である場合、ホストドライバは、SDモード初期化処理を実行する(ステップS36)。これにより、メモリカード3はSDモードに維持される。
【0116】
換言すれば、PCIeFerr=1である場合には、メモリカード3がPCIe/NVMeモードをサポートしているか否かにかかわらず、ホストドライバは、メモリカード3がSDモードで動作するようにSDホストコントローラ24を制御する。つまり、たとえメモリカード3がPCIe/NVMeモードをサポートしていても、ホストドライバは、メモリカード3を、SDモードを使用して制御する。この結果、PCIeエラーが再び発生することを防止することができる。
【0117】
一方、メモリカード3がPCIe/NVMeモードをサポートしており(PCIe Response=1)且つPCIeFerr=0である場合、ホストドライバは、SDホストコントローラ24を制御して、PCIe/NVMeモードへの切り替えを実行する(ステップ37)。そして、ホストドライバは、スリープ状態に遷移する(ステップS38)。
【0118】
一方、コネクタにメモリカード3が挿入されていない場合(ステップS41のNO)、ホストドライバは、即座にスリープ状態に遷移する(ステップS38)。
【0119】
なお、ホストドライバによってCMD0が発行された場合も(ステップS51)、ステップS32からの処理が実行される。
【0120】
以上説明したように、本実施形態によれば、PCIe/NVMeモードおよびSDモードで動作可能なメモリカード3とホスト装置2とを含むメモリシステム1において、SDホストコントローラ24は、メモリカード3がPCIe/NVMeモードをサポートしている場合、メモリカード3の動作モードがSDモードからPCIe/NVMeモードに変更されるように、VDD1がオンされている状態でVDD2をオンし且つカード存在検出信号PRSNT#をアサートする。メモリカード3がPCIe/NVMeモードである間、SDホストコントローラ24は、リセット信号PERST#を監視する。カード存在検出信号PRSNT#とリセット信号PERST#の双方が共にアサートされている期間が第1期間以上続いた場合に、SDホストコントローラ24は、PCIe/NVMeモードにおいてエラー(回復不能エラー)が発生したことを検出し、ホストドライバを起動するための割り込み信号を生成する。この割り込み信号によって、ホストドライバが起動される。したがって、標準PCIe/NVMeドライバが使用される環境においても、メモリカード3の動作モードをSDモードに戻すことができる。
【0121】
なお、本実施形態では、メモリカード3がSD Express カードとして実現されている場合を想定したが、本実施形態のホスト装置2の構成は、第1インタフェースを介してホスト装置2と通信する第1動作モードおよび第1インタフェースとは異なる第2インタフェースを介してホスト装置2と通信する第2動作モードをサポートする様々なメモリカードに適用可能である。
【0122】
本発明の実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の趣旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変化は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0123】
1…メモリシステム、2…ホスト装置、3…メモリカード、21…CPU、22…システムメモリ、23…システムコントローラ、24…SDホストコントローラ、25…電源回路、26…スイッチ回路、231…PCIeインタフェースコントローラ、232…割り込みコントローラ、241…ResTimer、242…タイムアウト値レジスタ、243…フラグレジスタ。