JP2015082166A - データ格納用フラッシュメモリの管理方法およびそのプログラム - Google Patents
データ格納用フラッシュメモリの管理方法およびそのプログラム Download PDFInfo
- Publication number
- JP2015082166A JP2015082166A JP2013219084A JP2013219084A JP2015082166A JP 2015082166 A JP2015082166 A JP 2015082166A JP 2013219084 A JP2013219084 A JP 2013219084A JP 2013219084 A JP2013219084 A JP 2013219084A JP 2015082166 A JP2015082166 A JP 2015082166A
- Authority
- JP
- Japan
- Prior art keywords
- macroblock
- segment
- parameter
- written
- mth
- 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
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7204—Capacity control, e.g. partitioning, end-of-life degradation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
【課題】管理領域を設ける必要がなく、またアクセス負荷を軽減することができる、データ格納用フラッシュメモリの管理方法を提供する。【解決手段】消去単位であるブロックをj個(jは2以上の偶数)含むフラッシュメモリに、時間と共に変化するk個(kは正の整数)のパラメータを記憶する、データ格納用フラッシュメモリの管理方法であって、以下のように構成される。j個のブロックをそれぞれj/2個ずつのブロックからなる2つの領域に分け、1次マクロブロックと2次マクロブロックとする。1次マクロブロックと2次マクロブロックは、それぞれが等しい記憶容量を持つk個以上のセグメントをそれぞれ備え、一方を現用系、他方を待機系とする。k個のパラメータのそれぞれは、k個以上のうちのk個のセグメントと1:1で対応付けられ、現用系マクロブロックにおける対応するセグメントに書き込まれ、そのセグメントから読み出される。【選択図】図1
Description
本発明は、データ格納用フラッシュメモリの管理方法およびそのプログラムに関し、特に当該フラッシュメモリへのアクセス負荷の低減に好適に利用できるものである。
ロボット、工作機器等の産業機器では制御の指令値、及び状態値の計算に回転数、角度、位置を表す種々のパラメータを使用する。また、携帯電話、サーバー等の通信機器でもTCP/IP(Transmission Control Protocol / Internet Protocol)やUSB(Universal Serial Bus)通信等で通信相手のIP(Internet Protocol)アドレスやベンダID(IDentification)等のパラメータを使用する。これらパラメータは機器を停止後(電源遮断後)、再度の起動後にも使用するので不揮発性メモリに格納する必要がある。また、読み出しは頻繁に行なわれ、読み出し程には頻度でないが、時間と共に変化するパラメータもあるので、その場合は値の更新も必要である。そのような機器の不揮発性メモリにはフラッシュメモリが多用され、CPU(Central Processing Unit)と同一半導体チップに混載され、上述のパラメータのようなデータの格納に用いられる、データフラッシュと呼ばれるフラッシュメモリが用いられる。
フラッシュメモリは、ブロックと呼ばれる数KB(キロバイト)の領域を1つの単位として一括して消去することができる点に特徴がある。書き込み単位は数B(バイト)であるが、一度書き込みを行ったアドレス領域において、別の値を上書きすることはできず、一旦ブロック単位で消去した後でないと再度書き込むことができない。上記のようなパラメータを格納するフラッシュメモリでは、格納されたパラメータの値を更新するときには、更新された値(最新の値)を新たなアドレス領域に追記する方法が、一般に採用されている。そのため、フラッシュメモリからパラメータを読み出すときに、最新の値が格納されているアドレスを求める、種々の管理方法が提案されている。
特許文献1には、フラッシュメモリを内蔵するマイクロコントローラが開示されている。内蔵されるフラッシュメモリを構成する複数のブロックは、1つの管理ブロックと複数のエリアのいずれかに属する複数のブロックに分割される。ここで「エリア」とは、フラッシュメモリに書き込むレコードの記録先を、そのレコードが含むデータの種別に応じて仕分けするために設けられた領域である。どの種別のデータがどのエリアに記録されているかの情報は、データIDとエリアとの対応関係を示すエリア対応テーブルとして、フラッシュメモリとは別のROMに格納されている(第0017段落〜第0018段落)。また、管理ブロックには、各エリアでデータの最新値が記録されているブロックの情報が書き込まれている(第0022段落)。マイクロコントローラに内蔵されているCPUは、管理ブロックに記録されている情報と、エリア対応テーブルを参照して、所望のデータを読み出し、或いは追記、ブロック単位の消去などの動作を行う。
特許文献2には、フラッシュメモリ等の不揮発性メモリを使ったデータバックアップ方法が開示されている。同一種別のデータに対する書き込み領域を、2つのメモリ媒体上にそれぞれ設け、一方のメモリ媒体のデータを消去する際には、他方のメモリ媒体に入力データの書き込みを行う。各メモリ媒体の運用状況は、それぞれに設けられた管理データ記憶領域を利用して管理される。データ種別ごとの書き込み領域は、消去単位であるブロック(同文献では「セクタ」と呼ばれている)を単位として、1乃至複数のブロックが割り当てられている。
特許文献1及び2について本発明者が検討した結果、以下のような新たな課題があることがわかった。
時間的に変化する、制御用あるいは通信用などのパラメータを、機器の電源遮断に備えて不揮発に保持するため、フラッシュメモリに格納する場合に、上記のような従来技術を用いると、パラメータのアクセスに際してCPUやメモリコントローラなどのアクセス主体に対して求められる負荷が重いことがわかった。上述のように、フラッシュメモリは、消去単位であるブロックを複数備えており、さらに消去単位(数KB)が書き込み単位(数B)と比較して著しく大きいため、データのアクセスは設けられた何らかの管理領域を利用して管理される。特許文献1ではフラッシュメモリ上に管理ブロックを設け、さらに、フラッシュメモリとは別のROMにデータIDとエリアとの対応関係を示すエリア対応テーブルを有している。特許文献2では管理データ記憶領域が設けられている。所望のデータを読み出す場合には、まず管理領域にアクセスして当該データが格納されているブロックを特定し、さらにそのブロックの中を探索して、最新の(最後に更新された)データを読み出す。データが変化し、書き込みが必要になった場合には、管理領域にアクセスして当該データを追記するブロックを特定し、さらにそのブロックの中の未使用領域(ブランク領域)を探索して書き込む。
以上のように、CPUやメモリコントローラなどのアクセス主体は、まず管理領域にアクセスして探索対象のブロックを特定し、次に特定されたブロックの中を探索するなど、何段階かのアクセス手順を採らなければならず、アクセスのための負荷が重いことが分かった。
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
一実施の形態によれば、下記の通りである。
すなわち、消去単位であるブロックをj個(jは2以上の偶数)含むフラッシュメモリに、時間と共に変化するk種(kは正の整数、「個」を単位とする場合もある)のパラメータを記憶する、データ格納用フラッシュメモリの管理方法であって、以下のように構成される。
j個のブロックをそれぞれj/2個ずつのブロックからなる2つの領域に分け、1次マクロブロックと2次マクロブロックとする。1次マクロブロックと2次マクロブロックは、それぞれが等しい記憶容量を持つk個以上のセグメントをそれぞれ備え、一方を現用系、他方を待機系とする。k種のパラメータのそれぞれは、k個以上のセグメントのうちのk個のセグメントと1:1で対応付けられ、現用系マクロブロックにおける対応するセグメントに書き込まれ、また、そのセグメントから読み出される。
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、フラッシュメモリ上に管理領域を設ける必要がなく、またアクセスに際して管理領域をアクセスするステップを不要として、アクセス負荷を軽減することができる。
1.実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕<パラメータとセグメントの1:1関連付け>
消去単位であるブロック(3)をj個(jは2以上の偶数)含むフラッシュメモリ(1)に、変化するk個(kは正の整数、「種」を単位とする場合もある)のパラメータを記憶する、データ格納用フラッシュメモリの管理方法であって、以下のように構成される。
消去単位であるブロック(3)をj個(jは2以上の偶数)含むフラッシュメモリ(1)に、変化するk個(kは正の整数、「種」を単位とする場合もある)のパラメータを記憶する、データ格納用フラッシュメモリの管理方法であって、以下のように構成される。
前記フラッシュメモリは、前記j個のブロックをそれぞれj/2個ずつのブロックからなる2つの領域に分けられ、1次マクロブロック(2_1)と2次マクロブロック(2_2)とされる。
前記1次マクロブロックと前記2次マクロブロックは、それぞれが等しい記憶容量を持つk個以上のセグメント(4)をそれぞれ備え、一方を現用系、他方を待機系とされる。
前記k個のパラメータ(5)のそれぞれは、前記k個以上のセグメントのうちのk個のセグメントと1:1で対応付けられ、現用系マクロブロックにおける対応するセグメントに書き込まれ、また、前記現用系マクロブロックにおける対応する前記セグメントから読み出される。
これにより、フラッシュメモリ上に管理領域を設ける必要がなく、またアクセスに際して管理領域をアクセスするステップを不要として、アクセス負荷を軽減することができる。
〔2〕<レコード=ヘッダ(分割数、オフセット、他)+データ>
項1において、前記k個のパラメータに含まれる第Mパラメータ(Mはk以下の正の整数)は、ヘッダ情報(10)が付加されて、前記現用系マクロブロックの第Mセグメントの先頭アドレスから書き込まれ(S7)、以降に第Mパラメータが書き込まれるときは、前記第Mセグメントのブランク領域の先頭アドレスから書き込まれる(S14)。
項1において、前記k個のパラメータに含まれる第Mパラメータ(Mはk以下の正の整数)は、ヘッダ情報(10)が付加されて、前記現用系マクロブロックの第Mセグメントの先頭アドレスから書き込まれ(S7)、以降に第Mパラメータが書き込まれるときは、前記第Mセグメントのブランク領域の先頭アドレスから書き込まれる(S14)。
前記ヘッダ情報は、前記1次マクロブロックと前記2次マクロブロックがそれぞれ含むセグメント数(15)と、次に前記第Mパラメータを書き込むべき領域の先頭アドレスを算出可能な、アドレスオフセット情報(16)を含む。
これにより、ブランク領域の先頭アドレスを簡単に算出することができる。
〔3〕<対応するセグメントに空きがなくなったときブランクセグメントに書き込み>
項1または項2において、前記1次マクロブロックと前記2次マクロブロックのそれぞれにおけるセグメントの数がk+1以上であるとする。前記k個のパラメータに含まれる第Mパラメータについて、前記現用系マクロブロックにおける対応する第Mセグメントへの書き込みを試みたとき、前記第Mセグメントの全ての領域が書き込み済みの場合、前記現用系マクロブロックにおける第1から第kセグメント以外のセグメントに、前記第Mパラメータの値の全部または一部を書き込む(S16〜S20)。
項1または項2において、前記1次マクロブロックと前記2次マクロブロックのそれぞれにおけるセグメントの数がk+1以上であるとする。前記k個のパラメータに含まれる第Mパラメータについて、前記現用系マクロブロックにおける対応する第Mセグメントへの書き込みを試みたとき、前記第Mセグメントの全ての領域が書き込み済みの場合、前記現用系マクロブロックにおける第1から第kセグメント以外のセグメントに、前記第Mパラメータの値の全部または一部を書き込む(S16〜S20)。
前記第Mパラメータのヘッダ情報に含まれるアドレスオフセット情報(16)は、次に前記第Mパラメータを書き込むべき領域の、書き込み対象とされた前記セグメントにおける先頭アドレスを示す情報を含む。
これにより、対応するセグメントに空きがなくなったときに、未使用のセグメントを探索して新たな書き込み対象セグメントとして活用することができる。また、さらに次の第Mパラメータの書き込みの際に、どのセグメントが新たな書き込み対象セグメントとして選択されたかは、第Mセグメントに最後に書き込まれたデータのヘッダ情報から簡単に算出される。
〔4〕<ブランクセグメントがなくなった場合のマクロブロックの交替>
項3において、前記第Mパラメータの書き込みを試みたとき、前記現用系マクロブロックにおけるに未使用セグメントがなくなったとき、前記第Mパラメータの書き込みを前記待機系マクロブロックの第Mセグメントの先頭アドレスから行う(S21)。
項3において、前記第Mパラメータの書き込みを試みたとき、前記現用系マクロブロックにおけるに未使用セグメントがなくなったとき、前記第Mパラメータの書き込みを前記待機系マクロブロックの第Mセグメントの先頭アドレスから行う(S21)。
その後、前記第Mパラメータ以外のパラメータについて、それぞれ最新の値を前記現用系マクロブロックから読み出し、前記待機系マクロブロックにおける対応するセグメントに書き込む(S23〜S28)。
その後、前記現用系マクロブロックの全ての領域のデータを消去する(S27)。
その後、前記待機系マクロブロックを新たに現用系マクロブロックとし、前記現用系マクロブロックを新たに待機系マクロブロックとする。
これにより、1次マクロブロックと2次マクロブロックを、現用系と待機系として交互に交替させて使用することができる。
〔5〕<ブランクチェック(書き込み時)>
項2において、前記第Mパラメータの書き込みを実行するとき、前記現用系マクロブロックの先頭から前記ヘッダ情報に含まれる前記アドレスオフセット情報を読み出す(S4)。
項2において、前記第Mパラメータの書き込みを実行するとき、前記現用系マクロブロックの先頭から前記ヘッダ情報に含まれる前記アドレスオフセット情報を読み出す(S4)。
前記アドレスオフセット情報に基づいて、前記第Mパラメータが次に更新され書き込まれる領域の先頭アドレスを算出し(S10〜S11)、さらに当該領域のデータを読み出すことにより、当該領域が既にデータが書き込まれた書き込み済み領域か、ブランク領域かを判定するステップ(S9〜S12)を、ブランク領域を発見するまで繰り返す。
発見したブランク領域に、前記第Mパラメータを書き込む(S14)。
これにより、短い探索時間(探索ステップ)により、ブランク領域を発見して、そこに書き込むことができる。
〔6〕<最新パラメータの判別(読み出し時)>
項2において、前記第Mパラメータの読み出しを実行するとき、前記現用系マクロブロックの先頭から前記ヘッダ情報に含まれる前記アドレスオフセット情報を読み出す(S35)。
項2において、前記第Mパラメータの読み出しを実行するとき、前記現用系マクロブロックの先頭から前記ヘッダ情報に含まれる前記アドレスオフセット情報を読み出す(S35)。
前記アドレスオフセット情報に基づいて、前記第Mパラメータが次に更新され書き込まれる領域の先頭アドレスを算出し、さらに当該領域のデータを読み出すことにより、当該領域が既にデータが書き込まれた書き込み済み領域か、ブランク領域かを判定するステップ(S39〜S43)を、ブランク領域を発見するまで繰り返す。
発見したブランク領域の直前に書き込まれている前記第Mパラメータを、前記第Mパラメータの最新の値として読み出す(S44)。
これにより、短い探索時間(探索ステップ)により、最新パラメータを発見して読み出すことができる。
〔7〕<ヘッダにセグメントIDを含む>
項2において、前記ヘッダ情報は、前記第Mパラメータが書き込まれるセグメントのセグメント識別情報(13)をさらに含む。
項2において、前記ヘッダ情報は、前記第Mパラメータが書き込まれるセグメントのセグメント識別情報(13)をさらに含む。
これにより、読み出されたデータに含まれるヘッダ情報から、パラメータ種別を判別することができる。
〔8〕<セグメントIDと配列名を対応付ける変換テーブル>
項7において、前記セグメント識別情報とアプリケーションプログラム(91)が使用する配列名とを対応付ける変換テーブル(7)を、前記データ格納用フラッシュメモリ内に保持する。
項7において、前記セグメント識別情報とアプリケーションプログラム(91)が使用する配列名とを対応付ける変換テーブル(7)を、前記データ格納用フラッシュメモリ内に保持する。
これにより、アプリケーションプログラムからは、配列名によってアクセスすることができ、高級言語で記述されたアプリケーションプログラムからも、データ格納用フラッシュメモリ上のデータを扱うことができる。
〔9〕<変換テーブルにおけるセグメントIDと配列名の対応関係の更新>
項8において、前記変換テーブルに、同じ前記セグメント識別情報に対して複数回の前記配列名の対応付けが許され、偶数回の対応付けにより当該セグメント識別情報に対する配列名の対応付けを無効とし、次の奇数回目の当該セグメント識別情報に対する配列名の対応付けを有効とする。
項8において、前記変換テーブルに、同じ前記セグメント識別情報に対して複数回の前記配列名の対応付けが許され、偶数回の対応付けにより当該セグメント識別情報に対する配列名の対応付けを無効とし、次の奇数回目の当該セグメント識別情報に対する配列名の対応付けを有効とする。
これにより、セグメントIDに対応付けられる配列名を、変更可能とすることができる。
〔10〕<プログラム(パラメータとセグメントの1:1関連付け)>
フラッシュメモリ(1)に、時間と共に変化するk個(kは正の整数)のパラメータ(5)を繰り返し更新するための書き込み、前記パラメータの最新データを読み出すためのプログラム(92)であって、前記フラッシュメモリにアクセス可能なプロセッサ(81)によって実行されることにより、以下の各処理を実行する。
フラッシュメモリ(1)に、時間と共に変化するk個(kは正の整数)のパラメータ(5)を繰り返し更新するための書き込み、前記パラメータの最新データを読み出すためのプログラム(92)であって、前記フラッシュメモリにアクセス可能なプロセッサ(81)によって実行されることにより、以下の各処理を実行する。
前記フラッシュメモリ内に、消去単位であるブロック(3)をそれぞれ同数ずつ備える1次マクロブロック(2_1)と2次マクロブロック(2_2)を定義し、前記1次マクロブロックと前記2次マクロブロックの一方を現用系、他方を待機系とする。前記1次マクロブロック内に、それぞれが等しい記憶容量を持つk個以上のセグメント(4)を定義し、前記2次マクロブロック内に、それぞれが等しい記憶容量を持つk個以上のセグメント(4)を定義する。
前記k個のパラメータのそれぞれを、前記k個以上のセグメントのうちのk個のセグメントと1:1で対応付ける。
前記パラメータを前記フラッシュメモリに書き込むときには、現用系マクロブロックにおける対応するセグメントに対して書き込むための書き込みステップ(S4〜S20)を実行する。
前記パラメータの最新値を前記フラッシュメモリから読み出すときには、前記現用系マクロブロックにおける対応するセグメントに対して読み出しステップ(S35〜S45)を実行する。
これにより、データ格納用フラッシュメモリとそれにアクセス可能なプロセッサを備えるデータ処理装置において、フラッシュメモリ上に管理領域を設ける必要がなく、またアクセスに際して管理領域をアクセスするステップを不要として、プロセッサによるアクセス負荷を軽減することができる、データ格納用フラッシュメモリの管理プログラムを提供することができる。
〔11〕<ブランク領域を探索する書き込みステップと最新値を探索する読み出しステップ; レコード=ヘッダ(分割数、オフセット、他)+データ>
項10において、前記k個のパラメータに含まれる第Mパラメータ(Mはk以下の正の整数)は、ヘッダ情報(10)が付加され、前記現用系マクロブロックにおいて対応する第Mセグメントの先頭アドレスから順次書き込まれている。
項10において、前記k個のパラメータに含まれる第Mパラメータ(Mはk以下の正の整数)は、ヘッダ情報(10)が付加され、前記現用系マクロブロックにおいて対応する第Mセグメントの先頭アドレスから順次書き込まれている。
前記ヘッダ情報は、前記1次マクロブロックと前記2次マクロブロックがそれぞれ含むセグメント数(15)と、次に前記第Mパラメータを書き込むべき領域の先頭までのオフセットを示す、アドレスオフセット情報(16)を含む。
第Mパラメータを書き込むための前記書き込みステップは、前記第Mセグメントの先頭アドレスから前記ヘッダに含まれる前記アドレスオフセット情報を読み出し(S4)、前記アドレスオフセット情報から次のヘッダ情報が格納されるアドレスを算出して次のヘッダ情報を読み出すステップ(S9〜S12)を、ヘッダ情報の格納されていないブランク領域に到達するまで繰り返す。前記第Mパラメータにヘッダ情報を付加して、前記ブランク領域に書き込むステップ(S14、S20)を含む。
第Mパラメータの最新値を読み出すための前記読み出しステップは、前記第Mセグメントの先頭アドレスから前記ヘッダに含まれる前記アドレスオフセット情報を読み出す(S36,S39)。前記アドレスオフセット情報から次のヘッダ情報が格納されるアドレスを算出して次のヘッダ情報を読み出すステップ(S39〜S43)を、ヘッダ情報の格納されていないブランク領域に到達するまで繰り返す。前記ブランク領域に到達する直前に読み出したヘッダ情報が付加されたパラメータを前記第Mパラメータの最新値として読み出すステップ(S44)を含む。
これにより、短い探索時間(探索ステップ)により、ブランク領域を発見して、そこに書き込むことができ、また、最新パラメータを発見して読み出すことができる。
〔12〕<対応するセグメントに空きがなくなったときブランクセグメントに書き込み>
項11において、前記1次マクロブロックと前記2次マクロブロックのそれぞれにおけるセグメントの数がk+1以上であるとする。第Mパラメータを書き込むための前記書き込みステップは、前記現用系マクロブロックにおける対応する第Mセグメントへの書き込みを試みたとき、前記第Mセグメントの全ての領域が書き込み済みの場合、前記現用系マクロブロックにおける第1から第kセグメント以外のセグメントに、前記第Mパラメータの値の全部または一部を書き込むステップ(S16〜S20)を含む。
項11において、前記1次マクロブロックと前記2次マクロブロックのそれぞれにおけるセグメントの数がk+1以上であるとする。第Mパラメータを書き込むための前記書き込みステップは、前記現用系マクロブロックにおける対応する第Mセグメントへの書き込みを試みたとき、前記第Mセグメントの全ての領域が書き込み済みの場合、前記現用系マクロブロックにおける第1から第kセグメント以外のセグメントに、前記第Mパラメータの値の全部または一部を書き込むステップ(S16〜S20)を含む。
前記第Mパラメータのヘッダ情報に含まれるアドレスオフセット情報は、次に前記第Mパラメータを書き込むべき領域の、書き込み対象とされた前記セグメントにおける先頭アドレスを算出可能な情報を含む。
これにより、対応するセグメントに空きがなくなったときに、未使用のセグメントを探索して新たな書き込み対象セグメントとして活用することができる。また、さらに次の第Mパラメータの書き込みの際に、どのセグメントが新たな書き込み対象セグメントとして選択されたかは、第Mセグメントに最後に書き込まれたデータのヘッダ情報から簡単に算出される。
〔13〕<ブランクセグメントがなくなった場合のマクロブロックの交替>
項12において、前記第Mパラメータの書き込みを試みたとき、前記現用系マクロブロックにおけるに未使用セグメントがなくなったとき、前記プログラムは、前記第Mパラメータの書き込みを、前記待機系マクロブロックの第Mセグメントの先頭アドレスから行うステップ(S21)を含む。
項12において、前記第Mパラメータの書き込みを試みたとき、前記現用系マクロブロックにおけるに未使用セグメントがなくなったとき、前記プログラムは、前記第Mパラメータの書き込みを、前記待機系マクロブロックの第Mセグメントの先頭アドレスから行うステップ(S21)を含む。
その後、前記第Mパラメータ以外のパラメータについて、それぞれ最新の値を前記現用系マクロブロックから読み出し、前記待機系マクロブロックにおける対応するセグメントに書き込むステップ(S24〜S25)を含む。
その後、前記現用系マクロブロックの全ての領域のデータを消去するステップ(S27)を含む。
その後、前記待機系マクロブロックを新たに現用系マクロブロックとし、前記現用系マクロブロックを新たに待機系マクロブロックとするステップを含む。
これにより、1次マクロブロックと2次マクロブロックを、現用系と予備系として交互に交替させて使用することができる。
〔14〕<ヘッダにセグメントIDを含む>
項11において、前記ヘッダ情報は、前記第Mパラメータが書き込まれるセグメントのセグメント識別情報(13)をさらに含む。
項11において、前記ヘッダ情報は、前記第Mパラメータが書き込まれるセグメントのセグメント識別情報(13)をさらに含む。
これにより、読み出されたデータに含まれるヘッダ情報から、パラメータ種別を判別することができる。
〔15〕<セグメントIDと配列名を対応付ける変換テーブル>
項14において、前記セグメント識別情報とアプリケーションプログラム(91)が使用する配列名とを対応付ける変換テーブル(7)を、前記フラッシュメモリ内に保持するステップを含む。
項14において、前記セグメント識別情報とアプリケーションプログラム(91)が使用する配列名とを対応付ける変換テーブル(7)を、前記フラッシュメモリ内に保持するステップを含む。
これにより、アプリケーションプログラムからは、配列名によってアクセスすることができ、高級言語で記述されたアプリケーションプログラムからも、データ格納用フラッシュメモリ上のデータを扱うことができる。
〔16〕<変換テーブルにおけるセグメントIDと配列名の対応関係の更新>
項15において、前記変換テーブルに、同じ前記セグメント識別情報に対して複数回の前記配列名の対応付けが許され、偶数回の対応付けにより当該セグメント識別情報に対する配列名の対応付けを無効とし、次の奇数回目の当該セグメント識別情報に対する配列名の対応付けを有効とするステップを含む。
項15において、前記変換テーブルに、同じ前記セグメント識別情報に対して複数回の前記配列名の対応付けが許され、偶数回の対応付けにより当該セグメント識別情報に対する配列名の対応付けを無効とし、次の奇数回目の当該セグメント識別情報に対する配列名の対応付けを有効とするステップを含む。
これにより、セグメントIDに対応付けられる配列名を、変更可能とすることができる。
2.実施の形態の詳細
実施の形態について更に詳述する。
実施の形態について更に詳述する。
〔実施形態1〕<パラメータとセグメントの1:1関連付け>
図4は、本実施形態1に係るデータ格納用フラッシュメモリ(データフラッシュ)1が適用されたシステム70の構成例を表す説明図である。システム70は、ロボットや工作機械等の産業機器71や携帯電話やサーバー等の通信機器72を、USB、Ethernet(登録商標)、その他シリアル通信等の通信手段を介して制御するマイコン80を含んで構成される。マイコン80は、メモリ83、データフラッシュ1、CPUコア81、I/O82を含んで構成される。メモリ83には、産業機器71や通信機器72を制御するプログラム90が格納される。データフラッシュ1には、それらの制御のための、指令値、状態値、及び、それらの計算の基となる制御パラメータである、回転数、角度、位置など、さらに、TCP/IPやUSB通信等での通信相手のIPアドレスやベンダID等の通信パラメータが格納される。CPUコア81はメモリ83から読み出したプログラム90を実行する。そして、データフラッシュ1から読み出したパラメータ5を基に、制御演算や通信処理を実行する。I/O82はCPUコア81の制御によりデータ入出力処理をし、産業機器71や通信機器72を制御する。
図4は、本実施形態1に係るデータ格納用フラッシュメモリ(データフラッシュ)1が適用されたシステム70の構成例を表す説明図である。システム70は、ロボットや工作機械等の産業機器71や携帯電話やサーバー等の通信機器72を、USB、Ethernet(登録商標)、その他シリアル通信等の通信手段を介して制御するマイコン80を含んで構成される。マイコン80は、メモリ83、データフラッシュ1、CPUコア81、I/O82を含んで構成される。メモリ83には、産業機器71や通信機器72を制御するプログラム90が格納される。データフラッシュ1には、それらの制御のための、指令値、状態値、及び、それらの計算の基となる制御パラメータである、回転数、角度、位置など、さらに、TCP/IPやUSB通信等での通信相手のIPアドレスやベンダID等の通信パラメータが格納される。CPUコア81はメモリ83から読み出したプログラム90を実行する。そして、データフラッシュ1から読み出したパラメータ5を基に、制御演算や通信処理を実行する。I/O82はCPUコア81の制御によりデータ入出力処理をし、産業機器71や通信機器72を制御する。
特に制限されないが、マイコン80は、例えば、公知のCMOS(Complementary Metal-Oxide-Semiconductor field effect transistor)LSI(Large Scale Integrated circuit)の製造技術を用いて、シリコンなどの単一半導体基板上に形成される。データフラッシュ1は、CPUコア81と同じ半導体基板上に形成されたフラッシュメモリで、ブロックと呼ばれる一括消去の単位となる領域を複数備えて構成される。フラッシュメモリは、ブロックよりも小さな書き込み単位と読み出し単位を有する。メモリ83は、SRAM(Static Random Access Memory)やフラッシュメモリ等の不揮発性メモリ、またはそれらの組み合わせなどで構成される。CPUコア81と、メモリ83、データフラッシュ1、I/O82等を全て同じ単一の半導体基板上に形成してもよい。1個のフラッシュメモリを設けて、一部をメモリ83として使用し、別の一部をデータフラッシュ1として使用しても良い。一方、データフラッシュ1を独立したフラッシュメモリによって構成することにより、アクセスの独立性が保たれ調停が不要となる。CPUコア81とメモリ83とデータフラッシュ1とI/O82とは、特に制限されないが、例えば、バスを介して互いに接続される。バスは、階層化されていてもよい。また、CPUコア81は複数のCPUコアによるマルチプロセッサであってもよい。「CPU」はプロセッサを代表するものに過ぎず、他のプロセッサ、MPU(Micro Processing Unit)、PE(Processor Element)、DSP(Digital Signal Processor)等であってもよい。
図5は、システム70におけるソフトウェア(プログラム)90とデータフラッシュ1の構成例を表す説明図である。データフラッシュ1は、特に制限されないが一例として、容量が32Kバイトで、消去単位が8Kバイト、書き込み単位が8バイトまたは128バイト、読み出し単位は任意であり、消去単位である8Kバイトのブロック3を4個備えて構成されるものとして説明する。ソフトウェア90は、アプリケーション91、データ管理ドライバ92、アクセスドライバ93から構成される。アプリケーション91は、データ管理ドライバ92から取得したパラメータを基に、CPUコア81に制御演算や通信処理をさせる。データ管理ドライバ92は、データフラッシュ1上のデータ管理を実行する。アクセスドライバ93は、データ管理ドライバ92の要求に従い、データフラッシュ1上のデータ書き込み、読み出し、及び、消去を行う。データ管理ドライバ92には、本実施形態が適用されることにより、データサイズの可変長化に対応し、書き込み均等化による検索の効率が向上する(検索が高速化される)。
図1は、データフラッシュ1上のデータ構成を表す説明図である。
データフラッシュ1の容量が32Kバイトである場合を一例として、本実施形態でのデータフラッシュ1上のデータ構成を説明する。
データフラッシュ1は消去単位である8Kバイトのブロック4個(3_1〜3_4)で構成される。この4個のブロックを2個ずつの1次マクロブロック2_1と2次マクロブロック2_2に分割する。そして、1次マクロブロック2_1を、複数のセグメント4に分割する。分割数は、データフラッシュ1に格納されるパラメータ5の種別数(個数)以上とし、2のべき乗数であるのが好ましい。この例では、分割数は、1, 2, 4, 8, 16, 32(= 20, 21, 22, 23, 24, 25)のいずれかとする。また、2次マクロブロック2_2も1次マクロブロック2_1と同じ分割数で分割する。図1は、1次マクロブロック2_1として先頭から2ブロック(ブロック(1)とブロック(2))(3_1と3_2)、残りを2次マクロブロック2_2(ブロック(3)とブロック(4))(3_3と3_4)、分割数を16とした例である。1次マクロブロック2_1のセグメント4は16個(セグメント(0)〜セグメント(15))、2次マクロブロック2_2のセグメント4は16個(セグメント(0')〜セグメント(15'))となる。
各セグメントの先頭からレコード6を書き込む。レコード6には、ユーザがデータフラッシュ1に書き込みたいパラメータ5が含まれている。どのセグメント4にどのレコード6、即ちどのパラメータ5を書き込むかは、例えば識別番号IDで関連付けることとする。例えば、パラメータ(0,t(x))、パラメータ(1,t(x))、パラメータ(2,t(x))、…からそれぞれレコード(0,x)、レコード(1,x)、レコード(2,x)、…が構成され、セグメント(0)、セグメント(1)、セグメント(2)、…にそれぞれ関連付けられる。ここで、パラメータ(i,t(x))は、第iパラメータの時刻t(x)における更新値である。第iパラメータは、識別番号i(ID= i)のパラメータであり、時間と共に変化するものとする。ここで、「時間と共に変化する」とは、物理的に時間依存性があることに限定されるものではなく、広く何らかの原因で変化することを指すものである。変化したときには必ずデータフラッシュ1に書き込まれる必要があるとは限らない。パラメータ(i,t(x))は、x回目にデータフラッシュ1に書き込まれた第iパラメータの、時刻t(x)における値を表す。パラメータ(i,t(1)), パラメータ(i,t(2)), パラメータ(i,t(3)), …は、データフラッシュ1に書き込まれる度に、対応するレコード(i,1), レコード(i,2), レコード(i,3), …が作られ、対応するセグメント(i)の先頭アドレスから順に書き込まれる。最後に書き込まれた値が最新値であり、当該セグメント内で最後に書き込まれたレコードの次のアドレス以降は、ブランク領域(未使用領域)である。図1には、1次マクロブロック2_1が現用系とされ、2次マクロブロック2_2が待機系とされている時点でのレコードの書き込み状態が例示されている。セグメント(0)にレコード(0,1)、レコード(0,2)、レコード(0,3)が書き込まれ、セグメント(1)にレコード(1,1)が書き込まれ、セグメント(6)にレコード(6,1)、レコード(6,2)が書き込まれている。各セグメント内のレコードのサイズは可変長である。
図2は、データフラッシュ1上のレコード6の構成を表す説明図である。(a)には、パラメータとセグメント内の書き込み領域の関係が示される。第6パラメータの更新回ごとの更新値である、パラメータ(6,t(1))、パラメータ(6,t(2))、…パラメータ(6,t(N))がセグメント(6)に書き込まれるとき、それぞれの更新値に対応してレコード(6,1)、レコード(6,2)、…レコード(6,N)が構成され、セグメント(6)の先頭アドレスから順に書き込まれる。(b)にはレコードの構成が示される。レコード6はデータ領域9とヘッダ領域10とで構成される。データ領域9は、パラメータ(6,t(N))そのものであって可変長である。ヘッダ領域10は、例えば4バイトで構成される。(c)にはヘッダの構成例が示される。ヘッダは、Con(Concatenation)フィールド11と、rsv1(reserved)フィールド12と、ID(Identification)フィールド13と、rsv2フィールド14と、DivP(Divided power)フィールド15と、オフセット(Offset)フィールド16から構成される。
図3は、ヘッダの構成をより詳細に表す説明図である。ヘッダの内容がビッグエンディアン形式で示される。
ビット31とビット30はConフィールド11である。パラメータが1個のレコードに収まっているか、以降のレコードに続いているかを示す領域で、b'01であれば連結なし、即ち1個のレコードに収まっていることを示し、b'10であれば連結あり、即ち以降のレコードに続いていることを示し、b'00とb'11は無効とされる。
ビット28〜ビット24はIDフィールド13である。格納先セグメントのIDを示す領域である。ここで、セグメントは最大32個なので0〜31の値をとる。
ビット19〜ビット16はDivPフィールド15である。分割数を2のべき乗で表したときの指数を示す領域である。ここで、分割数は1, 2, 4, 8, 16, 32なので0〜5の値をとる。
ビット15〜ビット0はオフセット(Offset)フィールド16である。次のレコードまでのオフセットアドレスを示す。オフセットアドレスは最小書き込み単位(最小値)からセグメントサイズから最小書き込み単位を減じた値(最大値)の範囲を取り得る。ここで、最小書き込み単位が8バイト、分割数が2の場合のセグメントサイズが最大で、H'0008〜H'3FF8の値をとる。
ビット29、及びビット23〜ビット20は予約領域、rsv1フィールド12とrsv2フィールド14である。
<書き込み動作>
データ管理ドライバ92のデータフラッシュ1へのパラメータ5の書き込み動作について、より詳細に説明する。
データ管理ドライバ92のデータフラッシュ1へのパラメータ5の書き込み動作について、より詳細に説明する。
図6と図7は、パラメータ5のデータフラッシュへの書き込み動作を表すフローチャートである。図6に前半、図7に後半を示す。
データフラッシュ1は、容量が32Kバイトで、16Kバイトずつの1次マクロブロックと2次マクロブロックに分けられ、書き込まれるパラメータが11種であることを前提とする。1次マクロブロックと2次マクロブロックがそれぞれ16セグメントに分割されている(分割数が16)場合で、M番目のパラメータ(パラメータ(M,t(N)))を書き込むケースを例に採って説明する。レコードやヘッダのデータ構造は、図2、3に例示したものと同様として説明する。
1次マクロブロックの先頭であるセグメント(0)の先頭8バイトを読み出して、ブランクチェックする(S1)。ここで、ブランクチェックとは、読み出された領域がブランク領域、即ち、消去された後未だデータが書き込まれていない領域か否かを判定することである。一般には、データフラッシュにはブランクチェック機能が付加されており、アクセスドライバ93がブランクチェック機能を使用しブランク領域を判定するが、フラッシュメモリによっては、以下のフラッシュメモリの仕様を利用することも考えられる。フラッシュメモリは、その仕様により、消去された状態がall 0またはall 1になっている。消去された状態がall 0の場合、0以外が書き込まれていればブランク領域ではないと判断され、消去された状態がall 1の場合、1以外が書き込まれていればブランク領域ではないと判断される。例えば、セグメント(0)に既にレコードが書き込まれている場合、先頭8バイトのうちの4バイトはヘッダ情報であり、そのビット31〜30はConフィールド11である。Conフィールド11においてb'00とb'11は無効とされているので、レコードが書き込まれていれば、b'00とb'11以外の値をとるから、b'00またはb'11であればブランク領域であると判断することができる。同様に、読み出した8バイトの全てのビットをチェックしてもよい。また、先頭8バイトとしたのは一例であって、何バイトでも良い。例えば、ヘッダ領域である4バイトを読み出して、ブランクチェックをしても良いし、Conフィールド11を含む先頭の1バイトのみを読み出して、ブランクチェックをしても良い。
S1のブランクチェック結果を判定する(S2)。S2の結果、セグメント(0)の先頭8バイトがブランク領域であれば、その時点では1次マクロブロックが待機系であり、現用系の2次マクロブロックが書き込み対象のマクロブロックであることがわかるので、2次マクロブロックへの書き込み動作を行う(S3)。その後の2次マクロブロックへの書き込み動作は、S4以下に示される、1次マクロブロックが現用系である場合の書き込み動作と同様であるので、以降の説明は省略する。
S2の結果、セグメント(0)の先頭8バイトがブランク領域でなければ、その時点では1次マクロブロックが現用系である。1次マクロブロックのセグメント(0)の先頭レコードであるレコード(0,1)のヘッダを読み出す(S4)。S4で読み出したレコード(0,1)のヘッダのDivPフィールド15からマクロブロックの分割数がわかるので、それを基にセグメント(M)の先頭アドレスを計算し、セグメント(M)の先頭8バイトをブランクチェックする(S5)。その結果に基づいて、セグメント(M)がブランク領域か否かを判定する(S6)。ブランク領域であれば、パラメータ(M,t(N))をレコード(M,0)に書き込み終了する(S7)。これは、初期値の書き込みとなる。
S6の結果、セグメント(M)がブランク領域でなければ、カウンタNを0に初期化する(S8)。このとき、カウンタNは、空きのレコード番号を判定するために利用されるカウンタである。次に、セグメント(M)からレコード(M,N)のヘッダを読み出す(S9)。S9で読み出したレコード(M,N)のヘッダからオフセットアドレスを取得する(S10)。S10で取得したオフセットアドレスから8バイト分をブランクチェックし(S11)、セグメント(M)におけるレコード(M,N)に続く領域がブランク領域か否かを判定する(S12)。S12で当該領域がブランク領域と判定されれば、パラメータ(M,t(N))がセグメント(M)の範囲内で書き込めるかを判定する(S13)。S13でセグメント(M)の範囲内であれば、パラメータ(M,t(N)) をレコード(M,N+1)に書き込み(S14)、書き込み動作を終了する。これは、連結なしの書き込みとなる。S12で当該領域がブランク領域でないと判定された場合、セグメント(M)の空きレコード番号を判定するカウンタNを1増やし(S15)、S9に戻る。
以上、説明したように、マクロブロックの先頭に書き込まれたレコードのヘッダに含まれるDivPフィールド15を読み出すことによって、マクロブロックの分割数がわかる。パラメータとセグメントは、1:1に対応付けられているので、書き込むパラメータのIDから、書き込むべきセグメントが一意に決まる。書き込みが可能なブランク領域(未使用領域)の探索は、そのセグメントの中で、ヘッダに含まれるオフセットのみを先頭から順番に辿れば済むので、探索ステップを最小限に抑えることができる。これにより、短い探索時間(探索ステップ)により、ブランク領域を発見して、そこに書き込むことができる。
S13でブランク領域がセグメント(M)の範囲内でなければ、セグメント(M)以外への書き込み動作となる。以降のフローは図7に示される。
カウンタLをM+1に初期化する(S16)。このとき、カウンタLは、空きのセグメント番号を判定するために使用される。1次マクロブロックに未使用のセグメントがあるか判定する(S17)。判定はセグメント番号(L)が分割数(=16)より小さいかで行う。
S17で、1次マクロブロックに未使用セグメントがあると判定されれば、セグメント(L)の先頭8バイトをブランクチェックする(S18)。セグメント(L)がブランク領域か否かを判定する(S19)。ブランク領域でなければ、S16に戻る。セグメント(L)がブランク領域であれば、パラメータ(M,t(N))の前半をセグメント(M)に書き込み、パラメータ(M,t(N))の後半をセグメント(L)に書き込み(S20)、書き込み動作を終了する。これは、連結ありの書き込みとなる。
これにより、対応するセグメントに空きがなくなったときに、未使用のセグメント(ブランクセグメント)を探索して新たな書き込み対象セグメントとして活用することができる。また、さらに次の第Mパラメータの書き込みの際に、どのセグメントが新たな書き込み対象セグメントとして選択されたかは、第Mセグメントに最後に書き込まれたデータのヘッダ情報のオフセットフィールドから簡単に算出される。
S17で、現用系である1次マクロブロックに未使用のまま残っているセグメント(ブランクセグメント)がないと判定されたときは、パラメータ(M,t(N)) を待機系である2次マクロブロックの対応するセグメント(M')の先頭レコード(M',0)に書き込む(S21)。S21以降の動作は、ブロック消去の書き込みとなる。現用系のマクロブロックと待機系のマクロブロックを交替させる動作の一部を構成する。
セグメント番号のカウンタLを0に初期化する(S22)。現用系のマクロブロックと待機系のマクロブロックを交替させる動作では、各パラメータについて、最新レコードのみを現用系から待機系に書き写す。このとき、カウンタLは、最新レコードを検索して書き写す対象のセグメントのセグメント番号を指すポインタとして使用される。
カウンタLが指す対象セグメントがセグメント(M)であるかを判定する(S23)。判定は、カウンタLがセグメント番号Mと等しいか否かによって行う。判定の結果、カウンタLが指す対象セグメントがセグメント(M)と等しければS26に進む。S23でカウンタLが指す対象セグメントがセグメント(M)と異なれば、セグメント(L)の最新レコードを検索する(S24)。検索は、ヘッダのオフセットアドレスに基づく次のレコード領域の先頭アドレスの算出と、その領域のブランクチェックにより行う。セグメント(L)の最新レコードを、2次マクロブロックの対応するセグメント(L')の先頭レコード(L',0)に書き込む(S25)。最新レコードを検索して書き写す必要がある、残りのセグメントがあるか否かを判定する(S26)。S26の判定は、セグメント番号Lがマクロブロックの末尾のセグメント番号である15であるか否かの判断によって行う。S26で残りのセグメントがあると判断されれば、最新レコードを検索するセグメントを示すセグメント番号のカウンタLを1増やし(S28)、S23に戻る。S26で残りのセグメントがないと判断されれば、1次マクロブロックの全体を消去し(S27)、書き込み動作を終了する。これ以降、1次マクロブロックは待機系となり、2次マクロブロックが現用系となる。
これにより、1次マクロブロックと2次マクロブロックを、現用系と待機系として交互に交替させて使用することができる。
<書き込み動作の例>
容量が32Kバイト、パラメータが11種の場合の上記と同じ例を引用して、データフラッシュ1への書き込み動作の一例について、さらに詳しく説明する。
容量が32Kバイト、パラメータが11種の場合の上記と同じ例を引用して、データフラッシュ1への書き込み動作の一例について、さらに詳しく説明する。
図8は、パラメータのデータフラッシュへの書き込み動作(連結なし)を表す説明図であり、図9は、図8におけるレコード(M,N)の内容を示す説明図である。
パラメータが11種なので、セグメント毎に異なる種類のパラメータを格納できるように、1次マクロブロックと2次マクロブロックはそれぞれ16分割されている。ブロック分割は初回の起動時にパラメータの種別数をユーザにアプリケーションから与えてもらい、分割数をパラメータ種別数以上で最小の値に決める。なお、パラメータ種別数が所定の数、例えば図1〜図3に例示される32より大きい場合、ユーザにパラメータ種別数が32個以下になるようにパラメータをまとめて管理してもらうこととする。
M番目のパラメータの場合を例として、ヘッダの設定値を説明する。
時刻t”(N)において、M番目のパラメータ(パラメータ(M,t”(N)))を更新し、レコード(M,N)をセグメント(M)に書き込んだ場合、ヘッダの設定値は、以下の値をとる。即ち、Conフィールドは連結なしのb'01であり、IDフィールドはセグメントIDのM、DivPフィールドは16分割を示す4、Offsetフィールドはパラメータ(M,t”(N))のサイズ+4(=ヘッダサイズ)+アライメント調整分となる。アライメント調整分とは、隣接する新旧レコードの境界が、アドレスの例えば8バイト毎の境界(8バイトアライメント)と一致するように調整するための量である。アライメントのサイズは、データフラッシュ1を構成するフラッシュメモリの書き込み単位に基づいて決める。書き込み単位が8バイトの場合は、8バイトの倍数をアライメントサイズとすることができるので、一般には書き込み単位と同じバイト数をアライメントサイズとするとよい。
時刻t(1)における1番目のパラメータの値、パラメータ(0,t(1))にヘッダを付加してレコード(0,1)とし、レコード(0,1)をセグメント(0)の先頭アドレスに書き込む。消去された後、まだデータが書かれていない領域は、ブランク領域である。この時点でセグメント(0)は、レコード(0,1)が書き込まれた領域以降のアドレスの領域は、ブランク領域である。ここで、セグメント(0)がブランク領域であるか否かは、セグメント(0)の先頭8バイトにアクセスドライバ93によってブランクチェックを行うことにより確認する。さらに、1番目のパラメータが時刻t(2)で更新され、そのパラメータ(0,t(2))を書き込む場合、パラメータ(0,t(2))からレコード(0,2)を生成して、セグメント(0)のレコード(0,1)が格納された領域の次のアドレスから書き込む。この書き込みアドレスは、レコード(0,1)のヘッダのOffsetフィールドの値を使って算出し、書き込みアドレスの先頭8バイトにアクセスドライバ93によってブランクチェックを行うことにより、ブランク領域であることを確認した後に書き込みを行う。
同様に2番目のパラメータが更新される毎に、セグメント(1)にレコードを書き込んで行く。パラメータ(1,t'(1))、パラメータ(1,t'(2))にそれぞれヘッダを付加して構成されるレコード(1,1)、レコード(1,2)を、セグメント(1)の先頭アドレスから順次書き込む。以降同様に3番目から11番目のパラメータも、それぞれ、セグメント(2)〜セグメント(11)の先頭アドレスから書き込んで行く。ここで、データ管理ドライバ92はセグメント(1)〜セグメント(11)の先頭アドレスを、1番目のパラメータ書き込み時に取得した分割数Mから容易に計算することができる。また、セグメント(0)〜セグメント(11)がブランク領域であるかは、セグメント(0)〜セグメント(11)の先頭8バイトにアクセスドライバ93によってブランクチェックを行うことにより確認する。
この動作を継続したとき、セグメント内のブランク領域が、十分なサイズに満たない状態に至る場合がある。このような場合の動作について、次に説明する。
図10は、連結がある場合の、パラメータ5のデータフラッシュ1への書き込み動作を表す説明図であり、図11は、図10におけるレコード(M,N+1)とレコード(M,N+2)の内容を示す説明図である。
例えば、時刻t(N+1)においてM+1番目のパラメータ(パラメータ(M,t(N+1)))が更新され、レコード(M,N+1)としてセグメント(M)に書き込もうとするが、セグメント(M)の残りのブランク領域がレコード(M,N+1)のサイズ+8バイトより小さい場合である。この「+8バイト」は、次のレコードのヘッダに書き込むために必要なサイズであり、ヘッダ領域は4バイトであるが、書き込み単位に合わせて8バイトアライメントであるため、最低8バイトが必要である。このような場合、レコード(M,N+1)を2分割し、前半はセグメント(M)の残りのブランク領域に書き込み、後半は、まず現用系である1次マクロブロックからセグメント全体がブランク領域となっているセグメント(以下、ブランクセグメント)を探し、最初のブランクセグメントに書き込む。
図10には、セグメント(13)まではブランクセグメントでなく、セグメント(14)がブランクセグメントである場合が示されている。また、全てのセグメントがブランクセグメントでない場合、即ちマクロブロック内にブランクセグメントが残っていない場合については、図12と図13を引用して後述する。
図11の上段に示されるように、レコード(M,N+1)のヘッダにおいて、Conフィールドは連結ありのb'10であり、IDフィールドはセグメントIDのM、DivPフィールドは16分割の4、Offsetフィールドはセグメント(14)の先頭アドレス+パラメータ(M,t(N+1))後半部分のサイズ+アライメント調整分となる。データ領域は、前半分と後半分に分けられる。セグメント(M)には上記ヘッダとデータの前半が書き込まれ、データの後半は、セグメント(14)の先頭アドレスから書き込まれる。Offsetフィールドは、セグメント(14)の先頭アドレスにパラメータ(M,t(N+1))後半部分のサイズが加算されているので、次のレコードを書き込むときに、その先頭アドレスを算出することができる。
レコード(M,N+1)が書き込まれた後、時刻t(N+2)にM番目のパラメータ(パラメータ(M,t(N+2)))を更新する場合、レコード(M,N+2)のヘッダは、図11の下段に示される通りとなる。即ち、Conフィールドは連結なしのb'01であり、IDフィールドはセグメントIDのM、DivPフィールドは16分割の4、Offsetフィールドはセグメント(14)の先頭アドレス+パラメータ(M,t(N+2))のサイズ+4(=ヘッダサイズ)+8バイトアライメント調整分となる。以降のM番目のパラメータ更新は、セグメント(14)に対して同様に行われる。
この動作を継続したとき、現用系のマクロブロック内の全てのセグメントが、ブランクセグメントでない状態、即ちマクロブロック内にブランクセグメントが残っていない状態に至る場合がある。このような場合の動作について説明する。
図12は、パラメータのデータフラッシュ1への書き込みによりブロック消去が発生する場合の動作を表す説明図であり、図13は、図12におけるレコード(M,N+1)の内容を表す説明図である。また、図14は、1次と2次マクロブロック間で現用系と待機系を交替する動作を表す説明図であり、図15は、交替動作における最新レコードの転送動作を表す説明図である。
図12に示されるように、例えば、時刻t(N+1)において、M番目のパラメータ(パラメータ(M,t(N+1)))を更新し、レコード(M,N+1)としてセグメント(M)に書き込みを行おうとする場合である。このとき、セグメント(M)に残されたブランク領域が、レコード(M,N+1)のサイズ+8バイト(次レコードのヘッダ書き込みサイズ)より小さい場合、現用系である1次マクロブロックの中でブランクセグメントを探す。その結果、全てのセグメントがブランクセグメントでない状態、即ちマクロブロック内にブランクセグメントが残っていない状態に至った場合には、現用系と待機系を交替させる動作を行う。その動作について、以下、説明する。レコード(M,N+1)を、その時点における待機系である2次マクロブロックのセグメント(M')の先頭アドレスから書き込む。レコード(M,N+1)のヘッダは、図13に示されるように、Conフィールドは連結なしのb'01であり、IDフィールドはセグメントIDのM、DivPフィールドは16分割の4、Offsetフィールドはセグメント(M')の先頭アドレス+パラメータ(M,t(N+1))のサイズ+8バイトアライメント調整分となる。レコード(M,N+1)の書き込みが完了した後、図14と図15に示されるように、1次マクロブロックのセグメント(M)以外の全ての各セグメント(セグメント(X):XはMを除く0〜15)から最新レコード(レコード(X,Y))のみを、1次マクロブロックのセグメント(X')の先頭アドレスから始まる領域に書き写す。その後、1次マクロブロックを構成するブロック(1)とブロック(2)を消去する。1次マクロブロックは、ブロック(1)とブロック(2)が消去されて待機系となり、現用系は2次マクロブロックに交替する。最新レコードの検索は、各セグメントの先頭から順にレコードのヘッダ領域を読出し、ブランク領域に到達したときに、最後に読み込まれたヘッダが含まれるレコードを最新と判断する方法によって行うことができる。詳しくは、図16を引用して後述する、以下の読み出し動作と同様に、実現することができる。
<読み出し動作>
図16は、パラメータ5のデータフラッシュ1からの読み出し動作を表すフローチャートである。
図16は、パラメータ5のデータフラッシュ1からの読み出し動作を表すフローチャートである。
上述の書き込み動作と同様に、容量が32Kバイト、パラメータが11種の場合の例を引用して、データフラッシュ1からの読み出し動作の一例として、M番目のパラメータ(パラメータ(M,t(N)))をレコード(M,N)から読み出す場合について説明する。
まず、現用系である1次マクロブロックの先頭であるセグメント(0)の先頭8バイトを読み出して、ブランクチェックし(S31)、その結果を判定する(S32)。S32の結果、セグメント(0)の先頭8バイトがブランク領域であれば、その時点での1次マクロブロックは待機系であり、現用系の2次マクロブロックが読み出し対象のマクロブロックであるので、2次マクロブロックからの読み出し動作を行う(S33〜S34)。その後の2次マクロブロックからの読み出し動作は、S35以下に示される1次マクロブロックが現用系である場合の読み出し動作と同様であるので、以降の説明は省略する。
S32の結果、セグメント(0)の先頭8バイトがブランク領域でなければ、1次マクロブロックは現用系である。1次マクロブロックのセグメント(0)の先頭レコードであるレコード(0,1)のヘッダを読み出す(S35)。S35で読み出したレコード(0,1)のヘッダのDivPフィールド15からマクロブロックの分割数がわかるので、それを基にセグメント(M)の先頭アドレスを計算し、セグメント(M)の先頭8バイトをブランクチェックする(S36)。その結果に基づいて、セグメント(M)がブランク領域か否かを判定する(S37)。ブランク領域であればセグメント(M)には書き込み済みのデータは存在しないので、エラー終了する。
S37の結果、セグメント(M)がブランク領域でなければ、カウンタNを1に初期化する(S38)。このとき、カウンタNは、最新のパラメータを格納したレコード番号を判定するために利用される。次に、セグメント(M)からレコード(M,N)のヘッダを読み出す(S39)。 取得済みのレコード(M,N-1)のOffsetをPreOffsetとして保存する(S40)。取得済みのレコードがない場合(N=1の場合)は、セグメント(M)の先頭アドレスをPreOffsetとして保存する。S39で読み出したレコード(M,N)のヘッダからOffsetを取得する(S41)。S41で取得したOffsetから8バイト分をブランクチェックし(S42)、セグメント(M)におけるレコード(M,N)に続く領域がブランク領域か否かを判定する(S43)。S43で当該領域がブランク領域と判定されれば、セグメント(M)にはレコード(M,N)以降に書き込まれたレコードは存在しないので、レコード(M,N)に格納されたパラメータ(パラメータ(M,t(N)))が最新のパラメータと判定される。そして、S40で保存したPreOffsetによりレコード(M,N)を読み出し、M番目の最新のパラメータ(パラメータ(M,t(N)))を取得し(S44)、読み出し動作を終了する。
S43で当該領域がブランク領域でないと判定された場合、セグメント(M)にはさらに新しいレコードが存在すると判断されるので、カウンタNを1増やし(S45)、S39に戻る。
以上、説明したように、マクロブロックの先頭に書き込まれたレコードのヘッダに含まれるDivPフィールド15を読み出すことによって、マクロブロックの分割数がわかる。パラメータとセグメントは、1:1に対応付けられているので、読み出すパラメータのIDから、アクセスすべきセグメントが一意に決まる。各パラメータの最新値の探索は、そのセグメントの中で、ヘッダに含まれるオフセットのみを先頭から順番に辿れば済むので、探索ステップを最小限に抑えることができる。これにより、短い探索時間(探索ステップ)により、パラメータの最新値を発見して読み出すことができる。
〔実施形態2〕<セグメントIDと配列名を対応付ける変換テーブル>
一般にユーザは、データフラッシュ1に格納するパラメータを、C言語等の高級言語で使用する配列により管理する。そのため、アプリケーション91は、データ管理ドライバ92やアクセスドライバ93に対して、配列名でのパラメータのアクセスを行う。実施形態1に示した例では、パラメータはIDによって管理されるので、配列名とパラメータを対応させるため、配列名とIDの変換テーブルを備えるとよい。
一般にユーザは、データフラッシュ1に格納するパラメータを、C言語等の高級言語で使用する配列により管理する。そのため、アプリケーション91は、データ管理ドライバ92やアクセスドライバ93に対して、配列名でのパラメータのアクセスを行う。実施形態1に示した例では、パラメータはIDによって管理されるので、配列名とパラメータを対応させるため、配列名とIDの変換テーブルを備えるとよい。
本実施形態では、データフラッシュ1に含まれるセグメントの1つを、配列名とパラメータIDとの変換テーブル領域として割り付ける。
図17は、実施形態2に係るデータフラッシュ1上の変換テーブル7の構成例を表す説明図である。
実施形態1に例示したデータ構成において、セグメント(15)をレコード格納領域に代え、配列名をIDに変換する変換テーブル7を置く変換テーブル格納領域として使用する。1次マクロブロックのセグメント(15)と2次マクロブロックのセグメント(15')が、変換テーブル格納領域として使用される。アプリケーション91は配列(XXX, YYY, … ZZZ)を使って記述されており、データ管理ドライバ92にして配列名(XXX, YYY, … ZZZ)を使ってアクセスを行う。変換テーブル7には、配列名(XXX, YYY, … ZZZ)とパラメータIDが対応付けられている。実施形態1で説明したように、パラメータIDはデータフラッシュ1のセグメントに対応付けられているので、変換テーブル7を介して各配列名がセグメントに対応付けられる。特に制限されないが、例えば、変換テーブル7には、書き込み単位の128バイト毎に、120バイトの配列名と8バイトのIDが互いに対応付けられて格納される。
アプリケーション91が配列名によってパラメータの書き込みを要求した時、データ管理ドライバ92は、変換テーブル7を参照し、アプリケーション91から入力された配列名が登録済みであれば、対応するパラメータIDを求め、対応するセグメントにパラメータを書き込む。アプリケーション91から入力された配列名が変換テーブル7に登録されていなければ、その配列名と新規のIDを変換テーブル7に登録する。セグメントに未使用領域がなくなり、マクロブロックを交替させる場合は、最新レコードの場合と同様に、変換テーブル7を待機系の2次マクロブロックのセグメント(15')に書き込み、その後、セグメント(15)を含む現用系の1次マクロブロックを消去する。
アプリケーション91が配列名によってパラメータの読み出しを要求した時、変換テーブル7を参照し、アプリケーション91から入力された配列名が登録済みであれば、対応するパラメータIDを求め、対応するセグメントからパラメータを読み出す。
これにより、レコードを格納するために使用することができるセグメント領域は1セグメント減るが、ユーザがアプリケーション91から配列名でアクセスすることが可能になる。
書き込み動作と読み出し動作について、さらに詳しく説明する。
図18は、データフラッシュ1への書き込み動作を表すフローチャートである。
アプリケーション91から入力された配列名が変換テーブルにあるか検索する(S51)。S51の検索結果を判定する(S52)。
登録済みの場合、変換テーブル7を参照することにより配列名に対応するIDを取得する(S53)。取得したIDにより、実施形態1と同様の書き込み動作を行って(S57)終了する。
未登録の場合、変換テーブル7に空きがあるかを判定する(S54)。マクロブロックの分割数よりIDの登録数が大きければ空きがないと判定し、マクロブロックの分割数よりIDの登録数以下であれば空きがあると判定する。そして、空きがない場合はエラー終了する。
S54で空きがある場合、配列名を空いている最小のIDと関連付けて変換テーブル7に登録する(S55)。S55で登録したIDを参照する(S56)ことで、実施形態1と同様の書き込み動作を行って(S58)終了する。
図19は、データフラッシュ1からの読み出し動作を表すフローチャートである。
アプリケーション91から入力された配列名が変換テーブル7にあるか検索する(S61)。S61の検索結果を判定する(S62)。未登録の場合はエラー終了する。
S62で登録済みの場合、変換テーブル7を参照することにより配列名に対応するIDを取得する(S63)。取得したIDにより、実施形態1と同様の読み出し動作を行う(S66)。読み出し完了後、変換テーブル7を再度参照しIDを配列名に変換する(S64)。S64で変換した配列名と読み出したパラメータをアプリケーション91に返して(S65)終了する。
以上のように、ユーザはアプリケーション91から配列名でデータフラッシュ1にアクセスすることが可能になる。そのため、ユーザはアプリケーション91で使用する配列名をそのまま使用できるので、パラメータの管理がより容易になる。また、複数のアプリケーションで使用する場合、アプリケーションでのID管理が容易になる。
〔実施形態3〕<変換テーブルにおけるセグメントIDと配列名の対応関係の更新>
実施形態2においてさらに、配列の更新を可能にする例を実施形態3として説明する。実施形態2の変換テーブル領域をセグメント数より大きい領域に拡張する。
実施形態2においてさらに、配列の更新を可能にする例を実施形態3として説明する。実施形態2の変換テーブル領域をセグメント数より大きい領域に拡張する。
図20は、実施形態3に係るデータフラッシュ1上の変換テーブル7の構成を表す説明図である。
アプリケーション91は、登録済みの配列名を無効にする要求を、データ管理ドライバ92に要求する。例えば、アプリケーション91は無効にしたい配列名を引数とした関数呼び出しにより、データ管理ドライバ92に対して、その配列名を無効にすることを要求することができる。データ管理ドライバ92は、登録済みの配列名を無効にする要求をアプリケーション91から受信したら、変換テーブル領域7の最後の領域に、無効にすべき登録済みの配列名と対応するIDを書き込む。
データ管理ドライバ92は、配列名が指定されたデータフラッシュ1のアクセスにおいて、変換テーブル7を参照し、アプリケーション91から入力された配列名が変換テーブル7に登録済みであるかどうかを検索する。変換テーブル7が格納されているセグメント(15)(又は2次マクロブロックが現用系の時はセグメント(15'))を、先頭から順番にアクセスして、ユーザが入力した配列名を探索する。変換テーブル7において、書き込み単位の128バイト毎に、120バイトの配列名と8バイトのIDが互いに対応付けて格納されているとすると、データ管理ドライバ92は、128バイト毎に読み出してユーザが入力した配列名かどうかを判定する。このとき、データ管理ドライバ92は、アプリケーション91から入力された配列名を発見しても探索を終了せず、128バイト毎のブランクチェックを継続しながら、変換テーブル領域の最後まで検索する。同じ配列名が偶数回存在する場合、その配列名と関連付けられたIDは無効とし、その後、他の配列名をそのIDと関連付けて使用することができるようにする。
図20に示される例では、当初、配列名XXX, YYY, …ZZZがパラメータ(0), パラメータ(1), …パラメータ(14)に対応付けられ、変換テーブル7の先頭アドレスから128バイト毎に順次、配列名XXXとID「0」、配列名YYYとID「1」、…配列名ZZZとID「14」が格納されている。アプリケーション91から配列名XXXを無効にする要求を受信すると、データ管理ドライバ92は、変換テーブル7の末尾の128バイトに、配列名XXXとID「0」を追記する。これにより、配列名XXXは変換テーブル7の中に2回存在することとなり、無効化され、その結果ID「0」が他の配列名に対応付けられて使用されることが可能となる。その後、アプリケーション91において、配列名X'X'X'を引数とする関数func_M(X'X'X')が呼び出されたときに、データ管理ドライバ92は、変換テーブル7の末尾の128バイトに、配列名X'X'X'とID「0」を追記する。これにより、先の無効化によって使用可能となっているID「0」に配列名X'X'X'を対応付けることができる。
また、一旦無効にした配列名を再度有効にすることもできる。アプリケーション91は再度配列名を有効にする要求をデータ管理ドライバ92に関数呼び出しにより要求する。データ管理ドライバ92は、無効にした配列名を再度有効にする要求をアプリケーション91から受信したら、空いている、または無効なIDを検索し、変換テーブル領域の最後の領域にその配列名と検索したIDを書き込む。そして、データ管理ドライバ92は同じ配列名が変換テーブル7の中に3度存在する場合、その配列名と関連付けられたIDを再度有効なものと判断する。同様にデータ管理ドライバ92は変換テーブル7に奇数回存在する配列名とIDは有効なものとし、偶数回存在する配列名とIDは無効であると判断する。
上記により、データフラッシュ1で管理するデータのIDと関連付けられた配列名を更新することができ、その結果、同一セグメントでのパラメータ内容の変更も可能になる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、1次マクロブロックと2次マクロブロックは、大規模なフラッシュメモリの一部の領域として実装されてもよく、または、別々の不揮発性メモリチップを使って実装されてもよい。
1 フラッシュメモリ
2 マクロブロック
3 ブロック(消去単位)
4 セグメント
5 パラメータ
6 レコード
7 変換テーブル
8 配列名
9 データ領域
10 ヘッダ領域、ヘッダ情報
11 Con(Concatenation)フィールド
12、14 リザーブド(rsv: reserved)フィールド
13 ID(Identification)フィールド、セグメント識別情報
15 DivP(Divided power)フィールド、分割(セグメント)数
16 オフセット(Offset)フィールド、アドレスオフセット情報
70 システム
71 産業機器
72 通信機器
80 マイコン
81 CPUコア
82 I/O
83 メモリ
90 プログラム(ソフトウェア)
91 アプリケーション
92 データ管理ドライバ
93 アクセスドライバ
2 マクロブロック
3 ブロック(消去単位)
4 セグメント
5 パラメータ
6 レコード
7 変換テーブル
8 配列名
9 データ領域
10 ヘッダ領域、ヘッダ情報
11 Con(Concatenation)フィールド
12、14 リザーブド(rsv: reserved)フィールド
13 ID(Identification)フィールド、セグメント識別情報
15 DivP(Divided power)フィールド、分割(セグメント)数
16 オフセット(Offset)フィールド、アドレスオフセット情報
70 システム
71 産業機器
72 通信機器
80 マイコン
81 CPUコア
82 I/O
83 メモリ
90 プログラム(ソフトウェア)
91 アプリケーション
92 データ管理ドライバ
93 アクセスドライバ
Claims (16)
- 消去単位であるブロックをj個(jは2以上の偶数)含むフラッシュメモリに、変化するk個(kは正の整数)のパラメータを記憶する、データ格納用フラッシュメモリの管理方法であって、
前記j個のブロックをそれぞれj/2個ずつのブロックからなる2つの領域に分け、1次マクロブロックと2次マクロブロックとし、
前記1次マクロブロックと前記2次マクロブロックは、それぞれが等しい記憶容量を持つk個以上のセグメントをそれぞれ備え、一方を現用系、他方を待機系とし、
前記k個のパラメータのそれぞれは、前記k個以上のセグメントのうちのk個のセグメントと1:1で対応付けられ、現用系マクロブロックにおける対応するセグメントに書き込まれ、また、前記現用系マクロブロックにおける対応する前記セグメントから読み出される、
データ格納用フラッシュメモリの管理方法。 - 請求項1において、前記k個のパラメータに含まれる第Mパラメータ(Mはk以下の正の整数)は、ヘッダ情報が付加されて、前記現用系マクロブロックの第Mセグメントの先頭アドレスから書き込まれ、以降に第Mパラメータが書き込まれるときは、前記第Mセグメントのブランク領域の先頭アドレスから書き込まれ、
前記ヘッダ情報は、前記1次マクロブロックと前記2次マクロブロックがそれぞれ含むセグメント数と、次に前記第Mパラメータを書き込むべき領域の先頭アドレスを算出可能な、アドレスオフセット情報を含む、
データ格納用フラッシュメモリの管理方法。 - 請求項1において、前記1次マクロブロックと前記2次マクロブロックのそれぞれにおけるセグメントの数がk+1以上であり、前記k個のパラメータに含まれる第Mパラメータについて、前記現用系マクロブロックにおける対応する第Mセグメントへの書き込みを試みたとき、前記第Mセグメントの全ての領域が書き込み済みの場合、前記現用系マクロブロックにおける第1から第kセグメント以外のセグメントに、前記第Mパラメータの値の全部または一部を書き込み、
前記第Mパラメータのヘッダ情報に含まれるアドレスオフセット情報は、次に前記第Mパラメータを書き込むべき領域の、書き込み対象とされた前記セグメントにおける先頭アドレスを示す情報を含む、
データ格納用フラッシュメモリの管理方法。 - 請求項3において、前記第Mパラメータの書き込みを試みたとき、前記現用系マクロブロックにおけるに未使用セグメントがなくなったとき、前記第Mパラメータの書き込みを前記待機系マクロブロックの第Mセグメントの先頭アドレスから行い、
その後、前記第Mパラメータ以外のパラメータについて、それぞれ最新の値を前記現用系マクロブロックから読み出し、前記待機系マクロブロックにおける対応するセグメントに書き込み、
その後、前記現用系マクロブロックの全ての領域のデータを消去し、
その後、前記待機系マクロブロックを新たに現用系マクロブロックとし、前記現用系マクロブロックを新たに待機系マクロブロックとする、
データ格納用フラッシュメモリの管理方法。 - 請求項2において、前記第Mパラメータの書き込みを実行するとき、前記現用系マクロブロックの先頭から前記ヘッダ情報に含まれる前記アドレスオフセット情報を読み出し、
前記アドレスオフセット情報に基づいて、前記第Mパラメータが次に更新され書き込まれる領域の先頭アドレスを算出し、さらに当該領域のデータを読み出すことにより、当該領域が既にデータが書き込まれた書き込み済み領域か、ブランク領域かを判定するステップを、ブランク領域を発見するまで繰り返し、
発見したブランク領域に、前記第Mパラメータを書き込む、
データ格納用フラッシュメモリの管理方法。 - 請求項2において、前記第Mパラメータの読み出しを実行するとき、前記現用系マクロブロックの先頭から前記ヘッダ情報に含まれる前記アドレスオフセット情報を読み出し、
前記アドレスオフセット情報に基づいて、前記第Mパラメータが次に更新され書き込まれる領域の先頭アドレスを算出し、さらに当該領域のデータを読み出すことにより、当該領域が既にデータが書き込まれた書き込み済み領域か、ブランク領域かを判定するステップを、ブランク領域を発見するまで繰り返し、
発見したブランク領域の直前に書き込まれている前記第Mパラメータを、前記第Mパラメータの最新の値として読み出す、
データ格納用フラッシュメモリの管理方法。 - 請求項2において、前記ヘッダ情報は、前記第Mパラメータが書き込まれるセグメントのセグメント識別情報をさらに含む、
データ格納用フラッシュメモリの管理方法。 - 請求項7において、前記セグメント識別情報とアプリケーションプログラムが使用する配列名とを対応付ける変換テーブルを、前記データ格納用フラッシュメモリ内に保持する、
データ格納用フラッシュメモリの管理方法。 - 請求項8において、前記変換テーブルに、同じ前記セグメント識別情報に対して複数回の前記配列名の対応付けが許され、偶数回の対応付けにより当該セグメント識別情報に対する配列名の対応付けを無効とし、次の奇数回目の当該セグメント識別情報に対する配列名の対応付けを有効とする、
データ格納用フラッシュメモリの管理方法。 - フラッシュメモリに、変化するk個(kは正の整数)のパラメータを繰り返し更新するための書き込み、前記パラメータの最新データを読み出すためのプログラムであって、前記フラッシュメモリにアクセス可能なプロセッサによって実行されることにより、
前記フラッシュメモリ内に、消去単位であるブロックをそれぞれ同数ずつ備える1次マクロブロックと2次マクロブロックを定義し、前記1次マクロブロックと前記2次マクロブロックの一方を現用系、他方を待機系とし、前記1次マクロブロック内に、それぞれが等しい記憶容量を持つk個以上のセグメントを定義し、前記2次マクロブロック内に、それぞれが等しい記憶容量を持つk個以上のセグメントを定義し、
前記k個のパラメータのそれぞれを、前記k個以上のセグメントのうちのk個のセグメントと1:1で対応付け、
前記パラメータを前記フラッシュメモリに書き込むときには、現用系マクロブロックにおける対応するセグメントに対して書き込むための書き込みステップを実行し、
前記パラメータの最新値を前記フラッシュメモリから読み出すときには、前記現用系マクロブロックにおける対応するセグメントに対して読み出しステップを実行する、
プログラム。 - 請求項10において、前記k個のパラメータに含まれる第Mパラメータ(Mはk以下の正の整数)は、ヘッダ情報が付加され、前記現用系マクロブロックにおいて対応する第Mセグメントの先頭アドレスから順次書き込まれており、
前記ヘッダ情報は、前記1次マクロブロックと前記2次マクロブロックがそれぞれ含むセグメント数と、次に前記第Mパラメータを書き込むべき領域の先頭までのオフセットを示す、アドレスオフセット情報を含み、
第Mパラメータを書き込むための前記書き込みステップは、前記第Mセグメントの先頭アドレスから前記ヘッダに含まれる前記アドレスオフセット情報を読み出し、前記アドレスオフセット情報から次のヘッダ情報が格納されるアドレスを算出して次のヘッダ情報を読み出すステップを、ヘッダ情報の格納されていないブランク領域に到達するまで繰り返し、前記第Mパラメータにヘッダ情報を付加して、前記ブランク領域に書き込むステップを含み、
第Mパラメータの最新値を読み出すための前記読み出しステップは、前記第Mセグメントの先頭アドレスから前記ヘッダに含まれる前記アドレスオフセット情報を読み出し、前記アドレスオフセット情報から次のヘッダ情報が格納されるアドレスを算出して次のヘッダ情報を読み出すステップを、ヘッダ情報の格納されていないブランク領域に到達するまで繰り返し、前記ブランク領域に到達する直前に読み出したヘッダ情報が付加されたパラメータを前記第Mパラメータの最新値として読み出すステップを含む、
プログラム。 - 請求項11において、前記1次マクロブロックと前記2次マクロブロックのそれぞれにおけるセグメントの数がk+1以上であり、第Mパラメータを書き込むための前記書き込みステップは、前記現用系マクロブロックにおける対応する第Mセグメントへの書き込みを試みたとき、前記第Mセグメントの全ての領域が書き込み済みの場合、前記現用系マクロブロックにおける第1から第kセグメント以外のセグメントに、前記第Mパラメータの値の全部または一部を書き込むステップを含み、
前記第Mパラメータのヘッダ情報に含まれるアドレスオフセット情報は、次に前記第Mパラメータを書き込むべき領域の、書き込み対象とされた前記セグメントにおける先頭アドレスを算出可能な情報を含む、
プログラム。 - 請求項12において、前記第Mパラメータの書き込みを試みたとき、前記現用系マクロブロックにおける未使用セグメントがなくなったとき、
前記プログラムは、前記第Mパラメータの書き込みを、前記待機系マクロブロックの第Mセグメントの先頭アドレスから行うステップを含み、
その後、前記第Mパラメータ以外のパラメータについて、それぞれ最新の値を前記現用系マクロブロックから読み出し、前記待機系マクロブロックにおける対応するセグメントに書き込むステップを含み、
その後、前記現用系マクロブロックの全ての領域のデータを消去するステップを含み、
その後、前記待機系マクロブロックを新たに現用系マクロブロックとし、前記現用系マクロブロックを新たに待機系マクロブロックとするステップを含む、
プログラム。 - 請求項11において、前記ヘッダ情報は、前記第Mパラメータが書き込まれるセグメントのセグメント識別情報をさらに含む、
プログラム。 - 請求項14において、前記セグメント識別情報とアプリケーションプログラムが使用する配列名とを対応付ける変換テーブルを、前記フラッシュメモリ内に保持するステップを含む、
プログラム。 - 請求項15において、前記変換テーブルに、同じ前記セグメント識別情報に対して複数回の前記配列名の対応付けが許され、偶数回の対応付けにより当該セグメント識別情報に対する配列名の対応付けを無効とし、次の奇数回目の当該セグメント識別情報に対する配列名の対応付けを有効とするステップを含む、
プログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013219084A JP2015082166A (ja) | 2013-10-22 | 2013-10-22 | データ格納用フラッシュメモリの管理方法およびそのプログラム |
US14/509,142 US20150113210A1 (en) | 2013-10-22 | 2014-10-08 | Data storage flash memory management method and program |
CN201410564683.3A CN104572481A (zh) | 2013-10-22 | 2014-10-22 | 数据存储闪速存储器管理方法和程序 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013219084A JP2015082166A (ja) | 2013-10-22 | 2013-10-22 | データ格納用フラッシュメモリの管理方法およびそのプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015082166A true JP2015082166A (ja) | 2015-04-27 |
Family
ID=52827222
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013219084A Pending JP2015082166A (ja) | 2013-10-22 | 2013-10-22 | データ格納用フラッシュメモリの管理方法およびそのプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20150113210A1 (ja) |
JP (1) | JP2015082166A (ja) |
CN (1) | CN104572481A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018045595A (ja) * | 2016-09-16 | 2018-03-22 | 株式会社デンソー | 情報管理装置 |
JP2021036394A (ja) * | 2019-08-30 | 2021-03-04 | 株式会社デンソーテン | メモリアクセス装置 |
JP2021509216A (ja) * | 2017-12-28 | 2021-03-18 | マイクロン テクノロジー,インク. | 不揮発性メモリ内のトリムパラメータをアップデートするための技術 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406972B (zh) * | 2016-11-04 | 2019-05-24 | 珠海市杰理科技股份有限公司 | 程序编译方法和编译器 |
TWI639918B (zh) * | 2017-05-11 | 2018-11-01 | 慧榮科技股份有限公司 | 資料儲存裝置以及其操作方法 |
CN112558868B (zh) * | 2020-12-07 | 2024-04-09 | 炬芯科技股份有限公司 | 一种配置数据存储的方法和装置及设备 |
CN112965919B (zh) * | 2021-03-24 | 2023-06-06 | 深圳友讯达科技股份有限公司 | 一种电能表数据分钟冻结方法、存储介质及设备 |
CN113282237B (zh) * | 2021-05-20 | 2023-08-18 | RealMe重庆移动通信有限公司 | 分区创建方法、装置、存储介质及计算机设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3640802B2 (ja) * | 1998-06-08 | 2005-04-20 | 富士通株式会社 | データバックアップ方式 |
JP4748708B2 (ja) * | 2005-03-18 | 2011-08-17 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
CN101546298B (zh) * | 2008-03-28 | 2012-01-11 | 群联电子股份有限公司 | 用于闪存的数据读取方法、其控制器与储存系统 |
CN101751339B (zh) * | 2008-12-19 | 2012-01-11 | 慧国(上海)软件科技有限公司 | 快闪存储器装置及其数据管理方法 |
-
2013
- 2013-10-22 JP JP2013219084A patent/JP2015082166A/ja active Pending
-
2014
- 2014-10-08 US US14/509,142 patent/US20150113210A1/en not_active Abandoned
- 2014-10-22 CN CN201410564683.3A patent/CN104572481A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018045595A (ja) * | 2016-09-16 | 2018-03-22 | 株式会社デンソー | 情報管理装置 |
JP2021509216A (ja) * | 2017-12-28 | 2021-03-18 | マイクロン テクノロジー,インク. | 不揮発性メモリ内のトリムパラメータをアップデートするための技術 |
US11194472B2 (en) | 2017-12-28 | 2021-12-07 | Micron Technology, Inc. | Techniques to update a trim parameter in nonvolatile memory |
US11928330B2 (en) | 2017-12-28 | 2024-03-12 | Micron Technology, Inc. | Techniques to update a trim parameter in non-volatile memory |
JP2021036394A (ja) * | 2019-08-30 | 2021-03-04 | 株式会社デンソーテン | メモリアクセス装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104572481A (zh) | 2015-04-29 |
US20150113210A1 (en) | 2015-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2015082166A (ja) | データ格納用フラッシュメモリの管理方法およびそのプログラム | |
TWI775122B (zh) | 用來存取至少一非揮發性記憶體元件的處理單元 | |
WO2009096180A1 (ja) | メモリコントローラ、不揮発性記憶装置、及び、不揮発性記憶システム | |
US10235300B2 (en) | Memory system including memory device and operation method thereof | |
JPWO2006067923A1 (ja) | メモリコントローラ、不揮発性記憶装置、不揮発性記憶システム及びメモリ制御方法 | |
JPWO2002054247A1 (ja) | データ記録装置及びフラッシュメモリに対するデータ書き込み方法 | |
JP2013222435A (ja) | 半導体記憶装置及びその制御方法 | |
JP2004505332A (ja) | 高速データアクセスを維持しながらram寸法を減少させる方法および装置 | |
TWI714830B (zh) | 目錄資料的管理方法與記憶體裝置 | |
TWI601141B (zh) | 快閃記憶體的存取方法及相關的記憶體控制器與電子裝置 | |
CN109727629B (zh) | 使用利用多间隙进度字段的磨损均衡的方法和系统 | |
JP4534336B2 (ja) | メモリ装置におけるデータ管理方法 | |
JP6618941B2 (ja) | 管理装置、情報処理装置および管理方法 | |
JP2013232144A (ja) | 制御装置、記憶装置、記憶制御方法 | |
TWI233616B (en) | Silicon storage media and controller thereof, controlling method thereof, and data frame based storage media | |
US20210042257A1 (en) | Data processing system and operating method thereof | |
CN110362509B (zh) | 统一地址转换方法与统一地址空间 | |
JP4888333B2 (ja) | フラッシュディスク装置 | |
JP6132010B2 (ja) | 制御装置、制御プログラム、および制御方法 | |
CN108710579A (zh) | 一种超过寻址空间大容量的管理方法 | |
JP2001318824A (ja) | フラッシュメモリのデータ管理方式およびそのプログラムを記録した記録媒体 | |
CN109669628B (zh) | 基于flash设备的数据存储管理方法及装置 | |
JP2005234738A (ja) | 半導体メモリ装置 | |
JP2005250831A (ja) | 半導体メモリ装置 | |
JPWO2003077133A1 (ja) | メモリ制御方法、記憶装置、制御プログラムおよび可読記録媒体 |