JP2020077246A - データ転送装置、撮像装置およびデータ転送方法 - Google Patents

データ転送装置、撮像装置およびデータ転送方法 Download PDF

Info

Publication number
JP2020077246A
JP2020077246A JP2018210648A JP2018210648A JP2020077246A JP 2020077246 A JP2020077246 A JP 2020077246A JP 2018210648 A JP2018210648 A JP 2018210648A JP 2018210648 A JP2018210648 A JP 2018210648A JP 2020077246 A JP2020077246 A JP 2020077246A
Authority
JP
Japan
Prior art keywords
data
recording device
address
memory
descriptor information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2018210648A
Other languages
English (en)
Inventor
純 大槻
Jun Otsuki
純 大槻
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2018210648A priority Critical patent/JP2020077246A/ja
Publication of JP2020077246A publication Critical patent/JP2020077246A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Bus Control (AREA)

Abstract

【課題】メモリアクセスを抑制しつつ、ディスクリプタチェーン転送の機能に対応していないデバイスへのデータ転送の効率を向上させることができるデータ転送装置、撮像装置およびデータ転送方法を提供する。【解決手段】記録デバイスへデータを転送するための転送制御を行うデータ転送装置は、連続しない複数の領域に、記録デバイスに転送すべき複数のデータを記憶するメモリと、連続する領域に記憶されている記録デバイスに転送すべきデータのアドレスおよびデータサイズ情報を含むディスクリプタ情報を記録デバイスに設定する第1の制御手段と、記録デバイスに設定したディスクリプタ情報に含まれるアドレスに基づくデータの読み出し要求を記録デバイスから受信したことに応じて、読み出し要求により要求されたデータではなく、メモリの連続しない領域に記憶されている複数のデータを順次読み出して、記録デバイスに出力するように制御する第2の制御手段と、を備えることを特徴とする。【選択図】図1

Description

本発明は、デバイスとメモリとの間でのデータの転送制御を行うデータ転送装置、撮像装置およびデータ転送方法に関するものである。
Direct Memory Access転送(以下、DMA転送)方式は、CPUを介さずに、メモリ間のデータ転送や、メモリとデバイス(記録媒体等)との間のデータ転送を高速に行うデータ転送方式として用いられている。特に、メモリと高速なインターフェースを有する記録媒体との間のデータ転送に、DMA転送方式が幅広く用いられている。
DMA転送方式において、ディスクリプタ情報を用いて、DMA転送を繰り返すデータ転送(以下、ディスクリプタチェーン転送)も行われるようになっている。関連する技術として、特許文献1の技術が提案されている。特許文献1の技術では、データ転送制御回路は、記憶されたディスクリプタに転送データが含まれていないとき、メモリからデータを読み出してI/Oデバイスへ転送している。また、上記データ転送制御回路は、ディスクリプタに転送データが含まれているとき、ディスクリプタバッファからそのデータを読み出してI/Oデバイスへ転送している。
特開2005−275538号公報
ところで、DMA転送方式において、デバイス側が、ディスクリプタチェーン転送の機能に対応していない場合がある。この場合、ディスクリプタチェーン転送を使用したDMA転送を行うことができない。例えば、近年、論理デバイスインターフェース規格であるNVM Express(以下、NVMe)に準拠したデバイスとメモリとの間でDMA転送を行うことが可能になっている。NVMeは、不揮発性のメモリをPCI Expressを通じて接続するための論理デバイスインターフェース規格である。NVMe規格において、ディスクリプタチェーン転送の機能に対応するSGL(Scatter Gather List)が定義されているが、SGLに対応していないデバイスも多く存在する。
デバイスが、ディスクリプタチェーン転送の機能に対応していない場合、例えば、DMAコントローラが、アクセス対象の複数のデータをメモリからそれぞれ読み出し、読み出された複数のデータを纏めて、メモリの別の領域に書き込むことが考えられる。この場合、DMAコントローラがメモリからデータを読み出して、メモリの別の領域に書き込むというメモリアクセスが生じるため、メモリ帯域が圧迫されることになる。
本発明の目的は、メモリアクセスを抑制しつつ、ディスクリプタチェーン転送の機能に対応していないデバイスへのデータ転送の効率を向上させることができるデータ転送装置、撮像装置およびデータ転送方法を提供することにある。
上記目的を達成するために、本発明のデータ転送装置は、記録デバイスへデータを転送するための転送制御を行うデータ転送装置であって、連続しない複数の領域に、記録デバイスに転送すべき複数のデータを記憶するメモリと、連続する領域に記憶されている前記記録デバイスに転送すべきデータのアドレスおよびデータサイズ情報を含むディスクリプタ情報を前記記録デバイスに設定する第1の制御手段と、前記記録デバイスに設定したディスクリプタ情報に含まれるアドレスに基づくデータの読み出し要求を前記記録デバイスから受信したことに応じて、前記読み出し要求により要求されたデータではなく、前記メモリの連続しない領域に記憶されている前記複数のデータを順次読み出して、前記記録デバイスに出力するように制御する第2の制御手段と、を備えることを特徴とする。
本発明によれば、メモリアクセスを抑制しつつ、ディスクリプタチェーン転送の機能に対応していないデバイスへのデータ転送の効率を向上させることができる。
第1実施形態に係るデータ転送装置の構成例を示すブロック図である。 第1実施形態に係るメモリおよび記録媒体のデータイメージを示す図である。 メモリにおける各データの開始アドレスおよびデータサイズの例を示す図である。 第1実施形態に係るディスクリプタ情報のフォーマットの例を示す図である。 第1実施形態に係る処理の流れを示すフローチャートである。 ホストコントローラと記録媒体との間のデータ転送を示すタイミングチャートである。 第2実施形態に係るデータ転送装置の構成例を示すブロック図である。 第2実施形態に係るメモリおよび記録媒体のデータイメージを示す図である。 第2実施形態に係るディスクリプタ情報のフォーマットの例を示す図である。
以下、本発明の各実施形態について図面を参照しながら詳細に説明する。しかしながら、以下の各実施形態に記載されている構成はあくまで例示に過ぎず、本発明の範囲は各実施形態に記載されている構成によって限定されることはない。
<第1実施形態>
図1は、本実施形態に係るデータ転送装置100の構成例を示すブロック図である。データ転送装置100は、静止画または動画像を撮影する撮像装置に適用され得る。この場合、撮像装置は、データ転送装置100を有する。以下、データ転送装置100は、不図示の撮像部および音声入力部を有する撮像機能を有するものとして説明する。データ転送装置100は、CPU101、メモリ103、映像データ生成部104、音声データ生成部105、ホストコントローラ106およびブリッジ回路107を有する。また、データ転送装置100には、記録媒体108(記録デバイス)が接続されている。CPU101、メモリ103、映像データ生成部104、音声データ生成部105およびブリッジ回路107は、メモリバス102を介して接続される。記録媒体108以外の各部は、所定の回路により実現されてもよい。所定の回路としては、ASIC(Application Specific Integrated Circuit)等が適用され得る。
CPU101は、データ転送装置100の全体を制御する。メモリ103は、DRAM等であり、データ転送装置100の内部のメモリである。映像データ生成部104は、上記撮像部から入力された信号より映像データを生成し、メモリバス102を介して、生成した映像データをメモリ103に記憶する。音声データ生成部105は、上記音声入力部から入力された信号より音声データを生成し、メモリバス102を介して、生成した音声データをメモリ103に記憶する。ホストコントローラ106はPCIe規格に準拠したホストコントローラである。ホストコントローラ106は、DMA制御回路を内蔵しており、メモリ103と記録媒体108との間のデータ転送を制御する。ホストコントローラ106は、PCIeインターフェースを有し、かつNVM Express規格(NVMe規格)に準拠した記録媒体108を制御する機能を有するものとする。ホストコントローラ106は、第1の制御手段および第3の制御手段に対応する。
ブリッジ回路107は、メモリバス102とホストコントローラ106との間に配置される回路である。ブリッジ回路107は、アドレス受信部109、アドレス検出部110、ディスクリプタ用アドレス生成部111、アドレス送信部112、セレクタ113、バッファ114およびセレクタ115を有する。ブリッジ回路107は、第2の制御手段に対応する。記録媒体108は、NVMe規格準拠のデバイスであり、かつNVMe規格のSGLには非対応な記録媒体である。データ転送装置100が、上述した撮像装置に適用される場合、メモリ103に記憶された映像データや音声データが、記録媒体108に転送される。記録媒体108には、半導体メモリ等が適用され得る。
図2は、メモリ103のデータイメージおよび記録媒体108のデータイメージの例を示す図である。上述したように、映像データ生成部104および音声データ生成部105により生成された各データは、メモリバス102を介してメモリ103へ記憶される。図2のメモリデータイメージは、メモリ103のデータイメージを示し、データ1、データ2およびデータ3は、映像データまたは音声データであるものとする。図2は、3つのデータがメモリ103に記憶されている例を示しているが、メモリ103に記憶されるデータの数は、4つ以上であってもよい。
図2のメモリデータイメージに示されるように、データ1〜3は、メモリ103の連続していない領域に記憶されている。つまり、データ1〜3は、メモリ103において散在して記憶されている。データ転送装置100は、メモリ103において散在して記憶されているデータ1〜3を、記録媒体108の連続した領域に転送する(書き込む)。図2のメモリデータイメージにおけるディスクリプタ情報1は、データ1の転送制御に用いられる情報である。ディスクリプタ情報2は、データ2の転送制御に用いられる情報である。ディスクリプタ情報3は、データ3の転送制御に用いられる情報である。従って、1つのデータに対して、1つのディスクリプタ情報が、メモリ103に記憶される。また、メモリ103には、他のディスクリプタとしてディスクリプタ情報Aが記憶される。
図3(A)は、メモリ103における各データ(データ1〜データ3)のアドレス(開始アドレス)およびデータサイズの例を示す図である。図3(B)は、各データを合計したデータALLのデータサイズを示し、データALLのアドレスとして「0x00050000」が設定されている例を示す。本実施形態では、アドレス「0x00050000」は、仮想アドレスであり、メモリ110には実際に存在しないアドレスである。仮想アドレスは、第2のディスクリプタ情報に対応する。仮想アドレスとして、メモリ110に存在はしているが、記録媒体108に書き込むデータが配置されていないアドレスを使用してもよい。また、本実施形態では仮想アドレスとして、データALLのアドレスを設定したが、データ1のディスクリプタ情報1の開始アドレスを設定するようにしてもよいし、予め決められた固定のアドレスを設定してもよい。図4(A)は、ディスクリプタ情報1〜3のフォーマットを示す図である。図4(B)は、ディスクリプタ情報Aのフォーマットを示す図である。ディスクリプタ情報のフォーマットは、図4(A)および図4(B)の例には限定されず、任意のフォーマットであってよい。
図5のフローチャートを参照して、本実施形態の処理の流れについて説明する。メモリ110の連続しない領域に記録されている複数のデータを記録媒体108に書き込む制御を行う場合に図5のフローが実行される。図5のフローでは、記録媒体108に書き込む対象のデータが、メモリ110に配置されたデータ1、データ2、データ3である場合について説明する。
まず、CPU101は、記録媒体108への書き込み対象となるデータ1、データ2およびデータ3のアドレスおよびデータサイズを含むディスクリプタ情報を生成し、図2のようにメモリ103上に配置する(S500)。つまり、メモリ103にデータ1、データ2およびデータ3が書き込まれる。ディスクリプタ情報1は、データ1のアドレスおよびデータサイズを示す。ディスクリプタ情報2は、データ2のアドレスおよびデータサイズを示す。ディスクリプタ情報3は、データ3のアドレスおよびデータサイズを示す。CPU101が書き込むディスクリプタ情報1〜3のフォーマットは、図4(A)に示されるように、64ビットのアドレスおよび32ビットのデータサイズ情報から構成される。アドレスは、上位16ビットと下位16ビットとに分割されている。各ディスクリプタ情報は、12バイトの情報である。記録媒体108に書き込むべき複数のデータにそれぞれ対応する複数のディスクリプタ情報(ディスクリプタ情報1〜3)は、メモリ103の連続する領域に配置する。さらに、記録媒体108にデータを書き込む順で、それぞれのデータに対応するディスクリプタ情報を配置する。
CPU101は、図2に示すように、ディスクリプタ情報Aをメモリ103に配置する(S501)。これにより、ディスクリプタ情報Aが、メモリ103に書き込まれる。ディスクリプタ情報Aは、上述したアドレスおよびデータサイズに加えて、記録媒体108へ発行するコマンド情報や、データの転送先となる記録媒体108内のアドレスを含む。ディスクリプタ情報Aは64バイトの情報である。ディスクリプタ情報Aは、図4(B)に示されるように、8ビットのコマンド情報、64ビットのメモリアドレス、64ビットの記録媒体108のアドレスおよび8ビットのデータサイズを含む。図4(B)において、記録媒体108のアドレスは、デバイスアドレスとして示されている。メモリアドレスおよび記録媒体108のアドレスは、上位16ビットと下位16ビットとに分割されている。
CPU101は、記録媒体108へデータを転送するために、WRITEコマンドを示す「0x01」をコマンド情報に書き込む。また、CPU101は、メモリアドレスの下位32ビットのアドレスには、仮想アドレスでありデータALLの開始アドレスとして設定されたアドレスである「0x00050000」を書き込み、上位32ビットのアドレスに「0x00000000」を書き込む。ディスクリプタ情報Aのメモリアドレスは、メモリ103の実アドレスではなく、記録媒体108とブリッジ回路107との間で使用される仮想アドレスである。本実施形態では、記録媒体108の開始アドレスに順次データが転送されるものとする。従って、CPU101は、ディスクリプタ情報Aにおける記録媒体108のアドレスを示すデバイスアドレスに、上位アドレスおよび下位アドレスともに全て「0x00000000」を書き込む。ディスクリプタ情報Aのデータサイズに関して、本フォーマットでは、1セクタを512バイトとしたセクタ数で設定がされるものとする。従って、CPU101は、ディスクリプタ情報Aのデータサイズの箇所には、各データのデータサイズの合計値である4096バイトの情報をセクタ数に換算した8セクタ分の情報を設定する。本実施形態では、設定値としてデータサイズから1を引いた値が設定されるものとする。従って、ディスクリプタ情報Aのデータサイズの箇所には、「0x0007」が書き込まれる。CPU101は、ディスクリプタ情報Aの他の箇所に「0」を書き込む。
次に、CPU101は、ブリッジ回路107のアドレス検出部110内のレジスタおよびディスクリプタ用アドレス生成部111内のレジスタに情報を書き込む(S502)。CPU101は、アドレス検出部110内のレジスタに、メモリアドレス「0x00050000」およびデータサイズを示す「4096バイト」の情報を設定する。メモリアドレス「0x00050000」は、ディスクリプタ情報Aの中に書き込まれているデータALLのアドレスである、また、CPU101は、ディスクリプタ用アドレス生成部111内のレジスタに、メモリ103におけるディスクリプタ情報1のアドレス「0x00000100」およびディスクリプタ情報の配置数を示す「0x00000003」を設定する。そして、CPU101の指示に基づいて、記録媒体108とホストコントローラ106との通信が開始されると、ホストコントローラ106は、記録媒体108に対する書き込み処理を開始する(S503)。
ホストコントローラ106は、記録媒体108の内部レジスタに、最初にアクセスするディスクリプタ情報Aの所在を示すアドレス「0x00001000」を設定する。次に、記録媒体108は、ホストコントローラ106からの設定値に従って、メモリ103におけるアドレス「0x00001000」にあるディスクリプタ情報Aを、ホストコントローラ106、ブリッジ回路107、メモリバス102を介して読み出す。これにより、記録媒体108は、読み出したディスクリプタ情報Aに基づいて、WRITEコマンドが指示されていることを検出する。また、記録媒体108は、読み出したディスクリプタ情報Aに基づいて、転送元となるメモリ103の開始アドレスが「0x00050000」であり、転送先となる記録媒体の開始アドレスが「0x00000000」であることを検出する。
また、記録媒体108は、読み出したディスクリプタ情報Aに基づいて、転送するデータサイズが8セクタであることを検出する。続けて、記録媒体108は、ホストコントローラ106に対してデータの読み出し要求を発行する。つまり、WRITEコマンドの指示が検出されると、ホストコントローラ106から記録媒体108へデータを書き込むのではなく、記録媒体108からホストコントローラ106へデータを読み出す処理が実施されることになる。以上のようにして、記録媒体108は、ホストコントローラ106に対して、ディスクリプタ情報Aに記述されているメモリアドレス「0x00050000」から順次データの読み出しを要求する(S505)。ここで、記録媒体108は、S503でレジスタに設定され、S504でメモリ103から読み出したディスクリプタ情報Aに基づいて、ホストコントローラ106にデータの読み出し要求を行う。本実施形態では、所定サイズを128バイトとし、所定サイズ毎にデータの読み出しを行うものとする。まず、記録媒体108は、ディスクリプタ情報Aに記述されているメモリアドレス「0x00050000」から128バイト分のデータの読み出し要求を行う。読み出し要求したサイズ分のデータを記録媒体108が受信すると、記録媒体108は、次のデータ、つまり、「0x00050000」から128バイト先のアドレスから128バイト分のデータの読み出し要求を行う。記録媒体108は、ディスクリプタ情報Aに記述されているデータサイズ分のデータを受信するまで、このように順次データの読み出し要求を行っていく。これにより、データ1〜3の計4096バイト分のデータの読み出しが順次実行される。
ここで、ディスクリプタ情報Aに記述されているメモリアドレス「0x00050000」は、仮想アドレスであり、実際には、データ1〜3は、メモリ103のアドレス「0x00050000」には格納されていない。そのため、S506〜S514のような処理が実行される。
ブリッジ回路107は、ディスクリプタ情報Aに記述されているメモリアドレスが、仮想アドレスではなく、メモリ103内の実在するデータ転送に使用可能なアドレスの場合の場合には、S509〜S514の処理を実行せずに、記録媒体108からの読み出し要求に応じて、指定されたアドレスから、指定されたサイズ分のデータを一時的にバッファ114に記憶し、読み出し要求で要求されたデータがホストコントローラにより転送されるように制御するとよい。
後述するように、データ1、データ2およびデータ3を転送する場合は、メモリ103に記憶されているデータ1、データ2およびデータ3は、ブリッジ回路107によりブリッジ回路内のバッファ114に順次記憶されていく。記録媒体108からの、アドレス「0x00050000」から128バイト(8セクタ)分のデータの要求に対して、ホストコントローラ106は、メモリ103内の指定されたアドレスのデータではなく、後述するように、ブリッジ回路107内のバッファ114に記憶されたデータ1、データ2およびデータ3を転送することになる。ホストコントローラ106は、バッファ114に所定サイズのデータが記憶されているか否かを判定する(S506)。以下、所定サイズを128バイトとして説明するが、所定サイズは128バイトには限定されない。このサイズは、一回のデータ転送処理で転送するデータサイズである。
S506〜S508の処理は、後述するS509〜S514の処理と並行して行われる。S510、S512およびS514の処理により、バッファ114に、順次データ1〜3が記憶されていく。バッファ114に記憶されたデータのデータサイズが128バイトに達していない場合(S506でNO)、フローは、S506に戻る。バッファ114に記憶されたデータのデータサイズが128バイトに達している場合(S506でYES)、ホストコントローラ106は、バッファ114から128バイトのデータを読み出す(S507)。この場合、記録媒体108は、バッファ114から読み出された128バイトのデータを、記録媒体108内部のメモリに記録する。ホストコントローラ106は、全てのデータ(データ1、データ2およびデータ3)の転送が完了したか否かを判定する(S508)。全てのデータの転送が完了していない場合(S508でNO)、転送処理は未だ終了していないため、フローはS505に戻る。全てのデータの転送が完了している場合(S508でYES)、図5のフローが終了する。
上述したように、S505〜S508の処理と、以下のS509〜S514の処理とは、並行して実行される。これにより、データの転送時間の短縮化が図られる。S503において、記録媒体108がディスクリプタ情報Aを読み出す際に、ブリッジ回路107のアドレス受信部109は、ホストコントローラ106がブリッジ回路107へ発行したアドレス「0x00050000」を受信する。アドレス検出部110は、受信したアドレスが、事前に自身の内部レジスタに設定されている仮想アドレスを示す「0x00050000」であることを検出すると、ディスクリプタ用アドレス生成部111にトリガ信号を発行する。
上述したように、CPU101は、アドレス検出部110の内部レジスタにアドレス「0x00050000」を設定しているため、アドレス検出部110は、トリガ信号を発行する。ディスクリプタ用アドレス生成部111はトリガ信号を受信すると、事前に自身の内部レジスタに設定されているディスクリプタ情報1のメモリ103におけるアドレスを示す「0x00000100」をアドレス送信部112へ出力する。この際、アドレス送信部112は、ホストコントローラ106から発行されたアドレス「0x00050000」を、ディスクリプタ用アドレス生成部111から出力されたアドレス「0x00000100」に置換する。上述したように、アドレス「0x00050000」は、ディスクリプタ情報Aの仮想アドレスであり、アドレス「0x00000100」は、ディスクリプタ情報1のメモリ103における実アドレスである。アドレス送信部112は、上述したアドレス「0x00000100」から始まるディスクリプタ情報1を読み出す要求を、メモリ103に出力する。これにより、ブリッジ回路107は、メモリ103からディスクリプタ情報1を読み出して(S509)、ディスクリプタ情報1をバッファ114に記憶する。
ディスクリプタ用アドレス生成部111は、バッファ114に記憶されたディスクリプタ情報1から、アドレスおよびデータサイズを検出する。そして、ディスクリプタ用アドレス生成部111は、メモリ103におけるデータ1のアドレス「0x00002000」からデータサイズ1024バイト分のデータの読み出し要求信号をメモリ103に発行する。これにより、ブリッジ回路107にデータ1が読み出される。ブリッジ回路107は、読み出されたデータ1をバッファ114に記憶する(S510)。
ディスクリプタ用アドレス生成部111は、S509でディスクリプタ情報1を読み出したアドレスに対して、ディスクリプタ情報1つ分のデータサイズである12バイトを加算したアドレス「0x0000010C」を読み出す要求をメモリ103に発行する。メモリ103において、ディスクリプタ情報1〜3は、連続した領域に記憶されている。これにより、ブリッジ回路107は、メモリ103からディスクリプタ情報2を読み出して(S511)、ディスクリプタ情報2をバッファ114に記憶する。そして、ディスクリプタ用アドレス生成部111は、バッファ114に記憶されたディスクリプタ情報2に基づいて、アドレスおよびデータサイズを検出する。ブリッジ回路107は、メモリ103におけるデータ2のアドレス「0x00003000」からデータサイズ1024バイト分のデータの読み出し要求信号を発行する。これにより、ブリッジ回路107にデータ2が読み出される。ブリッジ回路107は、読み出されたデータ2をバッファ114に記憶する(S512)。
ディスクリプタ用アドレス生成部111は、S511でディスクリプタ情報2を読み出したアドレスに対して、ディスクリプタ情報1つ分のデータサイズである12バイトを加算したアドレス「0x00000118」を読み出す要求をメモリ103に発行する。これにより、ブリッジ回路107は、メモリ103からディスクリプタ情報3を読み出して(S513)、ディスクリプタ情報3をバッファ114に記憶する。ブリッジ回路107は、メモリ103におけるデータ3のアドレス「0x00004000」からデータサイズ1024バイト分のデータの読み出し要求信号を発行する。ブリッジ回路107は、読み出されたデータ3をバッファ114に記憶する(S514)。
上述したS507において、ホストコントローラ106は、バッファ114に記憶された所定サイズのデータを順次読み出していく。ホストコントローラ106は、バッファ114に記憶された所定サイズのデータを順次読み出して、記録媒体108の連続した領域に順次記憶していく。これにより、メモリ103に記憶されていたデータ1〜3が、記録媒体108の連続した領域に記録される。ここで、記録媒体108は、ディスクリプタチェーン転送の機能に対応していない記録媒体である。本実施形態では、記録媒体108は、NVMeの規格に準拠した記録媒体であり、SGLに対応していない記録媒体であるものとする。次に、ディスクリプタチェーン転送の機能に対応していない記録媒体のデータ転送とディスクリプタチェーン転送の機能に対応している記録媒体のデータ転送との比較例について説明する。
図6は、ホストコントローラ106と記録媒体108との間のデータ転送を示すタイミングチャートである。図6(A)は、本実施形態が適用されない場合のタイミングチャートを示し、図6(B)は、本実施形態が適用された場合のタイミングチャートを示す。図6(A)は、ディスクリプタチェーン転送を用いずに、DMAによるデータ転送が行われる場合のタイミングチャートである。メモリにおいて、データ1〜3は、それぞれ、連続していない領域に記憶されているものとする。データ1の転送において、タイミングT901において、CPUがデータの転送開始を指示するとともに、DMAによるデータ転送の対象のデータのアドレスおよびデータサイズを示すディスクリプタ情報がメモリから読み出される。そして、ディスクリプタ情報に基づいて、メモリからデータ1が読み出され、記録媒体にデータ1が転送される。データ1の読み出しが完了した後に、タイミングT902において割り込み信号がCPUに通知される。データ2およびデータ3についても、データ1と同様の処理が行われる。データ2のデータ転送については、タイミングT903からタイミングT904の間に行われる。データ3のデータ転送については、タイミングT905からタイミングT906の間に行われる。従って、本実施形態が適用されない場合、メモリの連続していない領域に記憶される複数のデータ(散在しているデータ)のそれぞれについて、CPUは、割り込みを検出し、次のデータ転送の開始を指示する必要がある。1つのデータの処理にかかる時間は、少なくともCPUの動作クロックの数百サイクル以上の時間がかかり、データの転送効率が低下する。
一方、図6(B)のタイミングチャートでは、タイミングT907において、ホストコントローラ106は、CPU101から転送開始の指示がされた後、アドレスおよびデータサイズを示すディスクリプタ情報を読み出す。バッファ114には、上述したように、データ1〜3が順次記憶されていく。このため、ホストコントローラ106は、CPU101が介在することなく、データ1〜3を、所定サイズごとに、バッファ114から連続して読み出すことができる。そして、ホストコントローラ106は、記録媒体108の連続した領域にデータ1〜3を記録させることができる。図6(B)に示されるように、タイミングT907とタイミングT908との間に、CPU101が介在することがないため、本実施形態が適用されない場合(図6(A)の場合)と比較して、効率的な転送を実現することが可能となる。
ここで、ホストコントローラ106が、メモリ103からデータ1〜3を読み出して、各データを纏めてメモリ103の連続した別の領域に記憶させることが考えられる。この場合、データ1〜3を纏めて記録媒体108に転送することができる。しかし、この場合、メモリ103からデータ1〜3を読み出すメモリアクセスと、データ1〜3を再度、メモリ103に書き込むメモリアクセスとが必要になる。これらのメモリアクセスが生じることにより、メモリ103の帯域が圧迫される。この点、本実施形態では、上記のメモリアクセスが生じないため、メモリ103に対するメモリアクセスが抑制され、メモリ103の帯域が圧迫されることを回避することができる。以上のように、本実施形態では、ディスクリプタチェーン転送に対応していない記録媒体であっても、メモリ帯域を圧迫することなく、効率的なデータ転送を実現することが可能となる。
なお、上述の説明では、メモリ103の連続しない複数の領域にそれぞれデータ1、データ2、データ3が記憶されているときに、記録媒体108に設定されたディスクリプタ情報Aを用いて、記録媒体108が主導してメモリ103のデータを取得して記録媒体108に記録する場合について説明した。それに対し、メモリ103の連続する領域に記録媒体108に転送して記録すべきデータが記憶されている場合については、通常のディスクリプタ情報によるデータの転送が行われる。つまり、メモリ103の連続する領域のデータを記録媒体108に転送して記録する場合、CPU101は、ディクリプタ情報Aに、そのデータのメモリ103内での開始アドレスと、データサイズ情報とを記述して、記録媒体108に設定する。そして、上述の説明のようなディスクリプタ情報1、2、3は生成せずに、ディスクリプタ情報Aをブリッジ回路117のレジスタに設定する。ブリッジ回路107は、S509〜S514の処理を行わずに、ディスクリプタ情報Aに設定されているアドレスのデータを順次メモリ103から読み出して、バッファ114に記憶する。バッファ114へのデータの格納は、記録媒体108から、ディスクリプタ情報Aに基づくデータの読み出し要求を受信したことに応じて開始するようにしてもよい。記録媒体108は、S505で説明したのと同様に、ディスクリプタ情報Aに基づいて、ディスクリプタ情報Aに記載されているデータを取得するために、順次データ読み出し要求を行う。データ読み出し要求を受信すると、ホストコントローラ106は、S506〜S508のように、バッファ114に記憶されたデータを順次記録媒体108に転送する。バッファ114には、ブリッジ回路107によりディスクリプタ情報Aで指定されているデータが順次記憶されるため、ホストコントローラ106は、ディスクリプタ情報Aで設定したメモリ103の連続する領域に記憶されているデータを記録媒体108に送信することになる。
このような処理を行うことにより、記録媒体108に転送すべきデータが、メモリ103の連続する領域にデータが記録されている場合と、メモリ103の連続しない複数の領域にデータが記録されている場合とで、同じ構造のディスクリプタ情報を用いて、データを転送することが可能となる。このように、CPU101によるディスクリプタ情報の生成処理とブリッジ回路107へのレジスタへの設定の処理、及び、ブリッジ回路107によるバッファ114への転送データの記憶処理を変更すれば、転送すべきデータが、メモリ103の連続する領域に記憶されている場合であっても連続しない領域に記憶されている場合であっても、ホストコントローラ106による処理を変更せずに、ディスクリプタ情報を用いての記録媒体108が主導したデータの転送を行うことができるようになる。つまり、ホストコントローラ106は、メモリ103の連続する領域に記憶されているデータを転送するために、転送データのアドレスに基づく読み出し要求を受信したか、または、連続しない領域に記憶されている複数のデータを転送するために仮想アドレスに基づく読み出し要求を受信したか、に関わらず、読み出し要求に応じて、バッファ114に記憶されたデータを要求されたサイズ分だけ転送するようにすればよい。
<第2実施形態>
図7は、第2実施形態に係るデータ転送装置600の構成例を示すブロック図である。第1実施形態と同様、データ転送装置600は、静止画または動画を撮影する撮像装置に適用されてもよい。第2実施形態のデータ転送装置600は、転送方式判定部616を有する点で、第1実施形態のデータ転送装置100と異なる。第2実施形態のデータ転送装置600の転送方式判定部616以外の各部は、第1実施形態と同様であるため、説明を省略する。記録媒体608は、NVMe規格に準拠するデバイスであり、またデータ転送装置600から挿抜可能である。
転送方式判定部616は、ホストコントローラ606を経由して、記録媒体608が、ディスクリプタチェーン転送の機能を有しているか否かを判定する。転送方式判定部616は、判定手段に対応する。本実施形態では、転送方式判定部616は、記録媒体608が、NVMe規格のSGLの転送方式に対応しているか否かを判定する機能を有しているものとする。SGLに対応している記録媒体608は、ディスクリプタチェーン転送の機能を有する。CPU601は、転送方式判定部616の判定結果を読み出すことが可能である。CPU601は、第4の制御手段に対応する。以下、データ転送装置600は、上述した撮像装置に適用されているものとして説明する。データ転送装置600は、撮像装置に接続された記録媒体608がNVMe規格のSGLに対応しているか否かにより、データの転送制御方法を切り替える。記録媒体608がSGLに対応していない場合、データ転送装置600は、第1実施形態と同様の動作を行う。一方、接続された記録媒体608がSGLに対応している場合、データ転送装置600は、SGLの機能を使用したデータ転送を実施する。
図8は、メモリ603のデータイメージおよび記録媒体608のデータイメージを示す図である。SGLに対応しているディスクリプタ情報1〜3のデータサイズは、第1実施形態のディスクリプタ情報1〜3のデータサイズよりも大きい。従って、ディスクリプタ情報1および2のアドレスは、図2のディスクリプタ情報1および2のアドレスより大きい値となっている。図8に示されるように、メモリ603において、データ1〜3は、それぞれ、連続していない領域に記憶されている。つまり、データ1〜3は、メモリ603において散在して記憶されている。第1実施形態と同様、データ1〜3は、映像データまたは音声データであるものとする。
第1実施形態と同様、第2実施形態のディスクリプタ情報1は、データ1のアドレスおよびデータサイズを含む。ディスクリプタ情報2は、データ2のアドレスおよびデータサイズを含む。ディスクリプタ情報3は、データ3のアドレスおよびデータサイズを含む。図9(A)は、ディスクリプタ情報1、ディスクリプタ情報2およびディスクリプタ情報3のフォーマットを示す。各ディスクリプタ情報は、16バイトまたは32バイトの情報である。32バイトのディスクリプタ情報1およびディスクリプタ情報2は、転送対象のデータのアドレスおよびデータサイズを示す情報だけでなく、次のディスクリプタ情報のアドレスおよびデータサイズを示す情報を含む。16バイトのディスクリプタ情報3は、ディスクリプタチェーンの最後のディスクリプタ情報であるため、次のディスクリプタ情報に関する情報を含まない。
ディスクリプタ情報1のDW[0]および[1]は、データ1のアドレスを示す。CPU601は、DW[0]に「0x00002000」を、DW[1]に「0x00000000」を設定する。CPU601は、DW[2]にデータサイズをバイト数で設定する。CPU601は、DW[3]の上位2ビットに、転送対象データの情報であることを示す「0x0」を設定する。DW[4]〜[7]は、次のディスクリプタ情報2のアドレスおよびデータサイズを示す情報である。DW[4]および[5]は、ディスクリプタ情報2が配置されたアドレスを示す。CPU601は、DW[4]に「0x00000120」を、DW[5]に「0x00000000」を設定する。CPU601は、DW[6]に、ディスクリプタ情報2のデータサイズである32バイトを示す「0x00000020」を設定する。ディスクリプタ情報1のDW[7]の上位2ビットには、CPU601により「0x2」が設定されている。この場合、ディスクリプタ情報1は、次のディスクリプタ情報を示す情報を含み、かつ次のディスクリプタ情報が最後の情報ではないことを示す。
ディスクリプタ情報2には、データ2の情報、および次のディスクリプタ情報3を示すアドレスとデータサイズとを設定する。ディスクリプタ情報1と異なる点として、ディスクリプタ情報2のDW[7]の上位2ビットには、CPU601により「0x3」が設定されている。この場合、ディスクリプタ情報2は、次のディスクリプタ情報を示す情報であり、かつ次のディスクリプタ情報が最後の情報であることを示す。ディスクリプタ情報3は、データ3の情報を含む。ディスクリプタ情報3のDW[3]の上位2ビットには、CPU601により「0x0」が設定されている。この場合、ディスクリプタ情報3は、最後のディスクリプタ情報であることを示す。ディスクリプタ情報3には、DW[4]〜DW[7]が不要なため、ディスクリプタ情報3のデータサイズは16バイトである。
次に、SGLを用いたデータ転送動作について説明する。SGLを用いたデータ転送は、ディスクリプタチェーン転送の機能に対応したデータ転送である。CPU601は、図8に示すようにディスクリプタ情報Aをメモリ603に書き込む。ディスクリプタ情報Aのフォーマットについては、第1実施形態のディスクリプタ情報Aとの差分を説明する。図9(B)のディスクリプタ情報Aにおいて、DW[0]の15ビット目および14ビット目には「0x1」が設定されている。この場合、ディスクリプタ情報AはSGLを用いた転送情報であることを示す。また、CPU601は、ディスクリプタ情報AのDW[6]およびDW[7]に、ディスクリプタ情報1のアドレスを設定する。従って、CPU601は、DW[6]に「0x00000100」を、DW[7]に「0x00000000」を設定する。
次に、CPU601の指示により、ホストコントローラ606と記録媒体608とのデータ通信が開始される。記録媒体608は、メモリ603上のディスクリプタ情報Aのデータを、ホストコントローラ606、ブリッジ回路607、メモリバス602を介して読み出す。ブリッジ回路607は、アドレスおよびデータともに、受信した情報をそのまま送信する。つまり、ブリッジ回路607の機能はOFFに設定される。この場合、ホストコントローラ606から出力されたアドレス情報をアドレス受信部609が受信すると、受信したアドレス情報がアドレス送信部612に出力される。アドレス送信部612は、受信したドレス情報をメモリバス602へ出力する。
ここで、記録媒体608がSGLを用いたデータ転送に対応している場合、セレクタ613および615は、メモリ603から読み出されたデータが、内部のバッファ614を経由しない経路となるように設定されている。従って、メモリ603から読み出されたディスクリプタ情報Aは、ホストコントローラ606に出力される。記録媒体608は、受信したディスクリプタ情報Aに記載された内容に従い、メモリ603のディスクリプタ情報1を読み出す。記録媒体608は、ディスクリプタ情報1が示すデータ1のアドレス情報に基づき、データ1を読み出す。これにより、メモリ603から記録媒体608にデータ1が転送される。ディスクリプタ情報1には、ディスクリプタ情報2のアドレス情報が含まれているため、記録媒体608は、メモリ603からディスクリプタ情報2を読み出す。これにより、メモリ603から記録媒体608にデータ2が転送される。データ3についての処理も同様である。データ3の転送が完了すると、全てのデータの転送が完了する。以上が、記録媒体608がNVMe規格のSGLに対応している場合の、データ転送動作である。
上述したように、転送方式判定部616は、データ転送装置600に接続された記録媒体608が、SGLに対応しているか否かを判定する。例えば、転送方式判定部616は、ホストコントローラ606を介して、記録媒体608から、当該記録媒体608がSGLに対応しているか否かを示す情報に基づいて、上記の判定を行ってもよい。転送方式判定部616は、記録媒体608が、SGLに対応していると判定した場合、アドレス検出部610の機能をOFFに設定し、バッファ614を介さない経路となるようにセレクタ613および615を設定する。一方、転送方式判定部616は、記録媒体608が、SGLに対応していないと判定した場合、アドレス検出部610の機能をONに設定し、バッファ614を介する経路となるようにセレクタ613および615を設定する。この場合、第1実施形態と同様の処理が行われる。つまり、ブリッジ回路607は、メモリ603から読み出した各データをバッファ614に記憶し、ホストコントローラ606は、バッファ614から順次データを読み出す。そして、読み出されたデータは、記録媒体608に出力されることで、DMAによるデータ転送が行われる。
従って、転送方式判定部616が、データ転送装置600に接続された記録媒体608がSGLに対応しているか否かにより転送方法を切り替えることで、SGLに対応した記録媒体ではブリッジ回路607の処理を簡潔化することができる。これにより、第1実施形態に加えて、ブリッジ回路607の内部回路の電力を抑えるという効果が得られる。データ転送装置600に接続された記録媒体608がSGLに対応していない場合でも、第1実施形態と同様、メモリ帯域を圧迫することなく、効率的なデータ転送を実現できるという効果が得られる。
以上、本発明の好ましい実施形態について説明したが、本発明は上述した各実施形態に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。本発明は、上述の各実施形態の1以上の機能を実現するプログラムを、上述したASIC等が実行することによっても実現可能である。
101 CPU
103 メモリ
106 ホストコントローラ
108 記録媒体
114 バッファ
616 転送方式判定部

Claims (16)

  1. 記録デバイスへデータを転送するための転送制御を行うデータ転送装置であって、
    連続しない複数の領域に、記録デバイスに転送すべき複数のデータを記憶するメモリと、
    連続する領域に記憶されている前記記録デバイスに転送すべきデータのアドレスおよびデータサイズ情報を含むディスクリプタ情報を前記記録デバイスに設定する第1の制御手段と、
    前記記録デバイスに設定したディスクリプタ情報に含まれるアドレスに基づくデータの読み出し要求を前記記録デバイスから受信したことに応じて、前記読み出し要求により要求されたデータではなく、前記メモリの連続しない領域に記憶されている前記複数のデータを順次読み出して、前記記録デバイスに出力するように制御する第2の制御手段と、
    を備えることを特徴とするデータ転送装置。
  2. 前記ディスクリプタ情報には、連続する領域に記録されている転送すべきデータの開始アドレスとサイズとが記述されており、
    前記第2の制御手段は、前記記録デバイスに設定したディスクリプタ情報に含まれる開始アドレスから開始される連続する領域に記録されたデータの読み出し要求を前記記録デバイスから受信したことに応じて、前記読み出し要求により要求されたデータではなく、前記メモリの連続しない領域に記録された前記複数のデータを順次読み出して、前記記録デバイスに出力するように制御することを特徴とする請求項1に記載のデータ転送装置。
  3. 前記第1の制御手段は、連続しない領域の複数のデータを前記記録デバイスに転送する場合は、転送すべきデータのアドレスではない仮想アドレスを転送すべきデータのアドレスとして記述したディスクリプタ情報を前記記録デバイスに設定することを特徴とする請求項1または2に記載のデータ転送装置。
  4. 前記仮想アドレスは、前記メモリで使用されないアドレス、または、前記記録デバイスへのデータ転送において使用されないアドレスであることを特徴とする請求項3に記載のデータ転送装置。
  5. 前記仮想アドレスは、予め決められた所定のアドレスであることを特徴とする請求項3に記載のデータ転送装置。
  6. 転送すべきデータを一時的に記憶するバッファと、
    前記バッファに記憶されたデータを前記記録デバイスに転送するように制御する第3の制御手段と、を有し、
    前記第2の制御手段は、前記メモリの連続しない領域に記憶された複数のデータを前記記録デバイスに転送する際に、前記複数のデータを順次、前記バッファに記憶するように制御し、
    前記第3の制御手段は、前記記録デバイスからの前記ディスクリプタ情報に含まれるアドレスに基づくデータの読み出し要求に応じて、前記バッファに記憶されたデータを前記記録デバイスへ順次、転送するように制御することを特徴とする請求項1乃至5のいずれか1項に記載のデータ転送装置。
  7. 前記第2の制御手段による前記バッファへのデータの記憶と、前記第3の制御手段による前記記録デバイスへのデータの転送とは、並行して実行されることを特徴とする請求項6に記載のデータ転送装置。
  8. 前記メモリの連続する領域に記憶されたデータを前記記録デバイスに転送する場合には、
    前記第1の制御手段は、前記メモリの連続する領域に記憶されたデータのアドレスとデータサイズ情報を含むディスクリプタ情報を前記記録デバイスに設定し、
    前記第2の制御手段は、前記ディスクリプタ情報に基づくデータの読み出し要求を前記記録デバイスから受信したことに応じて、前記読み出し要求により要求されたデータを出力するように制御することを特徴とする請求項1乃至7のいずれか1項に記載のデータ転送装置。
  9. 前記メモリの連続しない複数の領域に記憶された複数のデータを前記記録デバイスに転送する場合には、前記第1の制御手段は、転送すべきデータのアドレスではない仮想アドレスおよび前記複数のデータの合計のデータサイズ情報を含むディスクリプタ情報を前記記録デバイスに設定し、前記第2の制御手段は、前記複数のデータを順次、前記バッファに記憶するように制御し、
    前記メモリの連続する領域に記憶されたデータを前記記録デバイスに転送する場合には、前記第1の制御手段は、前記メモリの連続する領域に記憶された転送すべきデータのアドレスとデータサイズ情報を含むディスクリプタ情報を前記記録デバイスに設定し、前記第2の制御手段は、前記データを順次、前記バッファに記憶するように制御し、
    前記第3の制御手段は、前記記録デバイスからの読み出し要求に応じて、当該読み出し要求が前記仮想アドレスに基づく読み出し要求であるか、転送すべきデータのアドレスに基づく読み出し要求であるかに関わらず、前記バッファに記憶されたデータを前記記録デバイスへ順次、転送するように制御することを特徴とする請求項6に記載のデータ転送装置。
  10. 前記第1の制御手段は、前記ディスクリプタ情報を前記記録デバイスに設定すると共に、前記ディスクリプタ情報に記述するアドレスおよびデータサイズ情報と、前記メモリの連続しない領域に記憶された複数のデータそれぞれのアドレスおよびデータサイズ情報に関する情報とを、前記第2の制御手段に設定することを特徴とする請求項1乃至9のいずれか1項に記載のデータ転送装置。
  11. 前記第1の制御手段は、前記メモリの連続しない領域に記憶された複数のデータそれぞれのアドレスおよびデータサイズ情報を含む第2のディスクリプタ情報を前記メモリに記憶し、当該第2のディスクリプタ情報のアドレスを前記第2の制御手段に設定することを特徴とする請求項10に記載のデータ転送装置。
  12. 転送すべきデータのアドレスではない仮想アドレスは、前記第2のディスクリプタ情報のアドレスであることを特徴とする請求項11に記載のデータ転送装置。
  13. 前記記録デバイスがディスクリプタチェーン転送に対応しているか否かを判定する判定手段と、
    前記判定手段による判定結果に応じて、前記複数のデータを前記バッファに記憶させるか否かを制御する第4の制御手段と、
    をさらに備えることを特徴とする請求項6に記載のデータ転送装置。
  14. 前記記録デバイスは、NVM Express規格に準拠する記録媒体である、
    ことを特徴とする請求項1乃至13のいずれか1項に記載のデータ転送装置。
  15. 請求項1乃至14のうち何れか1項に記載のデータ転送装置を備えることを特徴とする撮像装置。
  16. 連続しない複数の領域に、記録デバイスに転送すべき複数のデータを記憶するメモリを有し、前記記録デバイスへデータを転送するための転送制御を行うデータ転送方法であって、
    連続する領域に記憶されている前記記録デバイスに転送すべきデータのアドレスおよびデータサイズ情報を含むディスクリプタ情報を前記記録デバイスに設定する工程と、
    前記記録デバイスに設定したディスクリプタ情報に含まれるアドレスに基づくデータの読み出し要求を前記記録デバイスから受信したことに応じて、前記読み出し要求により要求されたデータではなく、前記メモリの連続しない領域に記憶されている前記複数のデータを順次読み出して、前記記録デバイスに出力するように制御する工程と、
    を備えることを特徴とするデータ転送方法。
JP2018210648A 2018-11-08 2018-11-08 データ転送装置、撮像装置およびデータ転送方法 Pending JP2020077246A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018210648A JP2020077246A (ja) 2018-11-08 2018-11-08 データ転送装置、撮像装置およびデータ転送方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018210648A JP2020077246A (ja) 2018-11-08 2018-11-08 データ転送装置、撮像装置およびデータ転送方法

Publications (1)

Publication Number Publication Date
JP2020077246A true JP2020077246A (ja) 2020-05-21

Family

ID=70724181

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018210648A Pending JP2020077246A (ja) 2018-11-08 2018-11-08 データ転送装置、撮像装置およびデータ転送方法

Country Status (1)

Country Link
JP (1) JP2020077246A (ja)

Similar Documents

Publication Publication Date Title
US9176673B2 (en) Memory device
US6859856B2 (en) Method and system for a compact flash memory controller
KR100708128B1 (ko) 낸드 플래시 메모리 제어 장치 및 방법
KR101051815B1 (ko) 저장 컨트롤러 및 저장 시스템
US9990138B2 (en) Out of order SGL read sorting in a mixed system with PRP read or system that supports only SGL reads
TWI459201B (zh) Information processing device
US9396141B2 (en) Memory system and information processing device by which data is written and read in response to commands from a host
JP5762930B2 (ja) 情報処理装置および半導体記憶装置
TWI525430B (zh) 快取記憶體裝置以及該裝置的資料處理方法
JP2013142947A (ja) 記憶制御装置、記憶装置および記憶制御装置の制御方法
US10733122B2 (en) System and method for direct memory access in a flash storage
TWI515559B (zh) 資訊處理裝置
US8589601B2 (en) I/O controller and descriptor transfer method
US20170160952A1 (en) Memory controller, memory system, and information processing system
US20160266827A1 (en) Memory controller, memory device, data transfer system, data transfer method, and computer program product
US7680992B1 (en) Read-modify-write memory with low latency for critical requests
US20150177985A1 (en) Information processing device
JP2020077246A (ja) データ転送装置、撮像装置およびデータ転送方法
JP3747213B1 (ja) シーケンシャルromインターフェース対応nand型フラッシュメモリーデバイス及びそのコントローラ
JP2017097466A (ja) ストレージ制御装置、ストレージ制御方法およびストレージ制御プログラム
JP2010026584A (ja) メモリコントローラおよび不揮発性記憶装置
US11029881B2 (en) Memory controller, memory system, and information processing system
TWI604306B (zh) 資料儲存裝置、記憶體控制器及其資料管理方法
WO2016170673A1 (ja) 計算機システム、及び、メモリモジュール
CN111045961A (zh) 数据处理方法及使用所述方法的存储控制器