JP2016157163A - 制御回路及び制御回路における制御方法 - Google Patents
制御回路及び制御回路における制御方法 Download PDFInfo
- Publication number
- JP2016157163A JP2016157163A JP2015032669A JP2015032669A JP2016157163A JP 2016157163 A JP2016157163 A JP 2016157163A JP 2015032669 A JP2015032669 A JP 2015032669A JP 2015032669 A JP2015032669 A JP 2015032669A JP 2016157163 A JP2016157163 A JP 2016157163A
- Authority
- JP
- Japan
- Prior art keywords
- data
- program
- bootable
- control circuit
- storage means
- 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
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
【課題】データ保持期限が比較的短期の不揮発性メモリを電子機器のプログラム格納に使用する場合において、その保証されるデータ保持期間を経過した場合であっても、当該不揮発性メモリを搭載した制御ボード等の電子部品を正常に動作させる。【解決手段】演算手段と、前記演算手段を制御するためのプログラムを格納するための複数の不揮発性の記憶手段であって、第1の記憶手段と当該第1の記憶手段よりもリテンションの短い第2の記憶手段と、を備えた制御回路において、前記第2の記憶手段には、同一内容の前記プログラムが複数格納され、前記制御回路に対して電源が投入された時点で、前回の電源の投入から所定期間が経過していた場合、前記第2の記憶手段に格納された複数の前記プログラムを用いて誤りのないプログラムを生成して、当該生成されたプログラムを前記演算手段に実行させることを特徴とする。【選択図】 図7
Description
eMMC等の不揮発性メモリにプログラムを格納する場合のbit化け対策に関する。
従来、印刷装置などの電子機器を制御するためのプログラムを格納するための記憶手段として、不揮発性メモリであるNOR型FlashROMが使用されている。
そして近年では、プログラム容量の増大により、CPUを動作させるための初期設定やプログラムをダウンロードするためのダウンローダのみをNOR型FlashROMに格納し、容量の大きいアプリケーションプログラムはNAND型FlashROMやeMMC(embedded MultiMediaCard)といった別の記憶手段に別途格納されるようになってきた。例えば、eMMCの実態は、NAND型FlashROMとNAND型FlashROMコントローラで構成される大容量の不揮発性メモリである。つまり、eMMCであれば、NAND型FlashROMコントローラがNAND型FlashROMの制御を行うので、設計者はSDIO I/Fを介してeMMCにアクセスすれば良いだけということになる。
半導体集積回路(IC)の進化に伴い不揮発性メモリの容量が飛躍的に増大しているが、その分、従来のNAND型FlashROMやNOR型FlashROMと比較して、その保証されるデータ保持期間(リテンション)が短くなっている。
一般に、電子機器メーカでは製品のための保守部品という概念があり、ユーザが購入した製品で故障が発生した場合の交換部品を用意しておく必要がある。保守部品の保管期限は製品の種類やメーカにより差があるものの、各メーカが規定している保守部品の保管期限よりも短いデータ保持期限しか保証されない不揮発性メモリも登場してきている。このような不揮発性メモリを、例えば印刷装置の制御ボードに採用した場合、従来の運用方法で当該制御ボードの保守部品を管理していくと、いわゆるbit化けによって不揮発性メモリ内のデータが毀損し、保守部品としての制御ボードがユーザ先で動作しないという事態が発生し得る。
本発明に係る制御回路は、演算手段と、前記演算手段を制御するためのプログラムを格納するための複数の不揮発性の記憶手段であって、第1の記憶手段と当該第1の記憶手段よりもリテンションの短い第2の記憶手段と、を備えた制御回路であって、前記第2の記憶手段には、同一内容の前記プログラムが複数格納され、前記制御回路に対して電源が投入された時点で、前回の電源の投入から所定期間が経過していた場合、前記第2の記憶手段に格納された複数の前記プログラムを用いて誤りのないプログラムを生成して、当該生成されたプログラムを前記演算手段に実行させることを特徴とする。
データ保持期限が比較的短期の不揮発性メモリを電子機器のプログラム格納に使用する場合において、その保証されるデータ保持期間を経過した場合であっても、当該不揮発性メモリを搭載した制御ボード等の電子部品を正常に動作させることができる。
以下、添付の図面を参照して、本発明を実施する形態について説明する。なお、以下の実施例において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
[実施例1]
以下では、電子機器の一例として印刷装置を例に説明するものとする。
以下では、電子機器の一例として印刷装置を例に説明するものとする。
図1は、本実施例に係る、比較的簡単な構造の印刷装置であるSFP(シングルファンクションプリンタ)のシステム構成の一例を示す図である。
SFP100は、印刷部101、印刷制御部102、操作部103で構成される。
印刷部101は、紙等の記録媒体上に電子写真方式等によって画像データに従った画像を形成する。
印刷制御部102は、一般的にはプリンタコントローラと呼ばれ、不図示のPC等から送信された印刷データを印刷部101に適合した画像データに変換する処理を行なう。この印刷制御部102は、ハードウェア的には前述の制御ボード(制御回路)に相当する。印刷制御部102は、SOC110、NOR型FlashRom120、eMMC130、DDR-SDRAM(以下、DDR)140、PHY150、LAN I/F160、USB-D I/F170及び電源180で構成される。以下、印刷制御部102の各構成要素について説明する。
SOC110は、System On Chipの略称であって、演算手段であるCPU111を内蔵した集積回路である。SOC110は、メモリ制御、印刷部101との通信及び画像データ転送、PCからの印刷データの受信、USBやLANといった外部インターフェース等の制御のすべてを1つのChipで行う。また、SOC110には、SFP100本体への電源供給が停止されても現在時刻を刻み続けるRTC(Real Time Clock)が備えられ、そのための電源がコイン電池180から供給される。
NOR型FlashROM120は、CPU111を動作させるための初期設定プログラムや、プログラムをダウンロードするための小容量のプログラム(以下、bootrom)を格納するための不揮発性メモリである。NOR型FlashROM120は、容量当たりのコストが比較的高価であるものの、データ保持期間は例えば約20年と長期である。
eMMC130は、印刷処理を実行するためのアプリケーションプログラム(以下、bootable)といった比較的大容量のプログラムを格納するための不揮発性メモリである。このbootableは、揮発性メモリであるDDR140にコピーされて、CPU111がDDR140上に展開された当該bootableプログラムを実行することで、所期の機能が実現される。eMMC130は、容量当たりのコストが比較的安価であるものの、データ保持期間は例えば約3年と、NOR型FlashROM120と較べると短期である。
このように印刷制御部102には、NOR型FlashROM120とeMMC130という、データ保持期間の異なる2種類の不揮発性メモリが存在し、SOC110における基本的な制御を行うためのプログラムのみをNOR型FlashROM120に格納するようにしている。
PHY150は、LAN等のネットワークにおけるデータ通信用のドライバーレシーバーICである。LAN I/F160はLANとのインターフェースであり、USB-D I/F170はUSBデバイスとのインターフェースである。
操作部103は、SFP100を使用するユーザが各種操作・指示を行うためのユーザインタフェースである。
図2は、SFP100起動時における通常処理の流れを示すフローチャートである。
SFP100本体に対し電源が入れられる(Power ON)と、ステップ201において、SOC110内のCPU111は、NOR型FlashROM120に格納されているbootromにアクセスする。
そして、ステップ202において、CPU111は、bootromのプログラムコードに基づきSOC110の初期設定を行う。
SOC110の初期設定が終了すると、ステップ203において、CPU111は、eMMC130にアクセスし、eMMC130に格納されているbootableをDDR140にコピーする。
コピーが終了すると、CPU111は、DDR140に格納された(コピーされた)bootableのプログラムコードを実行する。これによりSFP100は印刷処理が可能な状態(Ready状態)となる。
以上が、SFP100起動時における通常処理の内容である。このように起動時の処理が正常に実行されれば、すなわち、プログラムが正しく読める状況でeMMC130からDDR140へとコピーできれば、前述したような問題は生じないことになる。
続いて、eMMC130におけるデータ保持期間(リテンション)について説明する。
図3は、eMMC130にデータが書き込まれた後、電源が入れられることがなかった(アクセスがなかった)場合の時間経過に伴うデータ保持期間を示すグラフである。eMMC130に書き込まれるデータは電荷の有無によってその情報が表され、電荷があると‘0’が認識され、電荷がないと‘1’が認識される。何もデータが書き込まれていない場合のeMMC130内のデータはAll 0xFFとなる。そして、内部の電荷は時間の経過と共に抜けていき、いわゆるbit化けを起こすことになる。図3のグラフの例では、“0”を認識することができるある電圧スレッシュレベルの下で、eMMC130に書き込まれたデータを正常に読み出せることのできる期間が3年であること(保証されるデータ保持期間が3年であること)を示している。もちろん、図3のグラフで示すリテンション特性のeMMC130であっても、データの書込み後3年経過によってすべてのデータの値が0xFFになるわけではないが、ところどころでbit化けを起こすことになる。
図4(a)〜(d)は、eMMC130内部に書き込まれたデータが、時間の経過と共に徐々にbit化けを起こす様子を表した図であり、黒の矩形がデータ内でbit化けを起こした箇所を示している。図4(a)は、データの書込み時点から3年が経過するまでのデータの状態を示しておりbit化けは生じていない。これに対し、図4(b)に示す4年経過時点では3箇所でbit化けが生じており、図4(c)に示す5年経過時点では10箇所に増え、図4(d)に示す6年経過時点では24箇所でbit化けが生じている。このように、リテンション特性が3年のeMMC130の場合、3年まではbit化けは発生しないが、4年、5年と時間が経過するにつれてbit化けが発生し、その個数は増加していくことが分かる。
このようなbit化けを起こしたeMMC130内のデータ(本実施例ではbootableプログラム)が例えば圧縮されていた場合は、伸長できずにプログラムが起動できないということが起こり得る。また、圧縮されていない場合でも、DDR140にコピーされたbootableの実行によってCPU111が誤動作を起こして暴走する等の問題が生じ、正しい印刷処理ができないという事も起こり得る。
これは、eMMC130のようなリテンション特性が短期の不揮発性メモリを制御ボード等に採用すると、保守部品として倉庫に保管された当該制御ボードは比較的短期間で、bit化けによる不具合を起こす可能性があるということである。ここで、保守部品の期限を不揮発性メモリの保証するデータ保持期間より短くするという運用方法も考えられる。しかし、そのような運用方法の変更は在庫管理が煩雑になる上、コストの増大を招くことからメーカにとって負担が増すことになり望ましくない。本発明は、そのような運用方法の変更を伴わない問題解決の手法を提案するものである。
上述のとおり、例えばeMMC130のデータ保持期間は従来のNOR型FlashROMよりも短いが、そのトレードオフとしてメモリ容量には余裕がある。そこで、本実施例では、同一内容のプログラム(bootable)を複数eMMC内に保持し、これらを相互に比較して正しいと推認される内容のプログラムが実行されるようにすることで、起動時における動作不良の発生を回避している。以下、詳しく説明する。
図5は、本実施例に係る、SFP100起動時に実行される処理の流れを示すフローチャートである。本処理の前提として、eMMC130のデータ保持期間は3年であるものとする。
ステップ501及び502は、前述の図2のフローにおけるステップ201及び202と同じである。bootromのプログラムコードに基づきSOC110の初期設定がなされると、ステップ503において、CPU111は、bootrom内の前回起動時に書き込まれた時刻とRTC112が刻んでいる現在時刻とを比較し、前回起動時からeMMC130が保証する所定のデータ保持期間(ここでは3年)が経過しているかを判定する。判定の結果、未だ所定期間(ここでは3年)が経過していない場合は、ステップ504に進む。一方、既に所定期間が経過している場合は、ステップ505に進む。
ステップ504において、CPU111は、eMMC130にアクセスし、eMMC130に格納されているbootableをDDR140にコピーする。
ステップ505において、CPU111は、bootable検証処理、すなわち、eMMC130に格納されている複数のbootableを比較し、正しいプログラム部分を選択してDDR140にコピーする処理を実行する。このbootable検証処理の詳細については後述する。
ステップ506において、CPU111は、DDR140に格納された(コピーされた)bootableのプログラムコードを実行する。これによりSFP100は印刷処理が可能な状態(Ready状態)となる。
正しくプログラムが起動できReady状態となると、ステップ507において、CPU111は、bootromに現在の時刻を書き込んで、再びNOR型FlashROM120に格納する。これにより、次回電源が投入された時に、その時のRTC112が刻む時刻と今回書き込まれた時刻とを比較することで、前回起動時からどの程度の時間が経過したのかを判定することが可能になる。
最後に、ステップ508において、CPU111は、DDR140上にコピーされたbootableを、eMMC130内に複数個(本実施例では、3個)コピーする。図6は、eMMC130の内部に、同じ内容のbootableプログラムが複数格納されている様子を模式的に示す図である。図6に示すように、eMMC130の中には、bootabe-A、bootable-B、bootable-Cの3つの同じプログラムが格納されている。このうち、bootable-Aが起動時において基本的に使用するプログラムであり、前回起動時から3年経過していない場合は必ずこのbootable-Aが使用される。なお、eMMC130は大容量であるので、3つの同内容のbootableプログラムを格納しても十分な容量の空きエリアが存在することが分かる。複数コピーされた同一のbootableプログラムをどのように用いて、正しいと推認される内容のbootableが実行されるようにするのかについては後述する。
以上が、本実施例に係る、SFP100起動時に実行される処理の流れを示すフローチャートである。
なお、ステップ503の判定処理を行なうことなく、起動時には毎回ステップ505のbootable検証処理を行うことも考えられる。そうすると電源投入の度にbootable検証処理のプログラムが走ることになって、結果的にbit化けのリスクがないようなケースについてもReady状態となるまでの起動時間が長くなるという問題が生じてしまう。従って、本実施例では、保証されるデータ保持期間を超えて放置され、bit化けが生じている可能性が高いときにのみbootable検証処理を行なうこととしている。
<bootable検証処理>
続いて、本発明の特徴であるbootable検証処理の詳細について説明する。図7は、本実施例に係る、bootable検証処理の流れを示すフローチャートである。
続いて、本発明の特徴であるbootable検証処理の詳細について説明する。図7は、本実施例に係る、bootable検証処理の流れを示すフローチャートである。
ステップ701において、CPU111は、bootable-Aのプログラムのうちリードアドレスで指定された所定の容量のデータをeMMC130から読み込む。ここで、所定容量は、例えばeMMC130のアクセス単位であるブロック単位(例えば512Byte(128Words))とする。
ステップ702において、CPU111は、bootable-Bのプログラムのうちリードアドレスで指定された上記所定の容量のデータをeMMC130から読み込む。
ステップ703において、CPU111は、ステップ701で読み込んだbootable-Aのデータとステップ702で読み込んだbootable-Bのデータとを比較し、両データが一致するかを判定する。具体的には、bootable-Aの1ブロック分(512Byte)のデータの内容とbootable-Bの1ブロック分(512Byte)のデータの内容とが、同じかどうかが判定される。判定の結果、両データが一致する場合は、ステップ704に進む。一方、両データが一致しない場合は、ステップ705に進む。
ステップ704において、CPU111は、bootable-Aから読み込んだ所定容量のデータをDDR140のプログラム格納領域にコピーする。
ステップ705において、CPU111は、Bootable-Cのプログラムのうちリードアドレスで指定された上記所定の容量のデータをeMMC130から読み込む。
ステップ706において、CPU111は、ステップ701で読み込んだbootable-Aのデータとステップ705で読み込んだbootable-Cのデータとを比較し、両データが一致するかを判定する。具体的には、bootable-Aの1ブロック分(512Byte)のデータの内容とbootable-Cから読み込んだ1ブロック分(512Byte)のデータの内容とが、同じかどうかが判定される。判定の結果、両データが一致する場合は、ステップ707に進む。一方、両データが一致しない場合は、ステップ708に進む。
ステップ707において、CPU111は、Bootable-Aから読み込んだ所定容量のデータをDDR140のプログラム格納領域にコピーする。
ステップ708において、CPU111は、ステップ702で読み込んだbootable-Bのデータとステップ705で読み込んだbootable-Cのデータとを比較し、両データが一致するかを判定する。具体的には、bootable-Bの1ブロック分(512Byte)のデータの内容とbootable-Cの1ブロック分(512Byte)のデータの内容とが、同じかどうかが判定される。判定の結果、両データが一致する場合は、ステップ710に進む。一方、両データが一致しない場合は、ステップ709に進む。
ステップ709において、CPU111は、エラー処理を行なって、SFP100の起動処理を停止する。これは、本ステップに進んだ時点で、bootable-A、bootable-B、bootable-Cのすべてで特定ブロックのデータ内容が一致せず、どのbootableの内容が正しいのかが判別不能に陥ったためである。いずれのbootableについても正しい内容でない可能性があることから、本実施例では、SFP100の起動処理自体を停止することとしている。
ステップ710において、CPU111は、bootable-Bから読み込んだ所定容量のデータをDDR140のプログラム格納領域にコピーする。
ステップ711において、CPU111は、bootable-Aのプログラムのデータを最後まで読み込んだかどうかを判定する。まだ読み込んでいないデータが存在する場合は、ステップ712に進み、bootable-A、bootable-B、bootable-Cすべてのリードアドレスをインクリメントしてステップ701に戻り、次のリードアドレスのデータについての処理を続行する。
以上が、本実施例に係る、bootable検証処理の内容である。
図8は、上述した本実施例に係るbootable検証処理の考え方を模式的に示した図である。図8において、参照符号801が上述のbootable-Aの全データ、参照符号802が上述のbootable-Bの全データ、参照符号803が上述のbootable-Cの全データを示している。黒の矩形はbit化けが生じた箇所を示している。各bootableプログラムは、0〜7の計8つのブロック(1ブロックは512Byte)で構成されている。参照符号804は、DDR140にコピー(格納)されるbootableの全データを示しており、bootable-A〜Cと同様、0〜7の計8つのブロック(1ブロックは512Byte)で構成されている。
まず、先頭のブロックである0番目のブロックは、bootable-A〜Cのすべてで正常(黒の矩形なし)であるため、bootable-Aにおける0番目のブロックのデータが、DDR140に展開される0番目のブロックのデータとしてコピーされる。次に、1番目のブロックは、bootable-Aにおいてbit化けが生じているものの、bootable-Bとbootable-Cではbit化けが生じておらず、両データは一致している。したがって、bootabel-Bにおける1番目のブロックのデータが、DDR140に展開される1番目のブロックのデータとしてコピーされることになる。このような多数決方式による正しいと推認される内容の決定処理が7番目のブロックまで繰り返され、最終的にbit化けのない参照符号804で示されるbootableのプログラムがDDR140にコピーされることとなる。
以上述べたとおり、本実施例によれば、複数の同一のプログラムがデータ保持期間の比較的短い不揮発性メモリであるeMMC内に保持される。そして、これらを相互に比較して正しいと推認される内容のプログラムをDDR-SDRAMに展開し実行することで、起動時における動作不良の発生を回避可能にしている。
[実施例2]
次に、eMMCのアクセス単位であるブロック単位でチェックサム値を持たせ、それにより正しいことが確認されたプログラム部分をDDR-SDRAMに展開し実行する態様にいて、実施例2として説明する。なお、実施例1と共通する内容については説明を省略ないしは簡略化し、ここでは差異点であるbootable検証処理を中心に説明するものとする。
次に、eMMCのアクセス単位であるブロック単位でチェックサム値を持たせ、それにより正しいことが確認されたプログラム部分をDDR-SDRAMに展開し実行する態様にいて、実施例2として説明する。なお、実施例1と共通する内容については説明を省略ないしは簡略化し、ここでは差異点であるbootable検証処理を中心に説明するものとする。
図9は、本実施例に係る、bootable検証処理の流れを示すフローチャートである。
ステップ901において、CPU111は、bootable-Aのプログラムのうちリードアドレスで指定された所定の容量のデータを読み込む。この場合の所定容量については、実施例1と同じである。
ステップ902において、CPU111は、読み込んだbootable-Aの所定容量のデータ(ここでは、1ブロック(512Byte)のデータ)についてのチェックサム値を求める。チェックサム値の計算方法については周知であり、本願の本質ではないので説明を省略する。
ステップ903において、CPU111は、ステップ902で求めたチェックサム値が正しいかどうかを判定する。具体的には、ステップ901で読み込んだbootable-Aのデータについて求めたチェックサム値と、予め(例えばeMMC130への3つのbootable格納時)用意された該データに対応するブロックのチェックサム値とを比較し、両者が一致するかどうかの判定を行なう。判定の結果、双方のチェックサム値が一致する場合は、読み込んだデータの内容は正しいものとして、ステップ904に進む。一方、双方のチェックサム値が一致しない場合は、読み込んだデータの内容は正しくないものとして、ステップ905に進む。
ステップ904において、CPU111は、Bootable-Aから読み込んだ所定容量のデータをDDR140のプログラム格納領域にコピーする。
ステップ905において、CPU111は、bootable-Bのプログラムのうちリードアドレスで指定された上記所定の容量のデータを読み込む。
ステップ906において、CPU111は、読み込んだbootable-Bの所定容量のデータについてのチェックサム値を求める。
ステップ907において、CPU111は、ステップ906で求めたチェックサム値が正しいかどうかを判定する。具体的には、ステップ905で読み込んだbootable-Bのデータについて求めたチェックサム値と、予め用意された該データに対応するブロックのチェックサム値とを比較し、両者が一致するかどうかの判定を行なう。判定の結果、双方のチェックサム値が一致する場合は、読み込んだデータの内容は正しいものとして、ステップ908に進む。一方、双方のチェックサム値が一致しない場合は、読み込んだデータの内容は正しくないものとして、ステップ909に進む。
ステップ908において、CPU111は、Bootable-Bから読み込んだ所定容量のデータをDDR140のプログラム格納領域にコピーする。
ステップ909において、CPU111は、bootable-Cのプログラムのうちリードアドレスで指定された上記所定の容量のデータを読み込む。
ステップ910において、CPU111は、読み込んだbootable-Cの所定容量のデータについてのチェックサム値を求める。
ステップ911において、CPU111は、ステップ910で求めたチェックサム値が正しいかどうかを判定する。具体的には、ステップ909で読み込んだbootable-Cのデータについて求めたチェックサム値と、予め用意された該データに対応するブロック部分のチェックサム値とを比較し、両者が一致するかどうかの判定を行なう。判定の結果、双方のチェックサム値が一致する場合は、読み込んだデータの内容は正しいものとして、ステップ913に進む。一方、双方のチェックサム値が一致しない場合は、読み込んだデータの内容は正しくないものとして、ステップ912に進む。
ステップ912において、CPU111は、エラー処理を行なって、SFP100の起動処理を停止する。これは、本ステップに進んだ時点で、bootable-A、bootable-B、bootable-Cのすべてで特定ブロックのデータ内容が一致せず、どのbootableの内容が正しいのかが判別不能に陥ったためである。いずれのbootableについても正しい内容でない可能性があることから、本実施例では、SFP100の起動処理自体を停止することとしている。
ステップ913において、CPU111は、Bootable-Cから読み込んだ所定容量のデータをDDR140のプログラム格納領域にコピーする。
ステップ914において、CPU911は、Bootable-Aのプログラムのデータを最後まで読み込んだかどうかを判定する。まだ読み込んでいないデータが存在する場合は、ステップ915に進み、bootable-A、bootable-B、bootable-Cすべてのリードアドレスをインクリメントしてステップ901に戻り、次のリードアドレスのデータについての処理を続行する。一方、全てのデータの読込みが完了している場合は、本処理を終える。
以上が、本実施例に係る、bootable検証処理の内容である。
本実施例によっても、正しいと推認される内容のプログラムをDDR-SDRAMに展開し実行することが可能となり、起動時における動作不良の発生を回避することができる。
[実施例3]
実施例1及び2では、eMMC内に格納しておいた複数のプログラム(bootable)のすべてでbit化けが発生している虞があると判定されると、その段階でエラー処理を行なって起動処理を停止していた。次に、仮にすべてのプログラムの特定ブロックにおいてbit化けが発生していたとしても、可能な限りエラー処理を回避し、起動処理を続行する態様について、実施例3として説明する。
実施例1及び2では、eMMC内に格納しておいた複数のプログラム(bootable)のすべてでbit化けが発生している虞があると判定されると、その段階でエラー処理を行なって起動処理を停止していた。次に、仮にすべてのプログラムの特定ブロックにおいてbit化けが発生していたとしても、可能な限りエラー処理を回避し、起動処理を続行する態様について、実施例3として説明する。
図10は、本実施例におけるエラー処理回避の考え方を模式的に示した図である。図10において、参照符号1001が前述のbootable-Aの全データ、参照符号1002が前述のbootable-Bの全データ、参照符号1003が前述のbootable-Cの全データを示し、黒の矩形はbit化けが生じた箇所を示している。図8の場合と同様、各bootableプログラムは、0〜7の計8つのブロック(1ブロックは512Byte)で構成されている。いま、0番目のブロックでは、3個すべてのbootableにおいてビット化けが発生している。eMMC130内のbootableプログラムがこのような状態の場合、実施例1や2ではエラー処理となって(図7のフローにおけるステップ709及び図9のフローにおけるステップ912を参照)、起動処理がその段階で停止してしまう。
そこで、本実施例では、図7のフローや図9のフローにおいてエラー処理となった場合に、それぞれのbootableプログラムにおける正常な部分を有効に活用してエラー処理を回避する処理(以下、エラー回避処理)を実行する。このエラー回避処理では、エラー処理となったブロックが、さらに複数の領域(ここでは8つの領域)に分割される。参照符号1004〜1006は、それぞれbootable-A〜Cの0番目のブロックを8分割した様子を示している。なお、分割数は任意であるが、分割数を多くするほどすべてのプログラムで一致しないという問題が発生しづらくなるものの、処理量が増すために起動時間が掛かることになる。一方、分割数が少ないと処理負担は軽いものの、本手法によってもエラー処理が回避できない可能性が高くなる。したがって、これらのバランスを考慮して、分割数は決定される。図10の例では、8分割された0番目のブロックにおいて、bootable-Aについては3番目の領域に、bootable-Bについては1番目の領域に、bootable-Cについては6番目の領域に、それぞれbit化けの箇所が存在している。つまり、対応する同じ番号の領域においては、ビット化けは発生していない。そこで、8つに分割された各領域のうち、bit化けの発生していない領域のデータをDDR140にそれぞれコピーして1つのブロックのデータを構築する。参照符号1007は、DDR140にコピー(格納)されるbootableにおける0番目のブロックを示しており、bit化けのないデータとなっている。このように、それぞれのbootableプログラムにおける正常な部分を利用することで、エラー処理となるのを回避することが可能となる。
図11は、本実施例におけるエラー回避処理の流れを示すフローチャートである。
ステップ1101において、CPU111は、ブロック内での比較する領域を特定するための変数Nを初期化する。本実施例では、各ブロックを0〜7の計8つの領域に分割しており、初期値としてN=0に設定される。この場合、変数Nの最大値は7である。
ステップ1102において、CPU111は、エラー処理となったbootable-A〜Cにおける各ブロックのデータをそれぞれ所定数(ここでは8つ)の領域に分割する。
ステップ1103において、CPU111は、bootable-AにおけるN番目の領域のデータと、bootable-BにおけるN番目の領域のデータとを比較し、両者が一致するかどうかを判定する。判定の結果、双方のデータが一致する場合は、ステップ1104に進む。一方、双方のデータが一致しない場合は、ステップ1105に進む。
ステップ1104において、CPU111は、bootable-AにおけるN番目の領域のデータを、DDR140に展開されるプログラムの対象ブロックにおけるN番目の領域のデータとしてコピーする。
ステップ1105において、CPU111は、bootable-AにおけるN番目の領域のデータと、bootable-CにおけるN番目の領域のデータとを比較し、両者が一致するかどうかを判定する。判定の結果、双方のデータが一致する場合は、ステップ1106に進む。一方、双方のデータが一致しない場合は、ステップ1107に進む。
ステップ1106において、CPU111は、bootable-AにおけるN番目の領域のデータを、DDR140に展開されるプログラムの対象ブロックにおけるN番目の領域のデータとしてコピーする。
ステップ1107において、CPU111は、bootable-BにおけるN番目の領域のデータと、bootable-CにおけるN番目の領域のデータとを比較し、両者が一致するかどうかを判定する。判定の結果、双方のデータが一致する場合は、ステップ1109に進む。一方、双方のデータが一致しない場合は、ステップ1108に進む。
ステップ1108において、CPU111は、エラー処理を行なって、SFP100の起動処理を停止する。このステップは、図7のフローにおけるステップ709及び図9のフローにおけるステップ912に相当する。
ステップ1109において、CPU111は、bootable-BにおけるN番目の領域のデータを、DDR140に展開されるプログラムの対象ブロックにおけるN番目の領域のデータとしてコピーする。
ステップ1110において、CPU911は、変数Nが最大値に達したかどうか(本実施例ではN=7に達したか)を判定する。まだ最大値に到達していない場合は、ステップ1111に進み、変数Nの値をインクリメント(+1)してステップ1103に戻り、次の領域のデータについての処理を続行する。一方、最大値に到達していれば、本処理を終える。
以上が、本実施例に係る、エラー回避処理の内容である。
なお、ここでは実施例1を前提に説明を行なったが、実施例2におけるチェックサム方式によってデータの正しさを検証する場合にも本実施例は適用可能である。この場合、分割後の各領域についてのチェックサム値を予め用意しておき、チェックサムの結果がOKとなった領域のデータをDDRにコピーするようにすればよい。
このように一旦はエラー処理の対象と判定された場合でも、ブロックをさらに分割して正しい内容と推認される領域のデータを採用していくことにより、誤りのないプログラムを生成し、DDRに展開することができる。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
Claims (10)
- 演算手段と、
前記演算手段を制御するためのプログラムを格納するための複数の不揮発性の記憶手段であって、第1の記憶手段と当該第1の記憶手段よりもリテンションの短い第2の記憶手段と、
を備えた制御回路において、
前記第2の記憶手段には、同一内容の前記プログラムが複数格納され、
前記制御回路に対して電源が投入された時点で、前回の電源の投入から所定期間が経過していた場合、前記第2の記憶手段に格納された複数の前記プログラムを用いて誤りのないプログラムを生成して、当該生成されたプログラムを前記演算手段に実行させる
ことを特徴とする制御回路。 - 前記生成されたプログラムを前記演算手段が実行する際に当該プログラムを展開するための第3の記憶手段を備え、
前記第3の記憶手段に展開された前記プログラムは、前記同一のプログラムとして、前記第2の記憶手段に複数格納される
ことを特徴とする請求項1に記載の制御回路。 - 前記所定期間は、前記リテンションに応じて決定されることを特徴とする請求項1又は2に記載の制御回路。
- 前記誤りのないプログラムは、前記複数のプログラムのそれぞれから所定容量のデータを読み込んで比較し、比較の結果が一致する内容のデータを採用することで生成されることを特徴とする請求項1乃至3のいずれか1項に記載の制御回路。
- 前記所定容量のデータの単位で前記誤りのないプログラムを生成できない場合、当該所定容量のデータを分割し、分割後の単位で比較を行なって、比較の結果が一致する内容のデータを採用することで、前記誤りのないプログラムが生成されることを特徴とする請求項4に記載の制御回路。
- 前記誤りのないプログラムは、前記複数のプログラムの所定容量のデータをチェックサム方式で検証し、正しいと判定された内容のデータを採用することで生成されることを特徴とする請求項1乃至3のいずれか1項に記載の制御回路。
- 前記所定容量のデータの単位で前記誤りのないプログラムを生成できない場合、当該所定容量のデータを分割し、分割後の単位で前記チェックサム方式の検証を行なって、正しいと判定された内容のデータを採用することで、前記誤りのないプログラムが生成されることを特徴とする請求項6に記載の制御回路。
- 前記所定容量は、前記第2の記憶手段のアクセス単位に相当する容量であることを特徴とする請求項1乃至7のいずれか1項に記載の制御回路。
- 請求項1乃至8のいずれか1項に記載の制御回路を備えた電子機器であって、前記プログラムは、前記電子機器を起動するためのプログラムであることを特徴とする電子機器。
- 演算手段と、前記演算手段を制御するためのプログラムを格納するための複数の不揮発性の記憶手段であって、第1の記憶手段と当該第1の記憶手段よりもリテンションの短い第2の記憶手段と、を備え、前記第2の記憶手段には同一内容の前記プログラムが複数格納された制御回路における制御方法であって、
前記制御回路に対して電源が投入された時点で、前回の電源の投入から所定期間が経過しているかどうかを判定するステップと、
前記第2の記憶手段に格納された複数の前記プログラムを用いて誤りのないプログラムを生成するステップと、
前記生成されたプログラムを前記演算手段に実行させるステップと
を含むことを特徴とする制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015032669A JP2016157163A (ja) | 2015-02-23 | 2015-02-23 | 制御回路及び制御回路における制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015032669A JP2016157163A (ja) | 2015-02-23 | 2015-02-23 | 制御回路及び制御回路における制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016157163A true JP2016157163A (ja) | 2016-09-01 |
Family
ID=56826037
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015032669A Pending JP2016157163A (ja) | 2015-02-23 | 2015-02-23 | 制御回路及び制御回路における制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2016157163A (ja) |
-
2015
- 2015-02-23 JP JP2015032669A patent/JP2016157163A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8683457B1 (en) | Updating firmware of an electronic device by storing a version identifier in a separate header | |
US7908466B2 (en) | Method and apparatus for booting a microprocessor system using boot code stored on a serial flash memory array having a random-access interface | |
US9858084B2 (en) | Copying of power-on reset sequencer descriptor from nonvolatile memory to random access memory | |
EP2638466B1 (en) | Software updating process for an embedded device | |
US10509568B2 (en) | Efficient secure boot carried out in information processing apparatus | |
US7975178B2 (en) | Memory device and system with cyclic, ECC-corrected bootloading operation during voltage bring up | |
US10481901B2 (en) | System and method for performing firmware update by patching | |
CN104981778A (zh) | 修补只读存储器的引导代码 | |
KR100837274B1 (ko) | 오토 멀티-페이지 카피백 기능을 갖는 플래시 메모리 장치및 그것의 블록 대체 방법 | |
US20210149681A1 (en) | Secure Firmware Management with Hierarchical Boot Sequence using Last Known Good Firmware | |
WO2016180093A1 (zh) | Flash芯片读写控制电路和方法、AMOLED应用电路 | |
CN107015878B (zh) | 用于计算机的系统修复方法及系统 | |
JP2010140266A (ja) | 電子デバイスシステムと電子デバイス | |
US20200233676A1 (en) | Bios management device, bios management system, bios management method, and bios management program-stored recording medium | |
US20120221773A1 (en) | Nonvolatile semiconductor memory device | |
US8719646B2 (en) | Non-volatile memory (NVM) reset sequence with built-in read check | |
CN113076142B (zh) | Tcon参数初始化方法及显示设备 | |
US20080162837A1 (en) | Nonvolatile Memory System | |
JP5561791B2 (ja) | 情報処理装置、情報処理方法、及び情報処理プログラム | |
US11461516B2 (en) | Development system and productization method for data storage device | |
JP6708596B2 (ja) | 電子制御装置及び制御プログラム検証方法 | |
JP2016157163A (ja) | 制御回路及び制御回路における制御方法 | |
US20210326125A1 (en) | Installing application program code on a vehicle control system | |
US9971659B1 (en) | Memory programming providing corruption protection | |
US11922170B2 (en) | Systems and method for bootup activation of firmware images |