(57)【特許請求の範囲】
【請求項１】
データを記憶するメモリと、
前記メモリが格納しているデータを用いて制御処理を実施するプロセッサと、
前記メモリに格納されているデータのデータ誤りを検出する誤り検出部と、
前記データ誤りを訂正する誤り訂正部と、
前記メモリが格納しているデータを前記メモリ上の別の記憶領域に保存するデータ保存部と、
前記メモリ上における第１記憶領域のアドレスと第２記憶領域のアドレスとの対応関係を管理するアドレス管理部と、
を備え、
前記データ保存部は、
前記誤り検出部が前記データ誤りを検出したとき、前記データ誤りが検出された前記メモリ上の前記第１記憶領域とは異なる前記第２記憶領域に、前記誤り訂正部が前記データ誤りを訂正したデータを保存し、
前記データ保存部は、前記第２記憶領域に保存した前記訂正後のデータを、前記第１記憶領域にも保存し、
前記プロセッサは、
前記データ保存部が前記第２記憶領域にデータを保存した後は、前記第２記憶領域上のデータを前記制御処理のために用いるとともに、前記第１記憶領域上のデータも前記制御処理のために継続して用い、
前記プロセッサは、
前記データ保存部が前記第１記憶領域上のデータを誤り訂正したデータを前記第２記憶領域に保存したか否かを前記アドレス管理部に問い合わせ、
前記第１記憶領域上のデータに対応するデータが前記第２記憶領域上に存在する場合は、前記第１記憶領域上のデータと前記第２記憶領域上のデータを併用し、
前記プロセッサは、
前記制御処理内で前記第１記憶領域上のデータを使用する場合は、前記第１記憶領域上のデータに対応するデータが前記第２記憶領域上に存在するか否かを前記アドレス管理部に問い合わせ、
前記第１記憶領域上のデータに対応するデータが前記第２記憶領域上に存在する場合は、両データを比較し、両者が一致している場合は、前記第１記憶領域が格納しているデータを用いる
ことを特徴とする電子制御装置。
【請求項２】
前記プロセッサは、
前記制御処理内で前記第１記憶領域上のデータを使用する場合は、前記第１記憶領域上のデータに対応するデータが前記第２記憶領域上に存在するか否かを前記アドレス管理部に問い合わせ、
前記第１記憶領域上のデータに対応するデータが前記第２記憶領域上に存在する場合は、両データを比較し、両者が一致していない場合は、前記第２記憶領域が格納している対応するデータを用いる
ことを特徴とする請求項１記載の電子制御装置。
【請求項３】
前記プロセッサは、
前記制御処理内で前記第１記憶領域上のデータを使用する場合は、前記第１記憶領域上のデータに対応するデータが前記第２記憶領域上に存在するか否かを前記アドレス管理部に問い合わせ、
前記第１記憶領域上のデータに対応するデータが前記第２記憶領域上に存在する場合は、両データを比較し、両者が一致していない場合は、前記第２記憶領域が格納している対応するデータについてデータ誤りが生じているか否かを前記誤り検出部に問い合わせ、
データ誤りが生じていない場合は前記第２記憶領域が格納している対応するデータを用い、データ誤りが生じている場合は所定のデフォルト値を用いる
ことを特徴とする請求項１記載の電子制御装置。
【請求項４】
前記データ保存部は、
前記第１記憶領域において所定時間内に発生するデータ誤りの頻度、または前記第１記憶領域において最後にデータ誤りが発生した時点からの経過時間を計測し、
前記頻度が所定閾値より低いとき、または前記経過時間が所定の基準時間以上であるときは、前記第１記憶領域上のデータを誤り訂正した上で前記第２記憶領域上に保存したデータを消去する
ことを特徴とする請求項１記載の電子制御装置。
【請求項５】
前記データ保存部は、
前記メモリ上のアドレスが前記第１記憶領域からできる限り遠い記憶領域を、前記第２記憶領域として優先的に用いる
ことを特徴とする請求項１記載の電子制御装置。
【請求項６】
前記データ保存部は、
前記誤り検出部が前記データ誤りを検出したとき、
前記誤り訂正部が誤り訂正したデータを前記第２記憶領域に保存し、それ以前に前記第２記憶領域に格納されていたデータを前記第１記憶領域に保存する
ことを特徴とする請求項１記載の電子制御装置。
【請求項７】
前記メモリは、
前記データの重要度を示す重要度情報を前記データとともに格納し、
前記データ保存部は、
前記第１記憶領域が格納しているデータについて前記誤り検出部が前記データ誤りを検出したとき、前記データ誤りが検出されたデータの重要度を前記重要度情報に基づき特定し、
その重要度よりも低い重要度を有するデータを格納している前記第２記憶領域に、前記誤り訂正部が誤り訂正したデータを保存し、それ以前に前記第２記憶領域に格納されていたデータを前記第１記憶領域に保存することにより、前記第１記憶領域が格納しているデータと前記第２記憶領域が格納しているデータを入れ替える
ことを特徴とする請求項６記載の電子制御装置。
【請求項８】
前記データ保存部は、
前記メモリ上のアドレスが前記第１記憶領域からできる限り遠い記憶領域を、前記第２記憶領域として優先的に用いる
ことを特徴とする請求項６記載の電子制御装置。
【請求項９】
前記データ保存部は、
前記重要度ができる限り低いデータを格納している記憶領域を、前記第２記憶領域として優先的に用い、
前記第２記憶領域の候補として、前記重要度が等しいデータを格納している記憶領域が複数存在する場合は、前記メモリ上のアドレスが前記第１記憶領域からより遠い記憶領域を、前記第２記憶領域として優先的に用いる
ことを特徴とする請求項７記載の電子制御装置。
【請求項１０】
前記データ保存部は、
前記プロセッサが前記第１記憶領域からデータを読み出す時点で、前記誤り検出部が検出したデータ誤りの発生回数が所定閾値を超えている場合のみ、前記第２記憶領域に、
前記誤り訂正部が前記データ誤りを訂正したデータを保存する
ことを特徴とする請求項１記載の電子制御装置。
【請求項１１】
前記データ保存部は、前記誤り検出部が前記データ誤りを検出しなかった場合は、前記発生回数のカウンタ値を減算する
ことを特徴とする請求項１０記載の電子制御装置。
【請求項１２】
前記メモリとは異なる第２メモリを備え、
前記データ保存部は、前記第２メモリ上の記憶領域を前記第２記憶領域として用いる
ことを特徴とする請求項１記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機器の動作を電子的に制御する電子制御装置に関するものである。
【背景技術】
【０００２】
近年、自動車、建設機械、昇降機等の機器は、入力回路、マイクロコントローラ、出力回路、および電源回路から構成された電子制御装置を用いて電子的に制御することが一般的になっている。電子制御装置は、各種センサからの入力信号を受け取り、マイクロコントローラが、メモリに内蔵されたプログラムやデータに基づき制御演算を実施し、機器が最適な動作状態になるように、出力回路を駆動して各種アクチュエータやスイッチ等を制御する装置である。
【０００３】
最近はメモリの微細化が進み、製造時の不具合、ノイズ、放射線等の影響により、メモリに内蔵されたプログラムやデータの値が意図せず変化する故障が発生する可能性が増大している。電子制御装置は当該プログラムやデータに基づき制御演算を実施するため、メモリが故障すると、機器を安全に制御できなくなるおそれがある。
【０００４】
下記特許文献１では、上記のような不具合を回避するため、制御に使用するデータを保存する通常のデータ領域とは別に、誤り検出用冗長データ領域を備え、データ領域のデータを冗長データ領域のデータに基づき検査する。これにより、データ領域のデータの誤りを検出することができる。誤りが検出された場合は、誤りが生じているデータに代えて、あらかじめ定められた固定データを出力する。
【０００５】
下記特許文献２では、公知の誤り検出／訂正（ＥＣＣ：Ｅｒｒｏｒ  Ｃｈｅｃｋｉｎｇ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）機能を備えるメモリにおいて、誤りが検出されたアドレス上のデータを、誤り訂正した上で当該メモリの空き領域の別アドレスに保存する方法が開示されている。誤りが検出された記憶領域は、それ以後は使用しない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１０２６８６号公報
【特許文献２】特表２００９−５０６４４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
近年は電子制御化の進展により、機器の安全な制御のために信頼性を保証すべきデータが増える傾向にある。したがって、上記特許文献１に記載されている技術のように、通常のデータ領域とは別に冗長データ領域を設ける方式では、メモリ使用量が増えてしまうという課題がある。
【０００８】
一方、上記特許文献２に記載されている方式では、全てのメモリセルに故障が発生するわけではないため、特許文献１のように全データを冗長化して保存するよりは、メモリ使用量を少なくすることができる。ただし上記特許文献２では、故障が一度発生すると当該故障が発生したメモリセルを使用不可とし、さらには故障率に応じた一定量の空き領域をあらかじめ確保しておく必要がある。メモリ故障では、永続的なハードウェア故障は少なく、ノイズや放射線等による一時的な故障が大半を占めることを考慮すると、このような方式は、メモリの利用効率の観点で改善の余地があると考えられる。
【０００９】
本発明は、以上のような課題に鑑みてなされたものであり、メモリ使用量を抑えることができる高信頼なメモリを備えた電子制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る電子制御装置は、データ誤りを検出した第１記憶領域とは異なる第２記憶領域に、誤り訂正後のデータを保存し、第２記憶領域上のデータを制御処理のために用いるとともに、第１記憶領域上のデータも制御処理のために継続して用いる。
【発明の効果】
【００１１】
本発明に係る電子制御装置によれば、データ誤りを検出したときに誤り訂正後のデータを第２記憶領域へ格納するので、誤り訂正後のデータを格納するための記憶領域をあらかじめ確保しておく必要はない。また、データ誤りを検出した第１記憶領域も継続して使用するので、データ誤りの原因が上述のように一時的なものであった場合には、誤り発生率が低下した時点で第２記憶領域上の保存データを削除するなどして、記憶領域の使用状況をデータ誤り発生前の状態に復帰させることができる。したがって、メモリの信頼性を確保しつつ、メモリ使用量を抑えることができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態１に係る電子制御装置１の機能ブロック図である。
【図２】ＲＯＭ１１が格納するプログラムおよびデータの構成を示す図である。
【図３】メモリ故障が発生する前後のＲＯＭ１１内のデータ配置を示す図である。
【図４】電子制御装置１がデータ保存部２１内に格納されているデータを読み出すときの処理フローを示す図である。
【図５】図４の処理フローによって第２記憶領域Ａ２に訂正後のデータが保存した後、電子制御装置１がそのデータを使用する際の処理フローを示す図である。
【図６】実施形態２に係る電子制御装置１が備えるＲＯＭ１１格納するプログラムおよびデータの構成を示す図である。
【図７】実施形態２において、メモリ故障が発生する前後のＲＯＭ１１内のデータ配置を示す図である。
【図８】実施形態２において、電子制御装置１がデータ保存部２１内に格納されているデータを読み出すときの処理フローを示す図である。
【図９】実施形態３において、電子制御装置１がデータ保存部２１内に格納されているデータを読み出すときの処理フローを示す図である。
【発明を実施するための形態】
【００１３】
＜実施の形態１＞
図１は、本発明の実施形態１に係る電子制御装置１の機能ブロック図である。電子制御装置１は、機器を電子的に制御する装置であり、マイクロコントローラ２、入力回路３、出力回路４、電源回路５を備える。
【００１４】
マイクロコントローラ２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２、周辺バスコントローラ１３、Ａ／Ｄ変換器１４、タイマ１５、通信インタフェース（Ｉ／Ｆ）１６、発振器１７を備える。ＣＰＵ１０、ＲＯＭ１１、ＲＡＭ１２、周辺バスコントローラ１３は、内部バス１８に接続されている。Ａ／Ｄ変換器１４、タイマ１５、通信インタフェース（Ｉ／Ｆ）１６、発振器１７、周辺バスコントローラ１３は、周辺バス１９に接続されている。
【００１５】
ＣＰＵ１０は、入力回路３を介して各種センサや他の電子制御装置からの入力信号を受け取り、Ａ／Ｄ変換器１４、タイマ１５、通信インタフェース（Ｉ／Ｆ）１６などの機能を利用して、ＲＯＭ１１やＲＡＭ１２に格納されているプログラムを実行し、これらに格納されているデータを用いて制御処理を実施する。また、制御処理の一貫として、機器が最適に動作するように、出力回路４を駆動して各種アクチュエータやスイッチ等を制御したり、通信インタフェース１６を介して他の電子制御装置に制御データを送信したりする場合もある。
【００１６】
ＲＯＭ１１は、ＣＰＵ１０が実行するプログラムおよび同プログラム中で用いられるデータを格納する。ＲＯＭ１１が格納するデータ等を書き換える必要がある場合は、フラッシュＲＯＭなどの書き換え可能なＲＯＭを用いる。ＲＡＭ１２は、ＣＰＵ１０がプログラムを実行する過程で用いるデータを一時的に格納する。例えばＣＰＵ１０は、ＲＯＭ１１が格納しているプログラムやデータをＲＡＭ１２上に展開して使用する。図１では、ＲＯＭ１１とＲＡＭ１２はマイクロコントローラ２に内蔵されているが、これらはマイクロコントローラ２の外部に設けられていてもよい。
【００１７】
周辺バスコントローラ１３、Ａ／Ｄ変換器１４、タイマ１５、通信インタフェース（Ｉ／Ｆ）１６、発振器１７は、電子制御装置が一般的に備えているものである。出力回路４は、電子制御装置１から制御信号を受け取り、電子制御装置１が制御する機器に対して駆動信号を出力する。
【００１８】
図２は、ＲＯＭ１１が格納するプログラムおよびデータの構成を示す図である。ＲＯＭ１１は、データ保存部２１、誤り検出／訂正部２２、データ保存／消去実行部２３、アドレス管理部２４を格納する。ＲＯＭ１１が格納するデータ等をＲＡＭ１２上に展開する場合は、ＲＡＭ１２も図２と同様のデータ等を格納する。
【００１９】
データ保存部２１は、複数のデータ記憶領域、すなわちメモリセルを備えている。データ保存部２１は、ＣＰＵ１０が制御処理を実施する際に用いるデータを格納する。データ保存部２１は、後述する第１記憶領域Ａ１と第２記憶領域Ａ２を有する。
【００２０】
誤り検出／訂正部２２は、データ保存部２１が格納するデータに付加されている誤り検出／訂正コードを用いて、当該データにデータ誤りが生じているか否かを検査する。誤りが生じており、かつ誤りが生じているビット数が誤り検出／訂正コードによって訂正できる範囲内の場合は、当該誤りを訂正する。この誤り検出／訂正機能は公知であるため、詳細な説明は割愛する。
【００２１】
データ保存／消去実行部２３は、データ保存部２１内の第１記憶領域Ａ１においてデータ誤りを検出した旨の通知を誤り検出／訂正部２２から受けると、第１記憶領域Ａ１に格納されているデータを第２記憶領域Ａ２へ保存する。また、所定条件の下で、第２記憶領域Ａ２に保存されているデータを消去する。これらの処理フローについては後述する。
【００２２】
アドレス管理部２４は、データ保存／消去実行部２３から、第２記憶領域Ａ２のアドレス、第２記憶領域Ａ２に保存されているデータを消去した旨の通知などを受け取り、第１記憶領域Ａ１が格納しているデータのアドレスと第２記憶領域Ａ２が格納している対応するデータのアドレスとの対応関係を管理する。ＣＰＵ１０は、これらデータの対応関係をアドレス管理部２４に問い合わせることにより、後述する処理フローによってデータ配置が変わったことを意識せずに、これらデータにアクセスすることができる。
【００２３】
誤り検出／訂正部２２、データ保存／消去実行部２３、アドレス管理部２４は、これらの機能を実現する回路デバイスなどのハードウェアを用いて構成することもできるし、これらの処理を記述したソフトウェアをＣＰＵ１０が実行することによって実現することもできる。これら機能部をソフトウェアとして実装した場合は、図２に示すようにこれら機能部をメモリ上に格納することができる。
【００２４】
図３は、メモリ故障が発生する前後のＲＯＭ１１内のデータ配置を示す図である。故障発生前の時点では、データ保存部２１のアドレス０、アドレス１、・・・にそれぞれデータ０、データ１、・・・が格納されており、アドレス１（＝第１記憶領域Ａ１）のメモリセルに故障が発生したとする。
【００２５】
誤り検出／訂正部２２は、データ１のデータ誤りを検出し、誤りを訂正した後、正しいデータ１をアドレス１に保存する。アドレス１のメモリセルに故障が発生したということは、当該メモリセルは脆弱性が増している可能性があるので、データ保存／消去実行部２３は、誤り訂正後のデータ１を、空き領域であるアドレスｎ（第２記憶領域Ａ２）にも保存する。詳細処理は図４で改めて説明する。
【００２６】
第２記憶領域Ａ２は、第１記憶領域Ａ１を有するデータ保存部２１内の空き領域であることを想定しているが、これに代えて、別のメモリ上の空き領域、周辺モジュール内のレジスタ、電子制御装置１が実装している別のマイクロコンピュータが備えるメモリ上の空き領域、などを用いることもできる。また、第２記憶領域Ａ２のアドレスは、あらかじめ設計時に静的に定めておいてもよいし、第２記憶領域Ａ２が必要になった時点で動的に探索して定めてもよい。
【００２７】
ＲＯＭ１１がフラッシュメモリで構成されている場合は、第１記憶領域Ａ１と第２記憶領域Ａ２は、データ書き込み／データ消去の単位であるブロックに相当する。あるブロックのいずれかのメモリセルに故障が発生した時は、当該メモリセルのデータ誤りを訂正した後、そのブロックごと第２記憶領域Ａ２に保存する。
【００２８】
なお、データ誤りが生じた第１記憶領域Ａ１の近傍にあるメモリセルにも同様のデータ誤りが生じている可能性があるため、第２記憶領域Ａ２は、ＲＯＭ１１上のアドレスができる限り第１記憶領域Ａ１から遠いものを選ぶことが望ましいと考えられる。
【００２９】
図４は、電子制御装置１がデータ保存部２１内に格納されているデータを読み出すときの処理フローを示す図である。以下、図４の各ステップについて説明する。
【００３０】
（図４：ステップＳ１０）
ＣＰＵ１０は、データ保存部２１が格納しているデータを読み出す。このデータが格納されている記憶領域は、図３で説明した第１記憶領域Ａ１に相当する。誤り検出／訂正部２２は、ＣＰＵ１０が読み出したデータにデータ誤りが生じているか否かを検査する。誤りがない場合はステップＳ１２へ進み、誤りが生じている場合はステップＳ１１へ進む。
【００３１】
（図４：ステップＳ１０：補足）
誤りのあるビット数が誤り検出／訂正部２２によって訂正できるビット数範囲を超えている場合は、Ｓ１１以降の処理を実施しない。この場合、誤り検出／訂正部２２は、機器を安全に制御できるようにあらかじめ設定されているデフォルト値を、ＣＰＵ１０に出力する。
【００３２】
（図４：ステップＳ１１）
誤り検出／訂正部２２は、Ｓ１０で検出したデータ誤りを訂正し、訂正したデータをＣＰＵ１０に出力する。ＣＰＵ１０は、そのデータを用いてひとまず制御処理を継続することができる。
【００３３】
（図４：ステップＳ１２）
誤り検出／訂正部２２は、データ誤りを検査したデータを、そのままＣＰＵ１０に出力する。ＣＰＵ１０は、そのデータを用いて制御処理を継続する。本ステップの後は、本処理フローを終了する。
【００３４】
（図４：ステップＳ１３）
データ保存／消去実行部２３は、誤り検出／訂正部２２が誤り訂正したデータを第２記憶領域Ａ２に保存する。
【００３５】
（図４：ステップＳ１４）
データ保存／消去実行部２３は、ステップＳ１３でデータを保存した第２記憶領域Ａ２のアドレスを、アドレス管理部２４に通知する。アドレス管理部２４は、本処理フローにおける第１記憶領域Ａ１と第２記憶領域Ａ２の対応関係を管理する。すなわち、第１記憶領域Ａ１に格納されているデータと第２記憶領域Ａ２に格納されているデータは、互いに対応する同じデータである旨を管理する。
【００３６】
図５は、図４の処理フローによって第２記憶領域Ａ２に訂正後のデータが保存した後、電子制御装置１がそのデータを使用する際の処理フローを示す図である。以下、図５の各ステップについて説明する。
【００３７】
（図５：ステップＳ１８）
ＣＰＵ１０は、データ保存部２１が格納しているデータを読み出す際に、当該記憶領域上（図３で説明した第１記憶領域Ａ１に相当）のデータ誤りを訂正して生成した対応するデータを第２記憶領域Ａ２に保存しているか否かを、アドレス管理部２４に問い合わせて確認する。第２記憶領域Ａ２に対応するデータが保存されている場合はステップＳ１９へ進み、保存されていない場合は図４で説明したステップＳ１０〜Ｓ１４に進む。
【００３８】
（図５：ステップＳ１９）
ＣＰＵ１０は、第１記憶領域Ａ１上のデータと第２記憶領域Ａ２上のデータが一致するか否かを判定する。両者が一致する場合はステップＳ２０へ進み、一致しない場合はステップＳ２３へ進む。
【００３９】
（図５：ステップＳ１９：補足）
本ステップは、第１記憶領域Ａ１のメモリセルにおいて既にメモリ故障が発生しているため、当該メモリセルが脆弱になっている可能性を考慮したものである。誤りのあるビット数が誤り検出／訂正部２２によって検出できる範囲を超えている場合は、たとえデータ誤りが生じていたとしても、これを検出できない。第１記憶領域Ａ１に格納されているデータと第２記憶領域Ａ２に格納されているデータを互いに比較することにより、誤り検出機能によっても検出することのできないデータ誤りが生じていることを発見し、データの信頼性を高めることができる。
【００４０】
（図５：ステップＳ２０）
ＣＰＵ１０は、第１記憶領域Ａ１上のデータを制御処理内で用いる。
【００４１】
（図５：ステップＳ２１）
ＣＰＵ１０は、第１記憶領域Ａ１上のデータに、あらかじめ定めた所定時間以上データ誤りが検出されていないか否かを判定する。所定時間以上誤りが検出されていない場合はステップＳ２２へ進み、データ誤りが最後に検出されてから上記所定時間が経過していない場合は本処理フローを終了する。
【００４２】
（図５：ステップＳ２２）
ＣＰＵ１０は、ステップＳ２１において所定時間以上誤りが検出されていないと判断した場合は、当該第１記憶領域Ａ１のメモリセルが再度正常に使用することができる状態になったと判断する。データ保存／消去実行部２３は、その旨の通知をＣＰＵ１０から受け取り、第２記憶領域Ａ２に保存した誤り訂正後のデータを消去する。
【００４３】
（図５：ステップＳ２２：補足）
本ステップでは、データ誤りを最後に検出してから所定時間以上経過しているか否かに代えて、例えば所定時間内に発生するデータ誤りの頻度が閾値を下回った時点で、第２記憶領域Ａ２に保存した誤り訂正後のデータを消去するようにしてもよい。
【００４４】
（図５：ステップＳ２３）
誤り検出／訂正部２２は、第２記憶領域Ａ２上のデータにデータ誤りが検出されていないことを確認したうえで、第２記憶領域Ａ２上のデータをＣＰＵ１０に出力する。第２記憶領域Ａ２上のデータにデータ誤りが検出された場合は、ステップ１０と同様に、機器を安全に制御できるようにあらかじめ設定されたデフォルト値をＣＰＵ１０に出力する。ただし、第１記憶領域Ａ１のメモリセルと第２記憶領域Ａ２のメモリセルにおいて同時にビット誤りが発生する確率は、極めて小さいと考えられる。
【００４５】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係る電子制御装置１は、第１記憶領域Ａ１上でデータ誤りが発生したときは、誤り訂正したデータを第２記憶領域Ａ２に保存し、アドレス管理部２４が両者の対応関係を管理している下で、両データを併用する。誤り訂正したデータを第２記憶領域Ａ２に保存することにより、データの信頼性を確保することができる。また、データ誤りが発生した時点で第２記憶領域Ａ２に訂正データを格納するので、訂正データを格納するための記憶領域をあらかじめ確保する必要はなく、メモリ使用量を抑えることができる。
【００４６】
また、本実施形態１に係る電子制御装置１は、第１記憶領域Ａ１が格納しているデータと第２記憶領域Ａ２が格納しているデータを比較し、両者が一致するか否かを検証する。これにより、誤り検出機能によって検出することができないデータ誤りが生じている場合でも、正しいデータを使用することができる。
【００４７】
また、本実施形態１に係る電子制御装置１は、第１記憶領域Ａ１が格納しているデータと第２記憶領域Ａ２が格納しているデータが一致しないときは、より信頼性が高いと思われる第２記憶領域Ａ２上のデータを用いる。これにより、第１記憶領域Ａ１上のデータを誤り訂正してもなおデータ誤りが生じている場合でも、正しいデータを用いて制御処理を実施することができる。
【００４８】
＜実施の形態２＞
図６は、本発明の実施形態２に係る電子制御装置１が備えるＲＯＭ１１が格納するプログラムおよびデータの構成を示す図である。本実施形態２におけるＲＯＭ１１は、実施形態１で説明したデータ保存／消去実行部２３に代えて、データ入替実行部２５を格納する。電子制御装置１が備えるその他の機能部については実施形態１と同様である。ＲＡＭ１２についても同様である。
【００４９】
データ入替実行部２５は、誤り検出／訂正部２２からデータ誤りを検出した旨の通知を受け取ると、第１記憶領域Ａ１に格納されたデータと第２記憶領域Ａ２に格納されたデータを入れ替える。すなわち、本実施形態２においては、第２記憶領域Ａ２は空き領域である必要はない。具体的な処理フローについては後述する。本実施形態２における「データ保存」は、データ入替実行部２５が相当する。
【００５０】
データ入替実行部２５は、その機能を実現する回路デバイスなどのハードウェアを用いて構成することもできるし、その処理を記述したソフトウェアをＣＰＵ１０が実行することによって実現することもできる。データ入替実行部２５をソフトウェアとして実装した場合は、図２に示すようにメモリ上に格納することができる。
【００５１】
アドレス管理部２４は、データ入替実行部２５から、第１記憶領域Ａ１内のデータと第２記憶領域Ａ２内のデータを入れ替えた旨の通知を受け取り、第１記憶領域Ａ１が格納しているデータのアドレスと第２記憶領域Ａ２が格納している対応するデータのアドレスとの対応関係を管理する。ＣＰＵ１０は、これらデータの対応関係をアドレス管理部２４に問い合わせることにより、後述する処理フローによってデータ配置が変わったことを意識せずに、これらデータにアクセスすることができる。
【００５２】
図７は、本実施形態２において、メモリ故障が発生する前後のＲＯＭ１１内のデータ配置を示す図である。本実施形態２では、データ保存部２１が格納する各データには、そのデータの重要度を示す重要度情報が付加されている。ここでは、データの重要度は４が最も高く、３、２、１の順で低くなっていくものとする。
【００５３】
アドレス１（第１記憶領域Ａ１）のメモリセルに故障が発生したとする。誤り検出／訂正部２２は、データ１（重要度４）のデータ誤りを検出し、誤りを訂正した後、正しいデータ１をアドレス１に保存する。
【００５４】
アドレス１のメモリセルに故障が発生したということは、当該メモリセルは脆弱性が増している可能性があるので、データ入替実行部２５は、誤り訂正後のデータ１を、重要度が当該データより低いデータｎ（重要度１）が保存されているアドレスｎ（第２記憶領域Ａ２）に保存する。データｎは重要度が相対的に低いため、データ１が保存されていたアドレス１（第１記憶領域Ａ１）に保存する。以上の処理により、第１記憶領域Ａ１に格納されていたデータと第２記憶領域Ａ２に格納されていたデータが入れ替えられる。
【００５５】
なお、実施形態１と同様に、第２記憶領域Ａ２は、第１記憶領域Ａ１からなるべく物理的に離れた領域であることが望ましい。さらには、その中で重要度が相対的に低いデータを格納している記憶領域であることが望ましい。第２記憶領域Ａ２の候補が複数存在する場合には、格納しているデータの重要度がより低いものを優先的に選択するとよい。重要度が同じ第２記憶領域Ａ２の候補が複数存在する場合は、第１記憶領域Ａ１からの距離ができる限り離れているものを優先的に選択するとよい。
【００５６】
ＲＯＭ１１がフラッシュメモリで構成されている場合は、第１記憶領域Ａ１と第２記憶領域Ａ２は、データ書き込み／データ消去の単位であるブロックに相当する。あるブロックのいずれかのメモリセルに故障が発生した時は、当該メモリセルのデータ誤りを訂正した後、そのブロックと、当該ブロックより相対的に重要度が低いデータが保存されているブロックとを入れ替える。
【００５７】
図８は、本実施形態２において、電子制御装置１がデータ保存部２１内に格納されているデータを読み出すときの処理フローを示す図である。以下、図８の各ステップについて説明する。
【００５８】
（図８：ステップＳ１０〜Ｓ１２）
これらのステップは、実施形態１の図４で説明したステップＳ１０〜Ｓ１２と同様である。ただしステップＳ１１の次は、ステップＳ１３に代えてステップＳ２５〜Ｓ２７を実行する。
【００５９】
（図８：ステップＳ２５）
データ入替実行部２５は、ステップＳ１０でＣＰＵ１０が読み出したデータの重要度を判定する。重要度が最低レベルである場合は、当該データと記憶領域を入れ替えるべきデータが存在しないため、そのまま本処理を終了する。重要度が最低レベルでない場合は、ステップＳ２６へ進む。
【００６０】
（図８：ステップＳ２６）
データ入替実行部２５は、ステップＳ１０でＣＰＵ１０が読み出したデータが保存されている第１記憶領域Ａ１から物理的に遠い順に、当該データよりも重要度の低いデータを検索する。
【００６１】
（図８：ステップＳ２７）
データ入替実行部２５は、ステップＳ２６の検索によって発見した第２記憶領域Ａ２内のデータを、第１記憶領域Ａ１内のデータと入れ替える。
【００６２】
（図８：ステップＳ２７：補足）
本実施形態２では、重要度が相対的に低いデータは、脆弱性が増している可能性のあるメモリセル内に配置されることになる。誤り検出／訂正部２２によって誤り訂正することができる範囲以上の多ビット誤りが発生した場合は、ステップＳ１０と同様に、機器を安全に制御できるようにあらかじめ設定されているデフォルト値を、ＣＰＵ１０に出力すればよい。
【００６３】
（図８：ステップＳ１４）
データ入替実行部２５は、ステップＳ２６で入れ替えた各データの保存先アドレスをアドレス管理部２４に通知する。アドレス管理部２４は、本処理フローにおける第１記憶領域Ａ１と第２記憶領域Ａ２の対応関係を管理する。すなわち、第１記憶領域Ａ１に格納されているデータと第２記憶領域Ａ２に格納されているデータが入れ替わっている旨を管理する。
【００６４】
＜実施の形態２：まとめ＞
以上のように、本実施形態２に係る電子制御装置１は、データ誤りが発生した第１記憶領域Ａ１と、当該データよりも重要度の低い第２記憶領域Ａ２とを入れ替える。これにより、第２記憶領域Ａ２を空き領域のなかから選ぶ必要がなくなるので、訂正データを保存するための空き領域を冗長的に確保する必要がなくなり、メモリ使用量をさらに抑えることができる。
【００６５】
＜実施の形態３＞
本発明の実施形態３では、第１記憶領域Ａ１においてデータ誤りが検出されたとき、即座に第２記憶領域Ａ２へ訂正データを保存するのではなく、データ誤りがある程度継続した時点で訂正データを保存する動作例を説明する。電子制御装置１の構成は実施形態１と同様であるため、以下では差異点を中心に説明する。
【００６６】
図９は、本実施形態３において、電子制御装置１がデータ保存部２１内に格納されているデータを読み出すときの処理フローを示す図である。以下、図９の各ステップについて説明する。
【００６７】
（図９：ステップＳ１０〜Ｓ１２）
これらのステップは、実施形態１の図４で説明したステップＳ１０〜Ｓ１２と同様である。ただし、ステップＳ１１とステップＳ１３の間でステップＳ１５〜Ｓ１６を実行し、ステップＳ１２の次にステップＳ１７を実行する。
【００６８】
（図９：ステップＳ１５）
誤り検出／訂正部２２は、内部的に保持する故障カウンタの値を増加させる。
【００６９】
（図９：ステップＳ１６）
誤り検出／訂正部２２は、故障カウンタ値があらかじめ定めた閾値を超えたか否かを判断する。閾値を超えている場合はステップＳ１３へ進む。閾値を超えていない場合は、誤り訂正したデータを第２記憶領域Ａ１に保存することなく、本処理を終了する。第１記憶領域Ａ１からデータを読み出す毎に本ステップを実施することにより、データ誤りが一時的な原因によって生じている場合には、即座に第２記憶領域Ａ２へデータを保存するのではなく、継続してデータ誤りが生じるか否かをいったん様子見することができる。
【００７０】
（図９：ステップＳ１７）
誤り検出／訂正部２２は、ステップＳ１０においてデータ誤りが検出されず、故障カウンタ値が１以上である場合は、故障カウンタ値を減少させる。第１記憶領域Ａ１からデータを読み出す毎に本ステップを実施することにより、データ誤りが一時的な原因によって生じている場合には、故障カウンタが最終的には０になるので、それ以後は第１記憶領域Ａ１にデータ誤りが生じていないものとして取り扱うことができる。
【００７１】
＜実施の形態３：まとめ＞
以上のように、本実施形態３に係る電子制御装置１は、ＣＰＵ１０が第１記憶領域Ａ１からデータを読み出す時点でデータ誤りが生じているか否かを判定し、データ誤りが発生した回数をカウントする。カウンタ値が閾値を超えている場合は第２記憶領域Ａ２に訂正データを保存し、そうでなければ保存しない。これにより、一時的なメモリ故障によってデータ誤りが発生したデータを、不要に第２記憶領域Ａ２へ保存することを防止し、処理負荷やメモリ容量の浪費を抑えることができる。
【００７２】
＜実施の形態４＞
実施形態１〜３は、適宜組み合わせて用いることもできる。また、構成要素の一部を変形することもできる。例えば以下のような組み合わせ例や変形例が考えられる。
【００７３】
（実施形態の組み合わせ：例１）
実施形態２で説明した、第１記憶領域Ａ１と第２記憶領域Ａ２を入れ替える処理を、実施形態３で説明した故障カウンタが閾値を超えた時点で実行する。
【００７４】
（実施形態の組み合わせ：例２）
実施形態２で説明したデータの重要度情報を実施形態１に導入し、誤り訂正後のデータを第２記憶領域Ａ２に冗長的に保存するか否かを、誤り訂正後のデータの重要度に応じて判定する。
【００７５】
（実施形態の変形例）
実施形態２で故障カウンタの閾値や、実施形態１のステップＳ２１で説明した所定時間を、データの重要度に応じて可変にする。
【００７６】
以上、本発明者によってなされた発明を実施形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【００７７】
また、上記各構成、機能、処理部などは、それらの全部または一部を、例えば集積回路で設計することによりハードウェアとして実現することもできるし、プロセッサがそれぞれの機能を実現するプログラムを実行することによりソフトウェアとして実現することもできる。各機能を実現するプログラム、テーブルなどの情報は、メモリやハードディスクなどの記憶装置、ＩＣカード、ＤＶＤなどの記憶媒体に格納することができる。
【符号の説明】
【００７８】
１：電子制御装置、２：マイクロコントローラ、３：入力回路、４：出力回路、５：電源回路、１０：ＣＰＵ、１１：ＲＯＭ、１２：ＲＡＭ、１３：周辺バスコントローラ、１４：Ａ／Ｄ変換器、１５：タイマ、１６：通信インタフェース、１７：発振器、１８：内部バス、１９：周辺バス、２１：データ保存部、２２：誤り検出／訂正部、２３：データ保存／消去実行部、２４：アドレス管理部、２５：データ入替実行部、Ａ１：第１記憶領域、Ａ２：第２記憶領域。
【図１】
0005813450.tif 000002
【図２】
0005813450.tif 000003
【図３】
0005813450.tif 000004
【図４】
0005813450.tif 000005
【図５】
0005813450.tif 000006
【図６】
0005813450.tif 000007
【図７】
0005813450.tif 000008
【図８】
0005813450.tif 000009
【図９】
0005813450.tif 000010