[go: up one dir, main page]

JP2010067010A - 組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラム - Google Patents

組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラム Download PDF

Info

Publication number
JP2010067010A
JP2010067010A JP2008232775A JP2008232775A JP2010067010A JP 2010067010 A JP2010067010 A JP 2010067010A JP 2008232775 A JP2008232775 A JP 2008232775A JP 2008232775 A JP2008232775 A JP 2008232775A JP 2010067010 A JP2010067010 A JP 2010067010A
Authority
JP
Japan
Prior art keywords
block
refresh
program
data
embedded device
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.)
Withdrawn
Application number
JP2008232775A
Other languages
English (en)
Inventor
Takeshi Kido
武志 城戸
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Systems Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Systems Co Ltd filed Critical Fuji Electric Systems Co Ltd
Priority to JP2008232775A priority Critical patent/JP2010067010A/ja
Publication of JP2010067010A publication Critical patent/JP2010067010A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)

Description

本発明は、ファームウェアとして不揮発性メモリに格納されたプログラムを実行する組み込み機器において、その不揮発性メモリの長寿命化を可能とした、不揮発性メモリの自動リフレッシュ技術に関する。
フラッシュROM等の不揮発性メモリは、電源を切ってもデータが保存されることから、組み込み機器のファームウェア格納手段として多く利用されている。しかし、不揮発性メモリは、経年変化によってデータ化けが発生することがあり、データ化けが発生すると格納したファームウェアが正常動作しなくなってしまう、という問題がある。
組み込み機器の多くは製品寿命が長く、プログラムの更新頻度も少ないことから、この問題に対する何らかの対策が必要である。
なお、関連する技術として、特許文献1には、EEPROM(Electrically Erasable Programmable ROM)に格納したプログラムを一時的にRAM(Random Access Memory)上に転送し、転送後、RAM上のプログラムをEEPROMに再度書き込みを行なうことで、プログラムのリフレッシュを行なう方法が提案されている。
しかし、特許文献1の方法では、EEPROM上のプログラムの格納領域が固定されているために、その領域が物理的特性の経年変化によるデータ化けの可能性が大きくなるという問題がある。また、RAM上にあるプログラムをEEPROM上に再度書き込みする際に、電源断が発生すると、EEPROM上のプログラムが壊れてしまう、という問題もある。また、EEPROMの寿命が考慮されていない点、プログラムを一時的に確保する領域をRAM上に確保する必要がある点、保守ツールのリフレッシュ指令によってリフレッシュを手動で実行する点、において利便性などに問題がある。
特開平10−241379号公報
本発明は、不揮発性メモリに格納されたプログラムを自動でリフレッシュする(自動で書き換える)ことにより、経年変化によるデータ化けを防止し、組み込み機器の長期の製品保証を実現する組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラムを提供することを目的とする。
提案する組み込み機器は、ファームウェアとして不揮発性メモリに格納されたプログラム、を実行するものである。この不揮発性メモリは、複数の、リード/ライト可能な固定サイズのブロックに分割され、上記プログラムは格納手段により上記複数のブロックのうちの一つあるいは複数以上にまたがるように分割して格納される。そして、その格納手段により分割して格納された上記プログラムを、上記各ブロックから別のブロックへと移動させることにより、上記不揮発性メモリ内をリフレッシュさせるリフレッシュ実行部、を有する。
上記リフレッシュ実行部は、上記不揮発性メモリの各ブロックに格納されたプログラムに対し、1ブロックのデータを上記不揮発性メモリの空きブロックにコピーするコピー処理部と、上記コピーのコピー元の1ブロックのデータを消去する消去処理部と、を有し、上記プログラムを格納する全てのブロックを、ブロックごとに上記コピー処理部によるコピー処理と上記消去処理部による消去処理を繰り返す。
提案する組み込み機器によれば、プログラムを不揮発性メモリ内でリフレッシュする度にアプリケーション・プログラムを格納するブロック範囲が移動していくので、不揮発性メモリの使用頻度が平滑化でき、不揮発性メモリの経年変化に起因してアプリケーション・プログラムが誤動作する時期を遅らせることができ、不揮発性メモリの寿命を長期化すること(長期の製品保証)が可能となる。
以下図面に基づいて、本発明の実施形態について詳細を説明する。
図1は、本発明の一実施形態に係るブートプログラムおよびアプリケーション・プログラムが格納された組み込み機器の構成例を示すブロック図である。
図1の組み込み機器は、CPU(Central Processing Unit)1、SDRAM(Synchronous Dynamic RAM)4、外部フラッシュROM5、RTC(Real Time Clock)6、により構成され、CPU1は、CPU内蔵RAM2、CPU内蔵フラッシュROM3を備える。
このうち、CPU内蔵フラッシュROM3は、ブートプログラムを格納し、外部フラッシュROM5は、リフレッシュ対象のアプリケーション・プログラムを格納する。また、SDRAM4は、外部フラッシュROM5に格納したアプリケーション・プログラムの実行領域である。また、RTC6は、現在時刻を書き込む処理を行なう。
なお、ブートプログラムは、外部フラッシュROM5に格納したアプリケーション・プログラムをSDRAM4で実行するためのプログラムである。また、アプリケーション・プログラムは、組み込み機器のファームウェアとしての本来の処理の他に、本実施形態のリフレッシュ処理(図9にて後述)、電源断時の再リフレッシュ処理(図10〜図12にて後述)を実行するためのプログラムである。
図2は、図1の外部フラッシュROMのブロック構成を示す図である。
図2に示すように、外部フラッシュROM5は、リード/ライト可能な固定サイズの複数のブロックに分割されている。そして、上記アプリケーション・プログラムは、その複数のブロックのうちの1以上のブロックに分割して格納されている。
1ブロックは、定コード10、リフレッシュ状態フラグ11、リフレッシュ実施時刻12、第1のSUM値13、プログラム14、第2のSUM値15、によって構成される。
なお、外部フラッシュROM5中のブロックには、空きブロック9も存在するが、空きブロックであるかどうかは、以下に述べるように定コード10の値により判断する。
定コード10は、アプリケーション・プログラムの先頭、終端および中間ブロックを判別するためのコードである。以下に、定コード10が取りうる値を示す。
・“START”:先頭ブロック
・“END”:終端ブロック
・NULL:中間ブロック
・0xFF:空きブロック(※0xFFは、ブロックサイズを規程するものでは無く、未使用である事を指す。一例として、第1のSUM値13、第2のSUM値15は2バイトで、リフレッシュ実施時刻12は4バイトだったとしても、以降の説明では未使用の状態としては“0xFF”を用いる。)
リフレッシュ状態フラグ11は、リフレッシュ状態を判別するためのフラグであり、値は例えば「0」または「1」とする。リフレッシュ状態フラグについては、リフレッシュ時にコピー元ブロックと異なる値をコピー先ブロックに書き込むようにする。
リフレッシュ実施時刻12は、リフレッシュを最後に実施した時刻を示す。
第1のSUM値13は、プログラム14のチェックサム値である。これは、例えば、プログラム14の各バイトを加算して求める。
プログラム14は、アプリケーション・プログラムのプログラムを分割したうちの1つである。
第2のSUM値15も、第1のSUM値13と同様に、例えば、プログラム14のチェックサム値である。したがって、共に有効な値が設定されている限り、第1のSUM値13と第2のSUM値15は同値である。
そして、このうち、定コード10、第1のSUM値13、プログラム14、第2のSUM値15は、外部フラッシュROM5にアプリケーション・プログラムを格納する際に各ブロックに書き込む。
本実施形態の要点は、不揮発性メモリ(外部フラッシュROM5)をリード/ライト可能な固定サイズのブロックに分割し、アプリケーション・プログラムをそれらブロックに連続して格納し、そのアプリケーション・プログラムを外部フラッシュROM5内でリフレッシュするものである。
アプリケーション・プログラムが格納された状態で、外部フラッシュROM5は1つまたは複数の空きブロックを持つものとする。すなわち、ブロック総数が(n+1)個の場合、プログラムの分割数は最大でもn個となる。また、1つのブロックのサイズがmバイトの場合、定コード10、リフレッシュ状態フラグ11、リフレッシュ実施時刻12、第1のSUM値13、第2のSUM値15のそれぞれのサイズをmバイトから引いた残りが、分割したプログラムの最大サイズとなる。
そして、アプリケーション・プログラムを外部フラッシュROM5内でリフレッシュするに際しては、そのアプリケーション・プログラムのプログラムを格納する先頭の1ブロックを空きブロックの先頭の1ブロックにコピーし、コピーが完了すると、コピー元の1ブロックを消去する。
アプリケーション・プログラムを格納する先頭のブロックから終端のブロックまでブロックごとにこの処理を繰り返す。この結果、リフレッシュの度にアプリケーション・プログラムを格納するブロック範囲が移動していくので、不揮発性メモリの使用頻度が平滑化できる。これに対して、不揮発性メモリ(外部フラッシュROM5)をリフレッシュさせずに放置しておくと、その経年変化に起因してアプリケーション・プログラムが誤動作する時期が早まる。このように、本発明では不揮発性メモリの寿命を長期化すること(長期の製品保証)が可能である。
また、後述するように、リフレッシュ処理がアプリケーション・プログラムの処理の一部となっているため、手動でリフレッシュする必要がなく、メンテナンス性が向上する。また、アプリケーション・プログラムを格納した不揮発性メモリ内でそのアプリケーション・プログラムを1ブロックずつリフレッシュする(コピー先ブロックへコピーし、コピー元ブロックを消去する)ため、RAM等の他のメモリにプログラムバックアップ用のワーク領域を確保する必要がなく、リソースの最小化に貢献できる。また、不揮発性メモリ上に空きブロックが最低限1ブロックあれば、本実施形態のリフレッシュ処理を実行できるので、不揮発性メモリの領域を有効に使用することができる。
なお、データのコピーの際には、1ブロックを構成する、定コード10、リフレッシュ状態フラグ11、リフレッシュ実施時刻12、第1のSUM値13、プログラム14、第2のSUM値15は、例えば、この順にデータが処理対象ブロックに書き込まれる。
また、1ブロックを消去する際は、定コード10〜第2のSUM値15の値をすべて“0xFF”に変更する。
そして、本実施形態では、リフレッシュ中に電源断が発生した場合に、上記した各ブロックが有する、プログラム14およびプログラム14以外のデータ部分の値を参照して、電源断がリフレッシュ処理のどの段階で発生したかを判定し、アプリケーション・プログラムを破壊することなく、再リフレッシュを行なうものである。
続いて、リフレッシュ中に電源断が発生した各ケースについて、図3〜図6を参照して説明する。
図3は、ブロックのコピーとコピー元ブロックの消去(空きブロックの生成)が終了したところで電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。
図3の例では、外部フラッシュROM5は8ブロックに分割され、そのうちの連続する5ブロックにアプリケーション・プログラムが格納されている。ここでは、説明の都合上、プログラムが格納される各ブロックに対し、プログラムが格納されているブロックをプログラムの先頭から順に、「1」、「2」、・・・、「5」と番号を付ける。また、図3における“SUM”とは、対象の値を足し合わせたいわゆる“SUM値”を指すが、ここでは具体的な数値ではなく便宜上“SUM”と表している。同様に、リフレッシュ実施時刻12の値における“−”の表示箇所には時刻情報が格納されているが、便宜上、“−”と表示している。
図3の例では、アプリケーション・プログラムの中間のプログラムの格納領域である「3」のブロックが外部フラッシュROM5の物理アドレスの末尾に位置しているので、続く、アプリケーション・プログラムのプログラムの格納領域である「4」のブロックは、外部フラッシュROM5の物理アドレスの先頭に来る。アプリケーション・プログラムのプログラムが格納された「4」のブロック21と、続く「5」のブロック22の間で、リフレッシュ状態フラグの値が“1”から“0”に変化していることから、「4」のブロック21へのコピーと、コピー元ブロックの消去(すなわち、空きブロックのうち図の一番右側で、空きブロック23の生成)が終了したところで電源断が発生したことが判明する。
図4は、ブロックのコピーにおけるリフレッシュ状態フラグコピー完了後の処理実行中に電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。
図4の例では、前の方の「5」のブロック24と、後の方の「5」のブロック25の間で、リフレッシュ状態フラグの値が“1”から“0”に変化していて、かつ、前の方の「5」のブロック24の第2のSUM値15の値が“0xFF”であることから、後の方の「5」のブロック25をコピー元として、前の方の「5」のブロック24にコピー中に、第2のSUM値15の処理中に電源断が発生したことが判明する。
図5は、ブロックのコピーにおけるリフレッシュ状態フラグの処理実行中に電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。
図5の例では、前の方の「5」のブロック26では、リフレッシュ状態フラグの項目以降の値がすべて“0xFF”であるのに対して、後の方の「5」のブロック27では、リフレッシュ状態フラグの値が“0”である。これから、後の方の「5」のブロック27をコピー元として、前の方の「5」のブロック26にコピー中に、リフレッシュ状態フラグ11の処理中に電源断が発生したことが判明する。
図6は、ブロックのコピーが終了したところで電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。
図6の例では、前の方の「5」のブロック28と、後の方の「5」のブロック29の間で、リフレッシュ状態フラグの値が“1”から“0”に変化していて、それ以外の項目の値については2つの「5」のブロックで同一となっている。これから、後の方の「5」のブロック29をコピー元として、前の方の「5」のブロック28へのコピーが終了した時点で電源断が発生したことが判明する。
図7は、ブートプログラムの実行シーケンスを示すフローチャートである。
なお、外部フラッシュROM5内で、定コード=“START”であるブロックは、電源断に起因するデータ化けの場合を除いては1つしかないことがこのフローチャートの処理の前提となっている。
図7のステップS1で、ハードウェアおよびソフトウェアの各種初期化が行われる。
続く、ステップS2では、外部フラッシュROM5に格納されたアプリケーション・プログラムの先頭ブロックが検索される。すなわち、定コード10=“START”であるブロックが検索される。
なお、検索方法としては、原則として、図2に示す物理アドレスを“0x000000”→“0xFFFFFF”の方向にインクリメントしていき、“0xFFFFFF”まで達した場合、再度“0x000000”から検索するようにする。
ステップS2に続くステップS3では、先頭ブロックがあったかどうかが判定される。
ステップS3で先頭ブロックが見つからなかったと判定された場合(ステップS3の判定結果がNoの場合)、例えばエラーとして、一連の処理を終了する。
ステップS3で先頭ブロックが見つかったと判定された場合(ステップS3の判定結果がYesの場合)、ステップS4において、上述の通りアドレスの上流側から下流側に向けて検索しても良いが、物理アドレスをインクリメントする方向とデクリメントする方向との双方向に検索しても構わない。これは、先頭ブロックに近い場所に検索対象がある可能性が高いからである。ここで、ステップS3で見つかった先頭ブロックの前後に定コード10=“START”であるもうひとつのブロックがあるかどうか(ステップS5)が判定される。
ステップS5においてそのもうひとつのブロックがないと判定された場合、ステップS7で、ステップS3で見つかったブロックを、アプリケーション・プログラムの先頭ブロックとして決定し、ステップS8に進む。
ステップS5においてそのもうひとつのブロックがあると判定された場合、ステップS6で、ステップS4で見つかったブロックのリフレッシュ実施時刻と、ステップS2で見つかったブロックのリフレッシュ実施時刻とを比較し、時刻が古い方のブロックを、アプリケーション・プログラムの先頭ブロックとして決定し、ステップS8に進む。これは、図2のリフレッシュ実施時刻12以降の項目(第1のSUM値13、プログラム14、第2のSUM値15)のいずれかの処理中に電源断が発生した場合に相当する。
なお、ステップS6において、ステップS4で見つかったブロックのリフレッシュ実施時刻と、ステップS2で見つかったブロックのリフレッシュ実施時刻のいずれか一方の値が“0xFF”であった場合は、図2のリフレッシュ実施時刻12以前の項目(リフレッシュ状態フラグ11、リフレッシュ実施時刻12)のいずれかの処理において電源断が発生した場合に相当する。この場合、リフレッシュ実施時刻の値が“0xFF”であるブロックを時刻が新しい方のブロックとみなす。
ステップS6またはステップS7から制御を渡されたステップS8では、その先頭ブロック内のプログラム14から算出したSUM値(チェックサム値)が、その先頭ブロック内の第1のSUM値13に一致するかどうか、すなわち、その先頭ブロック内の第1のSUM値13が正しいものであるかどうかが判定される。
ステップS8においてその先頭ブロック内の第1のSUM値13が正しいものではないと判定された場合、プログラムと算出したSUM値との不整合によるエラーとして一連の処理を終了する。
ステップS8においてその先頭ブロック内の第1のSUM値13が正しいものであると判定された場合、ステップS9において、その先頭ブロックをSDRAM4に転送する。
そして、続くステップS10において、ステップS9でSDRAM4に転送したブロックが最終ブロックであるかどうか、すなわち、その転送したブロックの定コードの値が“END”であるかどうかが判定される。
ステップS10で転送したブロックが最終ブロックであると判定された場合、ステップS12で転送したアプリケーション・プログラムを実行する。すなわち、制御がアプリケーション・プログラムに移る。
ステップS10で転送したブロックが最終ブロックではないと判定された場合、ステップS11で定コード10=“NULL”または定コード10=“END”である次のプログラムの格納ブロックが検索される。
そして、ステップS8に戻り、ステップS11で見つかった次のブロックに対し、ステップS8以降の処理が繰り返される。
図8は、アプリケーション・プログラムの実行シーケンスを示すフローチャートである。
図8のステップS21で、電源断時の再リフレッシュ処理が実行される。なお、再リフレッシュ処理の詳細については、図10〜図12を参照して後述する。
続く、ステップS22では、外部フラッシュROM5に格納されたアプリケーション・プログラムの先頭ブロックが検索される。すなわち、定コード10=“START”であるブロックが検索される。
ステップS22に続くステップS23では、見つかった先頭ブロックのリフレッシュ実施時刻12の値が取得され、ステップS24でRTC6により現在時刻が取得される。そして、ステップS25で、ステップS23のリフレッシュ実施時刻12の値と、ステップS24の現在時刻との差分がとられて、経過時間が算出される。
ステップS25に続くステップS26では、算出された経過時間が予め定められた閾値より大きいかどうかを比較することで、リフレッシュの実行周期に到達したかどうかが判定される。ここで、閾値はどのような値でも設定可能だが、実際の運用に即して、例えば週末/月末/年末などのタイミングや夜間などの負荷状態の低い時間帯になるように設定するのが好ましい。また、アプリケーションプログラムに固定で定義しておいても良いし、専用のファームウェアを用意してユーザが設定し、この値をアプリケーションから読み込めるようにしておいても構わない。
ステップS26でリフレッシュの実行周期に到達したと判定された場合(ステップS26の判定結果がYesの場合)、ステップS27で、リフレッシュ処理が実行される。なお、このリフレッシュ処理については、図9で説明する。
一方、ステップS26でリフレッシュの実行周期に到達していないと判定された場合(ステップS26の判定結果がNoの場合)、ステップS28で、アプリケーション・プログラムの本来のファームウェアとしての処理(製品個別処理)が行われて、ステップS24に戻る。
図9は、図8のリフレッシュ処理の詳細フローチャートである。
図9のステップS31では、外部フラッシュROM5に格納されたアプリケーション・プログラムの先頭ブロックが検索される。すなわち、定コード10=“START”であるブロックが検索される。
続く、ステップS32では、先頭の空きブロックが検索される。すなわち、定コード10=“0xFF”であるブロックのうちの物理アドレスが最も小さいものが検索される。
ステップS32に続くステップS33では、ステップS31の検索により見つかった(コピー元の)対象ブロック、あるいは、後述のステップS36の検索により見つかった対象ブロックを読み出して、リフレッシュ状態フラグ11とリフレッシュ実施時刻12とを更新する。すなわち、リフレッシュ状態フラグ11の値としてコピー元とは異なる値をコピー先に設定するようにし、RTC6により取得された、その読み出しを行った時刻を、リフレッシュ実施時刻12の値として設定する。そして、ステップS32の検索により見つかった(コピー先の)空きブロック、あるいは、後述のステップS37の検索により見つかった空きブロックに、更新後のリフレッシュ状態フラグ11とリフレッシュ実施時刻12とを含むコピー元のブロックのデータを書き込む。
ステップS33に続くステップS34では、(コピー元の)対象ブロックを消去する。すなわち、対象ブロックの定コード10〜第2のSUM値15の値をすべて“0xFF”に設定する。
続く、ステップS35では、コピー先のブロックの定コード10の値が参照されて、そのコピー先のブロックが最終ブロックであるかどうか、すなわち、そのコピー先のブロックの定コード10=“END”であるかどうかが判定される。
ステップS35でコピー先のブロックの定コード10=“END”ではないと判定された場合(ステップS35の判定結果がNoの場合、ステップS35が最初に実行されるときは通常このように判定される)、ステップS36において、定コード10=“NULL”または定コード10=“END”である次のプログラムの格納ブロック(リフレッシュ対象のブロック)が検索される。このとき、先のリフレッシュ対象ブロックの位置からインクリメント方向に検索される。続いて、ステップS37において、定コード10=“0xFF”である次の空ブロックが検索される。このとき、先の空きブロック(この時点では、先のリフレッシュ対象ブロックが書き込まれている)からインクリメント方向に検索される。なお、ステップS36やステップS37において、アドレスの最後までインクリメントしても対象が無いときは、先頭アドレスからインクリメント方向に検索を続ける。また、ここではインクリメント方向としたが、検索方向をデクリメントに統一しても構わない。
そして、ステップS33に戻り、ステップS33以降の処理が、その次のリフレッシュ対象のブロックに対して繰り返される。
一方、ステップS35でコピー先のブロックの定コード10=“END”であると判定された場合(ステップS35の判定結果がYesの場合)、ステップS38において、自動でリブートする。すなわち、制御がブートプログラムに移り、アプリケーション・プログラムのSDRAMへの転送が再度行われる。フラッシュROMでの実行速度は遅いので、SDRAMへアプリケーション・プログラムを転送して実行する必要があるためである。
図10、図11、および図12は、図8の電源断時の再リフレッシュ処理の詳細フローチャートである。
図10のステップS41では、外部フラッシュROM5上の不完全な空きブロックが検索される。なお、「不完全な空きブロック」とは、空きブロックを作る処理中(コピー元ブロックの消去の処理中)に電源断が発生することで外部フラッシュROM5上に生じるブロックである。したがって、「不完全な空きブロック」を判定する条件としては、定コード=“0xFF”であり、以降の項目のいずれか、あるいは以降がすべて“0xFF”でないことになるが、処理負荷の軽減(判定処理の簡略化)の意味で、例えば次のような判定条件を採用してもよい。
・定コード10=“0xFF”であり、プログラム14≠“0xFF”であるブロック
・定コード10=“0xFF”であり、プログラム14=“0xFF”であり、第2のSUM値15≠“0xFF”であるブロック ここでは後者を用い、図10でも、これを用いて説明している。
続く、ステップS42では、外部フラッシュROM5に格納されたアプリケーション・プログラムの先頭ブロックが検索される。すなわち、定コード10=“START”であるブロックが検索される。また、ステップS42ではさらに、見つかった先頭ブロックに対して、物理アドレスをインクリメントする方向とデクリメントする方向との双方向に検索することで、既に見つかった先頭ブロックの前後に定コード10=“START”であるもうひとつのブロックがあるかどうかが判定される。
ステップS42に続くステップS43では、同じブロックがないと判定された場合、ステップS46で、ステップS42で見つかったブロックを、アプリケーション・プログラムの先頭ブロックとして決定し、ステップS47に進む。
ステップS43においてそのもうひとつのブロックがあると判定された場合、ステップS44で、ステップS42で見つかった2つのブロックのリフレッシュ実施時刻を比較し、時刻が古い方のブロックを、アプリケーション・プログラムの先頭ブロックとして決定し(いずれか一方のリフレッシュ実施時刻の値が“0xFF”であった場合、ステップS6と同様に、そのリフレッシュ実施時刻の値が“0xFF”である方を時刻が新しいものとする)、ステップS45で、リフレッシュ実施時刻が新しい方のブロックを消去して、ステップS47に進む。
ステップS46またはステップS45から制御を渡された図11のステップS47では、現在のブロック(ステップS47が最初に実行される場合は、現在のブロック=先頭ブロック)のリフレッシュ状態フラグ11の値が取得され、続く、ステップS48では、現在のブロックの次のブロックのリフレッシュ状態フラグ11の値が取得される。
そして、続くステップS49において、ステップS47で取得した現在のブロックのリフレッシュ状態フラグ11の値と、ステップS48で取得した現在のブロックの次のブロックのリフレッシュ状態フラグ11の値とが一致するかどうかが判定される。
ステップS49において現在のブロックのリフレッシュ状態フラグ11の値と次のブロックのリフレッシュ状態フラグ11の値とが一致すると判定された場合(ステップS49の判定結果がYesの場合)、ステップS50において、現在のブロックが1ブロック進められ、ステップS51において、ステップS50で進められた現在のブロックが終端ブロックを超えたかどうかが判定される。
ステップS51で現在のブロックが終端ブロックを超えたと判定された場合(ステップS51の判定結果がYesの場合)、一連の処理を終了する。
ステップS51で現在のブロックが終端ブロックを超えていないと判定された場合(ステップS51の判定結果がNoの場合)、ステップS47に戻り、ステップS50で進められた現在のブロックに対し、ステップS47以降の処理が繰り返される。
一方、ステップS49において現在のブロックのリフレッシュ状態フラグ11の値と次のブロックのリフレッシュ状態フラグ11の値とが一致しないと判定された場合(ステップS49の判定結果がNoの場合)、ステップS52において、不一致ブロック内でデータの整合性がとれているかどうかが判定される。なお、「不一致ブロック」とは、ステップS49における次のブロック(この次のブロックでは、現在のブロックとリフレッシュ状態フラグ11の値とが一致しない)のことである。また、ステップS52では、判定処理の簡略化のために、「判定条件:第1のSUM13値=第2のSUM値15、かつ、プログラム14≠“0xFF”」を採用しているが、次のブロックにおいて、データが最後まで正常に書き込まれなかったことを検出可能とする任意の条件を採用可能である。
例えば、上述の図3のケースでは、「4」のブロック21を現在のブロックとし、「5」のブロック22を次のブロックとしてステップS49の判定を行ったときに、判定結果がNoとなり、ステップS52に進む。この場合、「5」のブロック22では整合性がとれている(データ書き込み中に電源断が発生した痕跡は認められない)ため、ステップS52では整合性がとれていると判定される。
また、上述の図4のケースでは、前の方の「5」のブロック24を現在のブロックとし、後の方の「5」のブロック25を次のブロックとしてステップS49の判定を行ったときに、判定結果がNoとなり、ステップS52に進む。この場合、後の方の「5」のブロック25では整合性がとれている(データ書き込み中に電源断が発生した痕跡は認められない)ため、ステップS52では整合性がとれていると判定される。
また、上述の図5のケースでは、「4」のブロック30を現在のブロックとし、「5」のブロック26を次のブロックとしてステップS49の判定を行ったときに、判定結果がNoとなり、ステップS52に進む。この場合、「5」のブロック26では整合性がとれていない(データ書き込み中にリフレッシュ状態フラグのところで電源断が発生した)ため、ステップS52では整合性がとれていないと判定される。
フローチャートの説明に戻る。
ステップS52において不一致ブロック内で整合性がとれていると判定された場合(例えば図3や図4のようなケース)、ステップS53において、現在のブロック内で整合がとれているかどうかが判定される。なお、ステップS53においてもステップS52と同様に、判定処理の簡略化のために、「判定条件:第1のSUM値13=第2のSUM値15、かつ、プログラム14≠“0xFF”」を採用しているが、現在のブロックにおいて、データが最後まで正常に書き込まれなかったことを検出可能とする任意の条件を採用可能である。
例えば、上述の図3のケースでは、「4」のブロック21が現在のブロックに相当する。「4」のブロック21内のデータは整合性がとれているため、ステップS53においても、整合性がとれていると判定される。
また、上述の図4のケースでは、前の方の「5」のブロック24が現在のブロックに相当する。前の方の「5」のブロック24内のデータは整合性がとれていない(第2のSUM値の書き込み中に電源断が発生した)ため、ステップS53においても、整合性がとれていないと判定される。
ステップS53において現在のブロック内で整合がとれていると判定された場合、ステップS55において、両ブロック(すなわち、現在のブロックと次のブロック)のプログラムは同一かどうかが判定される。
ステップS55において両ブロックのプログラムが同一であると判定された場合、ステップS56で、両ブロックにおけるリフレッシュ実施時刻を比較し、時刻が古い方のブロックを消去し、ステップS65に進む。
例えば、上述の図6のケースでは、前の方の「5」のブロック28が現在のブロックに相当し、後の方の「5」のブロック29が次のブロックに相当する。そして、前の方の「5」のブロック28と、後の方の「5」のブロック29とではプログラムは同一である。この場合、リフレッシュ実施時刻が古い後の方の「5」のブロック29が消去される。
ステップS55において両ブロックのプログラムが同一ではないと判定された場合、ステップS65に進む。
例えば、上述の図3のケースでは、「4」のブロック21が現在のブロックに相当し、「5」のブロック22が次のブロックに相当する。そして、「4」のブロック21と、「5」のブロック22とではプログラムは当然のこととして基本的に同一ではない。
上述のステップS52やS53で判定がNoの場合、すなわち、ステップS52において不一致ブロック内で整合がとれていないと判定された場合(例えば図5のようなケース)、または、ステップS53において現在のブロック内で整合がとれていないと判定された場合(例えば図4のようなケース)、ステップS54において、その不整合ブロックを消去し、ステップS65に進む。
例えば、図4の場合、前の方の「5」のブロック24が不整合ブロックであり、図5の場合、「5」のブロック26が不整合ブロックである。
ステップS54、S55、またはS56から制御を渡された図12のステップS65では、現在のブロックにおいて、定コード10=“END”であるか否かを判定する。
判定がYesの場合は、ステップS64に進み、自動でリブートする。すなわち、制御がブートプログラムに移り、アプリケーション・プログラムのSDRAMへの転送が再度行われる。
例えば、図6の場合、前の方の「5」のブロック28と、後の方の「5」のブロック29とではプログラムは同一であり、先のステップS56にて、リフレッシュ実施時刻が古い後の方の「5」のブロック29が消去されている。これにより、電源断による不整合は解消し、リフレッシュが正常に完了したことになる。
一方で、上述のステップS65で判定がNoの場合、ステップS57に進む。
ステップS57では、現在のブロックを基準にして、定コード10=“NULL”または定コード10=“END”である次のプログラムの格納ブロック(リフレッシュ対象のブロック)が検索される。
続く、ステップS58では、先頭の空きブロックが検索される。すなわち、定コード10=“0xFF”であるブロックのうちの物理アドレスが最も小さいものが検索される。
ステップS58に続くステップS59では、ステップS57の検索により見つかった(コピー元の)対象ブロック、あるいは、後述のステップS62の検索により見つかった対象ブロックを読み出して、リフレッシュ状態フラグ11とリフレッシュ実施時刻12とを更新する。すなわち、リフレッシュ状態フラグ11の値としてコピー元とは異なる値をコピー先に設定するようにし、RTC6により取得された、その読み出しを行った時刻を、リフレッシュ実施時刻12の値として設定する。そして、ステップS58の検索により見つかった(コピー先の)空きブロック、あるいは、後述のステップS63の検索により見つかった空きブロックに、更新後のリフレッシュ状態フラグ11とリフレッシュ実施時刻12とを含むコピー元のブロックのデータを書き込む。
ステップS59に続くステップS60では、(コピー元の)対象ブロックを消去する。すなわち、対象ブロックの定コード10から第2のSUM値15までの値をすべて“0xFF”に設定する。
続く、ステップS61では、コピー先のブロックの定コード10の値が参照されて、そのコピー先のブロックが最終ブロックであるかどうか、すなわち、そのコピー先のブロックの定コード10=“END”であるかどうかが判定される。
ステップS61でコピー先のブロックの定コード10=“END”ではないと判定された場合(ステップS61の判定結果がNoの場合)、ステップS62において、定コード10=“NULL”または定コード10=“END”である次のプログラムの格納ブロック(リフレッシュ対象のブロック)が検索される。このとき、先のリフレッシュ対象ブロックの位置からインクリメント方向に検索される。続いて、ステップS63において、定コード10=“0xFF”である次の空ブロックが検索される。このとき、先の空きブロック(この時点では、先のリフレッシュ対象ブロックが書き込まれている)からインクリメント方向に検索される。なお、ステップS62やステップS63において、アドレスの最後までインクリメントしても対象が無いときは、先頭アドレスからインクリメント方向に検索を続ける。また、ここではインクリメント方向としたが、検索方向をデクリメントに統一しても構わない。
そして、ステップS59に戻り、ステップS59以降の処理が、その次のリフレッシュ対象のブロックに対して繰り返される。
一方、ステップS61でコピー先のブロックの定コード10=“END”であると判定された場合(ステップS61の判定結果がYesの場合)、ステップS64において、自動でリブートする。すなわち、制御がブートプログラムに移り、アプリケーション・プログラムのSDRAMへの転送が再度行われる。フラッシュROMでの実行速度は遅いので、SDRAMへアプリケーション・プログラムを転送して実行する必要があるためである。
なお、以上の説明では、図2において、1ブロックが有する項目を、定コード10、リフレッシュ状態フラグ11、リフレッシュ実施時刻12、第1のSUM値13、プログラム14、第2のSUM値15、とした。
しかし、第1のSUM値13および第2のSUM値15がいずれもプログラム14のチェックサム値であり、同値であることを考慮すると、第2のSUM値15を省略することも可能である。ただし、この場合、例えば、図11のステップS52やステップS53における「第1のSUM値13=第2のSUM値15」という判定部分が「プログラムのチェックサム値=第1のSUM値13」に置き換わる。
要するに、プログラム14が正しく格納されていることを確認できて、定コード10、リフレッシュ状態フラグ11、リフレッシュ実施時刻12、の各項目を有し、有するそれぞれの項目の無効な値が取り決められている任意のデータ構成を、1ブロックとすることが可能である。このようにすれば、ブロックの各項目に設定された値を参照することで、電源断がリフレッシュ処理のどの段階で発生したかを判定でき、したがって、電源断後の再開時に、判定された電源断の発生タイミングに応じて、どれが不要な消去すべきブロックであるかが判明し、アプリケーション・プログラムを破壊することなく、再リフレッシュ処理を行なうことができる。
本発明の一実施形態に係るブートプログラムおよびアプリケーション・プログラムが格納された組み込み機器の構成例を示すブロック図である。 図1の外部フラッシュROM5のブロック構成を示す図である。 ブロックのコピーとコピー元ブロックの消去(空きブロックの生成)が終了したところで電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。 ブロックのコピーにおけるリフレッシュ状態フラグコピー完了後の処理実行中に電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。 ブロックのコピーにおけるリフレッシュ状態フラグの処理実行中に電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。 ブロックのコピーが終了したところで電源断が発生した場合の外部フラッシュROM5のデータ例を示す図である。 ブートプログラムの実行シーケンスを示すフローチャートである。 アプリケーション・プログラムの実行シーケンスを示すフローチャートである。 図8のリフレッシュ処理の詳細フローチャートである。 図8の電源断時の再リフレッシュ処理の詳細フローチャートである。 図8の電源断時の再リフレッシュ処理の詳細フローチャート(続きの1)である。 図8の電源断時の再リフレッシュ処理の詳細フローチャート(続きの2)である。
符号の説明
1 CPU
2 CPU内蔵RAM
3 CPU内蔵フラッシュROM
4 SDRAM
5 外部フラッシュROM
6 RTC
9 空きブロック
10 定コード
11 リフレッシュ状態フラグ
12 リフレッシュ実施時刻
13 第1のSUM値
14 プログラム
15 第2のSUM値
21、30 「4」のブロック
22 「5」のブロック
23 空きブロック
24、26、28 前の方の「5」のブロック
25、27、29 後の方の「5」のブロック

Claims (10)

  1. ファームウェアとして不揮発性メモリに格納されたプログラム、を実行する組み込み機器において、
    前記不揮発性メモリを複数の固定サイズのブロックに分割し、前記プログラムを前記ブロックのうちの一つ或いは複数以上にまたがるように分割して格納する格納手段と、
    該格納手段により分割して格納された前記プログラムを、前記各ブロックから別のブロックへと移動させることにより前記不揮発性メモリ内をリフレッシュさせるリフレッシュ実行部と、を有することを特徴とする組み込み機器。
  2. 前記リフレッシュ実行部は、
    前記不揮発性メモリの前記各ブロックに格納されたプログラムに対し、1ブロックのデータを前記不揮発性メモリの空きブロックにコピーするコピー処理部と、
    該コピー処理部によりコピーされた、コピー元の1ブロックのデータを消去する消去処理部と、を有し、
    前記プログラムを格納する全てのブロックを、ブロックごとに前記コピー処理部によるコピー処理と前記消去処理部による消去処理を繰り返すことを特徴とする請求項1記載の組み込み機器。
  3. 前記格納手段は、前記プログラム以外のデータも格納し、
    リフレッシュ中に電源断が発生した場合に、前記プログラムおよび前記プログラム以外のデータを参照して、該電源断がリフレッシュ処理のどの段階で発生したかを判定し、前記プログラムを破壊することなく、再度リフレッシュを行なう再リフレッシュ実行部、をさらに有することを特徴とする請求項1または2記載の組み込み機器。
  4. 前記プログラム以外のデータは、
    プログラムの先頭、終端および中間のいずれのデータがブロックに格納されているかを判別するためのコードと、
    コピー元ブロックとコピー先ブロックとで異なる値に設定されるリフレッシュ状態フラグと、
    リフレッシュを最後に実施した時刻を示すリフレッシュ実施時刻と、
    プログラムが正しく格納されていることを確認するためのチェックデータと、を有し、
    前記再リフレッシュ実行部は、
    前記プログラムが格納されたブロックのうちの1つのブロックと、前記1つのブロックに続き、且つ前記プログラムが格納されている次のブロックとについて、前記リフレッシュ状態フラグの値が一致しなかった場合に、電源断がリフレッシュ処理のどの段階で発生したかを判定する判定処理部と、
    該判定処理部の判定結果を基に、不要なブロックの消去を行なう不要ブロック消去部と、
    を有し、
    前記判定処理部は、
    前記次のブロック内のチェックデータを用いてデータ整合性を判定する第1判定部と、
    前記1つのブロック内のチェックデータを用いてデータ整合性を判定する第2判定部と、
    前記第1判定部と前記第2判定部の判定結果が共に整合性ありの場合に、前記1つのブロックと前記次のブロック内のプログラムが同一であるかどうかを判定する第3判定部と、を有することを特徴とする請求項3記載の組み込み機器。
  5. 前記第1判定部が前記次のブロック内でデータ整合性があると判定し、
    前記第2判定部が前記1つのブロック内でデータ整合性があると判定し、
    前記第3判定部が前記1つのブロックと前記次のブロックとでプログラムが同一でないと判定した場合を、前記再リフレッシュ実行部は、前記1つのブロックのコピーと該1つのブロックの消去が終了したところで電源断が発生した場合として特定し、前記次のブロックに対するリフレッシュ処理を行なうことを特徴とする請求項4記載の組み込み機器。
  6. 前記第2判定部が前記1つのブロック内でデータ整合性がないと判定し、
    前記不要ブロック消去部が、データ整合性がないと判定された前記1つのブロックを消去した場合を、前記再リフレッシュ実行部は、前記1つのブロックの前記リフレッシュ状態フラグのコピー完了後の処理中に電源断が発生した場合として特定し、前記次のブロックに対するリフレッシュ処理を行なうことを特徴とする請求項4記載の組み込み機器。
  7. 前記第1判定部が前記次のブロック内でデータ整合性がないと判定し、
    前記不要ブロック消去部が、データ整合性がないと判定された前記次のブロックを消去した場合を、前記再リフレッシュ実行部は、前記次のブロックの前記リフレッシュ状態フラグの項目のコピー中に電源断が発生した場合として特定し、前記1つのブロックの位置から新たに次のブロックの検索を行なうことを特徴とする請求項4記載の組み込み機器。
  8. 前記第1判定部が前記次のブロック内でデータ整合性があると判定し、
    前記第2判定部が前記1つのブロック内でデータ整合性があると判定し、
    前記第3判定部が前記1つのブロックと前記次のブロックとでプログラムデータが同一であると判定し、
    前記不要ブロック消去部が、前記現在のブロックと前記次のブロックのうちで、前記リフレッシュ実施時刻が古い方のブロックを消去した場合を、前記再リフレッシュ実行部は、コピー元ブロックの消去前に電源断が発生した場合として特定し、前記リフレッシュ実施時刻が新しい方のブロックの位置から新たに次のブロックの検索を行なうことを特徴とする請求項4記載の組み込み機器。
  9. 不揮発性メモリに格納されたプログラムをリフレッシュする方法において、
    前記不揮発性メモリは、リード/ライト可能な固定サイズの複数のブロックに分割され、前記プログラムは前記複数のブロックのうちの一部に分割して格納され、
    リフレッシュの度に前記プログラムを格納するブロック範囲が移動していくように、前記不揮発性メモリ内でリフレッシュを実行するステップ、を有することを特徴とする不揮発性メモリの自動リフレッシュ方法。
  10. 不揮発性メモリに格納されたファームウェアとしての自分自身をコンピュータにリフレッシュさせるプログラムにおいて、
    前記不揮発性メモリは、リード/ライト可能な固定サイズの複数のブロックに分割され、前記プログラムは前記複数のブロックのうちの一部に分割して格納され、
    前記プログラムは、本来のファームウェアとしての処理に関わるステップの他に、
    リフレッシュの度に前記プログラムを格納するブロック範囲が移動していくように、前記不揮発性メモリ内でリフレッシュを実行するステップ、
    を前記コンピュータに実行させることを特徴とする不揮発性メモリの自動リフレッシュ・プログラム。
JP2008232775A 2008-09-11 2008-09-11 組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラム Withdrawn JP2010067010A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008232775A JP2010067010A (ja) 2008-09-11 2008-09-11 組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008232775A JP2010067010A (ja) 2008-09-11 2008-09-11 組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2010067010A true JP2010067010A (ja) 2010-03-25

Family

ID=42192547

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008232775A Withdrawn JP2010067010A (ja) 2008-09-11 2008-09-11 組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2010067010A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014525634A (ja) * 2011-08-31 2014-09-29 マイクロン テクノロジー, インク. メモリリフレッシュ法および装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014525634A (ja) * 2011-08-31 2014-09-29 マイクロン テクノロジー, インク. メモリリフレッシュ法および装置
US9176800B2 (en) 2011-08-31 2015-11-03 Micron Technology, Inc. Memory refresh methods and apparatuses
US10109357B2 (en) 2011-08-31 2018-10-23 Micron Technology, Inc. Memory refresh methods and apparatuses
US10290359B2 (en) 2011-08-31 2019-05-14 Micron Technology, Inc. Memory refresh methods and apparatuses

Similar Documents

Publication Publication Date Title
US6845434B2 (en) Method for updating parametric data for use in data management system
US8219767B2 (en) Information processing apparatus and data recovering method
EP3783490B1 (en) Operating method of memory controller and storage device
JP2002169729A (ja) 不揮発性メモリユニットのコントローラ、同コントローラを有するメモリシステム及び不揮発性メモリユニットの制御方法
CN109445991B (zh) 一种数据存储方法、系统、智能可穿戴设备及存储介质
TWI460586B (zh) 資料儲存裝置與快閃記憶體操作方法
JP5883284B2 (ja) 半導体メモリ制御装置及び制御方法
JP2008033801A (ja) メモリデータ管理装置
JP2009093528A (ja) メモリデータ管理装置
CN1214328C (zh) 一种引导存储器的构建方法、引导存储器及驱动方法
JP2010067010A (ja) 組み込み機器、不揮発性メモリの自動リフレッシュ方法およびプログラム
JP4794530B2 (ja) 半導体装置および携帯電話
CN116185461B (zh) 固件升级方法及系统
JP6636930B2 (ja) フラッシュメモリ内蔵マイコン、マイコンに内蔵されたフラッシュメモリへのデータ書込み方法、および、フラッシュメモリへのデータを書込むプログラム
US11416372B2 (en) Storage device and method of controlling storage device
JP5418348B2 (ja) 情報処理装置およびカラオケ装置
CN115202579A (zh) 一种存储器数据保存方法和系统
JP2004310268A (ja) フラッシュメモリ内蔵の半導体装置、フラッシュメモリの制御方法およびそのプログラム
CN109558274B (zh) 一种信息处理方法、装置及计算机可读存储介质
JP5521437B2 (ja) 携帯端末装置、ソフトウェア更新方法及びプログラム
JP5520880B2 (ja) フラッシュメモリ装置
US10776092B2 (en) Method of obtaining a program to be executed by a electronic device, such as a smart card, comprising a non-volatile memory
JP2016071447A (ja) 不揮発性記憶装置及び不揮発性記憶装置の制御方法
JP4910402B2 (ja) 不揮発性メモリの書き換え装置及び書き換え方法
US20170010827A1 (en) File system of controller

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20111206