JP2008511929A - 携帯電話の不揮発性メモリを管理するシステムおよび方法 - Google Patents
携帯電話の不揮発性メモリを管理するシステムおよび方法 Download PDFInfo
- Publication number
- JP2008511929A JP2008511929A JP2007530296A JP2007530296A JP2008511929A JP 2008511929 A JP2008511929 A JP 2008511929A JP 2007530296 A JP2007530296 A JP 2007530296A JP 2007530296 A JP2007530296 A JP 2007530296A JP 2008511929 A JP2008511929 A JP 2008511929A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- mobile phone
- data
- processor
- boot
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/20—Memory cell initialisation circuits, e.g. when powering up or down, memory clear, latent image memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4403—Processor initialisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Transceivers (AREA)
Abstract
本発明は、メモリ管理に関し、特に、携帯電話などの不揮発性メモリにアクセスし、これを管理する方法およびシステムに関する。携帯電話用メモリコントローラであって、携帯電話の不揮発性メモリに接続されるように構成された第1のインターフェース回路と、携帯電話の揮発性メモリに接続されるように構成された第2のインターフェース回路と、第1の携帯電話プロセッサに接続されるように構成され、前記携帯電話の揮発性メモリへのアクセスを前記第1のプロセッサに提供するように構成された第1のプロセッサインターフェースと、第2の携帯電話プロセッサに接続されるように構成された第2のプロセッサインターフェースと、携帯電話の不揮発性メモリのデータの少なくとも一部分を前記携帯電話の揮発性メモリにコピーするように構成されたコントローラ回路と、を備える携帯電話用メモリコントローラを開示する。
Description
(著作権表示)
この特許文書の開示の一部分には著作権の保護を受ける事項が含まれている。当該著作権者は、それが特許商標庁のファイルまたは記録に所在する限り、この特許文書または特許開示のいずれかによる複製に対して異議を唱えるものではないが、その他の全ての著作権は保留するものである。
この特許文書の開示の一部分には著作権の保護を受ける事項が含まれている。当該著作権者は、それが特許商標庁のファイルまたは記録に所在する限り、この特許文書または特許開示のいずれかによる複製に対して異議を唱えるものではないが、その他の全ての著作権は保留するものである。
(優先権主張出願)
本願は、米国特許法第119条(e)項に基づく米国仮出願第60/605265号(出願日:2004年8月30日)および米国仮特許出願第60/611219号(出願日:2004年9月20日)の利益を主張する。各出願の内容はいずれも参照により本明細書に組み込まれる。
本願は、米国特許法第119条(e)項に基づく米国仮出願第60/605265号(出願日:2004年8月30日)および米国仮特許出願第60/611219号(出願日:2004年9月20日)の利益を主張する。各出願の内容はいずれも参照により本明細書に組み込まれる。
本発明はメモリ管理に関し、特に、携帯電話などの不揮発性メモリにアクセスしてこれを管理する方法およびシステムに関する。
小型で高速かつ低消費電力の、プロセッサ、メモリ、ASICといった電子部品の出現に伴い、多くの携帯電話が、マルチメディア情報や、一般に「アプリケーション」と呼ばれるエンターテインメントなどの、益々複雑な機能を提供するようになっている。携帯電話はまた、一般に「モデム」と呼ばれる、無線通信の変調/復調機能を含んでいる。多くの携帯電話構造は、モデムやアプリケーション機能に対応するために2つのプロセッサを含んでおり、「アプリケーションプロセッサ」がアプリケーション機能を制御し、「モデムプロセッサ」が通信機能を制御する。携帯電話の中には、デジタル信号処理(DSP)アルゴリズムを実施するよう特別に設計された、他のプロセッサを含むものもある。単一のプロセッサの携帯電話もたしかに存在するが、現行の複雑な携帯電話の多くは複数のプロセッサを含んでいる。従来の多くの応用例では、各プロセッサが不揮発性メモリと揮発性メモリとの両方を利用してそれぞれの機能を実施する。
また、携帯電話の不揮発性メモリとしては従来、NORフラッシュメモリが一般に使用されてきた。近年、いくつかの新しいフラッシュメモリ技術が市場に投入されている。ANDフラッシュメモリやNANDフラッシュメモリといった比較的新しい高密度フラッシュメモリは、NORフラッシュメモリよりも低コスト、小サイズ、高記憶容量に設計されている。したがって、こうした高密度フラッシュメモリ技術は、複雑な携帯電話の不揮発性大容量データ記憶装置として好ましい技術であることが多い。しかしながら、現時点でNORフラッシュメモリを使用する従来の携帯電話の多くは、設計変更および/または回路基板の変更しない限り、ANDまたはNANDフラッシュメモリをドロップインリプレースメント(drop−in replacement)して使用することができない。この理由は、上記の高密度フラッシュ技術は、NORフラッシュメモリよりも複雑な特徴を有しており特別な取扱いを要するからである。
例えば、高密度フラッシュメモリは、典型的には初期のアクセス時間をかなり要するページモードでアクセスされるものであるが、プロセッサは一般にバイトまたはワードレベルのランダムアクセスを必要とするので、プロセッサがプログラムコードを実行するのには適さない。したがって、通常はまず、高密度フラッシュメモリに記憶されているプログラムコードをRAMメモリに移動し、次いでプロセッサが当該RAMメモリからプログラムコードを実行する。また、高密度フラッシュメモリはしばしば、NORフラッシュメモリと比較してそれ自体に記憶されたデータにエラー生じやすく、したがって、高密度フラッシュにアクセスする際に誤り訂正符号化(ECC)が必要とされることが多い。さらに、高密度フラッシュメモリは典型的には、所定回数の消去/再書込みサイクルしか許容することができない。フラッシュメモリデバイスの耐久性および信頼性を高めるために、損耗平均化、ガベージコレクション、不良ブロック置換、停電復旧などのフラッシュメディア管理技法がよく利用される。
高密度フラッシュ技術を活用するために、多くの携帯電話のシステム設計において、上述した高密度フラッシュの特有の性質に対応する、非常に複雑なフラッシュメディア管理用のアルゴリズムや工程が、システムソフトウェアの形で組み込まれている。これらの複雑なアルゴリズムおよび工程は、フラッシュにアクセスするプロセッサ(Flash−accessing processor)の計算/制御容量を使い果たしてシステムの性能を低下させる。そこで、フラッシュメディア管理技術のアルゴリズムや工程およびECCを行って、フラッシュにアクセスするプロセッサをそのような負荷から解放する制御回路を携帯電話に設けることが有利と考えられる。
プロセッサ、不揮発性メモリ、および揮発性メモリを含む電子システムでは、通常、プロセッサによって実施されるタスクは、あるメモリから別のメモリにデータを移動させることである。データ移動処理の一例としては、プログラムコードを、不揮発性のページモードメモリデバイスから揮発性のランダムアクセスメモリデバイスに移動させ、プロセッサが同プログラムコードを実行できるようにすることである。データ移動処理の他の例としては、揮発性メモリから不揮発性メモリにデータを移動させ、当該データを恒久的に記憶することである。また、グラフィックスやビデオといったマルチメディア機能を備えた携帯電話においては、しばしば、1つ(または複数)のプロセッサが画像データをメモリから携帯電話のディスプレイ(例えばLCDディスプレイ)に移動させ、画像を表示させる。メモリデータの出し入れは繰返しの非常に多いプロセスであり、プロセッサの計算/制御容量を大量に消費する。
上記に鑑みて、携帯電話などの携帯電話設計に関するコストを低減し、また、サイズの全体的な規模を縮小するには、各プロセッサがそれ自体の別個のメモリ管理回路を必要とするのではなく、複数のプロセッサのメモリ容量の要求に応じた1つのメモリ管理回路を有することが有利であると考えられる。メモリシステムの数を減少させることにより、メモリデバイスの数が減少するだけでなく、プロセッサ間のデータ転送も効率化される。
さらに、上記に鑑みて、携帯電話は、高密度フラッシュメモリと、RAMメモリと、1つまたは複数のプロセッサの制御下でメモリとディスプレイ(例えばLCD画面)および/または外付けメモリカードとの間のデータ転送をするDMA機能を有した制御回路と、を含むメモリシステムを備えることが有利と考えられる。
携帯電話は、また、プロセッサの介入を最小限としつつ、ECCやユーザ定義のフラッシュメディア管理を自律的に行い、1つ(または複数)のプロセッサが当該メモリシステム内のメモリにアクセスできるようにするメモリシステムを有していることが有利と考えられる。かかるメモリシステムを用いると、メモリが必要とする複数のプロセッサをより少数のシステムメモリに統合し、さらには単一のメモリシステムに集約し、ひいては携帯電話のコストおよびサイズを低減することができる。高密度フラッシュメモリを大容量データ記憶装置として使用することにより、電話機のコストおよびサイズをさらに低減することができる。さらに、データ転送という一般的なの機能を実施すること、ECCやフラッシュメディアを管理することからプロセッサを解放し、携帯電話システムの性能を向上させることが有利であろう。
しかしながら、必ずしも本明細書に言及する全ての利点が本発明の所定の一実施形態によって達成される必要はないことが、理解されるべきである。
一実施形態は、携帯電話用メモリコントローラであって、不揮発性メモリに接続された不揮発性メモリコントローラ回路と、揮発性メモリに接続されるように構成された揮発性メモリコントローラ回路と、前記不揮発性メモリコントローラ回路に接続され、ユーザ定義のブートプログラムコードが不揮発性メモリからメモリコントローラ用メモリに読み込まれるように構成されたブートコントローラ回路と、第1のリセット信号を含み、第1の携帯電話プロセッサに接続された第1のプロセッサインターフェースであって、前記メモリコントローラが、前記ユーザ定義のコードが前記メモリコントローラ用メモリに読み込まれた後に、前記第1の携帯電話プロセッサをリセット状態から解放するように構成される、第1のプロセッサインターフェースと、第2のリセット信号を含み、第2の携帯電話プロセッサに接続された第2のプロセッサインターフェースであって、前記第2のリセット信号が、前記第1のプロセッサによって少なくとも部分的に制御されるように構成される、第2のプロセッサインターフェースと、を備える携帯電話用メモリコントローラを提供する。
別の実施形態は、携帯電話の不揮発性メモリからデータを転送する方法であって、電源投入のリセット後に、ブート回路を使用して第1のアドレスを生成するステップと、少なくとも前記第1のアドレスに記憶されているデータを含む、前記携帯電話の不揮発性フラッシュメモリのデータにアクセスするステップと、アクセス対象の前記データをページバッファに記憶するステップと、アクセス対象の前記データがブートコードであるのかそれともフラッシュメモリ管理コードであるのかを判定するステップと、アクセス対象の前記データがブートコードである場合には、前記データを前記ページバッファからブート用ランダムアクセスメモリにコピーするステップと、アクセス対象の前記データがフラッシュメモリ管理コードである場合には、前記データを前記ページバッファからフラッシュメモリ管理用ランダムアクセスメモリにコピーするステップと、を含む方法を提供する。
他の実施形態は、携帯電話用メモリコントローラであって、携帯電話の不揮発性メモリに接続されるように構成された第1のインターフェース回路と、携帯電話の揮発性メモリに接続されるように構成された第2のインターフェース回路と、第1の携帯電話プロセッサに接続されるように構成され、前記携帯電話の揮発性メモリへのアクセスを前記第1のプロセッサに提供するように構成された第1のプロセッサインターフェースと、第2の携帯電話プロセッサに接続されるように構成された第2のプロセッサインターフェースと、前記第1のプロセッサまたは前記第2のプロセッサの介入なしに、携帯電話の不揮発性メモリのデータの少なくとも一部分を前記携帯電話の揮発性メモリにコピーするように構成されたコントローラ回路と、を備える携帯電話用メモリコントローラを提供する。
他の実施形態は、携帯電話用メモリ回路を操作する方法であって、リセット信号をディアサートするステップと、携帯電話の不揮発性メモリに記憶されているブートデータに対応する第1のアドレスを生成するステップと、前記第1のアドレスから始まるブートプログラムコードを、前記携帯電話の不揮発性メモリから読み出すステップと、前記ブートプログラムコードに関する誤り検出を行うステップと、第1の誤りが検出された場合に少なくとも第1の誤りを訂正するステップと、訂正ブートコードが存在する場合はそれらも含めて前記ブートコードを揮発性ランダムアクセスメモリにロードするステップと、前記携帯電話の不揮発性メモリからフラッシュメモリ管理用揮発性メモリに損耗平均化コードを含むフラッシュメモリ管理用プログラムコードをロードするステップと、前記フラッシュメモリ管理用プログラムコードがフラッシュメモリ管理回路によって実行されることを可能にするステップと、前記携帯電話用メモリ回路に接続された第1の携帯電話プロセッサをリセット状態から解放するステップと、前記ブートプログラムコードへのアクセスを前記第1の携帯電話プロセッサに提供するステップと、前記揮発性メモリに記憶されているコードへのアクセスを第2の携帯電話プロセッサに提供するステップと、を含む方法を提供する。
一実施形態は、携帯電話の不揮発性メモリに記憶済みのデータまたは記憶中のデータに関する誤り訂正を実施する方法であって、携帯電話の不揮発性メモリに記憶されるように構成され、ユーザ部分に記憶されるユーザデータと、予備部分(spare portion)に記憶される予備データ(spare data)とを含む第1のページデータを受け取るステップと、前記第1のページデータに関するページパリティデータを生成するステップと、前記ページパリティデータを前記携帯電話の不揮発性メモリに記憶するステップと、不揮発性メモリ管理のブックキーピングデータおよび/またはシステムフラグを含む予備データを前記携帯電話の不揮発性メモリに記憶するステップと、前記予備データに関するパリティデータを生成し、前記携帯電話の不揮発性メモリに記憶するステップと、前記携帯電話の不揮発性メモリから前記予備データを読み出すステップと、前記携帯電話の不揮発性メモリから前記予備データに関する前記パリティデータを読み出すステップと、前記予備データのパリティ情報を使用して、必要に応じて前記携帯電話の不揮発性メモリの前記予備データに関する誤り検出および誤り訂正を実施するステップと、を含む方法を提供する。
一実施形態は、携帯電話用メモリシステムであって、携帯電話の不揮発性メモリに接続された第1のポートと、携帯電話の揮発性メモリに接続された第2のポート回路と、第1の携帯電話プロセッサに接続され、前記携帯電話の揮発性メモリへのアクセスを前記第1のプロセッサに提供するように構成された第1のプロセッサインターフェースと、第2の携帯電話プロセッサに接続された第2のプロセッサインターフェースとを備え、前記第1のプロセッサと前記第2のプロセッサの内の1つは、モデム制御を行うように構成される、携帯電話用メモリシステムを提供する。
別の実施形態は、携帯電話用メモリコントローラデバイスであって、携帯電話の不揮発性メモリに接続されるように構成された第1のポートと、携帯電話のモデムプロセッサに接続されるように構成された第2のポート回路と、ブート用揮発性メモリと、前記携帯電話の不揮発性メモリから前記ブート用揮発性メモリにブートコードをコピーするように構成されたブートコントローラと、前記モデムプロセッサからのコマンドに応答して、前記不揮発性メモリから前記ブート用揮発性メモリにデータをコピーするように構成されたダイレクトメモリアクセスコントローラと、前記モデムプロセッサがブート用メモリデータを読み出すことができるようになるパスを提供する手段とを備える携帯電話用メモリコントローラデバイスを提供する。
例示的な諸実施形態を添付の図面に示すが、添付の図面は単なる例示に過ぎない。
本発明は、メモリ管理に関し、特に、携帯電話などの電子デバイスの不揮発性メモリおよび揮発性メモリにアクセスし、これらを管理する方法およびシステムに関するものである。
本明細書に記載されるように任意の実施形態によれば、携帯電話などといった対象となるデバイスのコストおよびサイズを低減することができる。また、本明細書に記載のメモリ管理システムの任意の実施形態によれば、メモリの管理やフラッシュメモリのブックキーピングなどの負荷からプロセッサを解放することによって、それらに関するプロセッサ負荷を低減することができる。
さらに、任意の実施形態を用いると、ユーザ(例えば携帯電話の製造業者)は、メモリ管理チップの製造業者のコードに依存する必要なく、独自のブートコードおよびユーザ独自のフラッシュメモリ管理(FMM)コード(損耗平均化、ガベージコレクション、不良ブロック置換、停電復旧などの内の1つまたは複数)を、書き込みし、実行し、記憶することが可能となる。FMMコードは、限定されるものではないが、電話機の製造業者の代わりにメモリ管理チップの製造業者が書き込むこともできる。ある実施形態では、かかるメモリ管理コードは、どのプロセッサがメモリ管理システムと共に使用されるかが不明な場合、および/または、どのような携帯電話がメモリ管理システムで使用されるかが不明な場合にも、書き込むことができる。
また、ある実施形態は、フラッシュメモリ上のあるアドレス空間または領域を、「保護対象(protected)」として定義し、モデムプロセッサやアプリケーションプロセッサ等のプロセッサが保護領域を上書きするのを防止し、それによりソフトウェアハック(ソフトウェアの不正な改変)を防止できるメモリ管理システムを含む。また、ある実施形態は、メモリに対する無許可アクセスを防止してソフトウェアハックを防止できるように、揮発性SDRAMメモリ、不揮発性フラッシュメモリおよびメモリマネージャを単一パッケージの形態で有しており、この場合、チップピン(任意であるが、テストピンを除く)もバスも設けられないため、SDRAMメモリやフラッシュメモリへのダイレクトアクセスが可能となる。そのためこの実施形態では、ユーザは、チップパッケージを開けたり、内部のチップ回路を精査したりするなどの極端な措置または費用の嵩む措置を講じない限り、SDRAMおよびフラッシュメモリにはメモリマネージャを介してしかアクセスすることはできない。
ある実施形態は、任意のプロセスに関するコードをフラッシュメモリからSDRAMメモリにコピーすることができ、および/または、ブートコントローラがプロセッサを起動する前にソフトウェアのセキュリティチェックを行う、セキュアブート機能を備える。
さらに、ある実施形態は、特にフラッシュページの予備部分に関し、ページレベルECCと誤り訂正符号化(ECC)とが行われる2レベルECCによるデータ保護を実現する。
以下の説明では、例示的な一実施形態として携帯電話などの無線電話に言及することがあるが、本発明がそれに限定されるわけではない。他の例示的な応用例としては、携帯情報端末、携帯型電子ゲーム、デジタルエンターテインメントシステム、携帯型ビデオデバイス、といった、携帯型または非携帯型電子デバイスが挙げられる。本明細書に記載の携帯電話は、スピーカ、キーボード、マイクロフォン、揮発性および不揮発性メモリ、ならびにメモリ制御システムを含むことができるが、必ずしも上記の全ての要素を必要とするわけではない(例えばキーパッドが必要ないこともある)。また、例示のために、特定の例示的なメモリ技術に言及することもあるが、本発明は、そのような例示的なメモリ技術に限定されるわけではない。例えば、本発明は、フラッシュメモリまたはSDRAMメモリの使用に限定されるわけではない。他のタイプの揮発性メモリや不揮発性メモリを使用することもできる。また、別段の明示的な指示がない限り、データ転送の文脈の「転送」という表現は、ある位置から別の位置にデータをコピーすることを意味する。
また、本明細書に記載の例示的なプロセスに関しては、必ずしも全てのプロセス状態に到達する必要はなく、また、それらの状態は必ずしも図示の順序で実施される必要はない。さらに、順次実行されるものとして記載する特定のプロセス状態は、並列実行することもできる。また、本明細書に記載する全ての機能または利点が必ずしも必要とされるわけではなく、様々な回路およびアーキテクチャを使用して各機能を実施することができる。ある機能は、プロセッサなどのハードウェアが実行するプログラムコードによって実施されるものとして記載されているが、他の実施形態では、ハードワイヤード回路またはステートマシンを使用して同一または同様の機能を実施することができる。また、ある種の機能は、ハードワイヤード回路によって実施されるものとして記載されているが、他の実施形態では、コード実行用プロセッサを使用して同一または同様の機能を実施することもできる。
図1に示されるように、第1の実施形態では、例示的なメモリシステム(102)は、携帯電話の電子システムの一部として提供される(101)。メモリシステム(102)は、高密度の不揮発性フラッシュメモリ(104)と、揮発性ランダムアクセスメモリ(105)と、制御回路(103)とを含む。以下では、限定のためではなく説明を分かりやすくするために、メモリシステム(102)内にあるが制御回路(103)の一部ではない揮発性ランダムアクセスメモリを「メインRAM」と呼ぶ(105)。例示的なメモリシステム(102)では、フラッシュメモリ(104)とメインRAM(105)はどちらも制御回路(103)に接続されている。制御回路(103)は、以下で詳細に説明するフラッシュメモリ(104)を操作するための制御信号を提供するフラッシュメモリコントローラと、やはり以下で詳細に説明するメインRAM(105)を操作しメインRAM(105)とのインターフェースとなる制御信号を供給するメインRAMコントローラと、を含んでいる。以下でより詳細に論じるように、フラッシュメモリコントローラはさらに、フラッシュメモリ(104)に記憶されているデータの整合性を保つために、ECCによる符号化および復号化を実施するECC(誤り訂正符号化)回路を有している。
制御回路(103)はさらに、物理的におよび/または機能的にメモリシステム(102)の外部に所在する1つまたは複数のプロセッサなどの電子機器(106)が、メモリシステム(102)内のタスクを実施するように制御回路(103)を設定しアクティブ化することができるようになる、プロセッサ用のインターフェースを有する。例えば、これらのタスクとしては、機器(106)がメインRAM(105)にアクセスするのを可能にすること、およびフラッシュメモリ(104)とメインRAM(105)の間の双方向DMA(ダイレクトメモリアクセス)転送を実施すること、を挙げることができる。
例示的な一実施形態では、制御回路(103)は、任意的に、本明細書では「FMMプロセス」と呼ぶこともあるユーザ定義のフラッシュメディア管理(FMM)アルゴリズムおよびプロセスを実施することも可能である。例えば、FMMプロセスはそれだけに限らないが、損耗平均化、ガベージコレクション、不良ブロック置換、停電復旧などの内の1つまたは複数を含むことができる。例示的な一実施形態では、かかるFMMプロセスは、メモリシステム(102)の外部にある1つ(または複数)のプロセッサの介入を最小限に抑えてまたはそれらの介入なしに、メモリシステム(102)によって自律的に実施することができる。フラッシュメモリ(104)へのアクセスが発生したときは、FMMプロセスは、論理アドレス空間を物理アドレス空間にマッピングし、論理ページアドレス(LPA)を物理ページアドレス(PPA)に翻訳する。
以下で図3に関して詳細に論じるように、例示的な一実施形態では、組込み型の制御回路プロセッサ(FMM回路311内のFMM_P)が、FMMプロセスを実施する。制御回路内の揮発性メモリ(FMM回路311内のFMM_RAM)は、組込み型の制御回路プロセッサ(FMM回路311内のFMM_P)によって実行されるFMMプログラムコードを記憶するのに使用される。例示的な一実施形態では、FMMプログラムコードは、組込み型の制御回路プロセッサ(FMM_P)に対する命令に基づく一連の命令である。FMMプロセスは、任意的に、不揮発性フラッシュメモリに記憶されるプログラムコードの形で実装され、一実施形態は、電源投入時のブートプロセスの間に制御回路によってFMM_RAMにロードされる。
再び図1を参照すると、例示的な制御回路(103)は、フラッシュメモリ(104)とメインRAM(105)の間のデータ転送を実施するDMA機能を有している。
例示的な制御回路(103)は任意的に、電源投入のリセットがディアサートまたは解放されたほぼ直後に、制御回路(103)を自動的にアクティブ化またはイネーブルして、FMMプログラムコードおよびシステム初期化プログラム(SIP)コード(ブートコードとも呼ぶ)をフラッシュメモリ(104)から制御回路のローカルメモリにロードする、電源投入時のブート制御プロセスも実行する。例えば、SIPコードは、SIPコードの受取り用に割り付けられている制御回路用揮発性RAM(BOOT_RAM)にロードすることができ、FMMコードは、FMMコードの受取り用に割り付けられている制御回路用揮発性RAM(FMM_RAM)にロードすることができる。次いで、電源投入時のブート制御プロセスは、組込み型の制御回路プロセッサ(FMM_P)と、外部の電子機器の一部分(例えば選択されたプロセッサ)とをリセットから解放し、それによって各機器は、それぞれの対応する制御回路用メモリから(例えば、それぞれFMM_RAMおよびBOOT_RAMから)プログラムコードを実行することができるようになる。
以下「システムブートコード」と呼ぶシステム初期化プログラムコードは、第1のプロセッサ(限定されるものではないが1次プロセッサと呼ぶこともある)が電源投入のリセットから解放されたときに携帯電話の電子システムの他のある部分を初期化するために当該1次プロセッサによって実行されるソフトウェアである。例えば、第1のプロセッサは、モデムプロセッサとして動作し、または、アプリケーション用プロセッサとしても動作することができる。同様に、第2のプロセッサ(本明細書では2次プロセッサと呼ぶこともある)は、モデムプロセッサとして動作し、または、アプリケーション用プロセッサとしても動作することができる。
制御回路(103)の例示的な第2の実施形態では、制御回路(103)内にBOOT_RAMが存在しない。電源投入時のブート制御プロセスは、電源投入のリセットのほぼ直後に、SIPコードを制御回路用メモリ(BOOT_RAM)にロードする代わりにメインRAM(105)にロードし、次いで1次プロセッサを解放してメインRAM(105)からプログラムコードを実行する。本実施形態については以下でより詳細に説明する。
第3の実施形態では、SIPコードに割り付けられる制御回路用メモリが、制御回路内に存在しないか、または、SIPコード記憶域にも割り付けられない。しかしながら、FMM回路311は、ブートコントローラ回路(BOOT_CTLR 3133)の代わりにフラッシュメモリからメインRAMにシステムブートコードをロードする役割を果たす。
メモリシステムの第4の実施形態では、メモリシステム制御回路は、複数のフラッシュメモリコントローラと、複数のメインRAMコントローラとを含んでおり、したがってメモリシステムにおけるより多くのメモリ空間を提供するだけでなく、より高速なデータ転送速度も提供する。
第5の実施形態では、メモリシステム制御回路はさらに、1つまたは複数のディスプレイ(例えば携帯電話のLCDまたはOLED画面)を操作するための制御信号を有し、これらディスプレイは、メモリシステム制御回路から供給された制御信号を介してメモリシステムに接続される。本実施形態では、1次プロセッサは、制御回路をアクティブ化し、外部プロセッサを殆どまたは全く介入させることなく、メインRAMからディスプレイに画像データを転送することができる。
第6の実施形態では、メモリシステム制御回路はさらに、着脱可能な内蔵(self−contained)メモリモジュールまたはカード(例えばSD、コンパクトフラッシュ、メモリスティック、または他の着脱可能なメモリデバイス)を操作するための制御信号を有し、メモリシステム制御回路から供給されたこの制御信号を介してメモリカードがメモリシステムに接続される。メモリカードが携帯電話で使用される場合は、携帯電話はメモリカードの提供するデータ記憶空間にアクセスすることができる。本実施形態では、1次プロセッサは、メモリシステム制御回路をアクティブ化して、プロセッサを殆どまたは全く介入させることなく、メインRAMとメモリカードの間のデータ転送を行うことができる。
第7の実施形態では、メモリシステム制御回路は、メインRAMを必要とせずに動作する。
次に添付の図面を参照して、上記の様々な実施形態についてより詳細に論じる。メモリシステムのアーキテクチャに関する様々な実施形態と同様に、メモリシステム制御回路の設計および動作についても説明する。さらに、1つの例示的な応用例を詳しく説明するために、携帯電話におけるメモリシステムの様々な実施形態についても説明する。
例えば図2を参照すると、第1の実施形態では、以下、限定ではなく便宜のために「メモリシステム」(202)と呼ばれるメモリシステムが、無線携帯電話(201)の電子システムの一部として設けられている。以下では、携帯電話の電子システムの他の部分を「外部電子機器」(206)と呼ぶ。外部電子機器は、他の要素の中でもとりわけ、以下では「外部プロセッサ」(例えばプロセッサ207、208)と呼ばれる1つまたは複数のプロセッサを含むことができる。メモリシステム(202)は、以下では「フラッシュメモリ」(204)と呼ばれる高密度の不揮発性フラッシュメモリと、以下では「メインRAM」(205)と呼ばれる揮発性ランダムアクセスメモリと、以下では「制御回路」(203)と呼ばれる制御回路とを備える。
フラッシュメモリ(204)およびメインRAM(205)は制御回路(203)に接続されており、この制御回路(203)は、フラッシュメモリ(204)に接続されてそれを動作させる制御信号と、メインRAM(205)に接続されてそれを動作させる制御信号と、を備える。制御回路(203)はさらにプロセッサインターフェースを有し、同インターフェースを介して、1つまたは複数の外部プロセッサが制御回路(203)を設定しアクティブ化しメモリシステム(202)内の処理を実施することができるようになる。例示的な処理としては、外部プロセッサがメインRAM(205)にアクセスするのを可能にすること、および、フラッシュメモリ(204)とメインRAM(205)の間の双方向DMA転送を実施することが挙げられる。制御回路(203)は、また、外部電子機器を殆どまたは全く介入させることなく制御回路(203)自体が自律的に設定しアクティブ化する処理を行う。
メモリシステム(202)の各要素(例えばフラッシュメモリ(204)、メインRAM(205)、および/または制御回路(203))は、必ずしも個別にパッケージングされた3つの別個のデバイスとして実装する必要はないことを理解されたい。任意的に、これらの要素のサブセットを、単一のIC(集積回路)として実装することも複数のICとして実装することもできる。本発明は、メモリシステム(202)の物理的な実装形態の統合レベルを制限するものではない。
さらに、本明細書の記載では、制御回路(203)は、制御回路(203)の機能全体を説明するのに適した手法で複数の機能ブロックに分割されることも理解されたい。制御回路(203)は、様々な通信信号が機能ブロック同士を連結する多くの様々な手法で複数の機能ブロックに分割でき、依然として本明細書に記載される各機能と同じ機能を全て含み得ることが当業者には理解されるであろう。本明細書における諸実施形態の説明は、制御回路(203)を複数の機能ブロックに分割する手法またはそれらの機能ブロックを互いに連結する手法を限定するものではない。
本実施形態では、制御回路(203)は、制御回路(203)の様々な機能を制御および認識可能にする書込み可能な構成/制御レジスタと、読出し可能な結果/状態レジスタとを含む。これらのレジスタは、制御回路(203)の様々な機能がどのように構成され、様々なモードで動作することができるかを示す一例として提供されるものであることを理解されたい。より多くのレジスタまたは他の要素を追加することにより、制御回路(203)のさらに多くの機能を構成できるようにすることができるし、または、レジスタの数を減少させ、別の形で動作するようにプログラム的に構成可能ではない固定式のハードワイヤード回路に上記の機能の一部を組み込むこともできることが当業者には理解されるであろう。さらに、上記の構成可能な機能は、必ずしも本明細書に記載の例示的な諸実施形態と同じ手法でレジスタにグループ化される必要はない。さらに別法として、制御回路(203)の処理に関するより多くの結果および状態を格納するために、より多くの読出し可能なレジスタを追加して制御回路(203)の様々な機能の認識可能性を高めることもできる。
例示的なフラッシュメモリ(204)は、1つまたは複数のNANDフラッシュデバイス(210)を含むように図示されているが、ANDフラッシュデバイスなど他のタイプのフラッシュメモリが使用されてもよい。同様に、例示的なメインRAM(205)は、1つまたは複数のSDRAMデバイス(211)を含むように図示されているが、PSRAM(擬似スタティックRAM)デバイスなど他のタイプの揮発性ランダムアクセスメモリが使用されてもよい。PSRAMは、高密度かつ低ビットコストのDRAM(ダイナミックRAM)セルを含み、SRAM外部インターフェースを有する。
図3は、限定されるものではないが、図2の制御回路(203)に対応可能な制御回路(203)の一例のブロック図を示している。次に、様々な例示的な制御回路の機能ブロックについて説明し、後段では例示的なメモリシステム(301)の処理について説明する。
プロセッサインターフェース回路(PI)について:
例示的なPI(302)は、1つまたは複数の外部プロセッサとのインターフェースを有し、それによって外部プロセッサは、制御回路が実施するタスクを、設定、制御および/または監視し、ならびにメモリシステム(301)に記憶されているデータへのアクセスを行う。例示的なPI回路(302)は、プロセッサバススレーブ回路(PBS)(303、304)を含む。PSBは、プロセッサ(314、315)など対応する個々の外部プロセッサとのインターフェースを有している。PBSは、それが対応する外部プロセッサのメモリバスに取り付けられており、メモリバスのデータ転送プロトコルに従ってメモリバスにアクセスし、これを制御する。したがって、PBSは、それが対応する外部プロセッサにとって、外部プロセッサのメモリバスに取り付けられたメモリデバイス(一般に「バススレーブ」として知られる)に見える。
任意的な一実施形態では、外部プロセッサのメモリバスのインターフェイスプロトコルは、モデム携帯電話で多く使用されるメモリバスプロトコルとしてよく知られる「バーストモードSRAM」インターフェースである。現在市販されている、このプロトコルに準拠するメモリデバイスの2つの例は、擬似SRAM(PSRAM)と、バーストモードNORフラッシュである。言い換えれば、任意的な一実施形態では、各PBSはそれが対応する外部プロセッサにとって、プロセッサのメモリバスに取り付けられたPSRAMデバイスまたはバーストモードNORフラッシュデバイスに見える。「バーストモード」という用語は、当該インターフェイスプロトコルが1つの転送コマンドおよび1つのアドレスによる転送が開始された後の複数の連続ワードの転送をサポートすることを指す。バースト転送の典型的な長さは、1、4、8、または16ワードであり、ここで「ワード」とは、メモリバスのデータ信号の幅を指す(例えばあるワードは16ビットのデータ信号を伴う、メモリバス用の16ビットのデータである)。このインターフェイスプロトコルを用いることにより、メモリバス上のメモリデバイスが、プロセッサからのコマンドをすぐに実施できる状態でない場合に、「待機(wait)」信号をアサートしてバス上のデータ転送を一時的に停止することが可能となる。
本実施形態では、バーストモードSRAMインターフェイスプロトコルが、各外部プロセッサがそれを介してそれぞれ対応するPBSと通信するバスインターフェイスであるものと想定しているが、他のバスインターフェイスプロトコルが使用されてもよいことに留意されたい。例えば、制御回路が外部プロセッサの要求にすぐに応じられない場合に、PBSが「待機」信号を送出して外部プロセッサの開始したデータ転送を一時的に停止することが可能となる、他のバスインターフェイスプロトコルを使用することもできる。
図3に示される例示的な実施形態では、携帯電話内の第1の外部プロセッサ(314)は、「1次プロセッサ」として示され、他の外部プロセッサ(315)は、「2次プロセッサ」として示されている。同様に、PI回路(302)内の第1のPBS(303)は、1次プロセッサとのインターフェースを備えるように示されており、「1次PBS」(またはPPBS)と名付けられている。この例では、他のPBSは、それぞれの対応する2次プロセッサとのインターフェースを備えるように示されており、「2次PBS」(またはSPBS)(304)と名付けられている。外部プロセッサは、PI(302)を介して、SDRAM(318)に記憶されているデータにアクセスすることができ、1次プロセッサ(314)は、NANDフラッシュとSDRAMとの間のDMAデータ転送といった、制御回路の多くの機能を、設定しアクティブ化し監視する別の役割を果たす。
PPBS(303)は、1次プロセッサ(314)からのメモリバス信号を、コマンド、データ、およびアドレス情報に翻訳し、次いでその情報をコマンドコントローラ(CMD_CTLR 305)に渡し、コマンドコントローラは、制御回路の該当する部分をアクティブ化してメモリシステム(301)内の関連する処理を実施する。PPBS(303)はさらに、コマンドコントローラ(305)が制御回路の様々な部分から読み出したデータを、メモリバスを介して、待機信号と共に、1次プロセッサ(314)に送り返す。言い換えれば、PPBS(303)はインターフェースであり、1次プロセッサ(314)は同インターフェースを介して制御回路を構成しアクティブ化し監視すると共に、メモリシステム(301)に記憶されているデータにアクセスする。
PPBS(303)は、1次プロセッサ(314)からアクセスされたときに、メモリバス制御信号を、「RAM Read(RAM読出し)」、「RAM Write(RAM書込み)」、「Register Read(レジスタ読出し)」、「Register Write(レジスタ書込み)」、「Download DMA Transfer(ダウンロードDMA転送)」、または「Upload DMA Transfer(アップロードDMA転送)」の内の1つに翻訳し、それをコマンドコントローラ(305)に送る。メモリバスのデータおよびアドレス信号は、コマンドに関連するデータおよびアドレス情報を、コマンドコントローラ(305)に提供する。メモリバスのデータ信号は双方向であり、そのため書込みデータと読出しデータの両方の情報が通信される。もし制御回路が他のタスクでビジー状態にあり、コマンドが直ちに実行できない場合は、コマンドコントローラ(305)は、PPBS(303)を介して待機信号を送出し、当該コマンドが実行できるようになるまで、メモリバス上のデータ転送を一時的に停止する。以下、コマンドコントローラ(305)がどのように1次プロセッサのコマンドを実行するかについて詳細に説明する。
SPBSは、それが対応する2次プロセッサからの、SDRAM(318)へのアクセスを要求するメモリバス信号をSDRAMアクセス要求に翻訳し、メモリアクセスディストリビュータ(MAD)回路(308)に送る役割と、SDRAM(318)から読み出されたデータならびに待機信号を、メモリバスを介してプロセッサに送り返す役割を果たす。MAD回路(308)は、制御回路の様々な部分からの、SDRAM(318)へのアクセスを求める複数の要求を受け取る役割と、優先順位スキームに基づいて要求元のマスタの内の1つに対して当該要求を許可する役割を果たす。対応する2次プロセッサは、SPBSを介してSDRAM(318)のデータの読み書きを行うことができる。
MAD回路(308)が実質上SDRAM(318)へのアクセス権を要求元のSPBSに直ちに付与しない場合は、SPBSは待機信号を送出して、MAD回路(308)がSDRAM(318)へのアクセス権を当該SPBSに付与するまで、メモリバス上のデータ転送を停止する。SPBSは任意的に、対応する2次プロセッサとSDRAM(318)の間で転送されるデータを一時的に記憶するデータバッファ(例えば一般にFIFOとして知られる先入れ先出しバッファ)を含む。このデータバッファ(図示せず)を用いると、SPBSインターフェースのデータ転送速度とSDRAM(318)インターフェースのデータ転送速度と間の不整合が許容される。SPBSインターフェース上のバースト転送の長さ、およびSDRAM(318)インターフェース上のバースト転送の長さは、それぞれREGS回路(306)内の2つのレジスタ、すなわちPI_BURST_LENGTHレジスタおよびSDRAM_BURST_LENGTHレジスタ、によって定義されている。各インターフェースのデータワードのサイズは、任意的に、当該インターフェースのデータ信号の幅によって決定され、特定のサイズには限定されない。
次に図4を参照すると、例示的なPI回路(406)はリセット信号を含んでおり、ここでは、任意的に、各外部プロセッサ(412、413)毎に独立したリセット信号(410、411)が示されている。リセット信号(410、411)は、対応するPBS(407、408)を介して外部プロセッサ(412、413)に与えられる。リセット信号(410、411)は、任意的に、少なくとも部分的に、制御回路(401)によって以下のように制御される。
PPBS(407)を介して1次プロセッサ(412)に付与されるリセット信号(410)は、BOOT_CTLR回路(402)によって生成される。それぞれ対応するSPBS(408)を介して2次プロセッサへと向かうリセット信号は、REGS回路(404)内のRESETレジスタ(405)からの出力信号である。RESETレジスタの電源投入時のデフォルト値は、2次プロセッサをリセット状態に保つ。1次プロセッサ(412)は、それ自体がアクティブ状態にあるときに、必要に応じてRESETレジスタ(405)に適切な値を書き込むことができる。つまり、各2次プロセッサのリセットは任意的に、RESETレジスタ(405)を介し1次プロセッサ(412)によって制御され、1次プロセッサ(412)のリセットは、制御回路のブート制御回路(BOOT_CTLR 402)によって制御される。
電源投入のリセット(414)がホストデバイス(例えば携帯電話)によってアサートされることにより、制御回路401および外部プロセッサ(412、413)がそれぞれリセットモードに入る。電源投入のリセットがディアサートされると、BOOT_CTLR回路(402)は制御回路(401)の様々な機能を初期化するタスクを実行し始めると同時に、それ自体のリセット信号(410)をアサート状態に保つことにより、1次プロセッサ(412)をリセット状態に保つ。これらの初期化タスクを完了させた後、BOOT_CTLR回路(402)は、リセット信号(410)をディアサートして1次プロセッサ(412)をリセットから解放する。1次プロセッサ(412)がアクティブ状態になると、1つまたは複数の2次プロセッサをリセットから解放し個々のアプリケーションからの要求に応じてRESETレジスタ(405)に適切な値を書き込むことにより、1つまたは複数の2次プロセッサをリセット状態に戻すことが可能となる。
図5を参照すると、例示的な一実施形態では、PI507は、割込み信号を含んでおり、図5には、限定されるものではないが、外部プロセッサ(512、513)毎に独立した割込み信号(515、516)が示されている。割り込み信号(515、516)は、対応するPBS(508、509)を介して外部プロセッサ(512、513)にやりとりされる。割り込み信号(515)は、任意的に、少なくとも部分的に、コマンドコントローラ(CMD_CTLR502)を介して制御回路(501)により以下のように制御される。
CMD_CTLR(502)が1次プロセッサ(512)から受け取ったコマンドを完了すると、同CMD_CTLR(502)は割り込み信号(503)、好ましくは、レジスタビットを介して割り込みパルスを記録する、マルチビットレジスタINT_RECORD(505)を含むREGSブロック(504)とやりとりされるショートパルスを生成する。レジスタINT_RECORD(505)は、1次プロセッサ(512)によって読出し可能でありクリア可能である。
一例としてSPBS(509)は入力ポートを備え、該ポート経由で、対応する2次プロセッサ(513)がREGSブロック(504)に向かう割り込み信号(516)を制御回路(501)に送り、対応する割当てビットを用いて割り込み信号(516)をINT_RECORDレジスタ(505)に記録することができる。したがって、CMD_CTLR回路(502)および2次プロセッサ(513)によって生成された割り込み信号(503、516)は、INT_RECORDレジスタ(505)の対応ビットの形で別々に記録される。これらの割り込み信号(503、516)はさらに、ORゲート(506)に送られ、同ゲート(506)の出力信号はPPBSインターフェース(508)を介して1次プロセッサ(512)に向かう。したがって、2次プロセッサまたはCMD_CTLR回路(502)によって生成された割り込み信号は、INT_RECORDレジスタ(505)に記録され、また1次プロセッサ(512)に送られて、1次プロセッサ(512)が、レジスタ(505)を読み出してどの割り込みが発生したかを発見し、当該割り込みに応答して適当なルーチンを実施することができる。次いで、1次プロセッサ(512)は、レジスタ(505)が次の割り込みを記録することができるように、レジスタ(505)の全部または任意の一部をクリアすることができる。
上述のように、例示的な本実施形態は、それぞれを介して1次プロセッサ(512)が各2次プロセッサ(513)のリセットステージを制御する仕組みを備えることが好ましい。例示的な本実施形態はさらに、各2次プロセッサ(513)が1次プロセッサ(512)に割り込むことができるようになる仕組みを備えることが好ましい。しかしながら、ある種の携帯電話においては既に、携帯電話のメモリシステムを必要としないプロセッサ間通信の仕組みが設けられている。例えば、ある種の携帯電話設計では、実際に複数のプロセッサを単一チップ上に実装することができ、単一チップ内の効率的なプロセッサ間通信も容易に実現できる。このため、かかる一実装形態では、携帯電話内の外部プロセッサが互いに制御し合い管理し合う他の仕組みを有する場合は、本実施形態で提供されるリセットおよび割り込みの仕組みを使用せずにおくことも、除外することもできる。
例示的な本実施形態では、PI回路(507)は、PPBS(508)と、2つのSPBS(509)とを含む。携帯電話が1つのプロセッサしか有さない場合は、当該プロセッサが1次プロセッサ(512)と見なされ、PPBS(508)に接続されることになる。この場合、SPBS(509)は使用または実装もされることはない。
次に、例示的なコマンドコントローラ(図3ではCMD_CTLR305、図5ではCMD_CTLR502)についてより詳細に説明する。以下の説明では図3のCMD_CTLR(305)を参照するが、図5のCMD_CTLR(502)は任意的に、同じまたは同様の機能を実施することができ、任意的に同じまたは同様の回路を含むこともできる。
図3のCMD_CTLR305は、PPBS(303)を介して1次プロセッサ(314)から、コマンド、データ、およびアドレス情報を受け取り、次いで少なくとも部分的にPPBS(303)から受け取られた情報に基づいて制御回路内の該当する機能ブロックまたは回路を調整して、関連するタスクを実施する役割を果たす。コマンドが完了すると、CMD_CTLR 305は、割り込み信号を、PPBS(303)を介して1次プロセッサ(314)に送る。PPBSインターフェース上のバースト転送の長さ、およびSDRAMインターフェース上のバースト転送の長さはそれぞれ、PIバースト長レジスタ(PI_BURST_LENGTH)やSDRAMバースト長レジスタ(SDRAM_BURST_LENGTH)といった1つまたは複数のレジスタによって決めることができる。各インターフェースのデータワードのサイズは、当該インターフェースのデータ信号の幅によって決定され、特定の長さには限定されない。
PPBS(303)がCMD_CTLR(305)に送るように設定された例示的なコマンドは、「RAM Read」、「RAM Write」、「Register Read」、「Register Write」、「Download DMA Tranfer」、および「Upload DMA Transfer」であり、以下ではこれらのコマンドについて説明する。
「RAM Read」および「RAM Write」について:例示的な本実施形態では、メモリシステム(301)内で1次プロセッサ(314)が直接アクセスできる2つの揮発性RAMが存在し、すなわちブートRAM(BOOT_RAM 307)およびSDRAM(318)が存在するが、他の実施形態は、より少ないメモリを提供することもより多くのメモリを提供することもできる。1次プロセッサ(314)に関しては、メモリシステム(301)内のRAMメモリ空間は、BOOT_RAM(307)にアクセスするためのアドレス範囲と、SDRAM(318)にアクセスするためのアドレス範囲との範囲に分割される。1次プロセッサ(314)が、「RAM Read」または「RAM Write」コマンドを生成すると、CMD_CTLR(305)が、PPBS(303)を介して受け取られたアドレス情報に応じて、BOOT_RAM(307)とSDRAM(318)とのどちらにアクセスすべきか判定する。
アドレスがBOOT_RAMのアドレス範囲内にある場合、CMD_CTLR(305)は、1次プロセッサ(314)がBOOT_RAM(307)との間のバースト転送をできるようにする。PPBS(303)から受け取られるアドレス情報は、バースト転送時に最初にアクセスすべきBOOT_RAM(307)の位置も指定する。これは、1次プロセッサ(314)がリセットから解放されたほぼ直後に、1次プロセッサ(314)がBOOT_RAM(307)に記憶されているシステムブートコードを実行するための仕組みである。
アドレスがSDRAMのアドレス範囲内にある場合、CMD_CTLR(305)は、1次プロセッサ(314)がSDRAM(318)との間のバースト転送できるようにする。CMD_CTLR(305)はさらに、1次プロセッサ(314)とSDRAM(318)との間のデータ転送用の一時記憶域として(一般にFIFOとして知られる)データバッファを含むことが好ましい。このデータバッファを用いることにより、PPBS(303)インターフェースのデータ転送速度とSDRAM(318)インターフェースのデータ転送速度との不整合が許容される。
1次プロセッサ(314)のRAM ReadまたはRAM Writeコマンドを実行するため、CMD_CTLR(305)はまず、SDRAM(318)へのアクセスを求めるアクセス要求をMAD回路(308)に送る。MAD回路(308)におけるアービトレーションによっては、CMD_CTLR(305)は、アクセス要求がMAD回路(308)に送られた直後にSDRAM(318)へのアクセス権を付与されることもあれば、付与されないこともある。アクセス権が直ちに付与されない場合は、CMD_CTLR(305)はPPBS(303)に対する「待機」信号をアサートして、CMD_CTLR(305)がアクセス権を獲得するまで、1次プロセッサ(314)のメモリバスを停止する。「RAM Write」コマンドに関しては、SDRAM(318)へのアクセス権が付与された後、CMD_CTLR(305)が待機信号をディアサートし、1次プロセッサ(314)がPPBS(303)を介してデータバッファにデータバーストを送ると、CMD_CTLR(305)が、SDRAM_CTLRを介してSDRAM(318)に当該データバーストを転送する。
「RAM Read」コマンドに関しては、CMD_CTLR(305)は、SDRAM(318)へのアクセス権が付与された後も引き続き待機信号をアサートしながら、SDRAM_CTLRを介してデータバッファにSDRAM(318)内のデータバーストをコピーする。SDRAM(318)のデータがデータバッファに入力されると、CMD_CTLR(305)は、待機信号をディアサートし、1次プロセッサ(314)がデータバッファからデータバーストを読み出すことができるようにする。これは、1次プロセッサがSDRAM(318)に記憶されているプログラムコードを実行すると共に、SDRAM(318)に記憶されているユーザデータにアクセスするための仕組みである。
BOOT_RAM(307)は、電源投入後に例示的な1次プロセッサ(314)など多くのプロセッサがそこからプログラムコードを実行するRAM空間の部分に該当し、また、多くのプロセッサはリセットから解放された後に最初の命令をアドレスゼロからフェッチするように設計されているので、BOOT_RAM(307)のアドレス範囲は任意的に、アドレスゼロから始まるメモリマップのより低位の部分とされる。アドレス範囲は、1次プロセッサ(314)がBOOT_RAM(307)にアクセスすることになるのかそれともSDRAM(318)にアクセスすることになるのかを判定する唯一の方法ではないことを理解されたい。他の例示的な方法としてはそれだけに限らないが、1次プロセッサ(314)によって書込み可能であり、1次プロセッサ(314)のデータアクセスの宛先がそれ自体の値で判定される設定レジスタを実装する方法が挙げられる。
「Register Read」および「Register Write」について:
これらの2つのコマンドに関して、CMD_CTLR(305)は、PPBS(303)からのアドレス情報でアドレス指定されたREGSブロック(305)内のレジスタの書込みまたは読出しを行う。書込みデータは、PPBS(303)を介してメモリバスのデータ信号によって付与され、REGSから読み出されたデータは、PPBS(303)を介してデータ信号に乗せて送り返され、1次プロセッサ(314)によって読み出される。これは、1次プロセッサ(314)が制御回路(301)の動作を制御し監視するために、REGSブロック(306)内のレジスタの読み書きを行うための仕組みである。
これらの2つのコマンドに関して、CMD_CTLR(305)は、PPBS(303)からのアドレス情報でアドレス指定されたREGSブロック(305)内のレジスタの書込みまたは読出しを行う。書込みデータは、PPBS(303)を介してメモリバスのデータ信号によって付与され、REGSから読み出されたデータは、PPBS(303)を介してデータ信号に乗せて送り返され、1次プロセッサ(314)によって読み出される。これは、1次プロセッサ(314)が制御回路(301)の動作を制御し監視するために、REGSブロック(306)内のレジスタの読み書きを行うための仕組みである。
「Download DMA Tranfer」および「Upload DMA Transfer」について:
これらの2つのコマンドにより、CMD_CTLR(305)がDMAコントローラ(DMA_CTLR 312)をアクティブ化させ、それぞれNANDフラッシュメモリ(317)からSDRAM(318)またはSDRAM(318)からNANDフラッシュメモリ(317)へのDMA転送(アップロード)を実施させる。CMD_CTLR(305)によってアクティブ化された後に、DMA_CTLR(312)は、REGSブロック(306)内のDMA_CONFIGレジスタからDMA転送に関連する情報を取得し、好ましくはNANDフラッシュページ数で記述される移動すべきデータ量、NANDフラッシュの論理ページアドレス(LPA)や、SDRAMの開始アドレスなどを取得する。
これらの2つのコマンドにより、CMD_CTLR(305)がDMAコントローラ(DMA_CTLR 312)をアクティブ化させ、それぞれNANDフラッシュメモリ(317)からSDRAM(318)またはSDRAM(318)からNANDフラッシュメモリ(317)へのDMA転送(アップロード)を実施させる。CMD_CTLR(305)によってアクティブ化された後に、DMA_CTLR(312)は、REGSブロック(306)内のDMA_CONFIGレジスタからDMA転送に関連する情報を取得し、好ましくはNANDフラッシュページ数で記述される移動すべきデータ量、NANDフラッシュの論理ページアドレス(LPA)や、SDRAMの開始アドレスなどを取得する。
したがって、例えば1次プロセッサ(314)は、DMA_CONFIGレジスタに適切な値をロードした後に、CMD_CTLR(305)に対してDMAコマンドを発行する。DMA_CTLR(312)によるDMA転送が完了すると、CMD_CTLR(305)は、PPBSインターフェースを介して1次プロセッサ(314)にDMA転送の完了を示す割り込み信号を送る。
次に、レジスタ(REGS 306)の一実施形態について説明する。
例示的なREGSブロック(306)は、1次プロセッサ(314)の制御下にある機能ブロックの動作モードを構成する設定レジスタと、制御回路によって実施される処理の結果または状態を格納する状態レジスタとを含む。REGSブロック(306)は、PPBS(303)インターフェースを介して1次プロセッサ(314)から「Register Write」または「Register Read」コマンドを受け取った後は、REGSブロック(306)内のレジスタの書込みまたは読出しを行うCMD_CTLR(305)によって制御される。言い換えれば、REGSブロック(306)は、制御回路によって実施される処理を設定しアクティブ化し監視する機能を1次プロセッサ(314)にもたらす。
例示的な一実施形態では、REGSブロック(306)は、次のレジスタの内の1つまたは複数を含む。DMA_CONFIGレジスタは、NANDフラッシュの開始LPA、SDRAMの開始アドレス、転送すべきNANDフラッシュページ数など、NANDフラッシュメモリ(317)とSDRAM(318)の間のDMA転送に関する情報を格納する。PI_BURST_LENGTHレジスタは、PI回路内の各PBSインターフェースに関するバースト転送の長さを定義する。SDRAM_BURST_LENGTHレジスタは、SDRAMインターフェースに関するバースト転送の長さを定義する。SDRAM_PARTITIONレジスタは、各2次プロセッサがアクセスするSDRAMの開始アドレスを定義し、各2次プロセッサには任意的に、それぞれ独自のSDRAM開始アドレスが割り当てられる。RESETレジスタは、各2次プロセッサのリセットを個別に制御する。MAD_PRIORITYレジスタは、SDRAMへのアクセスを求めるSDRAMマスタのアービトレーションの優先順位を定義する。
INT_RECORDレジスタは、CMD_CTLR(305)および各2次プロセッサからの割り込み信号を記録する。POWER_OFFレジスタは、1次プロセッサ(314)によって「active」コマンドが書き込まれたときにFMM回路(311)をアクティブ化して、メモリシステムの電源遮断工程(power−off procedure)を実施する。FMM回路(311)が電源遮断工程を完了させたときに、POWER_OFFレジスタの値は、FMM回路(311)からの信号により当該レジスタの電源投入時のデフォルト値である「idle」に戻される。任意的に、追加的な書込み可能な構成/制御レジスタおよび/または読出し可能な結果/状態レジスタを追加して、1次プロセッサが制御回路を制御する能力を高めることもできる。上述のレジスタは制御回路の処理を説明する例として提示されるものであり、本発明を限定するものではない。
次に図3を参照して、BOOT RAM(BOOT_RAM307)の一実施形態について説明する。
例示的な本実施形態では、BOOT_RAM(307)は、1次プロセッサ(314)がリセットから解放されたときに実行する「システム初期化」のプログラムコードが記憶されるスタティックランダムアクセスメモリ(SRAM)である。BOOT_RAM(307)は、BOOT_CTLR(313)またはCMD_CTLR(305)の制御下にあるが、任意的に、同時に両方のコントローラの制御下に入ることはない。電源投入のリセット後に、BOOT_CTLR(313)はデフォルトで、BOOT_RAM(307)にアクセスすることができ、制御回路を初期化する一環として、制御回路の該当する部分をアクティブ化して、「システム初期化」プログラムコードをNANDフラッシュからBOOT_RAM(307)にロードする。制御回路が初期化された後に、BOOT_CTLR(313)は、BOOT_RAM(307)の制御をCMD_CTLR(305)の制御に代え、1次プロセッサ(314)をリセットから解放し、1次プロセッサ(314)が、CMD_CTLR(305)を介してBOOT_RAM(307)に記憶されているプログラムコードを実行できるようにする。
次に図3を参照して、メモリアクセスディストリビュータ(MAD308)の例示的な一実施形態について説明する。
制御回路には、SDRAM(318)へのアクセスを求める要求を行うことができる複数の機能ブロック(例えばCMD_CTLR(305)、DMA_CTLR(312)、およびSPBS)が存在する。以下では、SDRAMにアクセスすることができる任意の機能ブロックを「SDRAMマスタ」または単に「マスタ」と呼ぶ。MAD回路(308)は、複数のSDRAMマスタからの要求間のアービトレーションを行い、優先順位スキームにに従って最も高い優先順位を有するマスタにアクセス権を付与する。優先順位スキームは、任意的に、REGSブロック(306)内のMAD_PRIORITYレジスタを介して構成することができる。マスタにアクセス権を付与すると、MAD回路(308)は、アクセス権の付与されたマスタ(granted master)がSDRAM_CTLR(309)に直接接続されているのと同じように、SDRAM_CTLR(309)へアクセスできるようになり、他のマスタがSDRAM_CTLR(309)にアクセスするのをブロックする。次いで、アクセス権の付与されたマスタは、SDRAM_CTLR(309)の利用を開始して、SDRAMアドレスや転送タイプ(すなわち読出しまたは書込み)といった転送に関する情報をSDRAM_CTLR(309)に送ることによって、SDRAM(318)との間のバースト転送を実施する。SDRAM(318)に対する書込みバーストに関しては、アクセス権の付与されたマスタは、MAD回路(308)を介してSDRAM_CTLR(309)にデータバーストを供給し、SDRAM_CTLR(309)は、当該データをSDRAM(318)に書き込む。SDRAM(318)からの読出しバーストに関して、SDRAM_CTLR(309)は、SDRAM(318)からデータバーストを読み出し、MAD回路(308)を介してアクセス権の付与されたマスタに当該データを送る。
次に図3を参照して、SDRAMコントローラ(SDRAM_CTLR 309)について説明する。
SDRAM_CTLR回路(309)は、SDRAMインターフェースのプロトコルに従ってSDRAMを操作するために、制御信号、データ信号、およびアドレス信号をSDRAMに供給する役割を果たす。SDRAM(318)インターフェースのデータ転送プロトコルは従来技術でよく知られているので、本発明では説明しない。SDRAM_CTLR(309)が実施する処理としては、SDRAM(318)との間のデータバーストの読み書きを行うことと、SDRAMインターフェースのプロトコルに従って必要に応じてSDRAM(318)のプリチャージおよびリフレッシュを行うこととが挙げられる。SDRAM_CTLR(309)は、MADブロックを介してアクセス権の付与されたSDRAMマスタから、書込み転送に関する書込みデータ、SDRAMアドレス、ならびに転送タイプ(すなわち読出しまたは書込み)など、特定の転送に付随する情報を取得する。MAD回路(308)は、SDRAM(318)へのアクセスを要求するSDRAMマスタ間のアービトレーションを行い、アクセス権の付与されたマスタがデータ、アドレス、および転送タイプ情報をSDRAM_CTLR(309)に送ることができるようにする。SDRAM_CTLR(309)は、制御回路の電源投入の間にデフォルト値がロードされ、標準動作の間に1次プロセッサ(314)によって変更できるREGSブロック(306)内のSDRAM_BURST_LENGTHレジスタから、バースト転送の長さを取得する。
任意的な一実施形態として、SDRAM_CTLR(309)は、各2次プロセッサがアクセスするSDRAM(318)内のアドレス範囲を1次プロセッサ(314)が指定するための「メモリパーティション」機能を有している。SDRAMへのアクセスが2次プロセッサによって開始される度に、SDRAM_CTLR(309)は、当該2次プロセッサのアドレスにオフセット値を追加して、SDRAMアクセス用の真のアドレスとして使用される合計値を取得する。SDRAM_CTLR(309)は、1次プロセッサ(314)が適切な値をロードすることができるREGSブロック(306)内のSDRAM_PARTITIONレジスタから、各2次プロセッサに関するオフセット値を取得する。
したがって、本実施形態では、各2次プロセッサから見ると、それぞれがアドレスゼロから開始するアドレス範囲でSDRAMアクセスを実施しているように見えるものの、SDRAM_CTLR(309)は実際には、1次プロセッサ(314)によって指定されたオフセットアドレスから始まるアドレス範囲で3つのSDRAMアクセスを実施している。この仕組みを用いることにより、複数の2次プロセッサが、SDRAM(318)の様々なアドレス範囲のすべてのアレンジに適合するように2次プロセッサのソフトウェアを修正する必要なしに、SDRAMのメモリ空間の様々なアドレス範囲で動作することが可能となる。各外部プロセッサのアドレス範囲は、アプリケーション次第で、互いに重複することもあれば、重複しないこともある。重複するアドレス範囲が存在する場合は、その重複したアドレス範囲を2つの外部プロセッサの共用メモリ領域として使用して情報を交換することができる。1次プロセッサ(314)は、任意的に、全てのSDRAMアドレスにアクセスすることができ、SDRAM(318)を利用する任意の2次プロセッサと情報を交換することができる。
また、SDRAM_CTLR(309)は任意的に、複数のSDRAMデバイスを操作することもできる。一実施形態としては、SDRAM_CTLR(309)が、複数の出力ポートを介して制御回路の外部の回路に対する複数のチップ選択信号を駆動し、所定のチップ選択信号が個々のSDRAMデバイスのチップ選択入力ポートに接続される。複数のSDRAMデバイスは任意的に、チップ選択信号を除くSDRAM_CTLR(309)からの他の、制御信号、アドレス信号、およびデータ信号を共用する。SDRAMのメモリ空間は、SDRAM_CTLR(309)内に構築された、あるいは、マップメモリに記憶されたアドレスマップに応じて、それぞれがチップ選択信号に対応する複数のアドレス範囲に分割される。SDRAM_CTLR(309)は、MAD回路(308)を介してアクセス権の付与されたマスタから受け取られたアドレスがどのアドレス範囲に入るかに基づいて、アクセスすべきSDRAMデバイスを判定し、すなわちアサートすべきチップ選択信号を判定する。この仕組みを用いると、単一のSDRAMデバイスによって提供される最大限の空間よりも広くメモリシステム(301)におけるSDRAMのメモリ空間を拡大することができる。
次に図3を参照して、フラッシュメモリコントローラ(FLASH_CTLR310)について説明する。
FLASH_CTLR(310)は、NANDフラッシュインターフェイスのデータ転送プロトコルに従って、NANDフラッシュメモリを操作する制御信号を供給する役割を果たす。
NANDフラッシュインターフェイスのデータ転送プロトコルはよく知られているので、本明細書では詳細に説明しない。また、「データ入力」、「自動プログラム」、「読出しモード」、「予備読出しモード」、「ブロック消去」、「デバイスリセット」など、NANDフラッシュインターフェイスを介してNANDフラッシュデバイスをアクティブ化して操作することができる様々な機能もよく知られているので、本明細書では詳細に説明しない。
FLASH_CTLR(310)は、BOOT_CTLR(313)またはFMMの制御下にあるものの、限定されるものではないが、両方のコントローラの制御下に同時に入ることはない。電源投入のリセットがディアサートされた後に、BOOT_CTLR(313)はデフォルトで、FLASH_CTLR(310)を制御し、FLASH_CTLR(310)を使用してNANDフラッシュメモリ(317)からFMMプログラムコードおよびシステムブートコードを読み出す。次いで、BOOT_CTLR(313)は、FLASH_CTLR(310)の制御をFMM(311)に切り換え、FMM(311)は、FLASH_CTLR(310)を使用して、NANDフラッシュメモリとSDRAM(308)の間のDMA転送の際にNANDフラッシュにアクセスするか、または、NANDフラッシュメモリ(317)からのアドレス翻訳テーブルの読出しやNANDフラッシュメモリ(317)内のアドレス翻訳テーブルの更新といったFMMブックキーピングタスクを実施する。
FLASH_CTLR(310)は、任意的にSRAMの形をとることができるバッファを含んでおり、以下ではこれをPAGE_BUFFと呼ぶこともある。PAGE_BUFFは、NANDフラッシュページとやりとりされるデータ用の一時記憶域として使用され、また、ECC誤り訂正が実施されている間、データを記憶するのに使用される。FLASH_CTLR(310)がBOOT_CTLR(313)の制御下にある間は、PAGE_BUFFは、BOOT_CTLR(313)からアクセス可能となる。FLASH_CTLR(310)がFMM(311)の制御下にある間は、PAGE_BUFFは、FMM(311)またはDMA_CTLR(312)からアクセス可能となる。FMM(311)がFLASH_CTLR(310)を使用してNANDフラッシュメモリ(317)とSDRAM(318)の間のDMA転送を実施しているときは、DMA_CTLR(312)がPAGE_BUFFにアクセスすることができる。FMM(311)がFLASH_CTLR(310)を使用して通常のFMMブックキーピングタスクを実施しているときは、FMM(311)はPAGE_BUFFにアクセスすることができる。
FLASH_CTLR(310)はさらに、ECC符号化、復号化、および訂正を実施してNANDフラッシュメディアがそれ自体の記憶データに導入する誤りに対処し、それらの発生を防ぐ、誤り訂正符号化(ECC)回路も含む。FLASH_CTLR(310)がPAGE_BUFFからNANDフラッシュデバイスにデータを転送しているときに、ECC回路は、符号化(例えば転送データに基づくパリティ符号の計算)を実施する。また、パリティ符号はNANDフラッシュデバイスに転送され記憶される。FLASH_CTLR(310)がNANDフラッシュからPAGE_BUFFにデータおよびパリティ符号を転送しているときに、ECC回路は、復号化を実施し、転送データの誤りが発生しているかどうか判定する。もし誤りが発見された場合、ECC回路は、例えばPAGE_BUFFに対するリード−モディファイ−ライトを実施することによって当該データの訂正を実施する。
さらに、FLASH_CTLR(310)は任意的に、BOOT_CTLR(313)およびFMM(311)がNANDフラッシュデバイスを操作するのに必要な情報が当該レジスタから提供されるようにプログラムすることができる設定レジスタ(図示せず)も含む。F_COMMANDレジスタは、「page write(ページ書込み)」、「page read(ページ読出し)」、「page spare read(ページの予備読出し)」、「block erase(ブロック消去)」、「device reset(デバイスリセット)」といった、FLASH_CTLR(310)が実施すべき処理のタイプを示す情報を格納する。PPAレジスタは、「page read」、「page write」、「block erase」などアドレス特有の処理に必要となる物理ページアドレス(PPA)を格納する。F_IDLEレジスタは、書込みを行うことによってFLASH_CTLR(310)をアイドルモードから解放することができ、読出しを行うことによってFLASH_CTLR(310)の状態を取得することができる。このレジスタの電源投入時のデフォルト値は任意的に、FLASH_CTLR(310)がアイドルモードにあることを示す「idle」とされる。
F_IDLEレジスタに「active」コマンドが書き込まれたときは、F_IDLEレジスタは、FLASH_CTLR(310)をアイドルから解放してF_COMMANDレジスタで指定されている処理を実施する。この処理が完了すると、FLASH_CTLR(310)は、レジスタの値を「idle」に戻す。FLASH_CTLR(310)がアクティブ化される前に、F_COMMANDレジスタと、任意的にPPAレジスタとがセットアップされ、それらのレジスタに適切な値が書き込まれる。FLASH_CTLR(310)がアクティブ化された後は、F_IDLEレジスタをポーリングしてFLASH_CTLR(310)の動作状態を確認することができる。さらに、FLASH_CTLR(310)をアクティブ化する値である「active」がF_IDLEレジスタに書き込まれる前に、FLASH_CTLR(310)がアイドルモードにあることを保証する値「idle」がF_IDLEレジスタに格納されるまで、F_IDLEレジスタのポーリングが行われる。
次に図6を参照すると、1レベルECCに関するNANDフラッシュページの例示的な一構成を示すブロック図が示されている。例示的なNANDフラッシュページ(601)は、「ユーザ部分」(602)と、「予備部分」(603、604)とに分割される。ユーザ部分(602)はその名のとおり、ユーザデータを記憶するのに使用される。予備部分(603、604)は、ECCパリティ符号(604)と、任意的に予備データ(603)とを記憶するのに使用される。限定ではなく例示として、予備データは、ファイルシステムフラグまたはFMM回路のブックキーピングレコードの内の1つまたは複数を含むことができる。
現在、商用利用可能な多くのNANDフラッシュデバイスでは、これらの2つの部分は、各ページが528バイトを含む場合には、ユーザ部分が各ページの低位512バイトを占有し、予備部分がその上位16バイトを占有するように構成されており、また、各ページが2112バイトを含む場合には、ユーザ部分が各ページの低位2048バイトを占有し、予備部分がその上位64バイトを占有するように構成されている。他のいくつかの商用利用可能なフラッシュデバイスでは、フラッシュデバイスの製造業者によってページが2つの部分に分割されないこともある。この場合にも、ページは、フラッシュデバイスのユーザによって一方の部分が「ユーザ部分」として使用され、他方の部分が「予備部分」として使用される形で、概念上2つの部分に分割されることもある。任意的に、ECCを必要とせず、ファイルシステムフラグやFMMのブックキーピングレコードといったシステム関係情報をフラッシュメモリに記憶する必要もないフラッシュメモリデバイスまたはシステムでは、フラッシュデバイスは任意的に、各ページの「予備部分」を含まず、ページ全体が「ユーザ部分」と見なされる。
図6は、ページのECCパリティ符号がどのようにページに記憶されるかに関する一例も示している。この例では、ECC機能は1レベルECCと仮定されている。言い換えれば、ECCパリティ符号は、1つの特定のECC符号に基づいて、「ユーザ部分」に記憶されているデータから計算され、任意的に「予備部分」に記憶されているデータから計算される。ECCパリティ符号の計算の基となるデータならびにECCパリティ符号自体は一般に、「符号語(codeword)」として知られる。したがって、ページ書込み処理の際は、1レベルECCは1ページに単一の符号語を記憶することになる。ページ読出し処理の際にECCが誤り検出および誤り訂正を実施するには、ページから符号語全体を読み出す必要がある。したがって、もしページから予備部分のデータのような符号語の断片しか読み出されない場合には、1レベルECCによるデータ保護は実現されない。
FMMアルゴリズムおよびプロセスが実施できるタスクの1つは、ユーザ部分のデータを読み出すことなく、ファイルシステムフラグやFMMのブックキーピングレコードの一部といったシステム関係情報を取得するために、NANDフラッシュページの予備部分からデータを読み出すことである。この場合、1レベルECCによるデータ保護が実現されず、FMMアルゴリズムおよびプロセスにおいて破損情報が受け取られることもある。したがって、ECC機能は任意的に、2レベルECCとして実装することもできる。
図7に示されるように、例示的な一実施形態では、ECC回路は、一方のレベルが予備部分のデータ(703)を保護し、他方のレベルがユーザ部分のデータと予備部分のデータの両方を含むページ全体(701)を保護する、NANDフラッシュページ(701)に関する2レベルのデータ保護を有している。予備部分の保護のために、ECC回路は、予備部分に記憶されるデータに基づくECCパリティ符号(予備パリティ符号704)を計算する。ページ全体の保護のために、ECCは、ユーザ部分(702)と予備部分(703、704、および705)の両方に記憶されるデータに基づくECCパリティ符号(ページパリティ符号705)を計算する。
図3に示されるFLASH_CTLR(310)のようなFLASH_CTLRが、ユーザ部分にユーザデータを書き込み、予備部分に予備データを書き込むことに加えて、ページ書込みを実施したときは、2つのECCパリティ符号(予備パリティ符号(704)およびページパリティ符号(705))も予備部分に書き込まれる。言い換えれば、2つのECC符号語は、フラッシュページ単位で記憶される。FLASH_CTLR(310)がNANDフラッシュメモリからページ全体を読み出した場合、ECC回路は、ページパリティ符号に基づいてページ全体の誤りを検出し訂正する。FLASH_CTLR(310)がページの予備部分だけを読み出した場合、ECC回路は、予備パリティ符号に基づいて予備データの誤りを検出し訂正する。
ページパリティ符号は任意的に、予備部分のデータではなく、ユーザ部分のデータだけに基づいて計算することができ、予備パリティ符号は任意的に、予備部分のデータに基づいて計算される。この場合、FLASH_CTLR(310)がページ全体を読み出したときに、ECCは、ページパリティ符号と予備パリティ符号の両方に基づいて誤り検出訂正を実施して、それぞれユーザ部分のデータと予備部分のデータの保護を実現する。FLASH_CTLR(310)がユーザ部分のページおよび関連するページパリティ符号だけを読み出したときは、ECC回路は任意的に、ページパリティ符号だけに基づいて誤り検出訂正を実施する。
ECC回路によって使用される誤り訂正符号は任意的に、ブロック符号とされるが、本発明は特定のECC符号あるいは特定のECCブロック符号に限定されるものではない。任意的に使用できるよく知られたブロック符号の2つの例は、リードソロモン符号と、ハミング符号である。ブロック符号に関する符号化および復号化アルゴリズムはよく知られているので、本明細書では詳細に説明しない。2レベルECCが使用される場合は、2つのECCパリティ符号は任意的に、2つの別々のブロック符号に基づくものとされる。
図3を再び参照すると、FLASH_CTLR(310)は、FMM回路(311)またはBOOT_CTLRから受け取られた物理ページアドレス(PPA)に基づいて、NANDフラッシュのページ読出しまたはページ書込み処理を実施するが、論理ページアドレス(LPA)は認識していない。BOOT_CTLRは任意的に、例示的な一実施形態にあるように、NANDフラッシュメモリ(317)を読み出したときに、NANDフラッシュメモリ(317)のブートセクションを読み出し、PPAを直接生成するが、ブートセクション内のページについてはLPAとPPAの区別はない。したがって、BOOT_CTLR(313)は、FLASH_CTLR(310)を直接使用して、論理アドレスから物理アドレスへの翻訳を実施する必要なく、NANDフラッシュメモリ(317)にアクセスすることができる。しかし、NANDフラッシュメモリ(317)とSDRAM(318)の間のDMA転送の際に、DMA_CTLR(312)は、FMM回路(311)に対して論理ページアドレス(LPA)を発行することによって各NANDフラッシュページのアクセスをアクティブ化し、FMM回路(311)は、LPAをPPAに翻訳し、次いでFLASH_CTLR(310)を使用して、PPAでアドレス指定されたNANDフラッシュページにアクセスする。
さらに、FLASH_CTLR(310)は任意的に、複数のNANDフラッシュデバイスを操作することができる。例示的な一実施形態では、FLASH_CTLR(310)はこれを達成するために、複数の出力ポートを介して制御回路の外部の回路に対する複数のチップ選択信号を駆動する。例示的な本実施形態では、所定のチップ選択信号は、個々のNANDフラッシュデバイスの対応するチップ選択入力ポートに接続される。複数のNANDフラッシュデバイスは任意的に、チップ選択信号を除くFLASH_CTLR(310)との間の他の制御信号およびI/O信号を共用する。NANDフラッシュの記憶空間は、FLASH_CTLR(310)の回路でハードワイヤされたまたはプログラマブルメモリに記憶されているアドレスマップに従って、それぞれチップ選択信号に対応する複数のアドレス範囲に分割される。FLASH_CTLR(310)は、BOOT_CTLRまたはFMM回路(311)から受け取られたPPAがどのアドレス範囲に入るかに基づいて、アクセスすべきNANDフラッシュデバイスを判定し、すなわちアサートすべきチップ選択信号を判定する。この仕組みを用いると、単一のNANDフラッシュデバイスによって提供される最大限の空間よりも広くメモリシステムにおけるNANDフラッシュの記憶空間を拡大することができる。
次に、FLASH_CTLR(310)をアクティブ化して操作することができるいくつかの例示的な処理について説明する。本明細書に記載の処理に加えて、FLASH_CTLR(310)はさらに、1つ(または複数)のNANDフラッシュデバイス対するより多くの処理を実施しうる。FLASH_CTLR(310)は任意的に、本明細書に記載されるものとは別のまたは異なる機能を実施することもできる。例示的な一実施形態では、F_COMMANDレジスタの値は、NANDフラッシュデバイスが実施する処理ではなく、FLASH_CTLR(310)の実施する処理を指定する。
「page write」処理は、PAGE_BUFF内のデータをPPAでアドレス指定されたNANDフラッシュページに転送するものである。典型的には、「page write」処理がアクティブ化される前に、ユーザ部分のデータと、場合によっては予備部分のデータと、を含むNANDフラッシュページに書き込むべきデータが、PAGE_BUFFにロードされる。まず、PPAレジスタにPPAが書き込まれ、F_COMMANDレジスタに「page write」が書き込まれる。次いで、F_IDLEレジスタに「active」が書き込まれたときに、FLASH_CTLR(310)がアクティブ化される。本明細書で使用されるように、コマンドまたは状態をレジスタに書き込むことに関して「〜が書き込まれる(written with)」という表現が使用されたときは、当該コマンドまたは状態に対応するデジタル値が実際に書き込まれることになる(例えば「active」は「00000001」という値で表現することもできるし、他の所望の表現とすることもできる)。次に、FLASH_CTLR(310)は、NANDフラッシュデバイスの「データ入力」機能をアクティブ化し、PAGE_BUFFからNANDフラッシュデバイスの内部データレジスタへのデータ転送を開始する。これと同時に、NANDフラッシュデバイスに転送されているデータに基づいてECCパリティ符号を計算するために、任意的に、ECC回路がイネーブルされる。
PAGE_BUFF内のデータがNANDフラッシュデバイスに転送された後は、ECCパリティ符号が転送される。次いで、FLASH_CTLR(310)が、NANDフラッシュデバイスの「自動プログラム」機能をアクティブ化して、自己の内部データレジスタ内のデータをフラッシュメモリセルに記憶する。NANDデバイスの「自動プログラム」機能が完了すると、FLASH_CTLR(310)は、F_IDLEレジスタの値を「idle」に戻す。
「page read」処理は、PPAでアドレス指定されたNANDフラッシュページのユーザ部分のデータと、場合によっては予備部分のデータと、をPAGE_BUFFに転送し、フラッシュメディアによって導入される潜在的な誤り(potential error)を訂正する。まず、PPAレジスタにPPAが書き込まれ、F_COMMANDレジスタに「page read」が書き込まれる。次いで、F_IDLEレジスタに「active」が書き込まれたときに、FLASH_CTLR(310)がアクティブ化される。次に、FLASH_CTLR(310)は、NANDフラッシュデバイスの「読出しモード」機能をアクティブ化して、PPAにおいてアドレス指定されたフラッシュメモリセル内のページデータを、NANDフラッシュデバイスの内部データレジスタに読み出す。次いで、FLASH_CTLR(310)は、ページデータとECCパリティ符号とをNANDフラッシュデバイスの内部データレジスタからPAGE_BUFFに転送し、その間にECC回路をイネーブルにして当該データの誤りの有無を検査し、PAGE_BUFF内の誤り訂正を行う。誤り訂正が完了すると、FLASH_CTLR(310)は、F_IDLEレジスタの値を「idle」に戻す。
「page spare read」処理は、PPAによってアドレス指定されたNANDフラッシュページの予備部分に記憶されているデータを、PAGE_BUFFに転送するものである。まず、PPAレジスタにPPAが書き込まれ、F_COMMANDレジスタに「page spare read」コマンドが書き込まれる。F_IDLEレジスタに「active」コマンドが書き込まれたときに、FLASH_CTLR(310)がアクティブ化される。次に、FLASH_CTLR(310)は、NANDフラッシュデバイスの「予備読出しモード」機能をアクティブ化して、PPAによってアドレス指定されたフラッシュメモリセル内のページの予備部分をNANDフラッシュデバイスの内部データレジスタに読み出す。次いで、FLASH_CTLR(310)は、当該予備ページのデータをNANDフラッシュデバイスの内部データレジスタからPAGE_BUFFに転送し、2レベルECCが使用される場合は、NANDフラッシュからも、ECC回路がそれを使用して予備データの誤りの有無を検査し、PAGE_BUFF内の誤り訂正を行う予備パリティ符号も読み出される。次いで、FLASH_CTLR(310)は、F_IDLEレジスタの値を「idle」に戻す。
「block erase」処理は、「ブロック」として知られるNANDフラッシュの消去単位全体を消去するものである。1つのブロックは、複数のページを含む。したがって、例示的な一実施形態では、FLASH_CTLR(310)は、PPAの最小有効ビットを取り除くことによってPPAからブロックアドレスを導出する。例えば、あるブロックが32ページを含んでいる場合は、ブロックアドレスは、PPAの5つの最小有効ビットを取り除くことによって取得される。まず、PPAレジスタにPPAが書き込まれ、FLASH_CTLR(310)がこれをブロックアドレスに変換し、F_COMMANDレジスタに「block erase」が書き込まれる。次いで、F_IDLEレジスタに「active」コマンドが書き込まれたときに、FLASH_CTLR(310)がアクティブ化される。次に、FLASH_CTLR(310)は、NANDフラッシュデバイスの「ブロック消去」機能をアクティブ化する。NANDフラッシュデバイスの「ブロック消去」機能が完了すると、FLASH_CTLR(310)は、F_IDLEレジスタの値を「idle」に戻す。
「device reset」処理は、NANDフラッシュデバイスの回路を、それ自体の電源投入時のデフォルト状態に復元するものである。まず、F_COMMANDレジスタに「device reset」が書き込まれる。次いで、F_IDLEレジスタに「active」が書き込まれたときに、FLASH_CTLR(310)がアクティブ化される。次に、FLASH_CTLR(310)は、NANDフラッシュデバイスの「リセット」機能をアクティブ化する。NANDフラッシュデバイスの「リセット」機能が完了すると、FLASH_CTLR(310)は、F_IDLEレジスタの値を「idle」に戻す。
次に、例示的なフラッシュメディアマネージャ(FMM)について説明する。
「フラッシュメディア管理」処理の例としては、限定されるものではないが、次の技法の内の1つまたは複数が挙げられる:損耗平均化、ガベージコレクション、不良ブロック置換、および停電復旧。これらの技法は、特有の消去単位で実施される消去−再書込みサイクル数の影響を受ける高密度フラッシュ技術に伴う課題を克服するために使用される。消去単位は、単一の消去処理で消去可能な記憶媒体上の領域として定義される。NANDフラッシュメモリでは、消去単位はブロックと同じであり、すなわち、複数のページ(例えば32または64ページ)を含んでおり、1つのページ(例えば528または2112バイト)は、単一の書込みコマンドで記憶媒体に書込み可能な、または、単一の読出しコマンドで記憶媒体から読出し可能なデータアクセス単位となる。書き込み済みのブロックに新しいデータを上書きする必要があるときは、当該ブロックに新しいデータを書き込み得る状態とする前に、全体のブロックを消去する必要がある。ブロックを消去した後に当該ブロックに新しいデータを書き込む上記のプロセスは、1回の消去−再書込みサイクルとしてカウントされる。
現在の高密度フラッシュデバイスでは、1ブロックは通常、最大1万回〜10万回の消去−再書込みサイクルに耐えることができるが、それを超えたより多くの消去−再書込みサイクルが発生するとブロックに欠陥が生じたり、当該ブロックが信頼性のある形でデータを記憶することがもはやできなくなることが多い。信頼性のある形でデータを記憶することができない欠陥ブロックは「不良ブロック」と呼ばれ、それ以上データを記憶するのに使用すべきではない。理論的には、フラッシュメモリに対して行われる消去−再書込みサイクルの数が増加すればするほど、使用可能なブロック数は減少していき、最終的には使用可能なブロックが全く存在しなくなる。
もしオペレーティングシステムなどのソフトウェアプログラムが、高密度フラッシュメモリの制限された消去−再書込みサイクルを考慮していない場合は、当該ソフトウェアによって無制限に、あるフラッシュメモリ位置に新しいデータが繰返し上書きされる可能性が高い。例えば、ファイルシステムのファイルアロケーションテーブル(FAT)は、非常に頻繁に更新される。このため、あるブロックはすぐにそれぞれの消去−再書込みサイクル限界に達し、不良ブロックとなる。ソフトウェアが不良ブロックを良好ブロックで置き換え、通常であれば不良ブロックに記憶されたはずのデータを、記憶するのに良好ブロックを使用した場合でさえ、同じフラッシュメモリ位置に実際に無制限に上書きすることになれば、フラッシュ全体の全ての良好ブロックまたはその大部分がすぐに使い果たされる可能性があり、フラッシュデバイスの寿命が許容できないほど短い期間となる恐れもある。
フラッシュデバイスの期待寿命を延長しまたは最大化するために、フラッシュメディア内のデータの構成および追跡を行う多くの方法が開発されている。これらの方法はしばしば、「論理」アドレス空間を「物理」アドレス空間と分離することを要し、より上位のシステムソフトウェアが「論理」フラッシュアドレスを用いてフラッシュのデータ記憶空間を操作する。アドレス翻訳スキームによって論理アドレスが物理アドレスに翻訳された後、当該物理アドレスは、低位のデバイスドライバソフトウェアがフラッシュメディアにアクセスするのに使用される。
論理アドレスと物理アドレスの関連付けを維持するために、通常、アドレス翻訳テーブルが使用される。より上位のシステムソフトウェアが関連する物理アドレスを消去し、新しいデータを同じ物理アドレスに書き込む代わりに、書き込み済みの論理アドレスを新しいデータで上書きしたときは、より低位のソフトウェアが実際に未書込みの物理アドレスを発見し、新しく発見した当該物理アドレスに新しいデータを書き込む。次いで、論理アドレスと物理アドレスの新しい関連付けを反映するために、アドレス翻訳テーブルが更新される。この技法は一般に、同じ論理アドレスに対する複数の書込みが複数の異なる物理アドレスに分散され、したがって特定の物理アドレス上の損耗が最小限に抑えられることから、「損耗平均化」と呼ばれている。
論理アドレスが複数回にわたって再書込みされたときは、当該論理アドレスの最新データが1つの物理アドレスに格納されるが、それ以前に当該論理アドレスと関連付けられた他の多くの物理アドレスには、古くなったデータが格納されているはずである。これらの古くなった物理アドレスは、それらの消去処理を実施することによって回収(reclaim)することができ、「未書込みの」物理アドレスに戻すことができる。この技法は一般に、「ガベージコレクション」と呼ばれている。
損耗平均化の技術を使用した場合であっても、いくつかのブロックは最終的に、信頼性のある形でデータを記憶するのに使用できない不良ブロックとなる可能性があり、したがって良好ブロックで置き換えられる。言い換えれば、ブロックが不良ブロックとなった場合は、通常であれば不良ブロックに記憶されたはずのデータを記憶するための良好ブロックが選ばれる。この技法は一般に、「不良ブロック置換」と呼ばれている。
上記の各種技法では一般に、論理アドレスから物理アドレスへの翻訳テーブル、不良ブロック位置、古くなったデータを含む物理アドレスなど、ある種のブックキーピングレコードを維持する必要がある。これらのレコードは、フラッシュメモリ内のデータ構成を追跡するためにフラッシュメモリに記憶され、フラッシュメモリ内の最新のデータ構成を反映するのに十分な頻度で更新される。しかしながら、レコードがフラッシュメモリ内で適切に更新される前に突然停電が起きた場合は、当該レコードは、ホストデバイス(例えば携帯電話)の電源が再び投入されたときに最新の情報を含んでいないことになる。このような潜在的な障害を克服するために、停電が起きた場合に最新のブックキーピングレコードを復元する多くの従来の技法が開発されている。これらの技法は一般に、「停電復旧」技法と呼ばれている。
本明細書では、上述の各種技法をまとめて「フラッシュメディア管理」と呼ぶ。当業者に知られ利用できる多くのフラッシュメディア管理技法が存在する。しかしながら、従来の多くの携帯電話メモリシステムとは異なり、一実施形態は、外部プロセッサを殆どまたは全く介入させることなく、ユーザ定義のフラッシュメディア管理スキームをメモリシステムに実装する方法を提供する。
図3を参照すると、フラッシュメディアマネージャ(FMM 311)のブロックは、フラッシュメディア管理のアルゴリズムおよびプロセスを実施し、論理的なNANDフラッシュのアドレス空間と物理的なNANDフラッシュのアドレス空間との間のインターフェースとして働く回路を表している。例示的なFMM回路(311)は任意的に、組込み型プロセッサ用ランダムアクセスメモリ(例えばスタティックRAM)を含む。先に論じたように、組込み型プロセッサを「FMM_P」と呼び、FMMランダムアクセスメモリを「FMM_RAM」と呼ぶ。FMM_RAMは、後にFMM_Pによって実行可能なFMMプログラムコードを記憶するのに使用できる揮発性ランダムアクセスメモリを提供する。FMM_RAMは、BOOT_CTLR(313)およびFMM_Pからアクセス可能であるが、同時に両方からアクセスすることはできない。
BOOT_CTLR(313)は、電源投入時のブートプロセスの間にFMMプログラムコードをFMM_RAMにロードし、次いでFMM_Pを解放して、FMM_RAMに記憶されているFMMプログラムコードを実行するためにFMM_RAMにアクセスする。FMMプログラムコードは、FMM_Pの命令セットに基づく一連の命令である。FMM_Pは、それらの命令をFMM_RAMからフェッチすることによってFMMプログラムコードを実行する。また、FMM_Pは任意的に、FMM_RAMを使用して、FMMプログラムコードを走らせることによって生成される中間情報と、FMMアルゴリズムのブックキーピングレコードとを記憶する。ユーザ定義のフラッシュメディア管理のアルゴリズムは、それらのアルゴリズムを実施するためにFMM_Pによって実行されるFMMプログラムコードの形で実装することができる。
図8は、図3に示されるシステムで任意的に使用できるFMM_P(801)の例示的な一実施形態のブロック図を示している。例示的なFMM_P(801)は、限定されるものではないが、内部レジスタ(802)と、ALU(804)と、命令ポインタ(IP)(803)と、制御ユニット(CU)(805)とを含んでいる。内部レジスタ(802)は、FMM_P(801)に読み込まれるデータ、ならびに、FMM_P(801)から書き出されるデータを一時的に記憶するのに使用される。ALU(804)は、加算や減算あるいはAND、OR、XORといった論理演算などの算術演算を内部レジスタに対して実施する。命令ポインタ(IP)(803)は、次にFMM_P(801)に読み込まれるべき命令を含むFMM_RAM位置のアドレスを格納するレジスタである。CU(805)は、IP値の変更、FMM_RAMからの命令およびデータの読出し、FMM_RAMへのデータの書込み、制御回路の様々な部分からの割り込み信号の受取りおよびそれに対する応答、制御回路内の他の機能ブロックの設定およびアクティブ化といった命令実行タスクを制御する。
図3を再び参照すると、FMM(311)はさらに、BOOT_CTLR(313)およびDMA_CTLR(312)がFMM(311)を設定しアクティブ化するための仕組みとしてコンフィギュレーション(図示せず)を有している。LPAレジスタは、アクセスされるNANDフラッシュページのLPAを格納する。F_COMMANDレジスタは、「page read」や「page write」といった、FMM(311)によって実施される処理を格納する。このレジスタは、電源投入後にFMM(311)が初期化タスクを完了させるまで、FMM(311)から無視される。FMM_INITレジスタは、FMM(311)が初期化されたか否かを示す。このレジスタの電源投入時のデフォルト値は「not initialized」であり、FMM(311)が初期化タスクを完了した後にFMM(311)によって「initialized」に変更される。FMM_IDLEレジスタは、FMM_P(801)をアイドルモードから解放するために書き込むことができる。このレジスタの電源投入時のデフォルト値は「idle」であり、これはFMM(311)がアイドルモードにあることを示す。FMM_IDLEレジスタに「active」の値が書き込まれたときは、FMM_IDLEレジスタは、FMM_P(801)をアイドルモードから解放してFMMプログラムコードを実行し、FMM(311)は、FMM(311)の初期化またはFMM_COMMANDレジスタによって指定されたタスクの実施を開始する。このタスクが完了すると、FMM(311)は、レジスタの値を「idle」に戻す。FMMをアクティブ化する「active」がFMM_IDLEレジスタに書き込まれる前に、FMM(311)がアイドルモードにあることを保証する「idle」がFMM_IDLEレジスタに格納されるまで、FMM_IDLEレジスタのポーリングが行われる。
FMM_P(801)の命令セットは、FLASH_CTLR(310)をアクティブ化してNANDフラッシュメモリ(317)を操作するためにFLASH_CTLR(310)内の設定レジスタの読書きを行う命令と、NANDフラッシュメモリ(317)との間のデータ転送を行うためにFMM_RAMとPAGE_BUFFの間でデータ転送を行う命令とを有する。FMM_P(801)の命令セットはさらに、FMM_RAMとSDRAMの間のデータ転送を行うために、MAD(308)およびSDRAM_CTLR(309)を介して、SDRAM(318)に対するデータアクセスを実施する命令も提供する。言い換えれば、FMM(311)はSDRAMのマスタであり、MADを介し、MADブロックのアクセス権付与ハンドシェークプロトコルに従ってSDRAM(318)にアクセスする。FMM_P(801)は、SDRAM(318)を使用して、FMMプログラムコードを走らせることによって生成される中間情報と、FMM_RAMにこの目的のための十分なメモリ空間が存在しない場合はFMM(311)アルゴリズムのブックキーピングレコードと、を記憶する。FMM(311)はこれらの命令を用いて、FMM_RAMを介して、NANDフラッシュとSDRAM(318)の間のデータ転送を行うことができる。
FMMプログラムコードは不揮発性NANDフラッシュメモリ(317)に記憶され、ブートアッププロセスの間にBOOT_CTLR(313)によってFMM_RAMにロードされる。しかしながら、FMM(311)は、FMMプログラムコードがBOOT_CTLR(313)によってNANDフラッシュメモリ(317)から読み出されている間は、まだ機能しない。したがって、FMMプログラムコードは、FMMアルゴリズムが利用されず、したがって論理ページアドレスと物理ページアドレスの区別がないNANDフラッシュメモリ(317)内のセクションに記憶され、このセクションを本明細書では「ブートセクション」と呼ぶ。言い換えれば、FMM(311)アルゴリズムは、NANDフラッシュメモリ(317)のブートセクションからデータを読み出す際は必要とされない。このブートセクションについては、BOOT_CTLR(313)の説明を参照しながらより詳細に説明する。
電源投入のリセットがディアサートされると、BOOT_CTLR(313)は、FMM(311)をアイドルモードに保ちながらFMMプログラムコードをFMM_RAMにロードする。次いで、BOOT_CTLR(313)は、FMM(311)がアクティブであることを表す「active」をFMM_IDLEレジスタに書き込むことによってFMM(311)をアイドルモードから解放する。次いで、FMM_P(801)は、FMM_RAMからのFMMプログラムコードの実行を開始する。この時点でもなおFMM_INITレジスタは「not initialized」の指示を格納しており、これによりFMM_P(801)が、FMM_P(801)にFMMの初期化を実施するよう命令するFMMプログラムコード内のルーチンに分岐することになる。
FMMの初期化はFMM機能の一部であり、したがってユーザ定義型であって、エンドデバイス(例えば携帯電話)の製造業者および/または他の該当するユーザが、フラッシュメディア管理のアルゴリズムおよびプロセスを定義することができる。本発明は、FMMの初期化に要するタスクまたはタスクシーケンスを限定するものではない。以下の記載は、FMM(311)を使用して実施できるいくつかの例示的な初期化タスクを提示するものである。
FMM(311)を初期化するには、アドレス翻訳テーブルなどフラッシュメディア管理に必要な、FMM(311)のブックキーピングレコードをNANDフラッシュメモリ(317)から発見し、FMM_RAMまたはSDRAM(318)にコピーする必要がある。FMMのブックキーピングレコードを発見するには通常、多くのNANDフラッシュページの予備部分をFMM_RAMにロードし、FMM(311)が各ページの予備部分のデータを検査して、対応するNANDフラッシュページがFMMのブックキーピングレコードを含んでいるかどうか判定する必要がある。FMMのブックキーピングレコードの一部を含むページが発見されると、当該ページのユーザ部分はNANDフラッシュメモリ(317)から読み出され、FMM_RAMまたはSDRAM(318)にロードされる。
FMM(311)は、NANDフラッシュページからFMM_RAMにデータ(ユーザ部分のデータまたは予備部分のデータあるいはその両方)をコピーするために、NANDフラッシュのPPAを生成し、当該PPAによってアドレス指定されたNANDフラッシュページをFLASH_CTLR_PAGE_BUFFに読み込むようにFLASH_CTLR(310)を設定する。次いで、FMM(311)は、当該データをPAGE_BUFFからFMM_RAMにロードする。FMM(311)は、をSDRAMにNANDフラッシュページデータコピーするために、まずNANDフラッシュのPPAとSDRAMのアドレスとを生成し、次いで当該PPAによってアドレス指定されたNANDフラッシュページをFLASH_CTLR_PAGE_BUFFに読み込むようにFLASH_CTLR(310)を設定する。次いで、FMM(311)は、当該データをPAGE_BUFFからFMM_RAMに読み込み、当該データをFMM_RAMからMAD(308)を介してSDRAM(318)に書き込む。
フラッシュメディア管理の初期化が完了した後は、FMM(311)は、FMM_INITレジスタの値を「idle」に、FMM_INITレジスタの値を「initialized」に変更する。この時点で、FMM(311)は、論理アドレスから物理アドレスへの翻訳を実施する準備が整っており、DMA_CTLR(312)からコマンドを受け取って1次プロセッサが要求するDMA転送をサポートする準備が整う。FMM_P(801)がアイドルモードから再び解放されると、FMM_INITレジスタの値「initialized」は、FMM_P(801)に対して、初期化を実施する代わりにFMM_COMMANDレジスタによって指定された処理を実施するFMMプログラムコードの一部に分岐するよう命令する。
FMMのブックキーピングレコードは、標準動作の間、FMM_RAMもしくはSDRAM(318)またはその両方に、保持することができる。FMMプログラムコードが既にFMM_RAM内にあるので、ブックキーピングレコードもFMM_RAMに容易に記憶することができる。本実施形態の動作を説明するために、以下の記載では、FMMのブックキーピングレコードがSDRAM(318)に保持されるものと仮定する。FMMアルゴリズムがSDRAM(318)に記憶されたブックキーピングレコードを読み出してあるタスク(例えばアドレス翻訳テーブルを読み出して論理アドレスから物理アドレスへの翻訳を実施すること)を実施する必要がある場合、FMM(311)は、当該ブックキーピングレコードの一部分を、SDRAM(318)からMAD(308)を介してFMM_RAMにコピーし、FMMアルゴリズムコードはコピー済みのデータを読み出す。FMMアルゴリズムコードがSDRAM内のブックキーピングレコードの一部分を更新する必要がある場合、FMM(311)は、当該ブックキーピングレコードの一部分の新しいバージョンをFMM_RAM内で生成し、次いで当該データをFMM_RAMからMAD(308)を介してSDRAM(318)にコピーして、SDRAM(318)に記憶されている古い方のバージョンを上書きする。
FMMアルゴリズムは、通常、その時々に、ある種のブックキーピングレコードをNANDフラッシュメモリ(317)に書き込んだり、またはそれを更新したりする必要があり、そのため、NANDフラッシュの様々なブロックを消去し、SDRAM(318)からNANDフラッシュメモリ(317)にデータをコピーする必要がある。FMM(311)は、NANDフラッシュのブロックを消去するために、消去すべきNANDフラッシュのブロックのブロックアドレスを生成し、次いで当該ブロックアドレスをPPAレジスタにロードし、当該NANDフラッシュのブロックを消去するようにFLASH_CTLR(310)を設定する。FMM(311)は、あるSDRAMのアドレスのデータをNANDフラッシュページにコピーするために、まずNANDフラッシュのPPAとSDRAMのアドレスとを生成し、次いで当該データをSDRAM(318)からMAD(308)を介してFMM_RAMに読み込み、当該データをFMM_RAMからFLASH_CTLR_PAGE_BUFFに書き込む。次いで、FMM(311)は、PAGE BUFF内のデータを上記のPPAによってアドレス指定されたNANDフラッシュページに書き込むようにFLASH_CTLR(310)を設定する。
FMM(311)アルゴリズムは、標準動作の間、制御回路の他の機能ブロックまたは1次プロセッサ(314)によってアクティブ化されることなく、あるいは、それらが介入することなく、NANDフラッシュメモリ(317)内のブックキーピングレコードの更新を開始できる点に留意されたい。FMM(311)は、FMM_COMMANDレジスタに書き込まれるコマンドをFMM(311)が行えないようになる自己開始タスク(self initiated task)を実施する必要があるときは、このタスクを開始する前にFMM_IDLEレジスタの値を「active」に変更する。このタスクが完了すると、FMM(311)はレジスタの値を「idle」に戻す。したがって、FMM(311)をアクティブ化する「active」がFMM_IDLEレジスタに書き込まれる前においては、FMM(311)がアイドルモードにあることを保証する「idle」がFMM_IDLEレジスタに格納されるまでFMM_IDLEレジスタのポーリングが行われる。
DMA_CTLR(312)は、設定レジスタを使用することにより、FMM(311)を使用して、LPAに基づいてNANDフラッシュページにアクセスすることができる。DMA_CTLR(312)は、NANDフラッシュLPAからの読出しを行うようにFMM(311)を設定するために、LPAレジスタに当該LPAを書き込み、FMM_COMMANDレジスタにコマンド「page read」を書き込む。次いで、DMA_CTLR(312)は、FMM_IDLEレジスタに「active」を書き込んでFMM(311)をアクティブ化し、FMM_IDLEレジスタのポーリングを開始する。FMM(311)がアクティブ化されると、FMM(311)は、論理アドレスから物理アドレスへの翻訳を行いLPAをPPAに変換し、次いで当該PPAの物理的なNANDフラッシュページを読み出すようにFLASH_CTLR(310)を設定する。FLASH_CTLR(310)がページ読出しを完了したときは、FMM(311)は、FMM_IDLEレジスタの値を「idle」に変更し、それにより、現在PAGE_BUFF内にNANDフラッシュページデータがあることがDMA_CTLR(312)に示される。次いで、DMA_CTLR(312)は、PAGE_BUFFを読み出してページデータを取得することができる。
DMA_CTLR(312)は、NANDフラッシュLPAにデータを書き込むようにFMM(311)を設定するために、まずPAGE_BUFFにデータを書き込み、LPAレジスタにLPAを書き込み、FMM_COMMANDレジスタにコマンド「page write」を書き込む。次いで、DMA_CTLR(312)は、FMM_IDLEレジスタに「active」を書き込んでFMM(311)をアクティブ化し、FMM_IDLEレジスタのポーリングを開始する。FMM(311)がアクティブ化されると、FMM(311)は、論理アドレスから物理アドレスへの翻訳を実施してLPAをPPAに変換し、次いでPAGE_BUFF内のデータを当該PPAの物理的なNANDフラッシュページに書き込むようにFLASH_CTLR(310)を設定する。次いで、FMM(311)は、FMM_IDLEレジスタの値を「idle」に変更し、それにより、ページ書込みが完了したことがDMA_CTLR(312)に示される。
FMMプログラムコードは、限定されるものではないが、NANDフラッシュメモリ(317)内のある領域がシステムブートコード、FMMプログラムコード、本質的なオペレーティングシステムのプログラムコードといった重要なデータを含んでいる場合にそれらの領域が消去または上書きされるのを防止するように設けられている。このような措置は、NANDフラッシュメモリ(317)に記憶されている重要なデータが誤って改変されないように、または、NANDフラッシュメモリ(317)内のデータを意図的に破損させようとする悪意のあるアプリケーションソフトウェアにより改変されないように保護するものである。以下では、保護されたNANDフラッシュメモリ(317)の領域をFMM保護領域(FMM−protected area)と呼ぶ。FMM保護領域は、論理アドレスもしくは物理アドレスまたはその両方を用いて、FMMプログラムコード内で指定することができる。例えば、DMA_CTLR(312)が、あるLPAのNANDフラッシュページへの書込みを行うようにFMM(311)を設定した場合、FMM(311)はまず、当該LPAがFMM保護領域に入るかどうか確認する。FMM保護領域に入る場合、FMM(311)は、LPAからPPAへの翻訳は実施せず、FLASH_CTLR(310)をアクティブ化して対応するPPAに対して書込みを行うこともしない。保護が特に望まれうる領域の1つは、FMMプログラムコードが記憶されている領域である。この理由は、NANDフラッシュメモリ(317)内の他のデータを保護するにはFMMプログラムコード自体を保護する必要があるからである。
例示的な本実施形態では、1次プロセッサ(314)がリセットから解放される前に、FMMプログラムコードがBOOT_CTLR(313)のハードウェアによってNANDフラッシュメモリ(317)から読み出されてFMM(311)が機能するようになるので、FMMプログラムコード内で定義されたFMM保護領域は、1次プロセッサ(314)によって改変されることはない。FMM保護領域がブートセクションを含んでいる場合、FMMプログラムコードおよびシステムブートコードは1次プロセッサによって改変されることはない。すなわち、FMM(311)は、NANDフラッシュメモリ(317)に記憶されているデータを、1次プロセッサ(314)または外部電子機器内の他のプロセッサによって実行されるソフトウェアプログラムから保護することができる。
ユーザがホストデバイス(例えば携帯電話)に対して、電源を遮断する(例えば電源遮断ボタンを押すことによって)コマンドを発行した場合、FMM(311)アルゴリズムは、携帯電話の電源が再び投入されたときに最新のブックキーピングレコードが使用可能となるように、NANDフラッシュメモリ(317)内のある種のブックキーピングレコードを更新する必要が生じることもある。これは、「電源遮断工程」と呼ばれている。FMM(311)がNANDフラッシュメモリ(317)内のブックキーピングレコードの更新を完了させることができるように、FMM(311)がアクティブ化され、FMM(311)が電源遮断工程を完了させるまでメモリシステム(301)の電源を好ましくは維持しつつ、電源遮断工程が実施される。
ユーザからの電源遮断コマンドが受け取られると、1次プロセッサ(314)は、REGSブロック(306)内のPOWER_OFFレジスタに「active」を書き込み、次いで、FMM(311)に、電源遮断工程をアクティブ化する信号を送る。次いで、1次プロセッサ(314)は、FMM(311)が電源遮断工程を実施している間にレジスタのポーリングを開始する。FMM(311)が電源遮断工程を完了したときは、FMM(311)は、POWER_OFFレジスタの値を「idle」に戻す信号をREGSブロックに送り、それにより1次プロセッサ(314)が外部の電子機器内で携帯電話の電源を遮断するのに必要なタスクを実施する。電源遮断工程を開始する信号がREGSブロック(306)から受け取られた場合、FMM(311)がアイドルのこともあれば、別の処理の最中のこともある。FMMプログラムコードは、進行中の処理を中断した後に電源遮断工程を開始するように設けられていてもよいし、進行中の処理を完了させた後に電源遮断工程を開始するように設けられていてもよい。
このFMMアーキテクチャによれば、限定されるものではないが、メモリシステム(301)は、外部プロセッサを殆ど介入させることなく、または、その介入を最小限に抑えながら、フラッシュメディア管理タスクを実施することができる。1次プロセッサ(314)が実行するソフトウェアプログラムは、「論理」アドレスを用いてフラッシュのデータ記憶空間を操作するものであり、したがって外部プロセッサでは、物理的なフラッシュメディア内のデータ構成の管理、維持、または変更のオーバーヘッドは生じない。このようなFMM(311)の自律性は、ハードウェア実装の場合と同様の利益をもたらす。例示的な一実施形態では、FMM(311)は、限定されるものではないが、ユーザ定義のFMMプログラムコードを走らせる組込み型プロセッサとして実装されるので、ユーザが制御回路に実装されたハードウェアに何ら変更も加えずにプログラムコードを修正することが可能であり、そのため、メモリシステムのハードウェアが実装された後、あるいは携帯電話設計が確定した後でさえ、バグ修正およびFMMプログラムコードのアップグレードを容易に行うことが可能となる。したがって、FMM(311)は、ソフトウェア実装と同様の利点ももたらす。
次に図3を参照して、DMAコントローラ(DMA_CTLR 312)の一例についてより詳細に説明する。DMA_CTLR(312)は、1次プロセッサ(314)の制御下で、また1次プロセッサ(314)によって監視されている間に、NANDフラッシュメモリ(317)とSDRAM(318)の間のDMA転送を実施する役割を果たす。より具体的には、CMD_CTLR(305)は、PPBS(303)を介して1次プロセッサ(314)からDMA転送コマンド(例えば「Download DMA Tranfer」または「Upload DMA Transfer」)を受け取った後、DMA_CTLR(312)をアクティブ化してDMA転送を実施する。DMA転送コマンド自体は転送方向を示す。「Download DMA Tranfer」コマンドは、NANDフラッシュからSDRAMへの転送が行われるようにするものである。「Upload DMA Transfer」は、SDRAMからNANDフラッシュへの転送が行われるようにするものである。DMA_CTLR(312)は、(例えばNANDフラッシュページ数で記述される)転送すべきデータ量、NANDフラッシュの開始論理ページアドレス(LPA)、SDRAMの開始アドレスなど、上記のDMA転送コマンドに付随する他の情報を、REGSブロック(306)内のDMA_CONFIGレジスタから取得する。次いで、DMA_CTLR(312)は、転送すべきNANDフラッシュページのLPA、ならびに転送すべき各NANDフラッシュページに対応するSDRAMの開始アドレスを生成する。
DMA_CTLR(312)は、NANDフラッシュページのDMA転送を達成するために、NANDフラッシュメモリ(317)およびSDRAM(318)にアクセスする。DMA_CTLR(312)が論理的なNANDフラッシュのアドレス空間(すなわちLPA)で動作し、FMM(311)がFMMアルゴリズムおよび/またはテーブルに基づいて論理アドレスから物理アドレスへの翻訳を実施する必要が生じるので、DMA_CTLR(312)は、NANDフラッシュメモリ(317)にアクセスするために、FLASH_CTLR(310)を直接制御する代わりに、FMM(311)をアクティブ化してFLASH_CTLR(310)を制御する。
DMA_CTLR(312)は、NANDフラッシュページの転送を開始するために、LPAレジスタおよびFMM_COMMANDレジスタにLPAおよび転送タイプを(例えばDownload DMA Tranferの場合には「page read」を、Upload DMA Transferの場合には「page write」を)書き込み、次いでFMM_IDLEレジスタに「active」を書き込む。次いで、FMM(311)は、アドレス翻訳を実施してPPAを取得し、当該PPAのNANDフラッシュページの読出しまたは書込みを行うようにFLASH_CTLR(310)を設定する。Download DMA Tranferの場合、FLASH_CTLR(310)は、ページ読出し処理を実施するように設定される。FLASH_CTLR(310)がページ読出し処理を完了させたときは、ページデータは、潜在的な誤りが既にECC回路によって訂正された状態でPAGE_BUFFに記憶される。次いで、DMA_CTLR(312)は、次のLPAを生成し、FMMをアクティブ化してNANDフラッシュメモリ(317)からの次のページ読出しを実施しながら、当該データをPAGE_BUFFからSDRAM(318)に移動させる。
Upload DMA Transferの場合、DMA_CTLR(312)はまず、1ページ分のデータをSDRAM(318)からPAGE_BUFFに移動させ、次いでFMM(311)をアクティブ化し、FLASH_CTLR(310)を使用してページ書込み処理を実施する。FLASH_CTLR(310)がPAGE_BUFFからNANDフラッシュメモリ(317)にデータを移動させているときに、DMA_CTLR(312)は、SDRAM(318)からFLASH_CTLR_PAGE_BUFFへの次のページデータの移動を開始する。このプロセスは、DMA転送が完了するまで繰り返される。
DMA_CTLR(312)は、SDRAM(318)にアクセスするために、他のSDRAMマスタの場合と同様にMAD(308)にアクセス要求を送り、アクセス権が付与されるのを待つ。アクセス権が付与されたときは、DMA_CTLR(312)は、SDRAM_CTLR(309)を使用することによってSDRAM(318)との間のバースト転送を実施し、次いで次のバースト転送を実施するために、アクセス要求を再び送出する。DMA_CTLR(312)は、複数のバースト転送を実施して1ページ分のNANDフラッシュページのデータ転送を完了させる。バーストの長さは、1次プロセッサ(314)がDMA転送を開始する前に適当な値をロードしたREGSブロック(306)内のSDRAM_BURST_LENGTHレジスタによって決定される。
次に図3を参照して、ブートコントローラ(BOOT_CTLR 313)の例示的な一実施形態についてより詳細に説明する。BOOT_CTLR(313)は、電源投入のほぼ直後にシステムブートコードおよびFMMプログラムコードをそれぞれNANDフラッシュメモリ(317)からBOOT_RAM(307)およびFMM_RAMにロードすること、FMM(311)をアイドルから解放すること、1次プロセッサ(314)をリセットから解放することといったタスクを実施して制御回路を初期化する役割を果たす。BOOT_CTLR(313)は、FLASH_CTLR(310)を使用してNANDフラッシュメモリ(317)のブートセクションを読み出す。一実施形態では、ブートセクションにはFMMアルゴリズムが適用されないので、ブートセクション内のデータについては論理アドレスと物理アドレスの区別がない。ブートセクションが読み出されたときは、BOOT_CTLR(313)は、論理アドレスから物理アドレスへの翻訳を行うことなくブートセクション内の各ページのPPAを直接生成し、次いでFLASH_CTLR(310)を使用してブートセクション内の各PPAからの読出しを行う。
図9は、例示的なNANDフラッシュの記憶空間(901)の割付けを示している。この例では、NANDフラッシュの記憶空間(901)は、ブートセクション(902)とFMM制御セクション(903)とに分割される。NANDフラッシュメモリ(例えば図3のNANDフラッシュメモリ(317))のブートセクション(902)は、任意的に、損耗平均化、ガベージコレクション、不良ブロック置換、および停電復旧を実施するFMMアルゴリズムから除外される。ブートセクション(902)は、システムブートコードおよびFMMプログラムコードが記憶される領域である。これらのプログラムコードは、製造業者が携帯電話を組み立てるときにだけNANDフラッシュのブートセクション(902)に書き込まれ、バグ修正または携帯電話に記憶されているプログラムコードのアップグレードという比較的稀な事象を除いて、携帯電話の通常の使用中には消去されないことが好ましい。
したがって、ブートセクション(902)は、NANDフラッシュメモリの残りの部分程には消去−再書込みサイクルによって損耗されず、したがって携帯電話の寿命期間中に欠陥が生じる可能性は低い。したがって、FMMアルゴリズムは任意的に、ブートセクション(902)には適用されない。言い換えれば、本実施形態では、ブートセクション(902)内のデータについては論理アドレスと物理アドレスの区別がなく、したがって当該セクションにアクセスするときは論理アドレスから物理アドレスへの翻訳が必要とされない(906)。FMM制御セクション(903)は、他のプログラムコード、ユーザデータ、およびFMMアルゴリズムのブックキーピングレコードが記憶される場所である。FMM制御セクション(903)では、そこに記憶されるデータは、損耗平均化および不良ブロック置換のために様々な物理アドレスに移動され、FMMアルゴリズムによって維持され追跡される。したがって、FMM制御セクション内のデータにアクセスするときは、FMM(例えば図3のFMM(311))によって論理アドレスから物理アドレスへの翻訳(907)が実施される。
図9に示されるように、ブートセクション(902)は、FMMプログラムコード(904)と、システムブートコード(905)とを格納している。図3を参照すると、BOOT_CTLR(313)は、電源投入のリセット信号がディアサートされると自動的にアクティブになり、次いでNANDフラッシュメモリ(317)のブートセクション(902)からデータをフェッチするようにFLASH_CTLR(310)を設定しアクティブ化する。ブートセクション(902)の各ページがFLASH_CTLR(310)のPAGE_BUFFにフェッチされるときに、BOOT_CTLR(313)は、当該ページがFMMプログラムコードの一部である場合にはページデータをPAGE_BUFFからFMM_RAMに転送し、当該ページがシステムブートコードの一部である場合にはページデータをPAGE_BUFFからBOOT_RAM(307)に転送する。次いで、BOOT_CTLR(313)は、PAGE_BUFFからデータを取り出しながらFLASH_CTLR(310)をアクティブ化して、次のNANDフラッシュページをPAGE_BUFFにフェッチする。このプロセスは、NANDフラッシュメモリ(317)のブートセクション(902)におけるプログラムコードがFMM_RAMおよびBOOT_RAM(307)にロードされるまで繰り返される。
次いで、BOOT_CTLR(313)は、FMM_IDLEレジスタに「active」を書き込んでFMM(311)をアイドルから解放し、FMM_IDLEレジスタのポーリングを開始する。次いで、FMM_Pが、FMM_RAMに記憶されているFMMプログラムコードの実行を開始し、FMMアルゴリズムの初期化を実施する。初期化の後、FMM(311)は、FMM_IDLEレジスタの値を「idle」に戻し、それによってBOOT_CTLR(313)がPPBS(303)を介して1次プロセッサ(314)に向かうリセット信号をディアサートする。次いで、1次プロセッサ(314)はアクティブになり、BOOT_RAM(307)に記憶されているシステムブートコードの実行を開始する。この時点でBOOT_CTLR(313)は、それ自体の機能を完了させ、BOOT_CTLR(313)が上記のプロセスを繰り返すようになる電源投入のリセット信号が再びアサートされディアサートされるまでアイドルのままとなる。
BOOT_CTLR(313)は、NANDフラッシュメモリ(317)のブートセクション(902)からプログラムコードを読み出すために、FMMプログラムコードおよびシステムブートコードに関するNANDフラッシュのPPA範囲を知る必要がある。この情報をBOOT_CTLR(313)に提供する1つの方法は、BOOT_CTLR(313)が常に固定されたNANDフラッシュのPPAからプログラムコードを読み出すように、当該情報をBOOT_CTLR(313)の回路に構築しまたはハードワイヤすることである。別の方法は、ブートセクション(902)内のNANDフラッシュページの予備部分に「ブートフラグ(boot flag)」を記憶することであり、それにより、当該ブートフラグによってページがFMMプログラムコードまたはシステムブートコードの一部として識別され、あるいはどちらの一部としても識別されず、一方、BOOT_CTLR(313)の回路は、ブートセクション(902)のPPA範囲の知識を用いて構築され、また、FMMプログラムコードまたはシステムブートコードとしてページの内容を識別するために、ブートセクション(902)のNANDフラッシュページがPAGE_BUFFに読み込まれるときにブートフラグを検査する機能を用いて構築される。ページの内容が識別されると、次いでBOOT_CTLR(313)は、FLASH_CTLR_PAGE_BUFFのデータをFMM_RAMまたはBOOT_RAM(307)に移動させる。
次に、各フローチャートおよび図3を参照して任意の実施形態の処理について説明する。
まず、電源投入のリセット後のブートアッププロセスについて説明する。図10は、BOOT_CTLR(313)によって実施される例示的なブートアップ工程を示している。電源投入のリセット信号がアサートされると、メモリシステムおよび外部の電子機器がリセットモードに入る。状態(1001)で、電源投入のリセット信号はディアサートされる。電源投入のリセット信号がディアサートされると、BOOT_CTLR(313)は自動的にアクティブになり、状態(1002)で、ブートセクションの最初のPPAの生成を開始する。次いで、状態(1003、1004)で、BOOT_CTLR(313)は、当該PPAのNANDフラッシュページを読み出すようにFLASH_CTLR(310)を設定しアクティブ化する。
状態(1005)で、FLASH_CTLR(310)がアイドルかどうか判定され、したがってFLASH_CTLR(310)がページ読出し処理を完了させたかどうか判定される。読み出されたNANDフラッシュページは、潜在的な誤りがECC回路によって訂正された状態でPAGE_BUFFに記憶される。次いで、BOOT_CTLR(313)は、当該ページがシステムブートコードの一部であるのか、それともFMMプログラムコードの一部であるのかに応じて、ページデータをPAGE_BUFFからBOOT_RAM(307)またはFMM_RAMにコピーするが、この処理については各状態(1006、1007、および1008)を参照されたい。
状態(1009)では、転送すべきページがそれ以上存在するかどうか判定される。ブートセクションにまだページが残っている場合には、状態(1010)に進み、BOOT_CTLR(313)は、ブートセクション内のプログラムコードが全てBOOT_RAM(307)またはFMM_RAMに読み込まれコピーされるまで上記のダウンロードプロセスを繰り返して他のNANDフラッシュページをダウンロードする。次いで状態(1012)で、BOOT_CTLR(313)は、FMM(311)をアイドルから解放する。FMM(311)が解放されると、状態(1013)で、FMM(311)は、FMM_RAMに記憶されているFMMプログラムコードの実行を開始する。
状態(1013)では、FMMプログラムコードはFMM(311)に対して、NANDフラッシュメモリ(317)にアドレス翻訳テーブルを読み込み、それをSDRAM(318)にコピーすることなど、FMMスキームの初期化を行うよう命令する。状態(1014)でFMM(311)が初期化を完了させたときは、状態(1015)で、BOOT_CTLR(313)は、PPBSインターフェースを介して1次プロセッサ(314)へと向かうリセット信号をディアサートすることによって当該1次プロセッサをリセットから解放する。次いで状態(1016)で、BOOT_CTLR(313)はアイドルとなるが、1次プロセッサ(314)はアクティブとなり、BOOT_RAM(307)のシステムブートコードの実行を開始する。状態(1017)で、メモリシステム(301)は、「標準動作モード」に入る。
「標準動作モード」とは、FMM(311)が初期化され、論理的なNANDフラッシュアドレスから物理的なNANDフラッシュアドレスへの翻訳が実施でき、1次プロセッサ(314)がシステムブートコードを実行するためにリセットから解放された状態を指す。さらに、1次プロセッサ(314)は、PPBS(303)およびCMD_CTLR(305)を介して、BOOT_RAM(307)およびSDRAM(318)の内外にデータバーストを転送するコマンドを発行し、メモリシステム(301)の動作を構成/監視するためにREGSブロック(306)のレジスタの読み書きを行い、NANDフラッシュメモリ(317)とSDRAM(318)の間のDMA転送をアクティブ化し、CMD_CTLR(305)または2次プロセッサの内の1つまたは複数によって生成された割り込み信号を受け取ることができる。さらに、標準動作モードでは、1次プロセッサ(314)によって2次プロセッサを個別に解放してSDRAM(318)にアクセスし、必要に応じて1次プロセッサ(314)に割り込み信号を送ることもできる。
標準動作モードに入ると、DMA転送は、一般的に使用される機能となる。次に、制御回路によって実施されるDownload DMA tranferおよびupload dMA Transferについてより詳細に説明する。
図11は、NANDフラッシュからSDRAM(318)への転送が実施される例示的な「Download DMA Tranfer」プロセスを示している。状態(1101)では、1次プロセッサ(314)は、NANDフラッシュの開始LPA、SDRAM(318)の開始アドレス、DMA_CONFIGレジスタに転送すべきデータ量などのDMA関連情報をプログラムする。状態(1102)で1次プロセッサ(314)は、「Download DMA Tranferコマンド」を発行し、当該コマンドによってCMD_CTLR(305)が、状態(1103)でDMA_CTLR(312)をアクティブ化してDMA転送を実施する。状態(1104)で、DMA_CTLR(312)は、DMA関連情報をDMA_CONFIGレジスタから取得する。状態(1104)で、DMA_CTLR(312)は、DMA_CONFIGレジスタの情報に基づいて最初のNANDフラッシュLPAと、それに対応するSDRAMアドレスとを生成し、次いで状態(1105)で、FMM(311)をアクティブ化して当該LPAのNANDフラッシュページを読み出す。FMM(311)は、状態(1106)で論理アドレスから物理アドレスへの翻訳を実施してLPAをPPAに変換し、次いで状態(1107)で当該PPAのNANDフラッシュページを読み出すようにFLASH_CTLR(310)を設定しアクティブ化する。
状態(1108)で、FLASH_CTLR(310)がページ読出し処理を完了させたと判定された場合は、ページデータは、潜在的な誤りが既にECC回路によって訂正された状態でPAGE_BUFFに記憶される。ここで、DMA_CTLR(312)は、ページデータをPAGE_BUFFからSDRAM(318)に移動させる必要がある。DMA_CTLR(312)はまず、ページデータを、SDRAMのバーストと整列するデータバーストに分解し、状態(1109)で、所定のバースト毎のSDRAMアクセス要求をMAD(308)に送る。状態(1110)で、アクセス権が付与されたと判定された場合は、状態(1111)で、DMA_CTLR(312)は、SDRAM_CTLR(309)を介してページバッファからSDRAM(318)にデータバーストを転送する。状態(1112)で、転送する必要のあるバーストがそれ以上ページデータ内に存在するかどうか判定される。バーストが存在する場合は、状態(1113)で、DMA_CTLR(312)は、SDRAM(318)へのアクセスを繰り返し、当該SDRAMアクセスは引き続き、全てのページデータがSDRAM(318)に転送されるまで繰り返される。次いで、DMA_CTLR(312)は、全体のDMA転送が完了するまでページ転送プロセスを繰り返す(1114、1115)。状態(1116)で、CMD_CTLR(304)は、1次プロセッサ(314)に割り込んでDMA転送の完了を指示する。
図12は、SDRAMからNANDフラッシュへの転送プロセスが実施される例示的な「Upload DMA Transfer」プロセスを示している。図3および12を参照すると、状態(1201)で、1次プロセッサ(314)は、NANDフラッシュの開始LPA、SDRAM(318)の開始アドレス、DMA_CONFIGレジスタに転送すべきデータ量などのDMA関連情報をプログラムする。状態(1202)で、1次プロセッサ(314)は、「Upload DMA Transferコマンド」を発行する。これにより、状態(1203)で、CMD_CTLR(305)は、DMA_CTLR(312)をアクティブ化してDMA転送を実施する。DMA_CTLR(312)は、DMA関連情報をDMA_CONFIGレジスタから取得する。状態(1204)で、DMA_CTLR(312)は、DMA_CONFIGレジスタからのDMA関連情報に基づいて、最初のNANDフラッシュLPAと、それに対応するSDRAMアドレスとを生成する。
DMA_CTLR(312)は、SDRAM(318)からPAGE_BUFFにページデータを移動させることから始める。状態(1206)で、DMA_CTLRの要求に応答してMAD(308)がアクセス権を付与したかどうか判定され、DMA_CTLR(312)はまず、SDRAM(318)のページデータをバーストに分解し、バースト毎のSDRAM(318)アクセス要求をMAD(308)に送る(状態1205)。状態(1207)でアクセス権が付与された場合は、DMA_CTLR(312)は、SDRAM(318)からPAGE_BUFFにデータバーストを転送する。状態(1208、1209)を参照すると、DMA_CTLR(312)は、全てのページデータがPAGE_BUFFに転送されるまでSDRAM(318)へのアクセスを繰り返す。
状態(1210)で、DMA_CTLR(312)は、FMM(311)をアクティブ化してページデータをLPAのNANDフラッシュページに書き込む。FMM(311)はまず、状態(1211)で論理アドレスから物理アドレスへの翻訳を実施してLPAをPPAに変換し、次いで状態(1212)で当該PPAのNANDフラッシュページへの書込みを行うようにFLASH_CTLR(310)を設定しアクティブ化する。状態(1213)で、FLASH_CTLR(310)がアイドルかどうか判定され、それによってFLASH_CTLR(310)がページ書込み処理を完了させたかどうか判定され、ページデータおよびECC回路によって計算されたECCパリティ符号が当該PPAのNANDフラッシュページに書き込まれたかどうか判定される。状態(1214)の時点で、DMA_CTLR(312)は、転送すべきページがそれ以上存在するかどうかを判定することにより、全体のDMA転送が完了するまで上記と同じページ転送を繰り返し、状態(1216)で、CMD_CTLR(305)は、1次プロセッサ(314)に割り込んでDMA転送の完了を指示する。
例示的な一実施形態では、NANDフラッシュメモリ(317)に記憶されている全てのプログラムコードに対してBOOT_RAM(307)のサイズが小さいので、BOOT_CTLR(313)は、1次プロセッサ(314)のBOOT_RAM(307)には電源投入のほぼ直後に実行すべきプログラムコードを少ししかロードすることができない。1次プロセッサ(314)はしばしば、モデム携帯電話の複雑な機能を実施するために、より大きいサイズのより多くのプログラムコードを必要とする。1次プロセッサ(314)は、標準動作モードに入ったときは、DMA転送を実施して全てのプログラムコード、またはオペレーティングシステム、ファイルシステム、デバイスドライバなど少なくとも基本的なシステムプログラムコードをSDRAM(318)にコピーするように制御回路を設定することが好ましい。その後、1次プロセッサ(314)は、引き続きBOOT_RAM(307)からの実行を行うことも、必要に応じてSDRAM(318)からの実行に分岐することもできる。この時点から、携帯電話(または他のホストデバイス)は「ユーザモード」に入る。
「ユーザモード」とは、標準動作モードとは別のものであり、ホストデバイスが携帯電話である例示的な一実施形態では、ユーザが携帯電話のユーザインターフェイスを用いて携帯電話の機能を起動(launch)し始めることが可能になるほど十分な量のソフトウェアプログラムコードがNANDフラッシュメモリ(317)からSDRAM(318)に転送された状態を指す。
図13は、1次プロセッサ(314)が標準動作モードからユーザモードに入るために実施する例示的な工程を示している。状態(1301)で、システムは、標準動作モードにある。状態(1302)で、1次プロセッサ(314)は、ユーザモードに必要なプログラムを特定する。状態(1303〜1308)を参照すると、1次プロセッサはプログラム毎にDMA転送をアクティブ化して、ユーザモードで必要とされる全てのプログラムコードがNANDフラッシュからSDRAM(318)にダウンロードされるまでNANDフラッシュからSDRAMにプログラムコードをコピーする。次いで状態(1309)で、1次プロセッサ(314)は、ユーザモードプログラムの実行に分岐し、状態(1310)で、ユーザモードに入る(1310)。
ユーザモードに入る前に一部のプログラムコード(例えばアプリケーションソフトウェアプログラム)がNANDフラッシュメモリ(317)からSDRAM(318)にコピーされなかった場合、それらのアプリケーションソフトウェアプログラムは、ユーザがそれらのプログラムの実行を要するあるアプリケーションを起動したときに、必要に応じてNANDフラッシュメモリ(317)からSDRAM(318)にコピーされる。
図14は、ユーザモードの間にユーザによって起動されたアプリケーションを1次プロセッサ(314)が実行する例示的な工程を示している。状態(1401)で、1次プロセッサ(314)は、アプリケーションを起動するユーザコマンドを受け取る。状態(1402)で、1次プロセッサ(314)は、ユーザによって起動されたアプリケーションに必要であるがNANDフラッシュメモリ(317)からSDRAM(318)にコピーされていないプログラムを特定する。状態(1403〜1408)を参照すると、1次プロセッサは各プログラム毎にDMA転送をアクティブ化して、NANDフラッシュメモリ(317)からSDRAM(318)にプログラムコードをコピーする。アプリケーションに必要なプログラムがSDRAM(318)に記憶されると、次いで状態(1409)で、1次プロセッサ(314)は、アプリケーションの実行に分岐する。
さらに、1次プロセッサ(314)は任意的に、NANDフラッシュメモリ(317)からSDRAM(318)に2次プロセッサの内の1つまたは複数によって実行されるプログラムコードをコピーし、2次プロセッサのリセットを少なくとも部分的に制御し、2次プロセッサの発生させる割り込みに応答する役割を果たす。
図15は、1次プロセッサ(314)が2次プロセッサを制御する例示的な工程を示している。状態(1501)で、1次プロセッサ(314)は、2次プロセッサ(例えばグラフィックスまたはマルチメディアプロセッサ)によって実施されるべきアプリケーションをアクティブ化するユーザコマンドを受け取る。状態(1502)で2次プロセッサをアクティブ化するために、1次プロセッサ(314)はまず、2次プロセッサによって実施されるべき特定のタスクに必要なプログラムを特定する。状態(1503〜1508)を参照すると、1次プロセッサ(314)は各プログラム毎にDownload DMA Tranferをアクティブ化し、それによって対応するプログラムコードをNANDフラッシュメモリ(317)からSDRAM(318)にコピーする。2次プロセッサに必要なプログラムがSDRAM(318)に記憶されると、状態(1509)で、1次プロセッサ(314)は、SDRAM(318)内の領域が2次プロセッサからのアクセスに適した形で設定されるように、SDRAM_PARTITIONレジスタをプログラムする。この領域は、NANDフラッシュメモリ(317)からダウンロードされ2次プロセッサによって実行されるプログラムを格納することになる。状態(1510)で、1次プロセッサ(314)は、RESETレジスタに適切な値を書き込んで2次プロセッサのリセット信号をディアサートする。状態(1511)で、2次プロセッサはアクティブになり、該当するSDRAM(318)パーティションからプログラムコードを実行する。
2次プロセッサは、様々な理由で(例えばタスクが完了したことを1次プロセッサに知らせるために)1次プロセッサ(314)に割り込む必要が生じる可能性がある。例示的なこの工程では、2次プロセッサは処理が完了したときにだけ1次プロセッサに割り込むものと仮定されるが、2次プロセッサは任意的に、他の理由で割り込みを発生させることもできる。1次プロセッサ(314)は、状態(1512)で割り込みを受け取ると、次いで状態(1513)で、INT_RECORDレジスタを読み出し、2次プロセッサが割り込みを発行したことを判定する。状態(1514)で、1次プロセッサ(314)は、対応するルーチンを実施して割り込みに応答する。この例では、状態(1514)で、1次プロセッサ(314)は、RESETレジスタへの書込みを行って2次プロセッサをリセットモードに戻す。
標準動作モードでは、1次プロセッサ(314)はさらに、1次プロセッサの必要に応じてまたは2次プロセッサのためにNANDフラッシュメモリ(317)からSDRAM(318)にユーザデータをコピーし、逆もまた同様にコピーする役割を果たす。
他の例示的な実施形態について:
次に、いくつかの例示的な追加の実施形態について説明する。以下の説明では、上述の第1の実施形態とは異なる追加の実施形態の諸要素に焦点を当てる。
次に、いくつかの例示的な追加の実施形態について説明する。以下の説明では、上述の第1の実施形態とは異なる追加の実施形態の諸要素に焦点を当てる。
第2の例示的な一実施形態では、制御回路は限定されるものではないがBOOT_RAMを有さない。BOOT_CTLRは、MAD回路を介してSDRAMにアクセスできるようにMAD回路に接続される。BOOT_CTLRによって実施されるブートアップ工程は、第1の実施形態に関して上述した工程とは異なる。BOOT_CTLRは電源投入の後、NANDフラッシュメモリからBOOT_RAMにシステムブートコードをコピーする代わりに、任意的に、SDRAM_CTLRを使用してSDRAMを初期化し、次いでシステムブートコードをSDRAMにロードした後に、1次プロセッサを解放してSDRAMからコードを実行する。
図16は、メモリシステム(1601)の第2の実施形態を示している。次に、上述の機能ブロックと異なる本実施形態の制御回路の機能ブロックについて説明する。
例示的な本実施形態は、1次プロセッサ(1614)と、1つまたは複数の2次プロセッサ(1604)と、PI(1602)(PPBS(1603)および1つまたは複数のSPBS(1604)を含む)と、CMD_CTLR(1605)と、REGSブロック(1606)と、MAD(1608)と、FMM(1611)と、DMA_CTLR(1612)と、SDRAM_CTLR(1609)と、FLASH_CTLR(1610)と、BOOT_CTLR(1613)と、NANDフラッシュメモリ(1617)と、SDRAM(1618)とを含む。
先に論じたように、本実施形態にはBOOT_RAMが存在しない。
本実施形態の例示的なBOOT_CTLR(1613)は、それ自体がシステムブートコードをBOOT_RAMに移動させる代わりにSDRAM(1618)に移動させる点で、第1の実施形態のBOOT_CTLRとは異なる。以下では、BOOT_CTLR(1613)によって実施されるブートアップ工程について説明する。
BOOT_CTLR(1613)は、電源投入のリセット信号(1616)がディアサートされると自動的にアクティブになる。BOOT_CTLR(1613)はアクティブになった後、システムブートコードおよびFMMプログラムコードを格納しているNANDフラッシュメモリ(1617)のブートセクションからデータをフェッチするようにFLASH_CTLR(1610)を設定する。潜在的な誤りがFLASH_CTLRのECC回路によって訂正された状態でブートセクションの各ページがFLASH_CTLR_PAGE_BUFFにフェッチされるときに、BOOT_CTLR(1613)は、当該ページがFMMプログラムコードの一部である場合にはページデータをPAGE_BUFFからFMM_RAMに移動させ、当該ページがシステムブートコードの一部である場合にはページデータをPAGE_BUFFからSDRAM(1618)に移動させる。同時に、BOOT_CTLR(1613)は任意的に、FLASH_CTLR(1610)をアクティブ化して次のNANDフラッシュメモリページをPAGE_BUFFにフェッチする。このプロセスは、FMMプログラムコードがFMM_RAMにロードされ、システムブートコードがSDRAM(1618)にロードされるまで繰り返される。
ページバッファからSDRAM(1618)にページデータを移動させるために、BOOT_CTLR(1613)からMAD(1608)に至る接続(1619)であって、SDRAMマスタとなるBOOT_CTLR(1613)がそれを介してSDRAM(1618)にアクセスする接続(1619)が設けられる。PAGE_BUFFからSDRAM(1618)にページデータを転送するために、BOOT_CTLR(1613)は、PAGE_BUFF内のページデータをSDRAMのバーストと整列する複数のデータバーストに分解し、全体のページデータがSDRAM(1618)にコピーされるまで、MAD(1608)のアクセス権付与プロトコルに従って、各バーストをMAD(1608)を介してSDRAM(1618)に転送する。
NANDフラッシュメモリのブートセクションがFMM_RAMおよびSDRAM(1618)にロードされた後、BOOT_CTLR(1613)は、FMM(1611)を解放してフラッシュメディア管理を初期化し、その後PPBS(1603)を介して1次プロセッサ(1614)に向かうリセット信号をディアサートする。次いで、1次プロセッサ(1614)は、SDRAM(1618)に記憶されているシステムブートコードの実行を開始する。この時点で、BOOT_CTLR(1613)は、それ自体の機能を完了させ、BOOT_CTLR(1613)が上記のプロセスを繰り返すようになる電源投入のリセット信号が再びアサートされディアサートされるまでアイドルのままとなる。
次に、図16に示されるコマンドコントローラ(CMD_CTLR 1605)の例示的な実施形態について説明する。本実施形態にはBOOT_RAMが存在しないので、CMD_CTLR(1605)はいうまでもなく、BOOT_RAMへのアクセスを実施しない。1次プロセッサ(1614)からアクセス可能なRAMメモリ空間は、SDRAM(1618)によって体現される。CMD_CTLR(1605)は、PPBS(1603)を介して1次プロセッサ(1614)から「RAM Read」または「RAM Write」コマンドを受け取ったときは、1次プロセッサ(1614)がSDRAM(1618)との間のバースト転送を実施するのを可能にするために、MAD(1608)にアクセス要求を送り、MAD(1608)からアクセス権が付与されるのを待つ。
次に、図16に示されるメモリアクセスディストリビュータ(MAD 1608)の例示的な実施形態について説明する。
BOOT_CTLR(1613)がFLASH_CTLR(1610)内のFLASH_CTLR_PAGE_BUFFからSDRAM(1618)にデータを移動させるのを可能にするために、MAD(1608)は、BOOT_CTLR(1613)からのアクセス要求を受け入れ、それ自体のアクセス要求について他のSDRAMマスタとのアービトレーションを行うように構成される。したがって、MAD(1608)は、BOOT_CTLR(1613)を別のSDRAMマスタとして扱う。
次に図17を参照して、図16に示される第2の実施形態の動作について説明する。図17は、BOOT_CTLR(1613)によって実施されるブートアップ工程を示している。状態(1701)で電源投入のリセット信号がアサートされると、メモリシステム(1601)および外部電子機器がリセットモードに入る。電源投入のリセット信号がディアサートされると、BOOT_CTLR(1613)は、状態(1702)で自動的にアクティブになり、ブートセクションの最初のPPAの生成を開始し、状態(1703、1704)で当該PPAのNANDフラッシュページを読み出すようにFLASH_CTLR(1610)を設定しアクティブ化する。状態(1705)でFLASH_CTLR(1610)がページ読出し処理を完了させたと判定された場合は、読み出されたNANDフラッシュページは、潜在的な誤りがあればそれらがFLASH_CTLRのECC回路によって訂正された状態でPAGE_BUFFに記憶される。状態(1706)で、当該ページがシステムブートコードの一部であるのかそれともFMMプログラムコードの一部であるのかが判定される。状態(1707)で、BOOT_CTLR(1613)は、当該ページがFMMプログラムコードの一部である場合には、ページデータをPAGE_BUFFからFMM_RAMにコピーする。当該ページがシステムブートコードの一部である場合には、状態(1708)に進み、当該ページは、本明細書に記載されるようにSDRAM(318)にコピーされる。
状態(1708)を参照すると、ページデータがシステムブートコードの一部である場合は、BOOT_CTLR(1613)は、ページデータをSDRAMのバーストと整列するデータバーストに分解し、バースト毎のSDRAMアクセス要求をMAD(1608)に送る。状態(1709)で、MAD(1608)によってアクセス権が付与されたかどうか判定される。アクセス権が付与されたときは、状態(1710)で、BOOT_CTLR(1613)は、SDRAM_CTLR(1609)を介してPAGE_BUFFからSDRAM(318)にデータバーストを転送する。状態(1711)で、ページバーストがそれ以上存在するかどうか判定される。ページバーストが存在する場合は、状態(1712)に進み、BOOT_CTLR(1613)は次のバースト用のSDRAMアドレスを生成する。BOOT_CTLR(1613)は、PAGE_BUFF内の全てのページデータがSDRAM(318)に転送されるまでSDRAM(318)に対するバースト転送を繰り返す。
状態(1713)で、ブートセクション内にそれ以上ページが存在するかどうかが判定される。それ以上ページが存在する場合、状態(1714)に進み、BOOT_CTLR(1613)は次のPPAを生成する。BOOT_CTLR(1613)は、ブートセクション内の全てのプログラムコードがNANDフラッシュに読み込まれ、FMM_RAMまたはSDRAM(318)にコピーされるまでNANDフラッシュページの読出しを繰り返す。次いで状態(1715)で、BOOT_CTLR(1613)は、FMM(1611)を解放する。FMM(1611)が解放されると、次いで状態(1716)で、FMM(1611)は、FMM_RAMに記憶されているFMMプログラムコードの実行を開始する。FMMプログラムコードはFMMに対して、NANDフラッシュメモリ(1617)にアドレス翻訳テーブルを読み込み、それをSDRAM(318)にコピーすることなど、FMMスキームを初期化するタスクを実施するよう命令する。
FMM(1611)が初期化を完了させたときは(1717)、状態(1718)で、BOOT_CTLR(1613)は、PPBSインターフェース(1603)を介して1次プロセッサ(1614)へと向かうリセット信号をディアサートすることによって1次プロセッサ(1614)をリセットから解放する。状態(1719)で、BOOT_CTLR(1613)はアイドルとなるが、1次プロセッサ(1614)はアクティブとなり、SDRAM(318)の内外にデータバーストを転送することによってSDRAM(318)内のシステムブートコードの実行を開始する。状態(1720)で、メモリシステム(1601)は「標準動作モード」に入る(1720)。
図18は、メモリシステム(1801)の第3の実施形態を示している。本実施形態では、図3に示される第1の実施形態と比較すると、制御回路内にBOOT_RAMが存在しない。したがって、ブートアッププロセスは、第1の実施形態に関して上述したブートプロセスとは異なる。
第3の例示的な実施形態は、1次プロセッサ(1814)と、1つまたは複数の2次プロセッサ(1815)と、PI(1802)(PPBS(1803)および1つまたは複数のSPBS(1804)を含む)と、CMD_CTLR(1805)と、REGSブロック(1806)と、MAD(1808)と、FMM(1811)と、DMA_CTLR(1812)と、SDRAM_CTLR(1809)と、FLASH_CTLR(1810)と、BOOT_CTLR(1813)と、NANDフラッシュメモリ(1817)と、SDRAM(1818)とを含む。
NANDフラッシュメモリ(1817)からSDRAM(318)にブートコードが転送されるシステムブートコードの転送プロセスは、FMMの初期化プロセスの一環として、FMMプログラムコードの初期化ルーチンを介して実施される。したがって、FMM(1811)は、NANDフラッシュメモリ(1817)からSDRAM(1818)にFMMアルゴリズムに関するFMMのブックキーピングレコードをロードすることに加えて、FMMの初期化ルーチンを走らせている間にNANDフラッシュメモリ(1817)からSDRAM(1818)にシステムブートコードもロードするようにプログラムされている。BOOT_RAMは必要とされず、また、BOOT_CTLR(1813)は、NANDフラッシュメモリ(1817)からシステムブートコードをロードする役割を負わない。BOOT_CTLR(1813)は、NANDフラッシュメモリ(1817)からFMM_RAMへのFMMプログラムコードのロードを行い、FMM(1811)をアイドルから解放し、1次プロセッサ(1814)をリセットから解放する。1次プロセッサ(1814)は、BOOT_CTLR(1813)によってリセットから解放されたときに、BOOT_RAMの代わりにSDRAM(318)からシステムブートコードを実行する。
以下では、図3に示される第1の実施形態とは異なる図18に示される制御回路の機能ブロックについて説明する。
先に論じたように、本実施形態にはBOOT_RAMが存在しない。本実施形態のBOOT_CTLR(1813)は、NANDフラッシュメモリ(1817)からBOOT_RAMへのシステムブートコードのロードを実施しない点で、第1の実施形態のBOOT_CTLRとは異なる。
BOOT_CTLR(1813)は、電源投入のリセット信号がディアサートされると自動的にアクティブになる。BOOT_CTLR(1813)はアクティブになった後、NANDフラッシュメモリ(1817)のブートセクションからFMMプログラムコードをフェッチするようにFLASH_CTLR(1810)を設定する。潜在的な誤りがECC回路によって訂正された状態でFMMプログラムコードの各ページがPAGE_BUFFにフェッチされるときに、BOOT_CTLR(1813)は、ページデータをFLASH_CTLR_PAGE_BUFFからFMM_RAMに移動させる。その間に、BOOT_CTLR(1813)は任意的に、FLASH_CTLR(1810)をアクティブ化して次のNANDフラッシュメモリページをPAGE_BUFFにフェッチする。このプロセスは、FMMプログラムコードがFMM_RAMにロードされるまで繰り返される。
FMMプログラムコードがFMM_RAMにロードされた後、BOOT_CTLR(1813)は、FMM(1811)を解放してFMMの初期化を実施する。FMMの初期化は、FMMプログラムコードの初期化ルーチンの形で実施されたときは、NANDフラッシュメモリ(1817)からSDRAM(1818)にFMMのブックキーピングレコードだけでなくシステムブートコードもロードする。FMM(1811)が初期化を完了させた後に、BOOT_CTLR(1813)は、PPBS(1803)を介して1次プロセッサ(1814)に向かうリセット信号をディアサートする。次いで、1次プロセッサ(1814)は、SDRAM(1818)に記憶されているシステムブートコードの実行を開始する。この時点で、BOOT_CTLR(1813)は、それ自体の機能を完了させ、BOOT_CTLR(1813)が上記のプロセスを繰り返すようになる電源投入のリセット信号が再びアサートされディアサートされるまでアイドルのままとなる。
CMD_CTLR(1805)は、CMD_CTLR(1605)に関して上述したのと同様の形で動作する。
次に図19を参照して、図18に示される第3の実施形態の処理について説明する。図19は、図18に示されるBOOT_CTLR(1813)によって実施される例示的なブートアップ工程を示している。状態(1901)で、電源投入のリセット信号がアサートされると、メモリシステム(1801)および外部電子機器がリセットモードに入る。状態(1902)で電源投入のリセット信号がディアサートされると、BOOT_CTLR(1813)は、自動的にアクティブになり、FMMプログラムコードを格納するブートセクションの最初のPPAの生成を開始する。状態(1903、1904)で、BOOT_CTLR(1813)は、当該PPAのNANDフラッシュメモリ(1817)ページを読み出すようにFLASH_CTLR(1810)を設定しアクティブ化する。
状態(1905)で、FLASH_CTLR(1810)がアイドルであるかどうか検知することによってFLASH_CTLR(1810)がページ読出し処理を完了させたかどうかが判定され、読み出されたNANDフラッシュメモリ(1817)ページは、潜在的な誤りがECC回路によって訂正された状態でPAGE_BUFFに記憶される。状態(1906)で、BOOT_CTLR(1813)は、ページデータをFLASH_CTLRPAGE_BUFFからFMM_RAMにコピーする。BOOT_CTLR(1813)は、ブートセクション内にそれ以上ページが存在するかどうかに関して行われた状態(1907)の判定に基づいて、状態(1908)で、FMMプログラムコードがNANDフラッシュメモリ(1817)からFMM_RAMに読み込まれコピーされるまで、次のPPAを生成することによってNANDフラッシュメモリ(1817)ページの読出しを繰り返す。
状態(1909)で、BOOT_CTLR(1813)は、FMM(1811)をアイドルから解放する。FMMがもはやアイドルではなくなり解放された状態になると、FMM(1811)は、FMM_RAMに記憶されているFMMプログラムコードの実行を開始する。FMMプログラムコードはFMM(1811)に対して、NANDフラッシュメモリ(1817)からSDRAM(1818)にシステムブートコードをコピーすることを含めて、FMM(1811)を初期化するタスクを実施するよう命令する。FMM(1811)が初期化を完了させたときは、状態(1910)で、BOOT_CTLRは、PPBSインターフェース(1911)を介して1次プロセッサ(1814)へと向かうリセット信号をディアサートすることによって1次プロセッサ(1814)をリセットから解放する。次いで状態(1912)で、BOOT_CTLR(1813)はアイドルとなるが、1次プロセッサ(1814)はアクティブとなり、SDRAM(1818)の内外にデータバーストを転送することによってSDRAM(1818)内のシステムブートコードの実行を開始する。状態(1913)で、メモリシステム(1801)は「標準動作モード」に入る(1913)。
FMMがNANDフラッシュメモリ(1817)からシステムブートコードを読み出す前にFMMアルゴリズムが機能するようにFMMの初期化ルーチンが設定されている場合は、FMM(1811)がシステムブートコードを読み出すときには既にNANDフラッシュメモリの論理アドレスから物理アドレスへの翻訳が機能しているので、NANDフラッシュメモリ(1817)のブートセクションにシステムブートコードを所在させる必要はない。言い換えれば、FMMアルゴリズムが機能すれば、FMM(1811)は、FMMプログラムコード内のシステムブートコードの位置が論理的なNANDフラッシュメモリアドレスを用いて定義されている場合にも、NANDフラッシュメモリ(1817)のFMM制御セクションにアクセスし、FMM制御セクションに記憶されているシステムブートコードを位置決めすることができる。同様に、システムブートコードだけでなくFMMプログラムコードも、任意的に、他のプログラムコードまたはデータをNANDフラッシュメモリ(1817)からSDRAM(1818)にロードするように設定される。任意的に、全体のNANDフラッシュメモリのデータイメージをSDRAM(1818)にコピーすることができ、また、SDRAM(1818)が保持できる量のデータイメージをコピーすることもできる。
携帯電話など一部のデバイスでは、外部電子機器は、1次プロセッサ(1814)用のシステムブートコードを記憶するのに使用されるフラッシュメモリや読取り専用メモリ(ROM)などの不揮発性メモリを含むことができる。この場合には、システムブートコードは、メモリシステム(1801)内のNANDフラッシュメモリ(1817)に記憶されず、1次プロセッサ(1814)がリセットから解放されたときに、外部電子機器の他の仕組みによって1次プロセッサ(1814)が使用可能な状態にされる。したがって、BOOT_RAMは必要とされず、BOOT_CTLR(1813)は、NANDフラッシュメモリ(1817)からシステムブートコードをロードする役割を負わないが、それでもなお、NANDフラッシュメモリ(1817)からFMM_RAMにFMMプログラムコードをロードし、FMMおよび1次プロセッサ(1814)をリセットから解放することができる。
1次プロセッサ(1814)は、BOOT_CTLR(1813)によってリセットから解放されたときに、メモリシステム(1801)からではなく外部電子機器から命令をフェッチすることによってシステムブートコードを実行する。さらに、携帯電話などある種の電子デバイスでは、外部電子機器は、1次プロセッサ(1814)のリセットを直接制御することもできる。この場合には、BOOT_CTLR(1813)が1次プロセッサ(1814)に向かうリセット信号をディアサートするときに、1次プロセッサ(1814)が外部電子機器によって既にリセットから解放されていることもあれば、まだ解放されていないこともある。したがって、BOOT_CTLR(1813)が1次プロセッサ(1814)に送るリセット信号は代替的に、メモリシステムが初期化され1次プロセッサ(1814)からのコマンドをサービスする準備が整っているか否かを指示する信号として、1次プロセッサ(1814)によって使用されてもよい。
1次プロセッサ(1814)がBOOT_CTLR(1813)によってリセットから解放される前にシステムブートコードをSDRAM(1818)にロードすることだけでなく、FMM(1811)が各種タスクを実施する能力は、多くの応用例に利用することができる。例えば、1次プロセッサ(1814)は任意的に、1次プロセッサ(1814)がリセットから解放されたときにソフトウェア全体またはそのサブセットをランダムアクセス形式で読み出すことが可能となるよう求めることもできる。一例として、1次プロセッサ(1814)がROMベースのマイクロプロセッサを用いて実装される場合には、リセットから解放された直後に、実際にソフトウェアを実行する前にソフトウェア全体またはそのサブセットのセキュリティチェックを実施して、そのソフトウェアがNANDフラッシュメモリ(1817)に記憶されているデータを破損させる恐れがある悪意のあるプログラムコードを含んでいないことを保証する要求がある場合がある。かかる要求を達成するために、FMMの初期化ルーチンは任意的に、BOOT_CTLR(1813)が1次プロセッサ(1814)をリセットから解放する前に、携帯電話システムのソフトウェア全体またはその内の選択されたサブセット部分がNANDフラッシュメモリ(1817)からSDRAM(1818)にロードされるように設定される。
任意的に、1次プロセッサ(1814)がソフトウェアに関するそのようなセキュリティチェックを実施しない場合には、セキュリティチェックをFMMプログラムコード内で実施し、それによりNANDフラッシュメモリ(1817)からSDRAM(1818)にソフトウェアがロードされた後に、FMM(1811)がSDRAM(1818)内のソフトウェアのセキュリティチェックを実施することができるようになる。FMMプログラムコードは任意的に、暗号化/復号化アルゴリズムを実行するように設定される。この場合、FMMプログラムコードを除く外部プロセッサによって実行されるべきソフトウェアプログラムコードは、暗号形式でNANDフラッシュメモリ(1817)に記憶することができ、FMM(1811)は、それらのソフトウェアプログラムコードがSDRAM(1818)にロードされた後に、それらのプログラムコードを外部プロセッサが実行可能な形式に復号化する。様々な従来型、非従来型、および未実施のセキュリティチェックアルゴリズムならびに暗号化/復号化アルゴリズムを使用することができ、また、メモリシステムは特定のアルゴリズムに限定されるものではない。
上記の例示的なメモリシステムアーキテクチャを用いることにより、FMMプログラムコードに多種多様なアルゴリズムを実装することができ、その結果、FMMは、NANDフラッシュメモリ(1817)内のデータを管理し、NANDフラッシュメモリ(1817)とSDRAM(1818)との間でデータを転送し、それらに記憶されているデータに対する様々な処理を多様な手法で実施することができるようになる。本明細書に記載されるFMMの処理は単なる例として提示されるに過ぎず、FMM(1811)の使用を特定の例に限定するものではない。
図20は、メモリシステム(2001)の第4の実施形態を示している。本実施形態では、制御回路は、FLASH_CTLRおよびSDRAM_CTLRの複数のコピーを含む。図20に示される例では、FLASH_CTLR(以下、FLASH_CTLR_1(2011)およびFLASH_CTLR_2(2012)と呼ぶ)の2つのコピーと、SDRAM_CTLR(以下、SDRAM_CTLR_1(2009)およびSDRAM_CTLR_2(2010)と呼ぶ)の2つのコピーとが、制御回路内に設けられるが、FLASH_CTLRおよびSDRAM_CTLRの数は2つに制限されない。第4の例示的な実施形態はさらに、1次プロセッサ(2016)と、1つまたは複数の2次プロセッサ(2017)と、PI(2002)(PPBS(2003)および1つまたは複数のSPBS(2004)を含む)と、CMD_CTLR(2005)と、REGSブロック(2006)と、MAD(2008)と、FMM(2013)と、DMA_CTLR(2014)と、BOOT_CTLR(2015)と、NANDフラッシュメモリ(2019、2020)と、SDRAM(2021、2022)とを含む。
上述のように、FLASH_CTLRおよび/またはSDRAM_CTLRは、それぞれ複数のNANDフラッシュデバイスおよび複数のSDRAMデバイスを操作するための複数のチップ選択信号を有することができる。しかしながら、例示的な一構成では、複数のメモリデバイスを各コントローラの制御下におくことができるが、各コントローラ(FLASH_CTLRまたはSDRAM_CTLR)は任意的に、所定の時間に単一のメモリデバイスの内外に動的にデータを転送するように制限される。各アクセスのメモリアドレスは、構築されたメモリマップに基づいてどのメモリデバイスをアクティブ化すべきか、あるいはコントローラがどのメモリデバイスにアクセスすべきかを判定し、それによって各メモリデバイスについてメモリマップのアドレス範囲が指定される。言い換えれば、複数のチップ選択信号を提供するコントローラは、単一のメモリデバイスによって提供される最大限のメモリ空間を超えて合計のメモリ空間を拡大することができるが、単一のメモリデバイスの最大データ転送速度を超えるデータ転送速度に拡大することはできない可能性がある。
FLASH_CTLRの2つのコピーおよびSDRAM_CTLRの2つのコピーを有することにより、NANDフラッシュメモリとSDRAMとの両方のメモリ空間が2倍になるだけでなく、NANDフラッシュとSDRAMの両方のデータ転送速度も2倍になる。所定のFLASH_CTLRに関して、制御回路は、対応するFLASH_CTLRによって操作されるNANDフラッシュデバイスに接続されることになる1セットの入出力ポートを提供する。同様に、所定のSDRAM_CTLRに関しても、制御回路は、対応するSDRAM_CTLRによって操作されるSDRAMデバイスに接続されることになる1セットの入出力ポートを提供する。したがって、本実施形態でNANDフラッシュデバイスおよびSDRAMデバイスに接続可能な入出力ポートの合計数は、第1の実施形態の合計数の2倍となる。
本実施形態は、2つのFLASH_CTLRまたは2つのSDRAM_CTLRの動作の調整を特定の技法に限定するものではない。本実施形態を例示するために、以下に記載の例では、2つのFLASH_CTLR(2011、2012)が同じ処理を実施し、2つのSDRAM_CTLR(2009、2010)が同じ処理を実施するものと仮定する。
NANDフラッシュに対するデータアクセスを実施するときに、FLASH_CTLR(2011、2012)はどちらも、ほぼ同時に同じ処理を実施する。言い換えれば、制御回路は、NANDフラッシュの記憶空間から2つのページを読み出しまたはそこに2つのページを書き込むことになり、各ページは、FLASH_CTLR(2011、2012)の内の1つによって転送されることになる。このハードウェアアーキテクチャを達成するために、NANDフラッシュの記憶空間の論理ページの構成を2つのFLASH_CTLR(2011、2012)間で「インターリーブ」させることができる。例えば、NANDフラッシュの記憶空間全体のデータが、LPA0、1、2、3...などのページで論理的に構成されている場合は、LPA0、2...など偶数のLPAは、FLASH_CTLR_1に取り付けられたNANDフラッシュデバイス(2019)に記憶され、LPA1、3...など奇数のLPAは、FLASH_CTLR_2に取り付けられたNANDフラッシュデバイス(2020)に記憶される。したがって、制御回路は常に、LPA0と1を一体としてアクセスし、LPA2と3を一体としてアクセスし、以下同様にアクセスする。2つのFLASH_CTLR(2011、2012)を用いると、NANDフラッシュの記憶空間のLPAの合計数が、第1の実施形態の合計数の2倍になる。
この例では、各FLASH_CTLRは、独立した物理アドレス空間(例えばPPA)と、一意の論理-物理間の関連付け(logical−to−physical association)とを有する。偶数のLPAは、FLASH_CTLR_1の一意の論理/物理間の関連付けに基づいてFLASH_CTLR_1の物理アドレス空間に記憶される。奇数のLPAは、FLASH_CTLR_2の一意の論理/物理間の関連付けに基づいてFLASH_CTLR_2の物理アドレス空間に記憶される。
以下では、「論理ダブルページ」(Logical Double Page:LDP)と呼ぶ新しいデータ単位が導入される。各LDPは、一方が偶数、他方が奇数の連続するLPAにおける2つのNANDフラッシュページを含む。各LDPには、以下では「LDPアドレス」(LDPA)と呼ばれるアドレスが割り当てられる。例えば、LDPA0は、LPA0およびLPA1の2つのページをアドレス指定し、LDPA1は、LPA2およびLPA3の2つのページをアドレス指定し、以下同様にアドレス指定される。FLASH_CTLR_1が偶数のLPAを転送し、FLASH_CTLR_2が奇数のLPAを転送する2つのFLASH_CTLR(2011、2012)を用いると、制御回路は単一のNANDフラッシュアクセス動作で、NANDフラッシュ空間との間の1つのLDPの転送を行う。
FLASH_CTLR(2011、2012)と同様に、2つのSDRAM_CTLR(2009、2010)も、同時に同じデータアクセス処理を実施する。言い換えれば、制御回路は、SDRAMのメモリ空間に対するデータアクセスを実施するときは、2つのデータバーストの読出しまたは2つのデータバーストの書込みを同時に行い、各バーストは、SDRAM_CTLR(2009、2010)の内の1つによって転送される。同時に同じコマンドを処理する2つのSDRAM_CTLR(2009、2010)を有することは、データワードの幅を2倍にするのと同じ効果がある。例えば、単一のSDRAMバーストのデータサイズがそれぞれ16ビット幅の8ワードである場合は、同じ時間における2つのSDRAMバーストは、それぞれ32ビット幅の8ワードと等価である。
以下では、図3に示される第1の実施形態の機能ブロックとは異なる、図20に示される実施形態の制御回路の機能ブロックについて説明する。
制御回路は、それぞれ第1の実施形態と同じまたは同様の機能を有するFLASH_CTLRの2つのコピーを含む。各FLASH_CTLRは、複数のNANDフラッシュデバイスを操作するための複数のチップ選択信号を出力するが、アクセスは、一時に1つのNANDフラッシュデバイスに制限することもできる。FLASH_CTLR(2011、2012)はどちらも、BOOT_CTLR(2015)およびFMM(2011)の制御下にあり、同時に同じデータアクセス処理を実施する。
BOOT_CTLR(2015)に関しては、NANDフラッシュの記憶空間のブートセクションにはFMMアルゴリズムが適用されないので、ブートセクション内の論理アドレスと物理アドレスは区別されない。第1の実施形態では、ブートセクションの読出しの際に、BOOT_CTLR(313)は、論理アドレスから物理アドレスへの翻訳を行うことなく値を増分させながらPPAを直接生成し、次いでFLASH_CTLR(310)をアクティブ化してブートセクションから各PPAを読み出す。図20に示される本実施形態では、ブートセクションのページは、2つのFLASH_CTLR(2011、2012)間でインターリーブされ、それによって2つのFLASH_CTLR(2011、2012)の物理アドレス空間において、好ましくはどちらもPPA0から始まる同じPPAが占有されることになる。言い換えれば、FLASH_CTLR(2011、2012)はどちらも、「ブートセクションPPA」として指定される同じPPAを有する。
したがって、ブートセクションの読出しの際に、BOOT_CTLR(2015)は、ブートセクションPPAを直接生成し、次いで両方のFLASH_CTLR(2011、2012)を同時にアクティブ化して、それぞれが同じPPAのNANDフラッシュページを読み出すようにする。両方のFLASH_CTLR(2011、2012)がそれぞれのページ読出し処理を完了させたときは、各PAGE_BUFFは、1つのページデータを格納し、BOOT_CTLR(2015)は、2つのページのPPAに応じてそれらのページデータをBOOT_RAMまたはFMM_RAMに移動させる。
SDRAMコントローラ(SDRAM_CTLR)に関して、制御回路は、それぞれ第1の実施形態と同じ機能を有するSDRAM_CTLRの2つのコピーを含む。2つのSDRAM_CTLR(2009、2010)は、同時に同じデータアクセス処理を実施する。各SDRAMマスタにとって、SDRAMのメモリ空間へのアクセスは、単一のSDRAMデバイスにおけるデータワードの2倍の幅を有するデータワードのバースト単位で実施される。
フラッシュメディアマネージャ(FMM 2013)に関して、FMM(2013)は、第1の実施形態に関して説明したのと同様の形でフラッシュメディア管理タスクを実施するだけでなく、かかるタスクを1セットのLPAおよび別個の2組のPPAに基づいて実施し、したがって2つの論理アドレスと物理アドレスの関連付け(logical−to−physical address association)を維持することができる(他の実施形態では、FMMが他の追加的なフラッシュコントローラおよびSDRAMコントローラに対処するように拡張することもできる)。第1の例示的な関連付けは、偶数のLPAとFLASH_CTLR_1のPPAとの間、および奇数のLPAとFLASH_CTLR_2のPPAとの間の関連付けである。どちらの関連付けも任意的に、第1の実施形態と同じまたは同様のFMMアルゴリズムに基づいて行われる。DMA_CTLR(2014)がFMM(2013)をアクティブ化して、偶数のLPAおよび奇数のLPAの2つのページをアドレス指定するLDPAを読み出すときに、FMM(2013)は、2つのアドレス翻訳を実施して偶数のLPAをFLASH_CTLR_1のPPAに、奇数のLPAをFLASH_CTLR_2のPPAに変換する。次いで、FMM(2013)は、それぞれの対応するPPAからページ読出し処理をほぼ同時に実施するように両方のFLASH_CTLR(2011、2012)を設定する。したがって、第1の実施形態におけるFMM(2013)のLPAレジスタは、「LDPA」レジスタに置き換えられる。
レジスタ(REGS 2006)に関して、第1の実施形態では、DMA_CONFIGレジスタは、NANDフラッシュの開始LPA、SDRAMの開始アドレス、転送すべきNANDフラッシュページ数など、NANDフラッシュとSDRAMの間のDMA転送に関する情報を格納している。本実施形態では、NANDフラッシュの開始LPAが開始LDPAに置き換えられ、転送すべきNANDフラッシュページ数が転送すべきLDP数に置き換えられている。SDRAMの開始アドレスは、単一のSDRAMデバイスにおけるデータワードの2倍の幅のデータワードを参照する。
2つのFLASH_CTLR(2011、2012)が同時に動作するDMAコントローラ(DMA_CTLR 2014)に関して、DMA_CTLR(2014)は、NANDフラッシュ空間に対するアクセス毎に2つのNANDフラッシュページまたは1つのLDPをダウンロードまたはアップロードすることによってDMA転送を実施する。DMA_CTLR(2014)は、同時に動作する2つのSDRAM_CTLR(2009、2010)を用いて、単一のSDRAMデバイスにおけるデータワードの2倍の幅のデータワードからなるバーストを転送することによって、SDRAM空間に対する各アクセスを実施する。
DMA_CTLR(2014)は、好ましくは論理ダブルページ(LDP)数で記述される転送すべきデータ量、開始論理ダブルページアドレス(LDPA)、SDRAMの開始アドレスなど当該DMA転送コマンドに付随する他の情報を、REGSブロック(2006)内のDMA_CONFIGレジスタから取得する。次いで、DMA_CTLR(2014)は、転送すべきLDPのLDPA、ならびに各LDPに対応するSDRAMの開始アドレスを生成する。
LDPを転送するために、DMA_CTLR(2014)は、LDPAと転送タイプ(例えばLDP読出しまたはLDP書込み)とをFMM(2013)に送り、その後FMM(2013)は、アドレス翻訳を実施してFLASH_CTLR毎に1つずつ、合わせて2つのPPAを取得し、次いでそれぞれのPPAの対応するNANDフラッシュページの読出しまたはそこへの書込みを行うように両方のFLASH_CTLR(2011、2012)を設定する。DMA転送は任意的に、整数のLDPと等価なデータ量を移動させ、DMA転送を開始せず、またはLDPの途中でDMA転送を終了する。
次に、コマンドコントローラ(CMD_CTLR 2005)について説明する。第1の実施形態に関して上述したのと同様に、CMD_CTLR(2005)は、1次プロセッサ(2016)とメモリシステム(2001)の間のデータ転送用の一時記憶域としてデータバッファを含むことが好ましい。このデータバッファを用いると、PPBSインターフェース(2003)のデータ転送速度とSDRAMインターフェースのデータ転送速度との不整合が許容される。本実施形態では、SDRAMインターフェース上のバースト転送の長さは依然として、SDRAM_BURST_LENGTHレジスタによって定義されるが、データワードのサイズが第1の実施形態の2倍であることから、これに伴いCMD_CTLR(2005)がMADブロック(2008)を介してSDRAM_CTLRとの間でデータを転送するための信号は、SDRAMインターフェース上の2倍のワードサイズに対応できるように拡張される。言い換えれば、CMD_CTLRのデータバッファとSDRAM_CTLRの間のデータ転送速度は、他の要因が等しい場合は第1の実施形態の2倍の速さとなる。
次に、プロセッサインターフェース(PI 2002)について説明する。第1の実施形態に関して上述したのと同様に、SPBSは、対応する2次プロセッサとSDRAMの間のデータ転送用の一時記憶域としてデータバッファを含むことが好ましい。このデータバッファを用いると、SPBSインターフェースのデータ転送速度とSDRAMインターフェースのデータ転送速度との不整合が許容される。本実施形態では、SDRAMインターフェース上のバースト転送の長さは依然として、SDRAM_BURST_LENGTHレジスタによって定義されるが、データワードのサイズが第1の実施形態の2倍であることから、これに伴いSPBSがMADブロック(2008)を介してSDRAM_CTLRとの間でデータを転送するための信号は、SDRAMインターフェース上の2倍のワードサイズに対応できるように拡張される。言い換えれば、SPBSのデータバッファとSDRAM_CTLRの間のデータ転送は、第1の実施形態の2倍の速さで転送を実施する。
図21は、例示的な携帯電話の電子システムのブロック図を示している。本実施形態では、メモリシステム(2101)は、メモリシステム(2101)に取り付けられる1つまたは複数のディスプレイ(例えばLCDまたはOLED画面)(2112)とのインターフェースを有する。さらに、メモリシステム(2101)は、SDRAM(2104)からディスプレイ(2112)へのデータ転送を実施するように制御回路(2102)を設定しアクティブ化する外部電子機器(2105)の一部分、例えば1次プロセッサ(2106)および/または2次プロセッサ(2017)も提供する。図21には2つのディスプレイが示されているが、メモリシステム(2101)は、より少ないまたはより多くのディスプレイとのインターフェースとなっていてもよい。
図22は、メモリシステム(2201)の第5の実施形態を含めて図21に示される実施形態をより詳細に示している。以下では、第1の実施形態と異なる本実施形態の制御回路の機能ブロックについて説明する。
プロセッサインターフェース(PI 2202)は、PPBS(2203)と、複数のSPBS(2204)とを含む。本実施形態では、SPBSは、それ自体が2次プロセッサのメモリバスに接続されたときは通常のSPBSとして機能し、それ自体が1つまたは複数のLCD画面に接続されたときはLCDのドライバインターフェイスとして機能するようにプログラムできるインターフェースとして指定される。便宜上、この特定のSPBSを「SPBS」の代わりに「SPBS_LCD」(2204)と呼ぶ。それ自体が通常のSPBSとして機能するようにプログラムされた場合には、SPBS_LCD(2204)は、PI回路(2202)内の他のSPBSと同じ様式で対応する2次プロセッサのメモリバスと相互作用する。
それ自体がディスプレイ(例えばLCD)のドライバインターフェイスとして機能するようにプログラムされた場合には、SPBS_LCD(2204)は、ディスプレイのデータ転送プロトコルに従ってメモリシステム(2201)の外部の1つまたは複数のディスプレイを操作するための制御信号、データ信号、およびアドレス信号を提供する。この例では、SPBS_LCD(2204)内のデータバッファは、SDRAM(318)からLCD画面(2219)へのデータ転送用の一時データ記憶域として使用される。このデータバッファを用いると、LCD画面(2219)とSDRAM(2218)との間のデータ転送速度の不整合が許容される。REGSブロック(2206)内のLCD_CONFIGレジスタは、1次プロセッサ(2214)によって書込み可能であり、SPBS_LCD(2204)がSPBSとして機能しているのかそれともLCDインターフェイスドライバとして機能しているのかを判定する。SPBS_LCD(2204)は、メモリシステム(2201)の出力ポートを介して複数のLCD画面に複数のチップ選択信号を供給することによって、複数のLCD画面を操作することができる。図示の実施形態の一例では、SPBS_LCD(2204)は、独立したチップ選択信号を各ディスプレイに供給することによって2つのLCD画面(2219)をサポートする。
1次プロセッサ(2214)からのアクセスが発生したときは、PPBS(2203)は、次のコマンド、すなわち「RAM Read」、「RAM Write」、「Register Read」、「Register Write」、「Download DMA Tranfer」、および「Upload DMA Transfer」に加えて、メモリバス制御信号を「LCD Write(LCD書込み)」コマンドに翻訳することもできる。
レジスタ(REGS 2206)に関して、REGS(2206)は、LCD画面(または他のディスプレイ)の操作に関する設定情報を提供するLCD_CONFIGレジスタを含む。このレジスタは、次のフィールドを含む。「LCDイネーブル」フィールドは、SPBS_LCD(2204)がSPBSとして機能しているのかそれともLCDインターフェイスドライバとして機能しているのかを判定する。また、このフィールドは、判定に従ってLCD_CTLR(2220)をディスエーブルまたはイネーブルする。ディスプレイがメモリシステム(2201)に接続されていない場合は、LCD_CTLR(2220)はディスエーブルされ、SPBS_LCD(2204)はSPBSとして機能するように設定される。LCDイネーブルフィールドは任意的に、メモリシステムの電源投入後のレジスタのデフォルト値として「disable」にセットされるが、当該デフォルト値は任意的に「enable」にセットすることもできる。携帯電話の少なくとも1つのLCD画面がSPBS_LCDインターフェースに取り付けられている場合は、電源投入の後に、1次プロセッサは、「enable」の値をレジスタフィールドに書き込み、それによってLCD_CTLR(2220)をイネーブルし、SPBS_LCD(2204)をLCDのドライバインターフェイスとして設定する。
LCD_CONFIGレジスタはさらに、次のフィールド、すなわち「LCDの開始アドレス」、「SDRAMの開始アドレス」、および「LCDに転送すべきデータ量」のフィールドも含み、これらのフィールドは、SDRAMからLCD画面(2219)へのデータ転送を構成するのに使用される。「LCDアドレスパーティション」フィールドは、複数のLCD画面または他のディスプレイがメモリシステム(2201)に取り付けられている場合に、LCDのアドレス空間全体における各LCD画面の開始アドレスを定義する。
コマンドコントローラ(CMD_CTLR 2205)を参照すると、CMD_CTLR(2205)は、PPBS(2203)を介して1次プロセッサ(2214)からコマンド「LCD Write」を受け取ったときに、LCD_CTLR(2220)をアクティブ化して、SPBS_LCDインターフェースを介しSDRAMからメモリシステムの外部のLCD画面へのデータ転送を実施する。LCD_CTLR(2220)がデータ転送を完了させたときは、CMD_CTLR(2205)は、PPBS(2203)を介して1次プロセッサ(2214)に割り込み信号を送ってデータ転送が完了したことを指示する。
LCDコントローラ(LCD_CTLR (2220))を参照すると、LCD_CTLR(2220)は、SDRAM(2218)に記憶されている画像データを、SPBS_LCD(2204)インターフェースを介してメモリシステムの外部のLCD画面(2219)に出力する役割を果たす。LCD_CONFIGレジスタの「LCDイネーブル」フィールドは、LCD_CTLR(2220)をイネーブルまたはディスエーブルする。LCD_CTLR(2220)がイネーブルされると、LCD_CTLR(2220)は、CMD_CTLR(2205)の制御下に入り、CMD_CTLR(2205)は、PPBS(2203)を介して1次プロセッサ(2214)の制御下に入る。LCD_CONFIGレジスタは、LCD_CTLR(2220)がSDRAM(2218)から該当するLCD画面へのデータ転送を実施するのに使用する情報を格納する。
例えば、LCD_CONFIGレジスタは、転送すべきデータ量の指示、SDRAMの開始アドレス、LCDの開始アドレス、および2つのLCD画面のアドレス部分を記憶する。LCD_CTLR(2220)は、CMD_CTLR(2205)からの「LCD Write」コマンドによってアクティブ化されたときに、転送関連情報をLCD_CONFIGレジスタから取得し、データ転送をSDRAMのバースト転送と整列する複数のバースト転送に分解する。2つのLCD画面のLCDアドレス部分およびLCDの開始アドレスに基づいて、LCD_CTLR(2220)はさらに、2つのLCD画面の内のどちらの画面がデータを受け取るべきか判定する。LCD_CTLR(2220)はバースト転送毎に、SDRAM(2218)へのアクセスを求めるアクセス要求をMAD(2208)に送る。アクセス権が付与されると、LCD_CTLR(2220)は、SDRAM(2218)からのバースト読出し処理を実施し、読み出されたデータをSPBS_LCD(2204)内のデータバッファに書き込み、SPBS_LCD(2204)は、当該データを選択されたLCD画面に書き込む。LCD_CTLR(2220)は、全体のデータ転送が完了するまでこのバースト転送を繰り返す。
次に図23を参照して、図22に示される第5の実施形態の処理について説明する。図23は、SDRAM(2218)からLCD画面に画像データを転送する例示的なプロセスを示している。状態(2301)で、1次プロセッサ(2214)は、LCD_CONFIGレジスタの「LCDイネーブル」フィールドへの書込みを行ってLCD_CTLR(2220)をイネーブルし、SPBS_LCD(2204)がLCDのドライバインターフェイスとして働くように設定すると共に、SDRAMからLCD画面へのデータ転送を設定する。1次プロセッサ(2214)は、状態(2302)で「LCD Write」コマンドを発行し、状態(2303)で、CMD_CTLR(2205)にLCD_CTLR(2220)をアクティブ化させてSDRAM(2218)からLCD画面へのデータ転送を実施させる。LCD_CTLR(2220)は、MAD(2208)のアクセス権付与プロトコルに従って、MAD(2208)を介してSDRAM(2218)からデータを読み出し、対応する全ての画像データがSDRAM(2218)からLCD画面に転送されるまで1つ(または複数)のLCD画面にデータを書き込む。この時点で、CMD_CTLR(2205)は、1次プロセッサ(2214)に割り込んでデータ転送の完了を指示する(2310)。
特に状態(2304)で、LCD_CTLR(2220)は、LCD_CONFIGレジスタの値に基づいて初期のバースト転送用のSDRAMアドレスを生成する。状態(2305)で、LCD_CTLR(2220)は、MAD(2208)を介してSDRAMアクセスを要求する。状態(2306)で、MAD(2208)がSDRAMアクセス権を付与したかどうか判定され、状態(2307)で、LCD_CTLR(2220)は、SDRAM(2218)からLCD画面(2219)にデータバーストを転送する。状態(2308)で、実施すべきデータバーストが残っているかどうか判定される。転送すべきバーストが残っている場合は、状態(2309)に進み、LCD_CTLR(2220)は、次のバースト転送用のSDRAMアドレスを生成する。該当する全ての画像データがSDRAM(2218)からLCD画面に転送されると、状態(2310)で、CMD_CTLR(2205)は、1次プロセッサ(2214)に割り込んでデータ転送の完了を指示する。
LCD_CTLR(2220)は、任意的に、それ自体がディスエーブルされたときにSPBS_LCD(2204)とMADブロック(2208)の間の単純な接続の働きをする。SPBS_LCD(2204)は、通常のSPBSインターフェースとして機能し、LCD_CTLR(2220)が存在しない場合と同様にMADブロック(2208)と相互作用してSDRAM(2218)にアクセスする。
例示的な本実施形態では、LCD_CTLR(2220)は、SDRAM(2218)からLCD画面(2219)にデータを移動させるが、任意的に、SDRAM(2218)内の画像データをLCD画面(2219)に移動させる前に当該画像データを異なる形式に加工する、より複雑な機能を実施することもできる。本明細書には詳細な画像処理技法を記載していないが、それらの画像処理技法は、必要に応じてまたは所望の形でユーザによって定義することができ、また、メモリシステム(2201)を用いると、外部プロセッサの計算能力を過度に利用することのない画像処理および画像レンダリングを行って画像を表示することが可能となる。
SPBS_LCD(2204)は、1次プロセッサ(2214)によって2次プロセッサの制御下に入る通常のSPBSインターフェースとして構成することも、LCD画面(2219)を制御するLCDインターフェースとして構成することもできるが、SPBS_LCD(2204)は任意的に、それらの2つの構成の内の1つを任意の特定の携帯電話で使用するように制限される。したがって、メモリシステム(2201)が携帯電話など特定のデバイスにインストールされた場合は、SPBS_LCD(2204)は任意的に、2次プロセッサあるいは1つまたは複数のディスプレイに恒久的に取り付けられ(あるいはいずれのデバイスにも取り付けられず)、したがって電源投入後に1次プロセッサ(2214)によって構成されることから、携帯電話が標準動作モードにある間にSPBS_LCD(2204)を2つの構成間で切り換える必要がなくなる。
図24は、メモリシステム(2401)の第6の実施形態を示している。例示的なメモリシステム(2401)は、外部から挿入される1つまたは複数の着脱可能なメモリカード(2412)とのインターフェースを有しており、さらに、SDRAM(2404)とメモリカード(2412)の間のデータ転送を実施するように制御回路(2402)を設定しアクティブ化する1次プロセッサを有している。限定ではなく例示として、着脱可能なメモリカードは、メモリスティックカード、スマートメディアカード、セキュアデジタルカード、コンパクトフラッシュカード、マルチメディアカード、あるいは他のカード形式とすることができる。図示の例ではメモリシステム(2401)に1つのメモリカードが接続されるように示してあるが、他の実施形態は、複数のメモリカードインターフェイスおよび複数のカードを含むことができる。
メモリカードとは、任意的に携帯電話のスロットやレセプタクルなど対象デバイスのスロットに挿入することができ、それによって対象デバイスの電子システムに接続することができる着脱可能なデータ記憶装置を指す。携帯電話または他の対象デバイスはその後、メモリカードによって提供されるデータ記憶空間にアクセスできるようになる。以下、「メモリカード」という用語はMCと記載する。MCの挿入が携帯電話によって許容されるように、携帯電話は、MCとの機械的かつ電気的な互換性を有するMCインターフェイスを提供する。メモリシステム(2401)は、MCとの電気的な互換性を有し、MCのバスプロトコルに対応できるインターフェースを提供し、携帯電話の筐体は、MCとの機械的な互換性を有するスロットおよびコネクタを含む。
図25は、MC(2519)とのインターフェースをもつ制御回路を含めたメモリシステム(2501)の詳細なブロック図を示している。以下では、第1の実施形態の機能ブロックと異なる本実施形態の制御回路の機能ブロックについて説明する。
PI回路(2502)を参照すると、PI回路(2502)は、PPBS(2503)と、複数のSPBS(2504)とを含む。本実施形態では、SPBSの内の少なくとも1つは、それ自体が2次プロセッサのメモリバスに接続されたときは通常のSPBSとして機能し、それ自体が着脱可能なMC(2519)とのインターフェースとなるときにはMC(2519)のドライバインターフェイスとして機能する形でプログラムできるように設定可能なインターフェースを有する。かかるSPBSを「SPBS_MC(2504)」(2504)と呼ぶ。それ自体が通常のSPBSとして機能するようにプログラムされた場合には、SPBS_MC(2504)は、他のSPBSに関して上述したのと同様の形で対応する2次プロセッサのメモリバスと相互作用する。それ自体がMCのドライバインターフェイスとして機能するようにプログラムされた場合には、SPBS_MC(2504)は、MCのデータ転送プロトコルに従ってMC(2519)を操作するための、制御信号、データ信号、およびアドレス信号を提供する。
この例では、SPBS_MC(2504)内のデータバッファは、SDRAM(2518)とMC(2519)の間のデータ転送用の一時データ記憶域として使用される。このデータバッファを用いると、MC(2519)とSDRAM(2518)の間のデータ転送速度の不整合が許容される。REGSブロック(2506)内のMC_CONFIGレジスタは、1次プロセッサ(2514)によって書込み可能であり、SPBS_MC(2504)がSPBSとして機能しているのかそれともMCのインターフェイスドライバとして機能しているのかを判定する。
PPBS(2503)は、1次プロセッサ(2514)からアクセスされたときは、「RAM Read」、「RAM Write」、「Register Read」、「Register Write」、「Download DMA Tranfer」、および「Upload DMA Transfer」コマンドに加えて、メモリバス制御信号を次の2つの追加コマンド、すなわち「MC Write(MC書込み)」および「MC Read(MC読出し)」に翻訳することもできる。
REGSブロック(2506)に関して、当該ブロックにはMCの操作に関する設定情報を提供するMC_CONFIGレジスタが含まれている。MC_CONFIGレジスタは、次のフィールドを格納する。SPBS_MC(2504)がSPBSとして機能しているのかそれともMCのインターフェイスドライバとして機能しているのかを判定する「MCイネーブル」フィールドが設けられている。また、このフィールドは、判定に従ってMC_CTLR(2520)をディスエーブルまたはイネーブルする。メモリシステム(2501)がMCインターフェイスを提供しないことが企図される場合には、MC_CTLR(2520)はディスエーブルされ、SPBS_MC(2504)はSPBSとして機能するように設定される。これは任意的に、メモリシステム(2501)の電源投入後の当該レジスタフィールドのデフォルト値とされる。メモリシステム(2501)がMCインターフェイスを提供することが企図される場合には、1次プロセッサ(2514)は、「MCイネーブル」レジスタのフィールドにenableの値を書き込んでMC_CTLR(2520)をイネーブルし、SPBS_MC(2504)をMCのドライバインターフェイスとして構成する。「MC(2519)の開始アドレス」、「SDRAM(2518)の開始アドレス」、および「MCとの間で転送すべきデータ量」の内の1つまたは複数を含む追加的なフィールドは、SDRAM(2518)とMC(2519)の間のデータ転送を設定する。
コマンドコントローラ(CMD_CTLR 2505)に関して、CMD_CTLR(2505)は、PPBS(2503)を介して1次プロセッサ(2514)から「MC Write」または「MC Read」コマンドを受け取ったときに、MC_CTLR(2520)をアクティブ化して、それぞれSPBS_MC(2504)インターフェースを介してSDRAM(2518)からMC(2519)へのまたはMC(2519)からSDRAM(2518)へのデータ転送を実施する。MC_CTLR(2520)がデータ転送を完了させたときは、CMD_CTLR(2505)は、PPBS(2503)を介して1次プロセッサ(2514)に割り込み信号を送ってデータ転送が完了したことを指示する。
MCコントローラ(MC_CTLR 2520)に関して、MC_CTLR(2520)は、SPBS_MC(2504)インターフェースを介してSDRAM(2518)とMC(2519)の間でデータを転送する役割を果たす。先に論じたように、MC_CONFIGレジスタの「MCイネーブル」フィールドは、MC_CTLR(2520)をイネーブルまたはディスエーブルする。MC_CTLR(2520)がイネーブルされると、MC_CTLR(2520)は、CMD_CTLR(2505)の制御下に入り、CMD_CTLR(2505)は、PPBS(2503)を介して1次プロセッサ(2514)の制御下に入る。MC_CONFIGレジスタは、転送すべきデータ量、SDRAM(2518)の開始アドレス、MC(2519)の開始アドレスなど、MC_CTLR(2520)がSDRAM(2518)とMC(2519)の間のデータ転送を実施するのに必要な情報を格納する。
MC_CTLR(2520)は、CMD_CTLR(2505)からの「MC Write」または「MC Read」コマンドによってアクティブ化されたときに、転送関連情報をMC_CONFIGレジスタから取得し、データ転送をSDRAM(2518)のバースト転送と整列する複数のバースト転送に分解し、MC_CTLR(2520)はバースト転送毎に、SDRAM(2518)へのアクセスを求めるアクセス要求をMADに送る。アクセス権が付与されると、書込みコマンド「MC Write」に関して、MC_CTLR(2520)は、SDRAM(2518)からデータバーストを読み出し、当該データバーストをSPBS_MC(2504)内のデータバッファを介してMC(2519)に書き込む。読出しコマンド「MC Read」が実施される場合は、MC_CTLR(2520)によって、SPBS_MC(2504)内のデータバッファを介してMC(2519)からデータバーストが読み出され、MC_CTLR(2520)は、当該データバーストをSDRAM(2518)に書き込む。MC_CTLR(2520)は、全体のデータ転送が完了するまでこのバースト転送を繰り返す。
メモリシステム制御回路は任意的に、本実施形態に関して論じたようなMCインターフェイスおよび関連回路に加え、第5の実施形態に関して上述したようなディスプレイインターフェイスおよび関連回路を含むこともできる。
次に図26を参照して、図25に示される第6の実施形態の処理について説明する。図26は、SDRAM(2518)からMC(2519)にデータが転送される例示的なデータ転送プロセスを示している。状態(2601)で、1次プロセッサ(2514)は、MC_CONFIGレジスタへの書込みを行ってMC_CTLR(2520)をイネーブルし、SPBS_MC(2504)がMC(2519)のドライバインターフェイスとして働くように設定すると共に、SDRAM(2518)とMC(2519)の間のデータ転送を設定する。1次プロセッサ(2514)は、状態(2602)で「MC Write」コマンドを発行し、状態(2603)で、CMD_CTLR(2505)にMC_CTLR(2520)をアクティブ化させてSDRAM(2518)からMC(2519)へのデータ転送を実施させる。MC_CTLR(2520)は、MC_CONFIGレジスタの値に基づいてSDRAM(2518)内のデータをSDRAM(2518)のバーストと整列するデータバーストに分解し、MADブロック(2508)のアクセス権付与プロトコルに従って、MADブロック(2508)を介してSDRAM(2518)から各バーストを読み出し、当該バーストをMC(2519)に書き込む(2604〜2607)。特に状態(2604)で、MC_CTLR(2520)は、最初のバースト転送用のSDRAMアドレスを生成する。状態(2605)で、MC_CTLRは、MADブロック(2508)にアクセス要求を送る。状態(2606)で、MADブロック(2508)がアクセスを提供したかどうか判定される。MADブロック(2508)がアクセス権を付与した場合は、状態(2608)に進み、バーストが残っているかどうか判定される。バーストがまだ残っている場合は、状態(2609)に進み、MC_CTLR(2520)は、次のバースト転送用のSDRAMアドレスを生成し、状態(2605)に進む。残りのバーストがなくなり、したがってMC_CTLR(2520)がデータ転送を完了させると、状態(2610)に進み、MC_CTLR(2520)は、1次プロセッサ(2514)に割り込む。
反対方向の(MC(2519)からSDRAM(2518)への)データ転送が実施される場合、その処理は、1次プロセッサ(2514)がCMD_CTLRのMC_CTLR(2520)に対して「MC Read」コマンドを発行し、MC_CTLR(2520)がMC(2519)からSDRAM(2518)へのデータ転送を実施する点を除けば、上述の処理と同様である。
MC_CTLR(2520)がディスエーブルされると、MC_CTLR(2520)は、SPBS_MC(2504)とMADブロック(2508)の間の接続の働きをする。SPBS_MC(2504)は、通常のSPBSインターフェースとして機能し、MC_CTLR(2520)が存在しない場合または必要ない場合と同様に、MADブロック(2508)と相互作用してSDRAM(2518)にアクセスする。
さらに、SPBS_MC(2504)は、1次プロセッサ(2514)によって2次プロセッサの制御下に入る通常のSPBSインターフェースとして構成することも、MCを制御するMCインターフェイスとして構成することもできるが、SPBS_MC(2504)は、それらの2つの構成の内の1つを任意の特定の携帯電話で使用することが企図される。したがって、メモリシステム(2501)が携帯電話にインストールされた場合は、SPBS_MC(2504)は、2次プロセッサに恒久的にまたは固定式に取り付けられあるいはMCインターフェイスとして使用され(あるいは全く使用されず)、したがって電源投入後に1次プロセッサ(2514)によって構成されることから、携帯電話が標準動作モードにある間にSPBS_MC(2504)を2つの構成間で切り換える必要がなくなる。
次に、メモリシステムの第7の実施形態について説明する。図27に示されるように、例示的なメモリシステム(2702)は、フラッシュメモリ(2704)と、制御回路(2703)とを含み、それによって制御回路(2703)は、第1の実施形態に関して上述したのと同様の形でフラッシュメモリ(2704)を操作するための制御信号を提供する。任意的に、この例示的なメモリシステム(2702)には図2に示されるメインRAM(205)が存在しない。さらに、図27を参照すると、この例では、メモリシステム(2702)にアクセスできる外部電子機器(2706)内の1つの外部プロセッサが示されており、この外部プロセッサは、1次プロセッサ(2707)として指定されている。任意的に、追加のプロセッサおよび関連するインターフェース回路(例えばPBS)も含むことができる。
1次プロセッサ(2707)は、第1の実施形態に関して上述したのと同様の形で制御回路に接続されている。1次プロセッサ(2707)は、メモリシステム(2702)にアクセスすることに加えて、外部電子機器内に揮発性メモリ(例えばSDRAM、DRAMなど)および/または不揮発性メモリ(例えばフラッシュメモリ、EEPROM、ROMなど)も備えることができる。
図28は、本実施形態の制御回路の機能ブロックを示している。図示の実施形態は、1次プロセッサ(2814)と、PI(2802)と、PPBS(2803)と、CMD_CTLR(2805)と、REGSブロック(2806)と、BOOT_RAM(2807)と、FLASH_CTLR(2810)と、FMM(2811)と、DMA_CTLR(2812)と、BOOT_CTLR(2813)と、電源投入のリセット信号(2816)と、不揮発性NANDフラッシュメモリ(2817)とを含む。以下では、第1の実施形態と異なる制御回路の機能ブロックについて説明する。
図28に示される例示的な実施形態は任意的に、MADブロック(図3に示されるMAD(308)など)またはSDRAM_CTLRブロック(図3に示されるSDRAM_CTLR(309)など)を含まない。
プロセッサインターフェース(PI 2802)に関して、PIブロック(2802)は、任意的にPBSおよびPPBS(2803)を1つだけ含み、限定されるものではないがSPBSブロックを含まない。本実施形態のPPBS(2803)と第1の実施形態のPPBSの違いを以下で説明する。
第1の実施形態の場合と同様に、PPBS(2803)は、1次プロセッサ(2814)からのメモリバス信号をコマンド、データ、およびアドレス情報に翻訳し、次いで当該情報をCMD_CTLR(2805)に渡す役割を果たす。次に、CMD_CTLR(2805)は、制御回路の該当する部分をアクティブ化してメモリシステム(2802)内の関連する処理を実施する。しかしながら、PPBS(2803)がメモリバス制御信号から翻訳するコマンドの内の2つ、すなわち「Download DMA Tranfer」および「Upload DMA Transfer」は、「Flash Read(フラッシュ読出し)」および「Flash Write(フラッシュ書込み)」コマンドによって置き換えられまたは補完される。より具体的には、本実施形態のPPBS(2803)は、1次プロセッサ(2814)のメモリバス制御信号を次の例示的なコマンドの内の1つまたは複数、すなわち「RAM Read」、「RAM Write」、「Register Read」、「Register Write」、「Flash Read」、または「Flash Write」(および任意的に追加のコマンド)の内の1つまたは複数に翻訳し、当該1つ(または複数)のコマンドをCMD_CTLR(2805)に送る。
PIブロック(2802)がSPBSブロックを含まない場合は、第1の実施形態で提供された1次プロセッサ(2814)が2次プロセッサに向かうリセット信号を制御するための仕組みが必ずしも存在する必要はない。しかしながら、本実施形態では、制御回路が1次プロセッサ(2814)に向かうリセット信号を制御するための仕組みは、依然として提供されることが好ましい。
図28に示される実施形態はさらに、他の実施形態に関して上述したのと同様に追加のPBSを介したMCインターフェイスおよび/または追加のPBSを介したディスプレイインターフェイスも含むことができる。
図29は、図28に示される実施形態に任意的に含めることができるリセット関連回路を示している。図示の回路は、1次プロセッサ(2912)と、CMD_CTLR(2901)と、BOOT_CTLR(2902)と、PI(2906)と、PPBS(2907)と、1次プロセッサ(2912)をPPBS(2907)と接続させるメモリバス(2909)と、電源投入のリセット信号(2914)と、リセット信号(2910)とを含む。図29に示されるように、電源投入のリセット(2914)がアサートされると、BOOT_CTLR(2902)がリセットモードに入り、それによってBOOT_CTLR(2902)は、1次プロセッサ(2912)のリセット信号(2910)をアサート状態に保つ。電源投入のリセットがディアサートされると、BOOT_CTLR(2902)は、1次プロセッサ(2912)のリセット信号をアサート状態に保つことによって1次プロセッサ(2912)をリセット状態に保ちながら、同時に、制御回路(2901)の様々な機能を初期化するタスクの実施を開始する。BOOT_CTLR(2902)は、初期化タスクを完了させた後にリセット信号をディアサートして1次プロセッサ(2912)をリセットから解放する。
図30は、図28に示される実施形態に任意的に含めることができる割り込み関連回路を示している。図示の回路は、1次プロセッサ(3012)と、制御回路(3001)とを含む。制御回路は、PI(3007)と、PPBS(3008)と、1次プロセッサ(3012)をPPBS(3008)と接続させるメモリバス(3014)と、割り込み信号(3015)と、REGSブロック(3004)と、INT_RECORDレジスタ(3005)とを含む。
図30に示されるように、2次プロセッサが存在しない場合は、2次プロセッサが1次プロセッサ(3012)に割り込むための仕組みは必要でないことから、当該仕組みは任意的に存在しない。CMD_CTLR(3002)が1次プロセッサ(3012)に割り込むための仕組みは、依然として提供されることが好ましい。CMD_CTLR(3002)によって生成される割り込み信号(3003)は任意的に、PPBS(3008)および信号(3015)を介して1次プロセッサ(3012)に直接送られ、また、割り込み記録レジスタ、すなわち1次プロセッサ(3012)によって読み出されクリアされ得るREGSブロック(3004)内のINT_RECORD(3005)レジスタに記録される。
図28を再び参照すると、コマンドコントローラ(CMD_CTLR 2805)は、以下で説明するように第1の実施形態とは異なる形で、PPBS(2803)を介して1次プロセッサ(2814)から受け取られたコマンドを実施する。
「RAM Read」および「RAM Write」コマンドに関しては、メモリシステム(2801)がSDRAMを含んでいないので、BOOT_RAM(2807)は、1次プロセッサ(2814)がアクセス可能なメモリシステムのRAMメモリ空間を提供する。1次プロセッサ(2814)が「RAM Read」または「RAM Write」コマンドを発行したときは、CMD_CTLR(2805)は、1次プロセッサ(2814)がBOOT_RAM(2807)との間のバースト転送を実施するのを許可する。
「Register Read」および「Register Write」コマンドに関して、CMD_CTLR(2805)は、第1の実施形態に関して上述したのと同様の形でそれらの2つのコマンドを実施する。
「Flash Read」および「Flash Write」コマンドに関して、Flash Readコマンドは、CMD_CTLR(2805)にDMA_CTLR(2812)をアクティブ化させてNANDフラッシュメモリ(2817)からBOOT_RAM(2807)へのデータ転送を実施させる。Flash Writeコマンドは、CMD_CTLR(2805)にDMA_CTLR(2812)をアクティブ化させてBOOT_RAM(2807)からNANDフラッシュメモリ(2817)へのデータ転送を実施させる。
DMA_CTLR(2812)は、CMD_CTLR(2805)によってアクティブ化された後に、REGSブロック(2806)内のDMA_CONFIGレジスタから、限定されるものではないが、NANDフラッシュページ数を用いて記述される移動させるべきデータ量、NANDフラッシュの開始論理ページアドレス(LPA)、BOOT_RAMの「転送セクション」のアドレス範囲などデータ転送に関連する情報を取得する。したがって、1次プロセッサ(2814)は、DMA_CONFIGレジスタに適切な値をロードした後に、CMD_CTLR(2805)に対して「Flash Read」または「Flash Write」コマンドを発行する。コマンドが完了すると、CMD_CTLR(2805)は、PPBS(2803)インターフェースを介して1次プロセッサ(2814)に割り込み信号を送る。CMD_CTLR(2805)は任意的に、第1の実施形態に存在するデータバッファを含まない。
「Flash Read」および「Flash Write」コマンドに関するデータ転送は、DMA_CTLR(2812)およびCMD_CTLR(2805)がそれぞれの側のBOOT_RAM(2807)上のデータトラフィックを制御して、BOOT_RAM(2807)とFLASH_CTLR(2810)のPAGE_BUFFとの間のデータ転送と、BOOT_RAM(2807)と1次プロセッサ(2814)の間のデータ転送と、が同時に発生するように実施されることが好ましい。BOOT_RAM(2807)の「転送セクション」が一杯であり、1次プロセッサ(2814)からのデータをすぐに受け取ることができない場合、または「Flash Read」処理の際にBOOT_RAM(2807)の「転送セクション」が空になった場合は、CMD_CTLR(2805)は、PPBS(2803)を介して1次プロセッサ(2814)に対する「待機」信号をアサートして、BOOT_RAM(2807)のデータ転送を続行する準備が整うまでメモリバス上のデータ転送を一時的に停止する。
次にレジスタ(REGS 2806)を参照すると、メモリシステム(2801)が制御回路の外部のSDRAMを含んでいないので、かかるSDRAMにアクセスすることに関するSDRAM_BURST_LENGTHレジスタやMAD_PRIORITYレジスタなどの情報を格納するレジスタは任意的に、REGS(2806)から省略される。DMA_CONFIGレジスタは、図28に示される制御回路が第1の実施形態のようなNANDフラッシュとSDRAMの間のDMA転送を行う代わりに、「Flash Read」または「Flash Write」コマンドを実施するときに使用する情報を格納する。
次にブートRAM(BOOT_RAM 2807)を参照すると、BOOT_RAM(2807)は、BOOT_CTLR(2813)およびCMD_CTLR(2805)に加えて、接続(2819)を介してDMA_CTLR(2812)の制御下にも入る。BOOT_CTLR(2813)はデフォルトで、電源投入のリセット後にBOOT_RAM(2807)の制御を有し、制御回路の初期化の一環として、NANDフラッシュメモリ(2817)からBOOT_RAM(2807)にシステムブートコードをロードする。次いで、BOOT_CTLR(2813)は、CMD_CTLR(2805)およびDMA_CTLR(2812)とBOOT_RAM(2807)の制御を交代する。「RAM Read」または「RAM Write」処理の際に、CMD_CTLR(2805)は、1次プロセッサ(2814)がBOOT_RAM(2807)との間のDMA転送を実施するのを許可する。「Flash Read」または「Flash Write」処理の際に、CMD_CTLR(2805)は、1次プロセッサ(2814)がBOOT_RAM(2807)との間のDMA転送を実施するのを許可する一方、DMA_CTLR(2812)は、BOOT_RAM(2807)とFLASH_CTLR(2810)内のFLASH_CTLR(2810)のPAGE_BUFFとの間のデータ転送を実施する。
「Flash Read」または「Flash Write」処理の際に、BOOT_RAM(2807)内のあるセクションは、概念的に「転送セクション」として指定され、当該「転送セクション」は、1次プロセッサ(2814)とFLASH_CTLR(2810)のPAGE_BUFFとの間を流れるデータを一時的に記憶するのに使用される。BOOT_RAM(2807)内の「転送セクション」のアドレス範囲は、1次プロセッサ(2814)が「Flash Read」または「Flash Write」コマンドを発行する前に適当な値を用いてプログラムする、REGSブロック(2806)内のDMA_CONFIGレジスタによって定義される。BOOT_RAM(2807)内の転送セクションの目的は、システムブートコードなどBOOT_RAM(2807)内の既存のデータがデータ転送中に上書きされないように指定されるデータ転送用セクションを作成することである。
フラッシュメモリコントローラ(FLASH_CTLR(2810))に関して、FLASH_CTLR(2810)は、DMA_CTLR(2812)がFLASH_CTLR(2810)の動作を停止させるための「flash_halt(フラッシュ停止)」という入力信号を提供する。「flash_halt」信号がアサートされると、FLASH_CTLR(2810)は、NANDフラッシュメモリの処理を停止するが、現在の処理状態は、依然として維持される。「flash_halt」信号がディアサートされると、FLASH_CTLR(2810)は、現在の処理状態からNANDフラッシュメモリの処理を続行する。
フラッシュメディアマネージャ(FMM 2811)に関しては、本実施形態ではメモリシステム(2801)がSDRAMを含んでいないので、FMM(2811)のFMM_Pは、FMM_RAMとSDRAMの間でデータを転送する命令を提供する必要はない。したがって、FMMプログラムコードおよびFMMアルゴリズムのブックキーピングレコードは標準動作モードの間、FMM_RAMに保持される。
DMAコントローラ(DMA_CTLR(2812))に関して、本実施形態のDMA_CTLR(2812)は、第1の実施形態のようなNANDフラッシュメモリとSDRAMの間のDMA転送を実施する代わりに、NANDフラッシュメモリ(2817)とBOOT_RAM(2807)の間のデータ転送処理を「Flash Read」または「Flash Write」コマンドの形で実施する。
より具体的には、CMD_CTLR(2805)がDMA_CTLR(2812)をアクティブ化して「Flash Read」または「Flash Write」コマンドを実施するときに、DMA_CTLR(2812)は、好ましくはNANDフラッシュページ数として記述される転送すべきデータ量、NANDフラッシュの開始論理ページアドレス(LPA)、BOOT_RAMの転送セクションのアドレス範囲など当該コマンドに付随する情報を、REGSブロック(2806)内のDMA_CONFIGレジスタから取得する。次いで、DMA_CTLR(2812)は、転送すべきNANDフラッシュページのLPA、ならびに各NANDフラッシュページに対応するBOOT_RAM(2807)の開始アドレスを生成する。
各NANDフラッシュページのデータ転送を達成するために、DMA_CTLR(2812)は、NANDフラッシュメモリ(2817)およびBOOT_RAM(2807)にアクセスする。DMA_CTLR(2812)は、第1の実施形態と同じ様式でNANDフラッシュメモリ(2817)にアクセスする。BOOT_RAM(2807)にアクセスするために、DMA_CTLR(2812)は、BOOT_RAM(2807)の転送セクションからの読出しまたはそこへの書込みを直接行う。
「Flash Read」および「Flash Write」コマンドに関するデータ転送は限定されるものではないが、DMA_CTLR(2812)およびCMD_CTLR(2805)がそれぞれの側のBOOT_RAM(2807)上のデータトラフィックを制御して、BOOT_RAM(2807)とFLASH_CTLR(2810)のPAGE_BUFFとの間のデータ転送と、BOOT_RAM(2807)と1次プロセッサ(2814)の間のデータ転送と、が同時に発生し得るように実施される。「Flash Read」処理の際にBOOT_RAM(2807)が一杯であり、FLASH_CTLR(2810)のPAGE_BUFFからのデータをすぐに受け取ることができない場合は、DMA_CTLR(2812)は、FLASH_CTLR(2810)のPAGE_BUFFからBOOT_RAM(2807)へのデータ転送を停止し、FLASH_CTLR(2810)に対する「flash halt」信号をアサートして、1次プロセッサ(2814)がBOOT_RAM(2807)からデータを読み出すまでNANDフラッシュの処理を一時的に停止する。
「RAM Write」処理の間にBOOT_RAM(2807)が空になった場合は、DMA_CTLR(2812)は、1次プロセッサ(2814)がBOOT_RAM(2807)にデータを書き込むまで、BOOT_RAM(2807)からFLASH_CTLR(2810)のPAGE_BUFFへのデータ転送を停止する。
次に図31を参照して、図28に示される第7の実施形態の処理について説明する。電源投入のリセットがディアサートされた後にBOOT_CTLR(2813)によって実施されるブートアップ工程は、第1の実施形態に関して上述したのと同様である。BOOT_CTLR(2813)がブートアップ工程を完了させた後に、メモリシステム(2801)は「標準動作モード」に入る。
本実施形態では、「標準動作モード」とは、FMM(2811)が初期化され、NANDフラッシュの論理アドレスから物理アドレスへの翻訳が実施でき、1次プロセッサ(2814)がシステムブートコードを実行するためにリセットから解放され、PPBS(2803)およびCMD_CTLR(2805)を介してBOOT_RAM(2807)の内外にデータバーストを転送し、REGSブロック(2806)内のレジスタの読み書きを行ってメモリシステム(2801)の動作を設定/監視し、NANDフラッシュメモリ(2817)とBOOT_RAM(2807)の間のデータ転送をアクティブ化し、CMD_CTLR(2805)によって生成される割り込み信号を受け取ることができる状態を指す。
標準動作モードでは、BOOT_RAM(2807)を介した1次プロセッサ(2814)との間のデータ転送は、一般的に使用される機能となる。したがって、ここでは「Flash Read」および「RAM Write」コマンドの処理について詳細に説明する。
図31は、「Flash Read」コマンドに応答して実施される例示的なフラッシュ読出しプロセスを示している。状態(3101)で、1次プロセッサ(2814)は、NANDフラッシュの開始LPA、BOOT_RAMの転送セクションのアドレス範囲、DMA_CONFIGレジスタに転送すべきデータ量などのコマンド関連情報をプログラムする。状態(3102)で、1次プロセッサ(2814)は、「Flash Read」コマンドを発行し、それによって状態(3103)で、CMD_CTLR(2805)がDMAコントローラをアクティブ化する。一方、状態(3103)で、CMD_CTLR(2805)は、「待機」信号をアサートして、BOOT_RAM(2807)へのNANDフラッシュデータのコピーが開始されるまで1次プロセッサのメモリバス上のデータ転送を一時的に停止する。DMA_CTLR(2812)は、状態(3104)でDMA_CONFIGレジスタの値に基づいて最初のNANDフラッシュLPAと、BOOT_RAMアドレスとを生成し、次いで、状態(3105)でFMMをアクティブ化して当該LPAのNANDフラッシュページを読み出す(3105)。FMM(2811)はまず、状態(3106)で論理アドレスから物理アドレスへの翻訳を実施してLPAをPPAに変換し、状態(3107)で当該PPAのNANDフラッシュページを読み出すようにFLASH_CTLR(2810)を設定しアクティブ化する。
状態(3108)で、FLASH_CTLR(2810)がアイドル状態に入ったかどうか判定され、それによってFLASH_CTLR(2810)がページ読出し処理を完了させたことが示される。状態(3109)で、ページデータは、潜在的な誤りが既にECC回路によって訂正された状態でPAGE_BUFFに記憶される。状態(3109)で、DMA_CTLR(2812)は、ページデータをPAGE_BUFFからBOOT_RAM(2807)に転送する。BOOT_RAM(2807)の転送セクションが空でないことが判定されると、CMD_CTLR(2805)は、状態(3110)で「待機」信号をディアサートして、状態(3111)で発生する1次プロセッサ(2814)によるBOOT_RAM(2807)の読出しを可能にする。
BOOT_RAM(2807)の転送セクションが一杯である場合は、DMA_CTLR(2812)は、PAGE_BUFFからBOOT_RAM(2807)へのデータ転送を停止し、「flash_halt」信号をアサートしてNANDフラッシュメモリ(2817)の読出しを一時的に停止する。状態(3112)で、転送すべきページがそれ以上存在するかどうか判定される。BOOT_RAM(2807)の転送セクションが空になった場合は、状態(3113)で、CMD_CTLR(2805)は、「待機」信号をアサートして1次プロセッサ(2814)によるBOOT_RAM(2807)の読出しを一時的に停止させる。DMA_CTLR(2812)は、次のLPAおよびBOOT_RAMアドレスを生成する。この工程は、「Flash Read」転送が完了するまでNANDフラッシュページ毎に繰り返される。転送が完了すると、状態(3115)に進み、CMD_CTLR(2805)は、1次プロセッサ(2814)に割り込んでデータ転送の完了を指示する。
図32は、「Flash Write」コマンドに応答して実施される例示的なフラッシュ書込みプロセスを示している。状態(3201)で、1次プロセッサ(2814)は、NANDフラッシュの開始LPA、BOOT_RAMの転送セクションのアドレス範囲、DMA_CONFIGレジスタに転送すべきデータ量などのコマンド関連情報をプログラムする。状態(3202)で、1次プロセッサ(2814)は、「Flash Write」コマンドを発行する。それに応答して、CMD_CTLR(2805)は、状態(3203)でDMA_CTLR(2812)をアクティブ化する。一方、状態(3204)で、1次プロセッサ(2814)は、BOOT_RAM(2807)に対するデータの書込みを開始する。BOOT_RAM(2807)の転送セクションが空でないことが判定されると、DMA_CTLR(2812)は、状態(3205)でBOOT_RAM(2807)からFLASH_CTLRPAGE_BUFFへのデータ転送を開始する。
1ページ分のデータがPAGE_BUFFに書き込まれた後は、DMA_CTLR(2812)は、状態(3206)でDMA_CONFIGレジスタの値に基づいて最初のNANDフラッシュLPAを生成し、状態(3207)でFMM(2811)をアクティブ化して当該LPAのNANDフラッシュページへの書込みを行う。FMM(2811)は、状態(3208)で論理アドレスから物理アドレスへの翻訳を実施してLPAをPPAに変換し、次いで状態(3209)で当該PPAのNANDフラッシュページへの書込みを行うようにFLASH_CTLR(2810)を設定しアクティブ化する。
一方、1次プロセッサ(2814)は、BOOT_RAM(2807)に対するデータの書込みを続行し、それによってDMA_CTLR(2812)がBOOT_RAM(2807)からPAGE_BUFFにデータを転送する。BOOT_RAM(2807)の転送セクションが一杯である場合は、CMD_CTLR(2805)は、「待機」信号をアサートして1次プロセッサ(2814)によるBOOT_RAM(2807)への書込みを一時的に停止させる。BOOT_RAM(2807)の転送セクションが空になった場合は、DMA_CTLR(2812)は、BOOT_RAM(2807)からPAGE_BUFFへのデータ転送を停止する。この工程は、転送すべきページがそれ以上残っているかどうかに関して行われた状態(3211)の判定を介して、全体の「Flash Write」転送が完了するまでNANDフラッシュページ毎に繰り返される。状態(3212)で、CMD_CTLR(2805)は、1次プロセッサ(2814)に割り込んでデータ転送の完了を指示する。
標準動作モードに入ると、図28に示されるメモリシステム(2801)はそれ以上、第1の実施形態の場合のように「ユーザモード」に入ることはない。1次プロセッサ(2814)は、BOOT_RAM(2807)からのシステムブートコードの実行を続行しても続行しなくてもよい。一部の携帯電話では、外部電子機器は、1次プロセッサ(2814)から容易にアクセス可能な揮発性ランダムアクセスメモリを含むことができる。この場合には、標準動作モードに入りBOOT_RAM(2807)からシステムブートコードが実行されると、1次プロセッサ(2814)は、メモリシステム(2801)内に記憶されている1次プロセッサ(2814)用のソフトウェアプログラムコードの一部または全部を外部電子機器内の揮発性ランダムアクセスメモリに転送した後、当該メモリからソフトウェアプログラムコードを実行するように分岐することができる。
一部の携帯電話では、外部電子機器はさらに、1次プロセッサ用のシステムブートコードを記憶するのに使用されるフラッシュメモリやROMなどの不揮発性メモリを含むことができる。この場合には、システムブートコードは、任意的に、メモリシステム内のNANDフラッシュメモリには記憶されず、1次プロセッサがリセットから解放されたときに外部電子機器を介してアクセス可能な状態にされる。したがって、BOOT_CTLRは、NANDフラッシュメモリからBOOT_RAMにシステムブートコードをロードする役割は負わないが、依然としてNANDフラッシュメモリからFMM_RAMにFMMプログラムコードをロードする役割も、FMMおよび1次プロセッサをリセットから解放する役割も果たす。
この例では、1次プロセッサは、BOOT_CTLRによってリセットから解放されたときに、メモリシステムからではなく外部電子機器から命令をフェッチすることによってシステムブートコードを実行する。さらに、かかる携帯電話では、外部電子機器は、1次プロセッサのリセットを直接制御することができる。この場合には、BOOT_CTLRが1次プロセッサに向かうリセット信号をディアサートするときに、1次プロセッサが外部電子機器によって既にリセットから解放されていることもあれば、まだ解放されていないこともある。したがって、BOOT_CTLRが1次プロセッサに送るリセット信号は代替的に、メモリシステムが初期化され1次プロセッサからのコマンドをサービスする準備が整っているか否かを指示する信号として、1次プロセッサによって使用されてもよい。
本発明をいくつかの実施形態および例示的な状況を開示してきたが、本発明の範囲は、本明細書に具体的に開示される諸実施形態の範囲を超えて、本発明の他の諸代替実施形態および/または使用形態ならびに本発明の明白な修正形態および等価物の範囲に及ぶことが当業者には理解されるであろう。さらに、本発明のいくつかの変形形態を図面に示し詳細に説明してきたが、当業者には、本開示に基づいて本発明の範囲内の他の修正形態が容易に理解されるであろう。また、諸実施形態の個々の特徴および態様の様々な組合せまたはサブコンビネーションが可能であり、その場合にも本発明の範囲内にあることが企図される。したがって、本明細書に開示される発明の様々な形態を形成するために、本明細書に開示される諸実施形態の様々な特徴および態様を互いに組み合わせることも互いに置き換えることもできることが理解されるはずである。したがって、本明細書に開示される本発明の範囲は、具体的に開示した上述の諸実施形態に限定されるべきものではない。
Claims (63)
- 不揮発性メモリに接続されるように構成された不揮発性メモリコントローラ回路と、
揮発性メモリに接続されるように構成された揮発性メモリコントローラ回路と、
前記不揮発性メモリコントローラ回路に接続されるように構成され、ユーザ定義のブートプログラムコードが不揮発性メモリからメモリコントローラ用メモリに読み込まれるように構成されたブートコントローラ回路と、
第1のリセット信号を含み、第1の携帯電話プロセッサに接続されるように構成され、前記ユーザ定義のブートコードが前記メモリコントローラ用メモリに読み込まれた後に、前記第1の携帯電話プロセッサをリセット状態から解放するように構成された第1のプロセッサインターフェースと、
第2のリセット信号を含み、第2の携帯電話プロセッサに接続されるように構成され、該第2のリセット信号が前記第1のプロセッサによって少なくとも部分的に制御されるように構成された第2のプロセッサインターフェースと、
を備える携帯電話用メモリコントローラ。 - 第1のディスプレイに接続されるように構成された第1のディスプレイインターフェイスと、
第2のディスプレイに接続されるように構成された第2のディスプレイインターフェイスと、をさらに備え、
前記第1のプロセッサからのメモリ転送要求が受け取られたことに応答して、前記揮発性メモリから少なくとも前記第2のディスプレイに表示用データを少なくとも部分的に転送するようにさらに構成された、請求項1に記載の携帯電話用メモリコントローラ。 - 着脱可能なメモリデバイスに接続されるように構成されたインターフェースをさらに備える、請求項1に記載の携帯電話用メモリコントローラ。
- 着脱可能なメモリカードに接続されるように構成されたインターフェースをさらに備える、請求項1に記載の携帯電話用メモリコントローラ。
- 前記ユーザ定義のブートコードはブート用揮発性メモリにロードされる、請求項1に記載の携帯電話用メモリコントローラ。
- 前記不揮発性メモリはNANDフラッシュメモリを含む、請求項1に記載の携帯電話用メモリコントローラ。
- 前記不揮発性メモリはANDフラッシュメモリを含む、請求項1に記載の携帯電話用メモリコントローラ。
- 前記揮発性メモリはSDRAMメモリを含む、請求項1に記載の携帯電話用メモリコントローラ。
- 前記第1のプロセッサのポートを介して受け取られた要求に応答して、前記不揮発性メモリから前記揮発性メモリにデータを転送するように構成されたDMAコントローラと、
前記不揮発性メモリから読み出されたデータの誤り検出訂正を行うように構成されたECC回路と、
をさらに備える、請求項1に記載の携帯電話用メモリコントローラ。 - ユーザ定義のフラッシュメディア管理コードを記憶するメモリをさらに備える、請求項1に記載の携帯電話用メモリコントローラ。
- 不揮発性データ転送に関するデータをバッファリングするのに使用されるデータバッファをさらに備える、請求項1に記載の携帯電話用メモリコントローラ。
- 前記第1または第2のプロセッサの介入なしに、不揮発性メモリから読み出されたデータにおけるデータ誤りの少なくとも一部分を検出し訂正することができる誤り検出訂正回路をさらに備える、請求項1に記載の携帯電話用メモリコントローラ。
- 前記第1または第2のプロセッサの介入なしに、複数のページデータを、不揮発性メモリから揮発性メモリにコピーする回路をさらに備える、請求項1に記載の携帯電話用メモリコントローラ。
- 第2の不揮発性メモリコントローラと、第2の揮発性メモリコントローラとをさらに備える請求項1に記載の携帯電話用メモリコントローラ。
- 電源投入のリセット後に、ブート回路を使用して第1のアドレスを生成するステップと、
前記第1のアドレスに記憶されているデータを少なくとも含む、前記携帯電話の不揮発性フラッシュメモリからのデータにアクセスするステップと、
アクセス対象の前記データをページバッファに記憶するステップと、
アクセス対象の前記データがブートコードであるのかそれともフラッシュメモリ管理コードであるのかを判定するステップと、
アクセス対象の前記データがブートコードである場合には、前記データを前記ページバッファからブート用ランダムアクセスメモリにコピーするステップと、
アクセス対象の前記データがフラッシュメモリ管理コードである場合には、前記データを、前記ページバッファからフラッシュメモリ管理用ランダムアクセスメモリにコピーするステップと、
を含む、携帯電話の不揮発性メモリからデータを転送する方法。 - 前記フラッシュメモリ管理用のバッファに記憶されている前記フラッシュメモリ管理コードを使用してフラッシュメモリ管理の初期化が実施されている間、第1のモデムプロセッサをリセット状態に保つステップをさらに含む、請求項15に記載の方法。
- 前記モデムプロセッサをリセットから解放するステップをさらに含む、請求項16に記載の方法。
- 前記モデムプロセッサが前記ブート用ランダムアクセスメモリに記憶されている前記ブートコードを実行することができるようになるデータパスを提供するステップをさらに含む、請求項17に記載の方法。
- 携帯電話の不揮発性メモリに接続されるように構成された第1のインターフェース回路と、
携帯電話の揮発性メモリに接続されるように構成された第2のインターフェース回路と、
第1の携帯電話プロセッサに接続されるように構成され、前記第1のプロセッサが前記携帯電話の揮発性メモリへアクセスできるようにする第1のプロセッサインターフェースと、
第2の携帯電話プロセッサに接続されるように構成された第2のプロセッサインターフェースと、
前記第1のプロセッサまたは前記第2のプロセッサの介入なしに、携帯電話の不揮発性メモリのデータの少なくとも一部分を前記携帯電話の揮発性メモリにコピーするように構成されたコントローラ回路と、
を備える携帯電話用メモリコントローラ。 - 前記コントローラ回路は、前記第1のプロセッサから前記携帯電話の不揮発性メモリにデータを書き込むように構成される、請求項19に記載の携帯電話用メモリコントローラ。
- 前記揮発性メモリがフラッシュメモリであり、前記第1または第2のプロセッサの介入なしに、フラッシュメモリ管理プロセスを実行するように構成された回路をさらに備える、請求項19に記載の携帯電話用メモリコントローラ。
- 前記第1のプロセッサおよび前記第2のプロセッサが、前記不揮発性メモリへのアクセスの際、前記コントローラ回路に論理アドレスを提供し、
前記コントローラ回路は、前記第1または第2のプロセッサからの要求に応答して前記不揮発性メモリへアクセスするときに使用される論理アドレスから物理アドレスへの翻訳を実施するように構成される、請求項19に記載の携帯電話用メモリコントローラ。 - 前記コントローラ回路は、電源投入のリセット後前記第1のプロセッサを起動する前に、ユーザ定義のタスクをユーザ定義の順序に従って自動的に実施するように構成され、
前記ユーザ定義のタスクは、
電源投入のリセット後、前記携帯電話の不揮発性メモリからフラッシュメモリマネージャ回路のローカルメモリにフラッシュメディア管理コードをロードし、
セキュリティチェックするか、または、前記携帯電話の不揮発性メモリに記憶されているデータを実施することを含む、請求項19に記載の携帯電話用メモリコントローラ。 - 前記携帯電話の不揮発性メモリからブート用揮発性メモリにブートプログラムコードを転送するように構成された制御回路をさらに備え、
前記第1のプロセッサインターフェースが、前記ブートプログラムコードの少なくとも一部分が前記ブート用揮発性メモリに転送されている間前記第1のプロセッサをリセット状態に保つように構成されたリセット信号をさらに有する、請求項19に記載の携帯電話用メモリコントローラ。 - 前記携帯電話の不揮発性メモリはページモードでアクセスされるように構成される、請求項19に記載の携帯電話用メモリコントローラ。
- 前記携帯電話の不揮発性メモリから読み出されたデータに関する誤りを検出し訂正するように構成された誤り訂正検出回路をさらに備える、請求項19に記載の携帯電話用メモリコントローラ。
- 前記携帯電話の不揮発性メモリをさらに備え、前記メモリコントローラと前記携帯電話の不揮発性メモリとが単一のデバイスパッケージに収容され、前記携帯電話の不揮発性メモリへのアクセスが、前記メモリコントローラによって制御され、それによって前記不揮発性メモリに対する無許可アクセスが防止される、請求項19に記載の携帯電話用メモリコントローラ。
- リセット信号をディアサートするステップと、
携帯電話の不揮発性メモリに記憶されているブートデータに対応する第1のアドレスを生成するステップと、
前記第1のアドレスから始まるブートプログラムコードを前記携帯電話の不揮発性メモリから読み出すステップと、
前記ブートプログラムコードに関する誤り検出を行うステップと、
第1の誤りが検出された場合に少なくとも第1の誤りを訂正するステップと、
訂正ブートコードが存在する場合はそれらも含めて、前記ブートコードを揮発性ランダムアクセスメモリにロードするステップと、
前記携帯電話の不揮発性メモリからフラッシュメモリ管理用揮発性メモリにフラッシュメモリ管理用プログラムコードをロードするステップと、
フラッシュメモリ管理回路によって前記フラッシュメモリ管理用プログラムコードが実行されることを可能にするステップと、
前記携帯電話用メモリ回路に接続された第1の携帯電話プロセッサをリセット状態から解放するステップと、
前記第1の携帯電話プロセッサが前記ブートプログラムコードへアクセスできるようにするステップと、
第2の携帯電話プロセッサが前記揮発性メモリに記憶されているコードへアクセスできるようにするステップと、
を含む、携帯電話用のメモリ回路を操作する方法。 - 前記第1の携帯電話プロセッサが少なくとも第1のメモリ構成回路に1セットの第1の情報をロードするのを可能にするステップと、
少なくとも部分的に、前記第1の携帯電話プロセッサからのコマンドおよび前記第1の1セットの情報に応答して、前記不揮発性メモリから前記揮発性メモリにプログラムコードを転送するステップと、をさらに含み、前記第1の携帯電話プロセッサが、前記揮発性メモリに記憶されている少なくとも第1のプログラムを実行する、請求項28に記載の方法。 - 前記第1の携帯電話プロセッサからディスプレイ書込みコマンドを受け取るステップと、
第1の揮発性メモリアドレスを生成するステップと、
前記第1のアドレスから始まるデータを、前記揮発性メモリから第1の携帯電話のディスプレイにコピーするステップと、
をさらに含む、請求項28に記載の方法。 - 揮発性ランダムアクセスメモリから、第1の電話のディスプレイおよび第2の電話の第2のディスプレイに表示用データを転送するステップをさらに含む、請求項28に記載の方法。
- 携帯電話の不揮発性メモリに記憶されるように構成され、ユーザ部分に記憶されるユーザデータおよび予備部分に記憶される予備データを含む第1のページデータを受け取るステップと、
前記第1のページデータに関するページパリティデータを生成するステップと、
前記ページパリティデータを前記携帯電話の不揮発性メモリに記憶するステップと、
不揮発性メモリ管理のブックキーピングデータおよび/またはシステムフラグを含む予備データを、前記携帯電話の不揮発性メモリに記憶するステップと、
前記予備データに関するパリティデータを生成し、前記携帯電話の不揮発性メモリに記憶するステップと、
前記携帯電話の不揮発性メモリから前記予備データを読み出すステップと、
前記携帯電話の不揮発性メモリから前記予備データに関する前記パリティデータを読み出すステップと、
必要に応じて、前記予備データのパリティ情報を使用して前記携帯電話の不揮発性メモリの前記予備データに関する誤り検出および誤り訂正を実施するステップと、
を含む、方法。 - パリティデータはリードソロモン符号を使用して計算される、請求項32に記載の方法。
- パリティデータはハミング符号を使用して計算される、請求項32に記載の方法。
- 携帯電話用メモリコントローラであって、
携帯電話の不揮発性メモリに接続された第1のポートと、
携帯電話の揮発性メモリに接続された第2のポート回路と、
第1の携帯電話プロセッサに接続され、前記第1のプロセッサが前記携帯電話の揮発性メモリへアクセスできるようにする第1のプロセッサインターフェースと、
第2の携帯電話プロセッサに接続された第2のプロセッサインターフェースと、
を備え、
前記第1のプロセッサ及び前記第2のプロセッサの一方が、モデム制御を行うように構成される携帯電話用メモリコントローラ。 - 前記携帯電話の不揮発性メモリからブート用揮発性メモリにブートプログラムコードを転送する制御回路をさらに備え、前記第1のプロセッサインターフェースは、さらに、
前記ブートプログラムコードの少なくとも一部分が前記ブート用揮発性メモリに転送されている間は前記第1のプロセッサをリセット状態に保つように設定されたリセット信号を備える、請求項35に記載の携帯電話用メモリコントローラ。 - 着脱可能なメモリカードに接続されるように構成されたメモリカードインターフェイスをさらに備える、請求項35に記載の携帯電話用メモリコントローラ。
- メモリスティックカード、スマートメディアカード、セキュアデジタルカード、コンパクトフラッシュカード、および、マルチメディアカードの内の1つまたは複数に接続されるように構成されたインターフェースをさらに備える、請求項35に記載の携帯電話用メモリコントローラ。
- 転送開始後に、前記第1または前記第2のプロセッサの介入なしに、前記携帯電話の不揮発性メモリから前記携帯電話の揮発性メモリにデータを転送するように構成されたダイレクトメモリアクセス回路をさらに備える、請求項35に記載の携帯電話用メモリコントローラ。
- メモリアクセス権を複数の要求元に選択的に付与するように構成されたメモリアクセス回路をさらに備える、請求項35に記載の携帯電話用メモリコントローラ。
- 携帯電話の不揮発性メモリに接続された第1のポートと、
携帯電話の揮発性メモリに接続された第2のポート回路と、
第1の携帯電話プロセッサに接続され、を前記第1のプロセッサが前記携帯電話の揮発性メモリへアクセスできるようにする第1のデバイスインターフェイスと、
第2の携帯電話プロセッサ、または、携帯電話のディスプレイに接続されるように選択的に設定可能な第2のデバイスインターフェイスと、
を備える、携帯電話用メモリコントローラ。 - 前記携帯電話の不揮発性メモリからブート用揮発性メモリにブートプログラムコードを転送する制御回路をさらに備え、前記第1のプロセッサインターフェースは、前記ブートプログラムコードの少なくとも一部分が前記ブート用揮発性メモリに転送されている間、前記第1のプロセッサをリセット状態に保つように構成されるリセット信号をさらに備える、請求項41に記載の携帯電話用メモリコントローラ。
- 着脱可能なメモリカードに接続されるように構成されたメモリカードインターフェイスをさらに備える、請求項41に記載の携帯電話用メモリコントローラ。
- 少なくとも1つの携帯電話プロセッサに接続されるように構成された第3のデバイスインターフェイスをさらに備える、請求項41に記載の携帯電話用メモリコントローラ。
- 転送開始後に、前記第1のプロセッサの介入なしに、前記携帯電話の不揮発性メモリから前記携帯電話の揮発性メモリにデータを転送するように構成されたダイレクトメモリアクセス回路をさらに備える、請求項41に記載の携帯電話用メモリコントローラ。
- メモリアクセス権を複数の要求元に選択的に付与するように構成されたメモリアクセス回路をさらに備える、請求項41に記載の携帯電話用メモリコントローラ。
- 表示開始アドレス、揮発性メモリの開始アドレス、および前記揮発性メモリのアドレスから前記ディスプレイに転送すべきデータ量に関する指標を記憶するように設けられたメモリ素子をさらに備える、請求項41に記載の携帯電話用メモリコントローラ。
- 携帯電話用メモリコントローラデバイスであって、
携帯電話の不揮発性メモリに接続されるように構成された第1のポートと、
携帯電話のモデムプロセッサに接続されるように構成された第2のポート回路と、
ブート用揮発性メモリと、
前記携帯電話の不揮発性メモリから前記ブート用揮発性メモリにブートコードをコピーするように構成されたブートコントローラと、
前記モデムプロセッサからのコマンドに応答して、前記不揮発性メモリから前記ブート用揮発性メモリにデータをコピーするように構成されたダイレクトメモリアクセスコントローラと、
前記モデムプロセッサがブート用メモリデータを読み出すことができるようになるパスを提供する手段と、
を備える携帯電話用メモリコントローラデバイス。 - 前記第1のポートが、前記携帯電話の揮発性メモリから読み込まれたデータに関する誤りを検出し、検出された誤りの少なくとも一部分を訂正するように構成された誤り訂正検出回路をさらに含む、請求項48に記載の携帯電話用メモリコントローラ。
- 前記第1のポートは、前記第1のポートのデータ転送速度と前記第2のポートのデータ転送速度との不整合を調整するように設けられたデータバッファをさらに含む、請求項48に記載の携帯電話用メモリコントローラ。
- 着脱可能なメモリカードに接続されるように構成されたメモリカードインターフェイスをさらに備える請求項48に記載の携帯電話用メモリコントローラ。
- 少なくとも1つの携帯電話プロセッサに接続されるように構成された第3のポートをさらに備える請求項48に記載の携帯電話用メモリコントローラ。
- 書込み可能不揮発性メモリに記憶されているデータが上書きされないように保護するために携帯電話用メモリシステムを操作する方法であって、
メモリ制御回路において、第1の携帯電話プロセッサから、携帯電話の不揮発性メモリへの書込み処理を実施するよう指示する書込みコマンドを受け取るステップと、
前記メモリ制御回路において、前記第1の携帯電話プロセッサからデータを書き込むべき第1の論理アドレスに対応する第1の論理アドレスを受け取るステップと、
携帯電話のメモリ制御回路において、前記第1の論理アドレスを、前記携帯電話の不揮発性メモリの第1の保護領域が上書きされるのを防止するために少なくとも前記第1の保護領域を避けるように選択される第1の物理アドレスに翻訳するステップと、
前記書込みコマンドに応答して、前記第1の携帯電話プロセッサの命令に従い、前記第1の物理アドレスにデータを少なくとも部分的に書き込むステップと、
を含む方法。 - 前記第1の保護領域が、メモリ管理コードを記憶する、請求項53に記載の方法。
- 前記第1の保護領域が、前記携帯電話の不揮発性メモリに記憶された、前記第1の保護領域を論理アドレスもしくは物理アドレスまたはその両方を用いて定義するコードによって定義される、請求項53に記載の方法。
- 前記第1の携帯電話プロセッサがモデム機能を有する、請求項53に記載の方法。
- 携帯電話の不揮発性メモリに接続されるように構成された第1のインターフェース回路と、
第1の携帯電話プロセッサに接続されるように構成された第1のプロセッサインターフェースと、
前記第1のインターフェース回路および前記第1のプロセッサインターフェースに接続され、前記第1のプロセッサインターフェースを介して前記携帯電話の不揮発性メモリに関する論理アドレスを受け取り、前記論理アドレスを、前記携帯電話の不揮発性メモリに記憶されているコードまたはデータにアクセスするのに使用される物理アドレスに翻訳するように構成されることによって、前記第1の携帯電話プロセッサが前記携帯電話の不揮発性メモリに記憶されているコードまたはデータの少なくともサブセットにアクセスする上で前記コードまたはデータのサブセットに関する物理アドレスを知る必要がなくなる、コントローラ回路と、
を備える携帯電話用メモリコントローラ。 - コンピュータ読取り可能なメモリに記憶され、前記第1のプロセッサインターフェースに接続される第1の携帯電話プロセッサのタイプに依存しないフラッシュメモリ管理コードをさらに備える、請求項57に記載の携帯電話用メモリコントローラ。
- 前記制御回路に接続されるかまたは揮発性メインメモリに接続されるように構成された揮発性メモリインターフェイスをさらに備える、請求項57に記載の携帯電話用メモリコントローラ。
- 前記制御回路に接続され、第2の携帯電話プロセッサに接続されるように構成された第2のプロセッサインターフェースをさらに備える、請求項57に記載の携帯電話用メモリコントローラ。
- ブート用揮発性メモリと、
前記携帯電話の不揮発性メモリから前記ブート用揮発性メモリにブートプログラムコードを転送するように構成された制御回路とをさらに備え、前記第1のプロセッサインターフェースは、前記ブートプログラムコードの少なくとも一部分が前記ブート用揮発性メモリに転送されている間は前記第1のプロセッサをリセット状態に保つように構成されるリセット信号をさらに有する、請求項57に記載の携帯電話用メモリコントローラ。 - 前記携帯電話の不揮発性メモリをさらに備え、前記メモリコントローラと、前記携帯電話の不揮発性メモリとが単一のデバイスパッケージに収容され、前記携帯電話の不揮発性メモリへのアクセスが前記メモリコントローラによって制御され、それによって前記不揮発性メモリに対する無許可アクセスが防止される、請求項57に記載の携帯電話用メモリコントローラ。
- 前記揮発性メモリがフラッシュメモリであり、前記第1の携帯電話プロセッサの介入なしに、フラッシュメモリ管理プロセスを実行するように構成された回路をさらに備える請求項57に記載の携帯電話用メモリコントローラ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US60526504P | 2004-08-30 | 2004-08-30 | |
US61121904P | 2004-09-20 | 2004-09-20 | |
PCT/US2005/030928 WO2006026645A2 (en) | 2004-08-30 | 2005-08-30 | Systems and methods for providing nonvolatile memory management in wireless phones |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008511929A true JP2008511929A (ja) | 2008-04-17 |
Family
ID=36000700
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007530296A Pending JP2008511929A (ja) | 2004-08-30 | 2005-08-30 | 携帯電話の不揮発性メモリを管理するシステムおよび方法 |
Country Status (6)
Country | Link |
---|---|
US (2) | US7475184B2 (ja) |
EP (2) | EP1797645B1 (ja) |
JP (1) | JP2008511929A (ja) |
KR (1) | KR20070060101A (ja) |
DK (2) | DK3422583T3 (ja) |
WO (1) | WO2006026645A2 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013534015A (ja) * | 2010-07-01 | 2013-08-29 | クアルコム,インコーポレイテッド | モバイルデバイス内の組み込まれた不揮発性メモリとメイン揮発性メモリとの並列使用 |
JP2014182815A (ja) * | 2013-03-15 | 2014-09-29 | Boeing Co | 揮発性シャドウメモリを介した不揮発性メモリへのアクセス |
US9483411B2 (en) | 2014-03-05 | 2016-11-01 | Kabushiki Kaisha Toshiba | Memory system which transfers management information between first and second memories in a burst mode before a read process is performed on a third memory |
JP2021140553A (ja) * | 2020-03-06 | 2021-09-16 | キオクシア株式会社 | メモリシステム及びその制御方法 |
Families Citing this family (252)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8027194B2 (en) | 1988-06-13 | 2011-09-27 | Samsung Electronics Co., Ltd. | Memory system and method of accessing a semiconductor memory device |
KR100516693B1 (ko) * | 2003-04-02 | 2005-09-22 | 주식회사 하이닉스반도체 | 불휘발성 프로그래머블 로직 회로 |
US20070233955A1 (en) * | 2000-01-06 | 2007-10-04 | Super Talent Electronics Inc. | Mixed-Mode ROM/RAM Booting Using an Integrated Flash Controller with NAND-Flash, RAM, and SD Interfaces |
US20100146256A1 (en) * | 2000-01-06 | 2010-06-10 | Super Talent Electronics Inc. | Mixed-Mode ROM/RAM Booting Using an Integrated Flash Controller with NAND-Flash, RAM, and SD Interfaces |
US7098689B1 (en) | 2003-09-19 | 2006-08-29 | Xilinx, Inc. | Disabling unused/inactive resources in programmable logic devices for static power reduction |
US7498836B1 (en) | 2003-09-19 | 2009-03-03 | Xilinx, Inc. | Programmable low power modes for embedded memory blocks |
US7549139B1 (en) | 2003-09-19 | 2009-06-16 | Xilinx, Inc. | Tuning programmable logic devices for low-power design implementation |
US7581124B1 (en) | 2003-09-19 | 2009-08-25 | Xilinx, Inc. | Method and mechanism for controlling power consumption of an integrated circuit |
US7504854B1 (en) | 2003-09-19 | 2009-03-17 | Xilinx, Inc. | Regulating unused/inactive resources in programmable logic devices for static power reduction |
EP1797645B1 (en) * | 2004-08-30 | 2018-08-01 | Google LLC | Systems and methods for providing nonvolatile memory management in wireless phones |
EP1811395A4 (en) * | 2004-09-28 | 2008-01-02 | Zentek Technology Japan Inc | HOST CONTROLLER |
US7498839B1 (en) | 2004-10-22 | 2009-03-03 | Xilinx, Inc. | Low power zones for programmable logic devices |
JP4817836B2 (ja) | 2004-12-27 | 2011-11-16 | 株式会社東芝 | カードおよびホスト機器 |
US8291295B2 (en) * | 2005-09-26 | 2012-10-16 | Sandisk Il Ltd. | NAND flash memory controller exporting a NAND interface |
US7631245B2 (en) * | 2005-09-26 | 2009-12-08 | Sandisk Il Ltd. | NAND flash memory controller exporting a NAND interface |
US7498835B1 (en) | 2005-11-04 | 2009-03-03 | Xilinx, Inc. | Implementation of low power standby modes for integrated circuits |
ATE518190T1 (de) * | 2005-12-09 | 2011-08-15 | Sandisk Il Ltd | Verfahren zur flash-speicher-verwaltung |
US20070147115A1 (en) * | 2005-12-28 | 2007-06-28 | Fong-Long Lin | Unified memory and controller |
US7519754B2 (en) * | 2005-12-28 | 2009-04-14 | Silicon Storage Technology, Inc. | Hard disk drive cache memory and playback device |
US7345944B1 (en) * | 2006-01-11 | 2008-03-18 | Xilinx, Inc. | Programmable detection of power failure in an integrated circuit |
KR101173539B1 (ko) * | 2006-02-15 | 2012-08-14 | 삼성전자주식회사 | 멀티프로세서 시스템 그리고 멀티프로세서 시스템의 초기화방법 |
JP2007226380A (ja) * | 2006-02-22 | 2007-09-06 | Ricoh Co Ltd | 不揮発性メモリカード |
KR100737919B1 (ko) * | 2006-02-28 | 2007-07-10 | 삼성전자주식회사 | 낸드 플래시 메모리의 프로그램 방법 및 메모리 시스템의프로그램 방법 |
US20070226478A1 (en) * | 2006-03-23 | 2007-09-27 | John Rudelic | Secure boot from secure non-volatile memory |
US8176230B2 (en) * | 2006-04-07 | 2012-05-08 | Kingston Technology Corporation | Wireless flash memory card expansion system |
US7849302B2 (en) | 2006-04-10 | 2010-12-07 | Apple Inc. | Direct boot arrangement using a NAND flash memory |
JP4490392B2 (ja) * | 2006-05-30 | 2010-06-23 | 富士通マイクロエレクトロニクス株式会社 | 初期化回路を自動構築するリコンフィグ可能な集積回路装置 |
FR2902213B1 (fr) * | 2006-06-08 | 2008-10-17 | Thomson Licensing Sas | Carte electronique dotee de fonctions securitaires |
TWM309149U (en) * | 2006-06-23 | 2007-04-01 | Genesys Logic Inc | Data cache device of flash memory |
CN101479718B (zh) * | 2006-06-27 | 2011-04-06 | 日本电气株式会社 | 多处理器系统以及使用它的便携式终端 |
US8364850B2 (en) * | 2006-07-20 | 2013-01-29 | Qualcomm Incorporated | Utility service in multi-processor environment |
US20080028214A1 (en) * | 2006-07-28 | 2008-01-31 | Ronald Tafoya | Secure flash media for medical records |
US7730268B2 (en) * | 2006-08-18 | 2010-06-01 | Cypress Semiconductor Corporation | Multiprocessor system having an input/output (I/O) bridge circuit for transferring data between volatile and non-volatile memory |
US20080046630A1 (en) * | 2006-08-21 | 2008-02-21 | Sandisk Il Ltd. | NAND flash memory controller exporting a logical sector-based interface |
US20080046641A1 (en) * | 2006-08-21 | 2008-02-21 | Sandisk Il Ltd. | NAND flash memory controller exporting a logical sector-based interface |
US7898880B2 (en) * | 2006-09-12 | 2011-03-01 | Mtekvision Co., Ltd. | Dual port memory device, memory device and method of operating the dual port memory device |
KR100799687B1 (ko) | 2006-09-19 | 2008-02-01 | 삼성전자주식회사 | 비휘발성 메모리를 공유하는 두 개 이상의 콘트롤러를내장한 시스템 |
US8312345B1 (en) * | 2006-09-29 | 2012-11-13 | Marvell International Ltd. | Forward error correcting code encoder apparatus |
CN101558452B (zh) * | 2006-12-07 | 2012-08-29 | Nxp股份有限公司 | 用于在闪速eeprom存储页中重构可靠性数据的方法和装置 |
US20080147940A1 (en) * | 2006-12-18 | 2008-06-19 | Rom-Shen Kao | Method and apparatus for controlling a shared bus |
US7710777B1 (en) | 2006-12-20 | 2010-05-04 | Marvell International Ltd. | Semi-volatile NAND flash memory |
US8261091B2 (en) * | 2006-12-21 | 2012-09-04 | Spansion Llc | Solid-state memory-based generation and handling of security authentication tokens |
JP4939234B2 (ja) * | 2007-01-11 | 2012-05-23 | 株式会社日立製作所 | フラッシュメモリモジュール、そのフラッシュメモリモジュールを記録媒体として用いたストレージ装置及びそのフラッシュメモリモジュールのアドレス変換テーブル検証方法 |
US7564722B2 (en) | 2007-01-22 | 2009-07-21 | Micron Technology, Inc. | Memory system and method having volatile and non-volatile memory devices at same hierarchical level |
JP4967680B2 (ja) * | 2007-01-23 | 2012-07-04 | ソニー株式会社 | 記憶装置およびコンピュータシステム、並びに記憶装置の管理方法 |
US20080183984A1 (en) * | 2007-01-31 | 2008-07-31 | Dale Beucler | Memory system with read-modify-write |
US20080207252A1 (en) * | 2007-02-23 | 2008-08-28 | Magnus Tillgren | Mobile telephone with direct memory access |
US20080235438A1 (en) * | 2007-03-20 | 2008-09-25 | Sony Corporation And Sony Electronics Inc. | System and method for effectively implementing a multiple-channel memory architecture |
US7793036B2 (en) * | 2007-05-30 | 2010-09-07 | Intel Corporation | Method and arrangements for utilizing NAND memory |
US8051358B2 (en) | 2007-07-06 | 2011-11-01 | Micron Technology, Inc. | Error recovery storage along a nand-flash string |
US8065583B2 (en) * | 2007-07-06 | 2011-11-22 | Micron Technology, Inc. | Data storage with an outer block code and a stream-based inner code |
US20090055639A1 (en) * | 2007-08-20 | 2009-02-26 | Kimmo Kuusilinna | Methods and system for modular device booting |
GB2452699B (en) * | 2007-08-24 | 2012-08-01 | King S College London | Mobility and quality of service |
JP4564520B2 (ja) * | 2007-08-31 | 2010-10-20 | 株式会社東芝 | 半導体記憶装置およびその制御方法 |
US20090089497A1 (en) * | 2007-09-28 | 2009-04-02 | Yuriy Bulygin | Method of detecting pre-operating system malicious software and firmware using chipset general purpose direct memory access hardware capabilities |
IL187044A0 (en) * | 2007-10-30 | 2008-02-09 | Sandisk Il Ltd | Fast secure boot implementation |
JP4535117B2 (ja) * | 2007-11-06 | 2010-09-01 | ソニー株式会社 | メモリ装置、メモリ管理方法、およびプログラム |
US8898477B2 (en) * | 2007-11-12 | 2014-11-25 | Gemalto Inc. | System and method for secure firmware update of a secure token having a flash memory controller and a smart card |
US8307131B2 (en) * | 2007-11-12 | 2012-11-06 | Gemalto Sa | System and method for drive resizing and partition size exchange between a flash memory controller and a smart card |
US20090125645A1 (en) * | 2007-11-12 | 2009-05-14 | Gemalto Inc | System and method for supporting multiple tokens having a smart card to control parameters of a flash memory device |
US8499229B2 (en) | 2007-11-21 | 2013-07-30 | Micro Technology, Inc. | Method and apparatus for reading data from flash memory |
US8046542B2 (en) | 2007-11-21 | 2011-10-25 | Micron Technology, Inc. | Fault-tolerant non-volatile integrated circuit memory |
US20090157946A1 (en) * | 2007-12-12 | 2009-06-18 | Siamak Arya | Memory having improved read capability |
US7751221B2 (en) * | 2007-12-21 | 2010-07-06 | Unity Semiconductor Corporation | Media player with non-volatile memory |
US8621138B2 (en) | 2007-12-27 | 2013-12-31 | Sandisk Enterprise Ip Llc | Flash storage controller execute loop |
US7917790B2 (en) * | 2008-01-17 | 2011-03-29 | Broadcom Corporation | Separate power island for high performance processor that reboots to second boot sector |
US8880775B2 (en) * | 2008-06-20 | 2014-11-04 | Seagate Technology Llc | System and method of garbage collection in a memory device |
US7882388B2 (en) * | 2008-08-21 | 2011-02-01 | Sierra Wireless America, Inc. | Dual independent non volatile memory systems |
US8891298B2 (en) | 2011-07-19 | 2014-11-18 | Greenthread, Llc | Lifetime mixed level non-volatile memory system |
JP2010140266A (ja) * | 2008-12-11 | 2010-06-24 | Toshiba Corp | 電子デバイスシステムと電子デバイス |
GB2466225B (en) * | 2008-12-15 | 2013-10-02 | King S College London | Inter-access network handover |
GB2466226B (en) | 2008-12-15 | 2012-11-14 | King S College London | Improvements in or relating to network mobility |
US8316201B2 (en) * | 2008-12-18 | 2012-11-20 | Sandisk Il Ltd. | Methods for executing a command to write data from a source location to a destination location in a memory device |
US8732350B2 (en) * | 2008-12-19 | 2014-05-20 | Nvidia Corporation | Method and system for improving direct memory access offload |
US8694750B2 (en) * | 2008-12-19 | 2014-04-08 | Nvidia Corporation | Method and system for data structure management |
US9208108B2 (en) * | 2008-12-19 | 2015-12-08 | Nvidia Corporation | Method and system for improved flash controller commands selection |
US20100180183A1 (en) * | 2009-01-12 | 2010-07-15 | Macronix International Co., Ltd. | Circuit for reducing the read disturbance in memory |
KR101542878B1 (ko) * | 2009-02-13 | 2015-08-07 | 삼성전자주식회사 | 버퍼램을 포함하는 불휘발성 메모리 장치 및 그것의 부트 코드 관리 방법 |
KR101573722B1 (ko) * | 2009-04-20 | 2015-12-03 | 삼성전자주식회사 | 비휘발성 메모리 장치 및 컨트롤러를 포함하는 메모리 시스템 |
US8112607B2 (en) * | 2009-05-07 | 2012-02-07 | Sap Ag | Method and system for managing large write-once tables in shadow page databases |
TW201044262A (en) * | 2009-06-10 | 2010-12-16 | Nexcom Int Co Ltd | Assembled display device and display frame control method and system thereof |
JP2010287049A (ja) * | 2009-06-11 | 2010-12-24 | Toshiba Corp | メモリシステムおよびメモリシステムの管理方法 |
US8903653B2 (en) * | 2009-06-23 | 2014-12-02 | Uniloc Luxembourg S.A. | System and method for locating network nodes |
US8453021B2 (en) * | 2009-07-29 | 2013-05-28 | Stec, Inc. | Wear leveling in solid-state device |
US20110041039A1 (en) * | 2009-08-11 | 2011-02-17 | Eliyahou Harari | Controller and Method for Interfacing Between a Host Controller in a Host and a Flash Memory Device |
US20110040924A1 (en) * | 2009-08-11 | 2011-02-17 | Selinger Robert D | Controller and Method for Detecting a Transmission Error Over a NAND Interface Using Error Detection Code |
US8381077B2 (en) * | 2009-09-08 | 2013-02-19 | Lsi Corporation | Systems and methods for implementing error correction in relation to a flash memory |
US20120166749A1 (en) * | 2009-09-08 | 2012-06-28 | International Business Machines Corporation | Data management in solid-state storage devices and tiered storage systems |
KR101626084B1 (ko) * | 2009-11-25 | 2016-06-01 | 삼성전자주식회사 | 멀티 칩 메모리 시스템 및 그것의 데이터 전송 방법 |
US8683293B2 (en) * | 2009-12-16 | 2014-03-25 | Nvidia Corporation | Method and system for fast two bit error correction |
US8595411B2 (en) * | 2009-12-30 | 2013-11-26 | Sandisk Technologies Inc. | Method and controller for performing a sequence of commands |
US20110161553A1 (en) * | 2009-12-30 | 2011-06-30 | Nvidia Corporation | Memory device wear-leveling techniques |
US8443263B2 (en) | 2009-12-30 | 2013-05-14 | Sandisk Technologies Inc. | Method and controller for performing a copy-back operation |
US9594675B2 (en) * | 2009-12-31 | 2017-03-14 | Nvidia Corporation | Virtualization of chip enables |
US8526363B2 (en) * | 2010-01-13 | 2013-09-03 | Sony Corporation | Method and system for transferring data between wireless devices |
US8365041B2 (en) | 2010-03-17 | 2013-01-29 | Sandisk Enterprise Ip Llc | MLC self-raid flash data protection scheme |
JP2011197819A (ja) * | 2010-03-17 | 2011-10-06 | Toshiba Corp | 半導体装置 |
US8386895B2 (en) | 2010-05-19 | 2013-02-26 | Micron Technology, Inc. | Enhanced multilevel memory |
TWI456577B (zh) * | 2010-08-10 | 2014-10-11 | Hon Hai Prec Ind Co Ltd | 反及閘快閃記憶體啓動裝置及使用方法 |
US20120060023A1 (en) * | 2010-09-06 | 2012-03-08 | Samsung Electronics Co., Ltd. | Methods for booting an operating system using non-volatile memory |
US8823405B1 (en) | 2010-09-10 | 2014-09-02 | Xilinx, Inc. | Integrated circuit with power gating |
US9164886B1 (en) * | 2010-09-21 | 2015-10-20 | Western Digital Technologies, Inc. | System and method for multistage processing in a memory storage subsystem |
US9465728B2 (en) | 2010-11-03 | 2016-10-11 | Nvidia Corporation | Memory controller adaptable to multiple memory devices |
TWI417727B (zh) * | 2010-11-22 | 2013-12-01 | Phison Electronics Corp | 記憶體儲存裝置、其記憶體控制器與回應主機指令的方法 |
JP5845571B2 (ja) * | 2010-11-30 | 2016-01-20 | 富士通株式会社 | 計算システムおよび計算システム管理方法 |
DE112011100067T5 (de) * | 2011-01-07 | 2012-11-22 | Mediatek Inc. | Vorrichtungen und Verfahren zur Optimierung eines hybride automatische Wiederholungsanfrage (HARQ)-Pufferns |
FR2976147B1 (fr) * | 2011-05-30 | 2013-11-22 | Maxim Integrated Products | Schema d'entrelacement de donnees pour une memoire externe d'un microcontroleur securise |
JP5364807B2 (ja) * | 2011-06-08 | 2013-12-11 | パナソニック株式会社 | メモリコントローラ及び不揮発性記憶装置 |
US8909982B2 (en) | 2011-06-19 | 2014-12-09 | Sandisk Enterprise Ip Llc | System and method for detecting copyback programming problems |
US8910020B2 (en) | 2011-06-19 | 2014-12-09 | Sandisk Enterprise Ip Llc | Intelligent bit recovery for flash memory |
US10637820B2 (en) | 2011-10-21 | 2020-04-28 | Uniloc 2017 Llc | Local area social networking |
DE102011084963A1 (de) * | 2011-10-21 | 2013-04-25 | Robert Bosch Gmbh | Vorrichtung und Verfahren zum sicheren Erkennen von Weckereignissen in der Phase des Abschaltens eines Steuergerätes |
US9152223B2 (en) * | 2011-11-04 | 2015-10-06 | International Business Machines Corporation | Mobile device with multiple security domains |
US9058289B2 (en) | 2011-11-07 | 2015-06-16 | Sandisk Enterprise Ip Llc | Soft information generation for memory systems |
US8954822B2 (en) | 2011-11-18 | 2015-02-10 | Sandisk Enterprise Ip Llc | Data encoder and decoder using memory-specific parity-check matrix |
US9048876B2 (en) | 2011-11-18 | 2015-06-02 | Sandisk Enterprise Ip Llc | Systems, methods and devices for multi-tiered error correction |
US8924815B2 (en) | 2011-11-18 | 2014-12-30 | Sandisk Enterprise Ip Llc | Systems, methods and devices for decoding codewords having multiple parity segments |
US8971144B2 (en) | 2012-01-19 | 2015-03-03 | Quixant Plc | Hardware write-protection |
US9690673B2 (en) | 2012-01-31 | 2017-06-27 | Gary Gostin | Single and double chip spare |
US10379971B2 (en) | 2012-01-31 | 2019-08-13 | Hewlett Packard Enterprise Development Lp | Single and double chip space |
US9213632B1 (en) | 2012-02-29 | 2015-12-15 | Marvell International Ltd. | Systems and methods for data storage devices to use external resources |
US8843805B1 (en) * | 2012-03-16 | 2014-09-23 | Juniper Networks, Inc. | Memory error protection using addressable dynamic ram data locations |
US20130268780A1 (en) * | 2012-04-10 | 2013-10-10 | John Wong | Portable access and power supply apparatus |
WO2013168337A1 (ja) | 2012-05-08 | 2013-11-14 | パナソニック株式会社 | デバイス装置、アクセスシステム、及び、通信確立方法 |
CN103562935A (zh) * | 2012-05-08 | 2014-02-05 | 松下电器产业株式会社 | 器件装置、访问装置、访问系统、以及通信建立方法 |
US9183085B1 (en) | 2012-05-22 | 2015-11-10 | Pmc-Sierra, Inc. | Systems and methods for adaptively selecting from among a plurality of error correction coding schemes in a flash drive for robustness and low latency |
US9176812B1 (en) | 2012-05-22 | 2015-11-03 | Pmc-Sierra, Inc. | Systems and methods for storing data in page stripes of a flash drive |
US8996957B1 (en) | 2012-05-22 | 2015-03-31 | Pmc-Sierra, Inc. | Systems and methods for initializing regions of a flash drive having diverse error correction coding (ECC) schemes |
US8793556B1 (en) | 2012-05-22 | 2014-07-29 | Pmc-Sierra, Inc. | Systems and methods for reclaiming flash blocks of a flash drive |
US9047214B1 (en) | 2012-05-22 | 2015-06-02 | Pmc-Sierra, Inc. | System and method for tolerating a failed page in a flash device |
US9021337B1 (en) | 2012-05-22 | 2015-04-28 | Pmc-Sierra, Inc. | Systems and methods for adaptively selecting among different error correction coding schemes in a flash drive |
US9021336B1 (en) | 2012-05-22 | 2015-04-28 | Pmc-Sierra, Inc. | Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages |
US8788910B1 (en) | 2012-05-22 | 2014-07-22 | Pmc-Sierra, Inc. | Systems and methods for low latency, high reliability error correction in a flash drive |
US8972824B1 (en) | 2012-05-22 | 2015-03-03 | Pmc-Sierra, Inc. | Systems and methods for transparently varying error correction code strength in a flash drive |
US9021333B1 (en) | 2012-05-22 | 2015-04-28 | Pmc-Sierra, Inc. | Systems and methods for recovering data from failed portions of a flash drive |
US9244824B2 (en) | 2012-07-05 | 2016-01-26 | Samsung Electronics Co., Ltd. | Memory sub-system and computing system including the same |
US9699263B1 (en) | 2012-08-17 | 2017-07-04 | Sandisk Technologies Llc. | Automatic read and write acceleration of data accessed by virtual machines |
US9577673B2 (en) | 2012-11-08 | 2017-02-21 | Micron Technology, Inc. | Error correction methods and apparatuses using first and second decoders |
US9501398B2 (en) | 2012-12-26 | 2016-11-22 | Sandisk Technologies Llc | Persistent storage device with NVRAM for staging writes |
US9430339B1 (en) | 2012-12-27 | 2016-08-30 | Marvell International Ltd. | Method and apparatus for using wear-out blocks in nonvolatile memory |
US9612948B2 (en) | 2012-12-27 | 2017-04-04 | Sandisk Technologies Llc | Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device |
US9239751B1 (en) | 2012-12-27 | 2016-01-19 | Sandisk Enterprise Ip Llc | Compressing data from multiple reads for error control management in memory systems |
US9003264B1 (en) | 2012-12-31 | 2015-04-07 | Sandisk Enterprise Ip Llc | Systems, methods, and devices for multi-dimensional flash RAID data protection |
US9454420B1 (en) | 2012-12-31 | 2016-09-27 | Sandisk Technologies Llc | Method and system of reading threshold voltage equalization |
US10133557B1 (en) * | 2013-01-11 | 2018-11-20 | Mentor Graphics Corporation | Modifying code to reduce redundant or unnecessary power usage |
US9214965B2 (en) | 2013-02-20 | 2015-12-15 | Sandisk Enterprise Ip Llc | Method and system for improving data integrity in non-volatile storage |
US9329928B2 (en) | 2013-02-20 | 2016-05-03 | Sandisk Enterprise IP LLC. | Bandwidth optimization in a non-volatile memory system |
US20140248908A1 (en) | 2013-03-01 | 2014-09-04 | Uniloc Luxembourg S.A. | Pedestrian traffic monitoring and analysis |
US9870830B1 (en) | 2013-03-14 | 2018-01-16 | Sandisk Technologies Llc | Optimal multilevel sensing for reading data from a storage medium |
US9009565B1 (en) | 2013-03-15 | 2015-04-14 | Pmc-Sierra, Inc. | Systems and methods for mapping for solid-state memory |
US9026867B1 (en) | 2013-03-15 | 2015-05-05 | Pmc-Sierra, Inc. | Systems and methods for adapting to changing characteristics of multi-level cells in solid-state memory |
US9244763B1 (en) | 2013-03-15 | 2016-01-26 | Sandisk Enterprise Ip Llc | System and method for updating a reading threshold voltage based on symbol transition information |
US9053012B1 (en) | 2013-03-15 | 2015-06-09 | Pmc-Sierra, Inc. | Systems and methods for storing data for solid-state memory |
US9136877B1 (en) | 2013-03-15 | 2015-09-15 | Sandisk Enterprise Ip Llc | Syndrome layered decoding for LDPC codes |
US9367246B2 (en) | 2013-03-15 | 2016-06-14 | Sandisk Technologies Inc. | Performance optimization of data transfer for soft information generation |
US9236886B1 (en) | 2013-03-15 | 2016-01-12 | Sandisk Enterprise Ip Llc | Universal and reconfigurable QC-LDPC encoder |
US9081701B1 (en) | 2013-03-15 | 2015-07-14 | Pmc-Sierra, Inc. | Systems and methods for decoding data for solid-state memory |
US9092350B1 (en) | 2013-03-15 | 2015-07-28 | Sandisk Enterprise Ip Llc | Detection and handling of unbalanced errors in interleaved codewords |
US9009576B1 (en) | 2013-03-15 | 2015-04-14 | Sandisk Enterprise Ip Llc | Adaptive LLR based on syndrome weight |
US9208018B1 (en) | 2013-03-15 | 2015-12-08 | Pmc-Sierra, Inc. | Systems and methods for reclaiming memory for solid-state memory |
US10049037B2 (en) | 2013-04-05 | 2018-08-14 | Sandisk Enterprise Ip Llc | Data management in a storage system |
US9170941B2 (en) | 2013-04-05 | 2015-10-27 | Sandisk Enterprises IP LLC | Data hardening in a storage system |
US9159437B2 (en) | 2013-06-11 | 2015-10-13 | Sandisk Enterprise IP LLC. | Device and method for resolving an LM flag issue |
JP5744118B2 (ja) | 2013-07-17 | 2015-07-01 | ウィンボンド エレクトロニクス コーポレーション | 半導体記憶装置 |
US9384126B1 (en) | 2013-07-25 | 2016-07-05 | Sandisk Technologies Inc. | Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems |
US9524235B1 (en) | 2013-07-25 | 2016-12-20 | Sandisk Technologies Llc | Local hash value generation in non-volatile data storage systems |
US9043517B1 (en) | 2013-07-25 | 2015-05-26 | Sandisk Enterprise Ip Llc | Multipass programming in buffers implemented in non-volatile data storage systems |
US9361221B1 (en) | 2013-08-26 | 2016-06-07 | Sandisk Technologies Inc. | Write amplification reduction through reliable writes during garbage collection |
US9639463B1 (en) | 2013-08-26 | 2017-05-02 | Sandisk Technologies Llc | Heuristic aware garbage collection scheme in storage systems |
US9442670B2 (en) | 2013-09-03 | 2016-09-13 | Sandisk Technologies Llc | Method and system for rebalancing data stored in flash memory devices |
US9519577B2 (en) | 2013-09-03 | 2016-12-13 | Sandisk Technologies Llc | Method and system for migrating data between flash memory devices |
JP2015069602A (ja) * | 2013-09-30 | 2015-04-13 | 株式会社東芝 | メモリ・システム |
US9158349B2 (en) | 2013-10-04 | 2015-10-13 | Sandisk Enterprise Ip Llc | System and method for heat dissipation |
US9323637B2 (en) | 2013-10-07 | 2016-04-26 | Sandisk Enterprise Ip Llc | Power sequencing and data hardening architecture |
US20150106547A1 (en) * | 2013-10-14 | 2015-04-16 | Micron Technology, Inc. | Distributed memory systems and methods |
US9442662B2 (en) | 2013-10-18 | 2016-09-13 | Sandisk Technologies Llc | Device and method for managing die groups |
US9298608B2 (en) | 2013-10-18 | 2016-03-29 | Sandisk Enterprise Ip Llc | Biasing for wear leveling in storage systems |
US9436831B2 (en) | 2013-10-30 | 2016-09-06 | Sandisk Technologies Llc | Secure erase in a memory device |
US9263156B2 (en) | 2013-11-07 | 2016-02-16 | Sandisk Enterprise Ip Llc | System and method for adjusting trip points within a storage device |
US9244785B2 (en) | 2013-11-13 | 2016-01-26 | Sandisk Enterprise Ip Llc | Simulated power failure and data hardening |
US9152555B2 (en) | 2013-11-15 | 2015-10-06 | Sandisk Enterprise IP LLC. | Data management with modular erase in a data storage system |
US9703816B2 (en) | 2013-11-19 | 2017-07-11 | Sandisk Technologies Llc | Method and system for forward reference logging in a persistent datastore |
US9520197B2 (en) | 2013-11-22 | 2016-12-13 | Sandisk Technologies Llc | Adaptive erase of a storage device |
JP5996513B2 (ja) * | 2013-11-27 | 2016-09-21 | 京セラドキュメントソリューションズ株式会社 | 電子機器 |
US9122636B2 (en) | 2013-11-27 | 2015-09-01 | Sandisk Enterprise Ip Llc | Hard power fail architecture |
US9280429B2 (en) | 2013-11-27 | 2016-03-08 | Sandisk Enterprise Ip Llc | Power fail latching based on monitoring multiple power supply voltages in a storage device |
US9520162B2 (en) | 2013-11-27 | 2016-12-13 | Sandisk Technologies Llc | DIMM device controller supervisor |
US9250676B2 (en) | 2013-11-29 | 2016-02-02 | Sandisk Enterprise Ip Llc | Power failure architecture and verification |
US9582058B2 (en) | 2013-11-29 | 2017-02-28 | Sandisk Technologies Llc | Power inrush management of storage devices |
US9092370B2 (en) | 2013-12-03 | 2015-07-28 | Sandisk Enterprise Ip Llc | Power failure tolerant cryptographic erase |
US9235245B2 (en) | 2013-12-04 | 2016-01-12 | Sandisk Enterprise Ip Llc | Startup performance and power isolation |
US9129665B2 (en) | 2013-12-17 | 2015-09-08 | Sandisk Enterprise Ip Llc | Dynamic brownout adjustment in a storage device |
WO2015099703A1 (en) * | 2013-12-24 | 2015-07-02 | Intel Corporation | Hybrid memory and mtj based mram bit-cell and array |
KR101614521B1 (ko) * | 2014-01-03 | 2016-04-29 | 윈본드 일렉트로닉스 코포레이션 | 반도체 기억장치, 시스템 기동방법 및 컴퓨터 판독가능한 매체 |
JP6221762B2 (ja) * | 2014-01-16 | 2017-11-01 | 富士通株式会社 | 記憶装置、記憶方法及び制御装置 |
US9549457B2 (en) | 2014-02-12 | 2017-01-17 | Sandisk Technologies Llc | System and method for redirecting airflow across an electronic assembly |
US9497889B2 (en) | 2014-02-27 | 2016-11-15 | Sandisk Technologies Llc | Heat dissipation for substrate assemblies |
US9703636B2 (en) | 2014-03-01 | 2017-07-11 | Sandisk Technologies Llc | Firmware reversion trigger and control |
US9348377B2 (en) | 2014-03-14 | 2016-05-24 | Sandisk Enterprise Ip Llc | Thermal isolation techniques |
US9485851B2 (en) | 2014-03-14 | 2016-11-01 | Sandisk Technologies Llc | Thermal tube assembly structures |
US9519319B2 (en) | 2014-03-14 | 2016-12-13 | Sandisk Technologies Llc | Self-supporting thermal tube structure for electronic assemblies |
US9390814B2 (en) | 2014-03-19 | 2016-07-12 | Sandisk Technologies Llc | Fault detection and prediction for data storage elements |
US9454448B2 (en) | 2014-03-19 | 2016-09-27 | Sandisk Technologies Llc | Fault testing in storage devices |
US9448876B2 (en) | 2014-03-19 | 2016-09-20 | Sandisk Technologies Llc | Fault detection and prediction in storage devices |
US9390021B2 (en) | 2014-03-31 | 2016-07-12 | Sandisk Technologies Llc | Efficient cache utilization in a tiered data structure |
US9626399B2 (en) | 2014-03-31 | 2017-04-18 | Sandisk Technologies Llc | Conditional updates for reducing frequency of data modification operations |
US9626400B2 (en) | 2014-03-31 | 2017-04-18 | Sandisk Technologies Llc | Compaction of information in tiered data structure |
US9697267B2 (en) | 2014-04-03 | 2017-07-04 | Sandisk Technologies Llc | Methods and systems for performing efficient snapshots in tiered data structures |
TWI522804B (zh) * | 2014-04-23 | 2016-02-21 | 威盛電子股份有限公司 | 快閃記憶體控制器以及資料儲存裝置以及快閃記憶體控制方法 |
US9645749B2 (en) | 2014-05-30 | 2017-05-09 | Sandisk Technologies Llc | Method and system for recharacterizing the storage density of a memory device or a portion thereof |
US10114557B2 (en) | 2014-05-30 | 2018-10-30 | Sandisk Technologies Llc | Identification of hot regions to enhance performance and endurance of a non-volatile storage device |
US10372613B2 (en) | 2014-05-30 | 2019-08-06 | Sandisk Technologies Llc | Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device |
US10146448B2 (en) | 2014-05-30 | 2018-12-04 | Sandisk Technologies Llc | Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device |
US10656840B2 (en) | 2014-05-30 | 2020-05-19 | Sandisk Technologies Llc | Real-time I/O pattern recognition to enhance performance and endurance of a storage device |
US8891303B1 (en) | 2014-05-30 | 2014-11-18 | Sandisk Technologies Inc. | Method and system for dynamic word line based configuration of a three-dimensional memory device |
US10162748B2 (en) | 2014-05-30 | 2018-12-25 | Sandisk Technologies Llc | Prioritizing garbage collection and block allocation based on I/O history for logical address regions |
US9703491B2 (en) | 2014-05-30 | 2017-07-11 | Sandisk Technologies Llc | Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device |
US10656842B2 (en) | 2014-05-30 | 2020-05-19 | Sandisk Technologies Llc | Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device |
US9093160B1 (en) | 2014-05-30 | 2015-07-28 | Sandisk Technologies Inc. | Methods and systems for staggered memory operations |
US9070481B1 (en) | 2014-05-30 | 2015-06-30 | Sandisk Technologies Inc. | Internal current measurement for age measurements |
US9652381B2 (en) | 2014-06-19 | 2017-05-16 | Sandisk Technologies Llc | Sub-block garbage collection |
US9740614B2 (en) * | 2014-06-27 | 2017-08-22 | International Business Machines Corporation | Processor directly storing address range of co-processor memory accesses in a transactional memory where co-processor supplements functions of the processor |
JP6448254B2 (ja) * | 2014-08-19 | 2019-01-09 | ラピスセミコンダクタ株式会社 | メモリ制御装置及びメモリ制御方法 |
US9443601B2 (en) | 2014-09-08 | 2016-09-13 | Sandisk Technologies Llc | Holdup capacitor energy harvesting |
US20160077959A1 (en) * | 2014-09-12 | 2016-03-17 | Qualcomm Incorporated | System and Method for Sharing a Solid-State Non-Volatile Memory Resource |
TWI537816B (zh) * | 2014-10-13 | 2016-06-11 | 慧榮科技股份有限公司 | 非揮發性儲存裝置與控制器進行的控制方法 |
US9419624B2 (en) | 2014-11-12 | 2016-08-16 | Xilinx, Inc. | Power management system for integrated circuits |
JP6489827B2 (ja) * | 2014-12-26 | 2019-03-27 | キヤノン株式会社 | 画像処理装置、画像処理装置の制御方法及びプログラム |
US9798470B2 (en) * | 2015-01-23 | 2017-10-24 | Toshiba Memory Corporation | Memory system for storing and processing translation information |
KR102398213B1 (ko) * | 2015-03-09 | 2022-05-17 | 삼성전자주식회사 | 저장 장치, 그것을 포함하는 호스트 시스템, 및 그것의 맵 테이블 업데이트 방법 |
US9332567B1 (en) * | 2015-05-28 | 2016-05-03 | Freescale Semiconductor, Inc. | System for recovering unresponsive common public radio interface (CPRI) nodes |
US10120823B2 (en) * | 2015-09-25 | 2018-11-06 | Toshiba Memory Corporation | Host-safe firmware upgrade of a PCI express device |
JP6358219B2 (ja) * | 2015-10-02 | 2018-07-18 | 京セラドキュメントソリューションズ株式会社 | 記憶域管理プログラム及び電子機器 |
CN105607924B (zh) * | 2015-12-16 | 2019-01-18 | 天脉聚源(北京)传媒科技有限公司 | 一种下载管理方法及装置 |
US11217286B2 (en) | 2016-06-27 | 2022-01-04 | SK Hynix Inc. | Semiconductor memory device with power down operation |
KR102592359B1 (ko) | 2016-06-27 | 2023-10-20 | 에스케이하이닉스 주식회사 | 반도체장치 |
US11133042B2 (en) | 2016-06-27 | 2021-09-28 | SK Hynix Inc. | Semiconductor memory system and semiconductor memory device, which can be remotely initialized |
US10181346B2 (en) | 2016-08-02 | 2019-01-15 | SK Hynix Inc. | Semiconductor devices and operations thereof |
US10037788B2 (en) * | 2016-08-02 | 2018-07-31 | SK Hynix Inc. | Semiconductor devices and semiconductor systems |
US10452561B2 (en) | 2016-08-08 | 2019-10-22 | Raytheon Company | Central processing unit architecture and methods for high availability systems |
KR101886176B1 (ko) * | 2016-10-25 | 2018-08-08 | 시큐리티플랫폼 주식회사 | 소유자만 기록 가능한 부트영역을 포함하는 저장장치 |
US10289321B1 (en) * | 2017-05-05 | 2019-05-14 | Amazon Technologies, Inc. | Bad block table recovery in a solid state drives |
FR3084938A1 (fr) * | 2018-08-10 | 2020-02-14 | Stmicroelectronics (Grenoble 2) Sas | Microcontroleur |
TWI688863B (zh) | 2018-11-06 | 2020-03-21 | 慧榮科技股份有限公司 | 資料儲存裝置與資料處理方法 |
KR102711403B1 (ko) * | 2019-03-27 | 2024-09-30 | 에스케이하이닉스 주식회사 | 컨트롤러 및 그 동작 방법 |
KR20200129700A (ko) * | 2019-05-09 | 2020-11-18 | 에스케이하이닉스 주식회사 | 컨트롤러 및 이를 포함하는 메모리 시스템 |
US11768611B2 (en) | 2020-04-02 | 2023-09-26 | Axiado Corporation | Secure boot of a processing chip |
CN111506333B (zh) * | 2020-04-27 | 2023-05-16 | 湖北三江航天红峰控制有限公司 | 一种双dsp程序在线升级方法及系统 |
JP2022042762A (ja) * | 2020-09-03 | 2022-03-15 | キオクシア株式会社 | 不揮発性メモリ、メモリシステム、および、不揮発性メモリの制御方法 |
US11960608B2 (en) * | 2021-04-29 | 2024-04-16 | Infineon Technologies Ag | Fast secure booting method and system |
US12050779B2 (en) * | 2022-06-02 | 2024-07-30 | Micron Technology, Inc. | Storing non-volatile memory initialization failures |
WO2024044876A1 (en) * | 2022-08-29 | 2024-03-07 | Micron Technology, Inc. | Receiving executable instructions from volatile memory |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002095581A2 (en) * | 2001-05-19 | 2002-11-28 | International Business Machines Corporation | Electronic system and method for booting of an electronic system |
WO2003029992A1 (en) * | 2001-10-01 | 2003-04-10 | International Business Machines Corporation | Service processor access of non-volatile memory |
US20040030824A1 (en) * | 2002-08-08 | 2004-02-12 | Krauss Peter A. | Method for operating a data processing device while using compressed data |
JP2004118544A (ja) * | 2002-09-26 | 2004-04-15 | Renesas Technology Corp | メモリシステム |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4663707A (en) * | 1984-05-25 | 1987-05-05 | Scientific Micro Systems, Inc. | Multilevel bootstrap apparatus |
JPH05327582A (ja) | 1992-05-19 | 1993-12-10 | Fujitsu Ltd | 携帯電話機のプログラムメモリ書き替え方式 |
US5809531A (en) | 1992-09-21 | 1998-09-15 | Intel Corporation | Computer system for executing programs using an internal cache without accessing external RAM |
US5404485A (en) | 1993-03-08 | 1995-04-04 | M-Systems Flash Disk Pioneers Ltd. | Flash file system |
GB2301744B (en) * | 1995-06-02 | 2000-01-12 | Dsc Communications | Software download for a subscriber terminal of a wireless telecommunications system |
KR970055857A (ko) | 1995-12-30 | 1997-07-31 | 김광호 | 디지탈 셀룰라 시스템에서 기지국시스템의 로딩방법 |
US5979589A (en) * | 1997-05-02 | 1999-11-09 | Sarnoff Corporation | Flexible hearing aid |
US5937425A (en) | 1997-10-16 | 1999-08-10 | M-Systems Flash Disk Pioneers Ltd. | Flash file system optimized for page-mode flash technologies |
US6754894B1 (en) | 1999-12-03 | 2004-06-22 | Command Audio Corporation | Wireless software and configuration parameter modification for mobile electronic devices |
US6590685B1 (en) * | 2000-01-13 | 2003-07-08 | Northrop Grumman Corporation | Satellite communication optical beam acquisition techniques using a plurality of scan patterns |
US6560685B1 (en) * | 2000-09-27 | 2003-05-06 | Sony Corporation | System and method to improve speed and reduce memory allocation for set top box boot-up |
US6510488B2 (en) | 2001-02-05 | 2003-01-21 | M-Systems Flash Disk Pioneers Ltd. | Method for fast wake-up of a flash memory system |
JP4049297B2 (ja) | 2001-06-11 | 2008-02-20 | 株式会社ルネサステクノロジ | 半導体記憶装置 |
US20030114206A1 (en) * | 2001-08-24 | 2003-06-19 | United Parcel Service Of America, Inc. | Portable data acquisition and management system and associated device and method |
KR100393619B1 (ko) | 2001-09-07 | 2003-08-02 | 삼성전자주식회사 | 휴대 단말기의 메모리 장치 및 그 제어방법 |
DE60332091D1 (de) | 2002-01-31 | 2010-05-27 | Panasonic Corp | Informationsverarbeitungsvorrichtung, speicherverwaltungsvorrichtung, speicherverwaltungsverfahren und informationsverarbeitungsverfahren |
US6683817B2 (en) | 2002-02-21 | 2004-01-27 | Qualcomm, Incorporated | Direct memory swapping between NAND flash and SRAM with error correction coding |
US20030206442A1 (en) | 2002-05-02 | 2003-11-06 | Jerry Tang | Flash memory bridiging device, method and application system |
US20040049628A1 (en) * | 2002-09-10 | 2004-03-11 | Fong-Long Lin | Multi-tasking non-volatile memory subsystem |
JP4499982B2 (ja) | 2002-09-11 | 2010-07-14 | 株式会社日立製作所 | メモリシステム |
US20060074922A1 (en) | 2002-11-25 | 2006-04-06 | Kozo Nishimura | File management device, file management method, file management program and recording medium |
US7613880B2 (en) | 2002-11-28 | 2009-11-03 | Renesas Technology Corp. | Memory module, memory system, and information device |
US7610433B2 (en) | 2004-02-05 | 2009-10-27 | Research In Motion Limited | Memory controller interface |
US20050204091A1 (en) * | 2004-03-11 | 2005-09-15 | Kilbuck Kevin M. | Non-volatile memory with synchronous DRAM interface |
EP1797645B1 (en) * | 2004-08-30 | 2018-08-01 | Google LLC | Systems and methods for providing nonvolatile memory management in wireless phones |
-
2005
- 2005-08-30 EP EP05793509.0A patent/EP1797645B1/en active Active
- 2005-08-30 WO PCT/US2005/030928 patent/WO2006026645A2/en active Application Filing
- 2005-08-30 DK DK18186530.4T patent/DK3422583T3/da active
- 2005-08-30 US US11/215,744 patent/US7475184B2/en active Active
- 2005-08-30 KR KR1020077007266A patent/KR20070060101A/ko not_active Application Discontinuation
- 2005-08-30 EP EP18186530.4A patent/EP3422583B1/en active Active
- 2005-08-30 DK DK05793509.0T patent/DK1797645T3/en active
- 2005-08-30 JP JP2007530296A patent/JP2008511929A/ja active Pending
-
2008
- 2008-12-19 US US12/340,396 patent/US7941593B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002095581A2 (en) * | 2001-05-19 | 2002-11-28 | International Business Machines Corporation | Electronic system and method for booting of an electronic system |
WO2003029992A1 (en) * | 2001-10-01 | 2003-04-10 | International Business Machines Corporation | Service processor access of non-volatile memory |
US20040030824A1 (en) * | 2002-08-08 | 2004-02-12 | Krauss Peter A. | Method for operating a data processing device while using compressed data |
JP2004118544A (ja) * | 2002-09-26 | 2004-04-15 | Renesas Technology Corp | メモリシステム |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013534015A (ja) * | 2010-07-01 | 2013-08-29 | クアルコム,インコーポレイテッド | モバイルデバイス内の組み込まれた不揮発性メモリとメイン揮発性メモリとの並列使用 |
US10360143B2 (en) | 2010-07-01 | 2019-07-23 | Qualcomm Incorporated | Parallel use of integrated non-volatile memory and main volatile memory within a mobile device |
JP2014182815A (ja) * | 2013-03-15 | 2014-09-29 | Boeing Co | 揮発性シャドウメモリを介した不揮発性メモリへのアクセス |
US10089224B2 (en) | 2013-03-15 | 2018-10-02 | The Boeing Company | Write caching using volatile shadow memory |
US9483411B2 (en) | 2014-03-05 | 2016-11-01 | Kabushiki Kaisha Toshiba | Memory system which transfers management information between first and second memories in a burst mode before a read process is performed on a third memory |
US10310744B2 (en) | 2014-03-05 | 2019-06-04 | Toshiba Memory Corporation | Memory system which transfers management information between first and second memories in a burst mode before a read process is performed on a third memory |
JP2021140553A (ja) * | 2020-03-06 | 2021-09-16 | キオクシア株式会社 | メモリシステム及びその制御方法 |
JP7395388B2 (ja) | 2020-03-06 | 2023-12-11 | キオクシア株式会社 | メモリシステム及びその制御方法 |
Also Published As
Publication number | Publication date |
---|---|
US20060053246A1 (en) | 2006-03-09 |
WO2006026645A2 (en) | 2006-03-09 |
US7475184B2 (en) | 2009-01-06 |
US7941593B2 (en) | 2011-05-10 |
EP1797645B1 (en) | 2018-08-01 |
EP3422583B1 (en) | 2020-07-08 |
DK1797645T3 (en) | 2018-11-19 |
EP3422583A1 (en) | 2019-01-02 |
DK3422583T3 (da) | 2020-09-28 |
EP1797645A2 (en) | 2007-06-20 |
KR20070060101A (ko) | 2007-06-12 |
WO2006026645A3 (en) | 2006-07-06 |
EP1797645A4 (en) | 2009-01-14 |
US20090100307A1 (en) | 2009-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2008511929A (ja) | 携帯電話の不揮発性メモリを管理するシステムおよび方法 | |
KR102126643B1 (ko) | 주 메모리 시스템을 통해 코프로세서와 입력/출력 장치를 인터페이싱하는 시스템 및 방법 | |
CN103198450B (zh) | 图像形成装置 | |
US6754765B1 (en) | Flash memory controller with updateable microcode | |
US9158475B2 (en) | Memory apparatus and method therefor | |
US7676640B2 (en) | Flash memory controller controlling various flash memory cells | |
US8151036B2 (en) | Memory controller, memory system, and access control method of flash memory | |
US20060245274A1 (en) | Apparatus and method for controlling NAND flash memory | |
US20080256352A1 (en) | Methods and systems of booting of an intelligent non-volatile memory microcontroller from various sources | |
US20060075395A1 (en) | Flash card system | |
JP2007183961A (ja) | ハードディスクドライブキャッシュメモリ及び再生デバイス | |
KR20010006749A (ko) | 설치된 모든 대용량 저장 장치들의 리부트/파워 온리컨피그레이션을 최종 사용한 컨피그레이션과 동일하게하도록 각각의 대용량 저장 장치의 비휘발성 메모리에시스템 레벨 대용량 저장 컨피그레이션 데이터를 저장하는장치 및 방법 | |
JP2008108257A (ja) | 不揮発性記憶装置 | |
JPWO2008117520A1 (ja) | メモリコントローラ、不揮発性メモリシステムおよびホスト装置 | |
KR20080084082A (ko) | 메모리 카드 및 그것을 포함하는 메모리 시스템 그리고그것의 동작 방법 | |
US7870446B2 (en) | Information processing apparatus and nonvolatile semiconductor memory drive | |
US20140229724A1 (en) | Method and electronic device of file system prefetching and boot-up method | |
US20070150661A1 (en) | Information processing apparatus, information processing apparatus, and access control method | |
JP2010198252A (ja) | 不揮発メモリ装置、不揮発メモリの書込み方法、及び不揮発メモリ書込みプログラム | |
US8527733B2 (en) | Memory system | |
JP2022529873A (ja) | マルチモード保護メモリ | |
JP5622429B2 (ja) | マイクロコンピュータ | |
US8099544B2 (en) | Information processing apparatus and nonvolatile semiconductor memory drive | |
JP2009176147A (ja) | 電子機器および電子機器のメモリアクセス許可判別方法 | |
JP2010513993A (ja) | 情報処理装置および不揮発性半導体メモリドライブ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080501 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110824 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20120201 |