(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024132313
(43)【公開日】2024-09-30
(54)【発明の名称】電子制御装置及びソフトウェアの冗長化プログラム
(51)【国際特許分類】
G06F 8/654 20180101AFI20240920BHJP
【FI】
G06F8/654
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2023043056
(22)【出願日】2023-03-17
(71)【出願人】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(74)【代理人】
【識別番号】110000567
【氏名又は名称】弁理士法人サトー
(72)【発明者】
【氏名】笠嶋 達也
(72)【発明者】
【氏名】柏原 一輝
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376CA36
5B376CA43
5B376CA54
5B376CA55
5B376CA56
(57)【要約】
【課題】リソースを有効に活用しつつ、システムの安全性をシームレスに担保する。
【解決手段】電子制御装置1は、ソフトウェアを配置可能な第1記憶部12と、ソフトウェアを配置可能な第2記憶部13と、第1記憶部と第2記憶部とのうち一方を稼働領域に設定すると共に他方を非稼働領域に設定する制御部10と、を備える。制御部は、所定条件を満たす場合に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ソフトウェアを配置可能な第1記憶部(12)と、
ソフトウェアを配置可能な第2記憶部(13)と、
前記第1記憶部と前記第2記憶部とのうち一方を稼働領域に設定すると共に他方を非稼働領域に設定する制御部(10)と、を備え、
前記制御部は、所定条件を満たす場合に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える電子制御装置。
【請求項2】
前記制御部は、所定条件を満たす場合として、非稼働領域のソフトウェアの書き換えを終了して稼働領域と非稼働領域とを切り替えた後に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える請求項1に記載した電子制御装置。
【請求項3】
前記制御部は、外部要因の成立を条件として、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える請求項2に記載した電子制御装置。
【請求項4】
前記制御部は、自装置とネットワークを介して接続されている接続装置からの冗長化指示の入力を検知した場合に、外部要因の成立を特定する請求項3に記載した電子制御装置。
【請求項5】
前記制御部は、内部要因の成立を条件として、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える請求項2に記載した電子制御装置。
【請求項6】
前記制御部は、装置内部のエラーを検知した場合、セキュリティ的な脅威を検知した場合、書き換え対象の新ソフトウェアによるアップデートの飛躍レベルが一定値以上であることを検知した場合、前回のソフトウェアの書き換えから一定時間が経過していることを検知した場合、稼働領域の異常を検知した場合のうち少なくとも何れか一つにより、内部要因の成立を特定する請求項5に記載した電子制御装置。
【請求項7】
前記制御部は、稼働領域のソフトウェアと非稼働領域のソフトウェアとを冗長化してから稼働領域又は非稼働領域の故障を特定した場合に、その故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復する請求項1に記載した電子制御装置。
【請求項8】
前記制御部は、外部要因の成立を条件として、故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復する請求項7に記載した電子制御装置。
【請求項9】
前記制御部は、自装置とネットワークを介して接続されている接続装置から修復指示の入力を検知した場合に、外部要因の成立を特定する請求項8に記載した電子制御装置。
【請求項10】
前記制御部は、内部要因の成立を条件として、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに修復する請求項7に記載した電子制御装置。
【請求項11】
前記制御部は、装置内部のエラーを検知した場合、セキュリティ的な脅威を検知した場合、稼働領域又は非稼働領域の異常を検知した場合のうち少なくとも何れか一つにより、内部要因の成立を特定する請求項10に記載した電子制御装置。
【請求項12】
前記制御部は、稼働領域と非稼働領域との冗長状態が有効であると判定し、非稼働領域が正常であると判定した場合に、稼働領域のソフトウェアを実行する請求項1から11の何れか一項に記載した電子制御装置。
【請求項13】
ソフトウェアを配置可能な第1記憶部(12)と、ソフトウェアを配置可能な第2記憶部(13)と、前記第1記憶部と前記第2記憶部とのうち一方を稼働領域に設定すると共に他方を非稼働領域に設定する制御部(10)と、を備える電子制御装置(1)の前記制御部に、
所定条件を満たす場合に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える書き換え手順を実行させるソフトウェアの冗長化プログラム。
【請求項14】
稼働領域のソフトウェアと非稼働領域のソフトウェアとを冗長化してから稼働領域又は非稼働領域の故障を特定した場合に、その故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復する修復手順を実行させる請求項13に記載したソフトウェアの冗長化プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子制御装置及びソフトウェアの冗長化プログラムに関する。
【背景技術】
【0002】
例えば車両に搭載されている車載用の電子制御装置(以下、ECU(Electronic Control Unit)と称する)として、記憶領域を2つ以上に分割し、例えばA面を稼働面に設定すると共にB面を非稼働面に設定している場合に、A面のソフトウェアを実行中に、B面のソフトウェアの書き換えを可能とする構成が供されている。記憶領域はメモリバンクやバンクと称される場合がある。2面の記憶領域はデュアルバンクと称される場合がある。
【0003】
一方、書き換え後のソフトウェアに異常が発生することで記憶領域に故障が混入する可能性が想定される。この点に関し、安全性を確保する観点から、ソフトウェアに異常が発生した場合の対処としてソフトウェアを速やかに修復することで、システムの安全性を担保することが要求されている。
【0004】
システムの安全性を担保する技術として、例えば特許文献1には、メイン系処理装置とサブ系処理装置とを用いた二重系の制御装置を用いる構成が開示されている。特許文献1の技術では、メイン系処理装置のソフトウェアを書き換える際に、ソフトウェアを書き換えるためのプログラムを予めサブ系処理装置の記憶領域にバックアップしておき、メイン系処理装置のソフトウェアの書き換えに失敗した場合に、サブ系処理装置にバックアップしておいたプログラムにより復帰させる。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1の技術では、メイン系処理装置のソフトウェアを書き換えるためのプログラムをバックアップするための記憶領域を予めサブ系処理装置に用意する必要がある。又、メイン系処理装置のソフトウェアを書き換えるための限定的な用途のプログラムの記憶領域を用意する構成では、リソースを有効に活用することができない。更に、メイン系処理装置のソフトウェアの書き換え時のみにバックアップする構成では、システムの安全性をシームレスに担保することができない。
【0007】
本発明は、上記した事情に鑑みてなされたものであり、その目的は、リソースを有効に活用しつつ、システムの安全性をシームレスに適切に担保することができる電子制御装置及びソフトウェアの冗長化プログラムを提供することにある。
【課題を解決するための手段】
【0008】
請求項1に記載した発明によれば、ソフトウェアを配置可能な第1記憶部(12)と、ソフトウェアを配置可能な第2記憶部(13)と、前記第1記憶部と前記第2記憶部とのうち一方を稼働領域に設定すると共に他方を非稼働領域に設定する制御部(10)と、を備える。前記制御部は、所定条件を満たす場合に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える。
【0009】
所定条件を満たす場合に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換えるようにした。第1記憶部及び第2記憶部を稼働領域と非稼働領域とに切り替えることで、限定的な用途のソフトウェアの記憶領域を用意する従来とは異なり、リソースを有効に活用することができる。又、所定条件を満たす場合として、例えば非稼働領域のソフトウェアの書き換えを終了して稼働領域と非稼働領域とを切り替えた後に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換えることで、メイン系処理装置のソフトウェアの書き換え時のみにバックアップする従来とは異なり、稼働領域のソフトウェアと非稼働領域のソフトウェアとをシームレスに冗長化することができ、システムの安全性をシームレスに適切に担保することができる。これにより、リソースを有効に活用しつつ、システムの安全性をシームレスに適切に担保することができる。
【図面の簡単な説明】
【0010】
【発明を実施するための形態】
【0011】
以下、一実施形態について図面を参照して説明する。
図1に示すように、ECU1は、車両に搭載されているECUであり、車載ネットワーク2と接続されている。尚、ECUは車載用ECUでも良いし、汎用ECUでも良い。車載ネットワーク2は、CAN(Controller Area Network)(登録商標)である。車載ネットワーク2は、FLEXRAY(登録商標)、CXPI(Clock Extension Peripheral Interface)(登録商標)、Ethernet(登録商標)等であっても良い。本実施形態では、1つのECUが車載ネットワーク2と接続されている構成を例示しているが、車載ネットワーク2と接続されるECUの個数は任意である。又、車載ネットワーク2の個数は任意である。ECU1は、例えば駆動系の制御を行う装置、ADAS(Advanced Driving Assistant System)系の制御を行う装置、マルチメディア系の制御を行う装置等であり、ソフトウェアの改修や機能向上等によりソフトウェアの書き換え対象となり得る。ソフトウェアとは、コンピュータに動作を行わせるための処理手順を指示する所謂プログラムに加え、プログラムを実行する上で参照されるファイル、データ、ライブラリ等を含む。
【0012】
セントラルECU3は、OTA(Over The Air)マスタとして機能する装置であり、データ通信機として機能するDCM(Data Communication Module)5と接続されている。DCM5は、OTAセンターとして機能するサーバ6と通信ネットワーク7を介して無線接続することで当該サーバ6から送信された配信パッケージを受信可能となる。DCM5は、サーバ6から送信された配信パッケージを受信すると、その受信した配信パッケージをセントラルECU3へ転送する。セントラルECU3は、DCM5から配信パッケージが転送されると、その転送された配信パッケージから書き換えデータを抽出し、その抽出した書き換えデータを書き換え対象ECU1へ送信すると共に書き換え指示を書き換え対象ECU1へ送信し、ソフトウェアの書き換えを書き換え対象ECU1に実施させる。即ち、書き換え対象ECU1は、セントラルECU3から書き換えデータを受信すると共に書き換え指示を受信し、書き換えデータを記憶領域へ書き込むことでソフトウェアの書き換えを実施する。サーバ6から通信ネットワーク7を介して受信された書き換えデータが書き換え対象ECU1に書き込まれる態様は所謂無線リプロと称される。セントラルECU3は、DCM5から配信パッケージが転送されると、その転送された配信パッケージを書き換え対象ECU1へ送信しても良い。或いは、DCM5は、サーバ6から送信された配信パッケージを受信すると、その受信した配信パッケージから書き換えデータを抽出し、その抽出した書き換えデータをセントラルECU3へ転送しても良い。
【0013】
リプログツール4は、車載ネットワーク2と接続されている状態で書き換えデータを書き換え対象ECU1へ送信すると共に書き換え指示を書き換え対象ECU1へ送信し、ソフトウェアの書き換えを書き換え対象ECU1に実施させる。即ち、書き換え対象ECU1は、リプログツール4から書き換えデータを受信すると共に書き換え指示を受信し、書き換えデータを記憶領域へ書き込むことでソフトウェアの書き換えを実施する。リプログツール4から通信ネットワーク7を介さずに受信された書き換えデータが書き換え対象ECU1に書き込まれる態様は所謂有線リプロと称される。本実施形態では、リプログツール4が車載ネットワーク2と直接接続される構成を例示しているが、リプログツール4がセントラルECU3を介して車載ネットワーク2と接続される構成でも良い。
【0014】
ECU1は、CPUを主体とする制御部10と、CANモジュール11と、第1フラッシュROM12(第1記憶部に相当する)と、第2フラッシュROM13(第2記憶部に相当する)と、データフラッシュ14と、RAM15とが内部バス16を介して相互接続されて構成されている。第1フラッシュROM12及び第2フラッシュROM13は、コードフラッシュと称される場合がある。第1フラッシュROM12及び第2フラッシュROM13と、データフラッシュ14とは、メモリサイズ、書き換え回数、バスサイクル等の電気的特性が異なる。第1フラッシュROM12及び第2フラッシュROM13はプログラムを記憶する。データフラッシュ14はユーザカスタム情報を記憶する。
【0015】
詳しくは後述するように、冗長状態が有効である場合、第1フラッシュROM12に記憶されているソフトウェアと第2フラッシュROM13に記憶されているソフトウェアとは同一であり、CPUを主体とする制御部10が、第1フラッシュROM12に記憶されているソフトウェア、又は第2フラッシュROM13に記憶されているソフトウェアの何れかを実行する。
【0016】
第1フラッシュROM12及び第2フラッシュROM13は、例えばデュアルバンクフラッシュROMとして構成される。この場合、物理的には1つのROMにおいて、メモリ領域を2つのバンクを含むように設定し、一方を第1フラッシュROM12とし、他方を第2フラッシュROM13とする。又は、第1フラッシュROM12及び第2フラッシュROM13は、物理的に別体のROMでも良い。
【0017】
制御部10は、非遷移的実体的格納媒体に格納されているコンピュータプログラムを実行することでコンピュータプログラムに対応する処理を実施し、ECU1の動作を制御する。CANモジュール11は、車載ネットワーク2との間でのCAN信号の入出力を制御する。第1フラッシュROM12及び第2フラッシュROM13は、それぞれ独立したアドレス空間が割当てられた記憶領域であり、ソフトウェアを記憶可能となっている。第1フラッシュROM12及び第2フラッシュROM13に記憶されるソフトウェアは、車両の走行制御に関与する走行制御系のソフトウェアであっても良いし、車両の走行制御に関与しない非走行制御系のソフトウェアであっても良い。
【0018】
図2に示すように、制御部10は、ソフトウェアの書き換えを制御する機能としての書き換え制御部17と、ソフトウェアの冗長化を制御する機能としての冗長化制御部18とを備える。書き換え制御部17は、書き換えデータを書き込むデータ書き込み部17aと、書き換えデータの書き込みにより配置されたソフトウェアをMACやハッシュ値により検証するソフトウェア検証部17bと、稼働面(稼働領域に相当する)と非稼働面(非稼働領域に相当する)との切り替えを制御する面切り替え部17cとを備える。
【0019】
制御部10は、第1フラッシュROM12と第2フラッシュROM13とのうち一方を稼働面に設定すると共に他方を非稼働面に設定し、稼働面のソフトウェアを実行中に、非稼働面のソフトウェアをデータ書き込み部17aにより書き換え可能である。制御部10は、セントラルECU3又はリプログツール4から書き換えデータを受信すると共に書き換え指示を受信すると、書き換えデータの非稼働面への書き込みをデータ書き込み部17aにより開始してソフトウェアの書き換えを開始する。
【0020】
制御部10は、書き換えデータの非稼働面への書き込みを終了してソフトウェアの書き換えを終了すると、その配置されたソフトウェアをソフトウェア検証部17bにより検証する。制御部10は、ソフトウェア検証部17bによる検証結果が正常であれば、面切り替え条件が成立すると、面切り替え部17cにより稼働面と非稼働面とを切り替える。制御部10は、例えば車両走行中における走行制御系のソフトウェアの書き換えであれば、面切り替えによる車両走行への影響が懸念されるので、走行制御系のソフトウェアの書き換えを終了しても稼働面と非稼働面とを切り替えずに車両走行中から駐車中への状態移行を待機し、駐車中に移行してから稼働面と非稼働面とを切り替える。制御部10は、例えば車両走行中における非走行制御系のソフトウェアの書き換えであれば、面切り替えによる車両走行への影響が懸念されないので、非走行制御系のソフトウェアの書き換えを終了すると、車両走行中から駐車中への状態移行を待機することなく稼働面と非稼働面とを切り替える。制御部10は、非走行制御系のソフトウェアの書き換えであっても、走行中から駐車中への状態移行を待機し、駐車中に移行してから稼働面と非稼働面とを切り替えても良い。尚、エンジン自動車であれば、車両走行中とは例えばイグニッションオン状態であり、駐車中とは例えばイグニッションオフ状態であることを意味する。電気自動車であれば、車両走行中とは例えばEV(Electric Vehicle)システムオン状態であり、駐車中とは例えばEVシステムオフ状態であることを意味する。
【0021】
冗長化制御部18は、冗長化の条件の成立を判定する冗長化判定部18aと、稼働面及び非稼働面の状態を判定する面状態判定部18bと、機能安全を実行する機能安全実行部18cとを備える。各部18a~18cは、ソフトウェアの冗長化プログラムを実行する。
【0022】
冗長化判定部18aは、非稼働面のソフトウェアの書き換えを終了して稼働面と非稼働面とを切り替えた後に(所定条件を満たす場合に相当する)、外部要因による条件又は内部要因による冗長化の条件が成立すると、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換える。この場合、外部要因による条件は、セントラルECU3又はリプログツール4からの冗長化指示の入力を検知したことである。内部要因による条件は、ECU1の装置内部のエラーを検知したこと、セキュリティ的な脅威を検知したこと、書き換え対象の新ソフトウェアによるアップデートの飛躍レベルが一定値以上であること、前回のソフトウェアの書き換えから一定時間が経過していること、稼働面の異常を検知したこと等である。
【0023】
ここで、新ソフトウェアによるアップデートの飛躍レベルについて説明する。アップデートの飛躍レベルは、例えばソフトウェアのバージョン情報やサーバ6から配信されるアップデートに関する情報により判断することができる。例えばバージョン1.0からバージョン2.0へのアップデート等のようにメジャーアップデートの場合はアップデートの飛躍レベルが一定値以上であると判定する。一方、バージョン1.0からバージョン1.1へのアップデート等のようにマイナーアップデートの場合はアップデートの飛躍レベルが一定値未満であると判定する。サーバ6から配信されたアップデートに関する情報において、アップデートの飛躍レベルが一定値以上であることを示しても良い。
【0024】
稼働面のソフトウェアと非稼働面のソフトウェアについて説明する。非稼働面のソフトウェアと稼働面のソフトウェアは共に実行可能な状態であり、非稼働面のソフトウェアでも圧縮されていない。書き換え制御部17は、冗長化の条件が成立していると判定すると、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換える。書き換え制御部17は、冗長化の対象となる稼働面のソフトウェアを記憶するアドレス領域を指定し、非稼働面のアドレス領域へ複製しても良いし、ファイル名を指定して非稼働面に複製しても良い。
【0025】
又、冗長化判定部18aは、稼働面のソフトウェアと非稼働面のソフトウェアとを冗長化してから稼働面又は非稼働面の故障を特定した場合に、外部要因による条件又は内部要因による冗長化の条件が成立すると、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換えて故障を修復する。この場合、外部要因による条件は、セントラルECU3又はリプログツール4からの冗長化指示の入力を検知したことである。内部要因による条件は、ECU1の装置内部のエラーを検知したこと、セキュリティ的な脅威を検知したこと、稼働面又は非稼働面の異常を検知したこと等である。
【0026】
ECU1は、車載ネットワーク2の通信状態を監視する機能、フラッシュROM12,13の動作状態を監視する機能、フラッシュROM12,13のデータを検証する機能等の各種機能を有する。又、フラッシュROM12,13上のプログラムは、例えば不正な引数が入力されたときや、スタックが破壊されたとき等の通常では想定し得ないプログラム動作の異常を監視する機能を有する。これらの監視機能は、異常や故障を検知すると、検知レポートを作成する。冗長化判定部18aは、検知レポートが作成されているか否か、又は作成された検知レポートの内容に基づいて内部要因による条件が成立したか否かを判定する。
【0027】
次に、上記した構成の作用について
図2から
図7を参照して説明する。制御部10は、冗長化判定処理、起動時判定処理、ソフトウェア実行処理を行う。以下、各処理について順次説明する。
【0028】
(1)冗長化処理(
図3参照)
制御部10は、冗長化処理を車両のイグニッションオン状態で繰返し実行する。制御部10は、冗長化処理を開始すると、稼働面のソフトウェア情報と非稼働面のソフトウェア情報とを取得して比較し、稼働面と非稼働面との冗長状態が有効であるか否かを判定する(S1)。ソフトウェア情報とは、例えばソフトウェアのバージョン情報やソフトウェアのID等のソフトウェアを識別可能な情報である。
【0029】
制御部10は、稼働面のソフトウェアと非稼働面のソフトウェアとが異なっており、稼働面と非稼働面との冗長状態が有効でないと判定すると(S1:NO)、冗長化の条件が成立しているか否かを判定する(S2)。即ち、制御部10は、外部要因による条件として、セントラルECU3又はリプログツール4からの冗長化指示の入力を検知したか否かを判定する。制御部10は、内部要因による条件として、ECU1の装置内部のエラーを検知したか否か、セキュリティ的な脅威を検知したか否か、書き換え対象の新ソフトウェアによるアップデートの飛躍レベルが一定値以上であることを検知したか否か、前回のソフトウェアの書き換えから一定時間が経過していることを検知したか否か、稼働面の異常を検知したこと等を判定する。制御部10は、これらの条件が全て成立しておらず、冗長化の条件が成立していないと判定すると(S2:NO)、冗長化処理を終了する。
【0030】
一方、制御部10は、これらの条件の何れかが成立しており、冗長化の条件が成立していると判定すると(S2:YES)、稼働面のソフトウェアを検証し、その検証結果を判定する(S3)、制御部10は、稼働面のソフトウェアの検証結果が正常であると判定すると(S3:YES)、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換え、稼働面のソフトウェアと非稼働面のソフトウェアとを冗長化し(S4)、冗長化処理を終了する。制御部10は、稼働面のソフトウェアの検証結果が異常であると判定すると(S3:NO)、ECU1をリセットし(S5)、冗長化処理を終了する。上記したステップS1:NO、S2:YES、S3:YES、S4の処理は、書き換え手順に相当する。尚、以上は、制御部10は、上記した条件の何れかが成立している場合に冗長化の条件が成立していると判定する構成を例示したが、全ての条件が成立している場合に冗長化の条件が成立していると判定しても良いし、予め設定されている所定数の条件が成立している場合に冗長化の条件が成立していると判定しても良い。
【0031】
又、制御部10は、稼働面のソフトウェアと非稼働面のソフトウェアとが同じであり、稼働面と非稼働面との冗長状態が有効であると判定すると(S1:YES)、非稼働面が正常であるか否かを判定する(S6)。制御部10は、非稼働面が正常でないと判定すると(S6:NO)、非稼働面を書き換え中であるか否かを判定する(S7)。制御部10は、非稼働面を書き換え中であると判定すると(S7:YES)、冗長化処理を終了する。
【0032】
一方、制御部10は、非稼働面を書き換え中でないと判定すると(S7:NO)、この場合も、稼働面のソフトウェアを検証し、その検証結果を判定する(S3)、制御部10は、稼働面のソフトウェアの検証結果が正常であると判定すると(S3:YES)、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換え、稼働面のソフトウェアと非稼働面のソフトウェアとを冗長化し(S4)、冗長化処理を終了する。制御部10は、稼働面のソフトウェアの検証結果が異常であると判定すると(S3:NO)、ECU1をリセットし(S5)、冗長化処理を終了する。上記したステップS1:YES、S6:NO、S7:NO、S3:YES、S4の処理は、修復手順に相当する。
【0033】
制御部10は、非稼働面が正常であると判定すると(S6:YES)、稼働面が正常であるか否かを判定する(S8)。制御部10は、稼働面が正常であると判定すると(S8:YES)、冗長化処理を終了する。一方、制御部10は、稼働面が正常でないと判定すると(S8:NO)、稼働面と非稼働面とを切り替え(S9)、冗長化処理を終了する。
【0034】
(2)起動時判定処理(
図4参照)
制御部10は、起動時判定処理を開始すると、稼働面のソフトウェアを検証し、その検証結果を判定する(S11)、制御部10は、稼働面のソフトウェアの検証結果が正常であると判定すると(S11:YES)、稼働面と非稼働面との冗長状態が有効であるか否かを判定する(S12)。制御部10は、稼働面と非稼働面との冗長状態が有効でないと判定すると(S12:NO)、稼働面のソフトウェアを実行し(S13)、起動時判定処理を終了する。
【0035】
制御部10は、稼働面と非稼働面との冗長状態が有効であると判定すると(S12:YES)、非稼働面のソフトウェアを検証し、その検証結果を判定する(S14)。制御部10は、非稼働面のソフトウェアの検証結果が正常であると判定すると(S14:YES)、稼働面及び非稼働面の両方が正常であることを特定し(S15)、稼働面のソフトウェアを実行し(S13)、起動時判定処理を終了する。制御部10は、非稼働面のソフトウェアの検証結果が異常であると判定すると(S14:NO)、稼働面が正常である一方で非稼働面が異常であることを特定し(S16)、稼働面のソフトウェアを実行し(S13)、起動時判定処理を終了する。
【0036】
一方、制御部10は、稼働面のソフトウェアの検証結果が異常であると判定すると(S11:NO)、非稼働面のソフトウェアを検証し、その検証結果を判定する(S17)、制御部10は、非稼働面のソフトウェアの検証結果が正常であると判定すると(S17:YES)、稼働面と非稼働面とを切り替え(S18)、稼働面と非稼働面との冗長状態が有効であるか否かを判定する(S19)。この場合、稼働面と非稼働面には同じソフトウェアが記憶されているので、稼働面と非稼働面とを切り替えるのみで、直ちに正常なソフトウェアを起動することができる。
【0037】
制御部10は、稼働面と非稼働面との冗長状態が有効であると判定すると(S19:YES)、この場合も、稼働面が正常である一方で非稼働面が異常であることを特定し(S16)、稼働面のソフトウェアを実行し(S13)、起動時判定処理を終了する。制御部10は、稼働面と非稼働面との冗長状態が有効でないと判定すると(S19:NO)、稼働面のソフトウェアを実行し(S13)、起動時判定処理を終了する。制御部10は、非稼働面のソフトウェアの検証結果が異常であると判定すると(S17:NO)、ソフトウェアの実行を中止し(S20)、起動時判定処理を終了する。
【0038】
(3)ソフトウェア実行処理(
図5参照)
制御部10は、ソフトウェア実行処理を開始すると、稼働面と非稼働面との冗長状態が有効であるか否かを判定する(S21)。制御部10は、稼働面と非稼働面との冗長状態が有効であると判定すると(S21:YES)、非稼働面が正常であるか否かを判定する(S22)。制御部10は、非稼働面が正常であると判定すると(S22:YES)、ソフトウェアを実行し(S23)、ソフトウェア実行処理を終了する。この場合、制御部10は、稼働面と非稼働面との冗長状態が有効であり、且つ非稼働面が正常である状態でソフトウェアを実行することで、稼働面のソフトウェアの実行結果と非稼働面のソフトウェアの実行結果とが一致することを確認する。即ち、制御部10は、稼働面のソフトウェアを実行すると共に、非稼働面の対応するソフトウェアを実行し、それらの実行結果を比較し、実行結果が一致するか否かを判定し、実行結果の一致を確認すると、稼働面のソフトウェアを実行する。これにより、プログラムの実行方法をより安全な実行方法にてプログラムを実行することができる。即ち、ソフトウェア実行処理は機能安全の仕様を実装した処理となる。
【0039】
一方、制御部10は、稼働面と非稼働面との冗長状態が有効でないと判定すると(S21:NO)、又は稼働面と非稼働面との冗長状態が有効であると判定したが(S21:YES)、非稼働面が正常でないと判定すると(S22:NO)、稼働面のソフトウェアを実行し(S24)、ソフトウェア実行処理を終了する。この場合、制御部10は、稼働面と非稼働面との冗長状態が有効でない状態、又は稼働面と非稼働面との冗長状態が有効であるが、非稼働面が正常でない状態でソフトウェアを実行することで、上記した実行結果の一致を確認した場合とは異なり、稼働面のソフトウェアの実行結果と非稼働面のソフトウェアの実行結果とが一致することを確認していない状態で稼働面のソフトウェアを実行する。
【0040】
稼働面のソフトウェアと非稼働面のソフトウェアとの冗長化の処理について
図6から
図7を参照して説明する。
図6から
図7では、第1フラッシュROM12をA面と称し、第2フラッシュROM13をB面と称して説明する。
図6から
図7では、A面に「Ver2.1」のソフトウェアが配置されていると共にB面に「Ver2.0」のソフトウェアが配置されている状態から、B面のソフトウェアを「Ver2.0」から「Ver3.0」へ書き換えた後に、A面のソフトウェアを「Ver2.1」から「Ver3.0」へ書き換えることで、A面とB面とを冗長化する場合を例示している。
図6は、A面とB面とを冗長化した後にA面に故障が混入した場合を示している。
図7は、A面とB面とを冗長化した後にB面に故障が混入した場合を示している。以下、各場合について順次説明する。尚、
図6から
図7では、無線リプロを例示しているが、有線リプロも同様である。
【0041】
(1)A面とB面とを冗長化した後にA面に故障が混入した場合
制御部10は、稼働面をA面に設定すると共に非稼働面をB面に設定している状態でB面のソフトウェアの「Ver2.0」から「Ver3.0」への書き換え要求を検知すると、B面のソフトウェアの「Ver2.0」から「Ver3.0」への書き換えを開始する(t1)。制御部10は、書き換えを終了し(t2)、面切り替えの条件が成立したと判定すると、稼働面をA面からB面へ切り替える。
【0042】
制御部10は、この状態から冗長化の条件が成立したと判定すると、A面のソフトウェアの「Ver2.1」から「Ver3.0」への書き換えを開始する(t3)。書き換えを終了すると(t4)、A面とB面との両面に「Ver3.0」のソフトウェアが配置されている状態となり、稼働面と非稼働面との冗長状態が有効となる。このとき、制御部10は、稼働面をB面からA面へ切り替えても良いし、稼働面をB面からA面へ切り替えずにB面で継続しても良い。
図6及び
図7では、稼働面がA面及びB面の何れでも良い状態をAnyと表記している。
図6では、稼働面をB面からA面へ切り替え、A面を稼働面とする場合を例示している。A面及びB面の何れを稼働面としても良い状態でA面を稼働面としている状態をAny(A)と表記している。稼働面をB面からA面に切り替えずにB面で継続する場合は、Any(B)となる。
【0043】
制御部10は、A面とB面とを冗長化した後にA面の故障を特定すると、A面の修復を開始する(t5)。この場合、制御部10は、稼働面をB面からA面へ切り替えていれば、稼働面をA面からB面へ切り替え、稼働面をB面で継続していれば、稼働面をB面で継続する。A面の修復を終了すると(t6)、この場合も、A面とB面との両面に「Ver3.0」のソフトウェアが配置されている状態となり、稼働面と非稼働面との冗長状態が再度有効となる。このときも、制御部10は、稼働面をB面からA面へ切り替えても良いし、稼働面をB面からA面へ切り替えずにB面で継続しても良い。
【0044】
尚、サーバ6から配信された書き換え指示において、書き換え対象の面が指定されても良いし、制御部10がA面のソフトウェアとB面のソフトウェアのバージョンを取得して比較し、古い方のバージョンが書き込まれている面を選択しても良い。冗長状態が有効になっている場合は、A面とB面には同一バージョンのソフトウェアが書き込まれているので、非稼働面を新しいバージョンのソフトウェアにより書き換える。或いは、メモリ寿命に関する情報を取得し、A面とB面のうち残りの寿命が長い方を選択しても良い。
【0045】
制御部10は、B面のソフトウェアの「Ver3.0」から「Ver3.1」への書き換え要求を検知すると、稼働面をB面からA面へ切り替えていれば、稼働面をA面で継続し、稼働面をB面で継続していれば、稼働面をB面からA面へ切り替え、B面のソフトウェアの「Ver3.0」から「Ver3.1」への書き換えを開始する(t7)。制御部10は、書き換えを終了し(t8)、面切り替えの条件が成立したと判定すると、稼働面をA面からB面へ切り替える。
【0046】
(2)A面とB面とを冗長化した後に冗長化した後にB面に故障が混入した場合
制御部10は、t1からt4までは同様の処理を行う。制御部10は、A面とB面とを冗長化した後にB面の故障を特定すると(t11)、B面の修復を開始し、稼働面をB面からA面へ切り替えていれば、稼働面をA面で継続し、稼働面をB面からA面へ切り替えずにB面で継続していれば、稼働面をB面からA面へ切り替える。B面の修復を終了すると(t12)、この場合も、A面とB面との両面に「Ver3.0」のソフトウェアが配置されている状態となり、稼働面と非稼働面との冗長状態が再度有効となる。このときも、制御部10は、稼働面をA面からB面へ切り替えても良いし、稼働面をA面からB面へ切り替えずにA面で継続しても良い。
【0047】
制御部10は、B面のソフトウェアの「Ver3.0」から「Ver3.1」への書き換え要求を検知すると、稼働面をB面からA面へ切り替えていれば、稼働面をA面で継続し、稼働面をB面で継続していれば、稼働面をB面からA面へ切り替え、B面のソフトウェアの「Ver3.0」から「Ver3.1」への書き換えを開始する(t13)。制御部10は、書き換えを終了し(t14)、面切り替えの条件が成立したと判定すると、稼働面をA面からB面へ切り替える。
【0048】
以上に説明したように本実施形態によれば、以下に示す作用効果を得ることができる。電子制御装置1において、非稼働面のソフトウェアの書き換えを終了して稼働面と非稼働面とを切り替えた後に、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換えるようにした。第1フラッシュROM12及び第2フラッシュROM13を稼働面と非稼働面とに切り替えることで、限定的な用途のソフトウェアの記憶領域を用意する従来とは異なり、リソースを有効に活用することができる。又、非稼働面のソフトウェアの書き換えを終了して稼働面と非稼働面とを切り替えた後に、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換えることで、メイン系処理装置のソフトウェアの書き換え時のみにバックアップする従来とは異なり、稼働面のソフトウェアと非稼働面のソフトウェアとをシームレスに冗長化することができ、システムの安全性をシームレスに適切に担保することができる。これにより、リソースを有効に活用しつつ、システムの安全性をシームレスに適切に担保することができる。
【0049】
外部要因の成立を条件とし、セントラルECU3又はリプログツール4からの冗長化指示の入力を検知すると、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換えるようにした。非稼働面のソフトウェアの書き換えを終了して稼働面と非稼働面とを切り替えた後に、外部要因の成立を条件として冗長化することができる。
【0050】
内部要因の成立を条件とし、ECU1の装置内部のエラーを検知すると、セキュリティ的な脅威を検知すると、書き換え対象の新ソフトウェアによるアップデートの飛躍レベルが一定値以上であると、前回のソフトウェアの書き換えから一定時間が経過していると、又は稼働面の異常を検知すると、非稼働面のソフトウェアを稼働面のソフトウェアと同じソフトウェアに書き換えるようにした。非稼働面のソフトウェアの書き換えを終了して稼働面と非稼働面とを切り替えた後に、内部要因の成立を条件として冗長化することができる。
【0051】
稼働面のソフトウェアと非稼働面のソフトウェアとを冗長化してから稼働面又は非稼働面のソフトウェアの異常を特定すると、その故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復するようにした。稼働面のソフトウェアと非稼働面のソフトウェアとを冗長化してから稼働面又は非稼働面のソフトウェアの異常が発生しても、故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復することで、稼働面のソフトウェアと非稼働面のソフトウェアとをシームレスに冗長化することができ、システムの安全性をシームレスに適切に担保することができる。
【0052】
外部要因の成立を条件とし、セントラルECU3又はリプログツール4からの冗長化指示の入力を検知すると、故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復するようにした。稼働面のソフトウェアと非稼働面のソフトウェアとを冗長化してから稼働面又は非稼働面のソフトウェアの異常が発生しても、外部要因の成立を条件として冗長化することができる。
【0053】
内部要因の成立を条件とし、装置内部のエラーを検知すると、セキュリティ的な脅威を検知すると、又は稼働面又は非稼働面の異常を検知すると、故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復するようにした。稼働面のソフトウェアと非稼働面のソフトウェアとを冗長化してから稼働面又は非稼働面のソフトウェアの異常が発生しても、内部要因の成立を条件として冗長化することができる。
【0054】
稼働面と非稼働面との冗長状態が有効であると判定し、非稼働面が正常であると判定すると、稼働面のソフトウェアを実行するようにした。稼働面と非稼働面との冗長状態が有効な状態で稼働面のソフトウェアを実行することで、機能安全を担保した上でソフトウェアを適切に実行することができる。
【0055】
本実施形態では、第1フラッシュROM12及び第2フラッシュROM13がそれぞれ独立したアドレス空間が割り当てられた記憶領域である構成を例示したが、第1記憶部と第2記憶部に同じソフトウェアが書き込まれた状態になれば良く、例えば第1フラッシュROM12及び第2フラッシュROM13に同一アドレスを割り当て、切り替えフラグを用いることで第1フラッシュROM12又は第2フラッシュROM13のアドレスにアクセスする構成でも良い。
【0056】
第1フラッシュROM12をA面と称し、第2フラッシュROM13をB面と称したが、第1フラッシュROM12及び第2フラッシュROM13はページやセグメントと称される小さな単位でもよい。この場合、ECU1は、複数の第1フラッシュROM12と、複数の第1フラッシュROM12の各々に対応する複数の第2フラッシュROM13とを備える。又、第1フラッシュROM12及び第2フラッシュROM13は、仮想記憶として構成されていても良い。
【0057】
本開示は、特許請求の範囲の記載に加え、以下の発明も含む。
[1]
ソフトウェアを配置可能な第1記憶部(12)と、
ソフトウェアを配置可能な第2記憶部(13)と、
前記第1記憶部と前記第2記憶部とのうち一方を稼働領域に設定すると共に他方を非稼働領域に設定する制御部(10)と、を備え、
前記制御部は、所定条件を満たす場合に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える電子制御装置。
【0058】
[2]
前記制御部は、所定条件を満たす場合として、非稼働領域のソフトウェアの書き換えを終了して稼働領域と非稼働領域とを切り替えた後に、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える[1]に記載した電子制御装置。
【0059】
[3]
前記制御部は、外部要因の成立を条件として、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える[2]に記載した電子制御装置。
【0060】
[4]
前記制御部は、自装置とネットワークを介して接続されている接続装置からの冗長化指示の入力を検知した場合に、外部要因の成立を特定する[3]に記載した電子制御装置。
【0061】
[5]
前記制御部は、内部要因の成立を条件として、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに書き換える[1]から[4]の何れか一項に記載した電子制御装置。
【0062】
[6]
前記制御部は、装置内部のエラーを検知した場合、セキュリティ的な脅威を検知した場合、書き換え対象の新ソフトウェアによるアップデートの飛躍レベルが一定値以上であることを検知した場合、前回のソフトウェアの書き換えから一定時間が経過していることを検知した場合、稼働領域の異常を検知した場合のうち少なくとも何れか一つにより、内部要因の成立を特定する[5]に記載した電子制御装置。
【0063】
[7]
前記制御部は、稼働領域のソフトウェアと非稼働領域のソフトウェアとを冗長化してから稼働領域又は非稼働領域の故障を特定した場合に、その故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復する[1]から[6]の何れか一項に記載した電子制御装置。
【0064】
[8]
前記制御部は、外部要因の成立を条件として、故障を特定した一方の面のソフトウェアを他方の面のソフトウェアと同じソフトウェアに修復する[7]に記載した電子制御装置。
【0065】
[9]
前記制御部は、自装置とネットワークを介して接続されている接続装置から修復指示の入力を検知した場合に、外部要因の成立を特定する[8]に記載した電子制御装置。
【0066】
[10]
前記制御部は、内部要因の成立を条件として、非稼働領域のソフトウェアを稼働領域のソフトウェアと同じソフトウェアに修復する[7]から[9]の何れか一項に記載した電子制御装置。
【0067】
[11]
前記制御部は、装置内部のエラーを検知した場合、セキュリティ的な脅威を検知した場合、稼働領域又は非稼働領域の異常を検知した場合のうち少なくとも何れか一つにより、内部要因の成立を特定する[10]に記載した電子制御装置。
【0068】
[12]
前記制御部は、稼働領域と非稼働領域との冗長状態が有効であると判定し、非稼働領域が正常であると判定した場合に、稼働領域のソフトウェアを機能安全的に実行する[1]から[11]の何れか一項に記載した電子制御装置。
【0069】
本開示は、実施例に準拠して記述されたが、当該実施例や構造に限定されるものではないと理解される。本開示は、様々な変形例や均等範囲内の変形をも包含する。加えて、様々な組み合わせや形態、更には、それらに一要素のみ、それ以上、或いはそれ以下を含む他の組み合わせや形態をも、本開示の範疇や思想範囲に入るものである。
【0070】
本開示に記載の制御部及びその手法は、コンピュータプログラムにより具体化された一つ乃至は複数の機能を実行するようにプログラムされたプロセッサ及びメモリを構成することにより提供された専用コンピュータにより実現されても良い。或いは、本開示に記載の制御部及びその手法は、一つ以上の専用ハードウェア論理回路によりプロセッサを構成することにより提供された専用コンピュータにより実現されても良い。若しくは、本開示に記載の制御部及びその手法は、一つ乃至は複数の機能を実行するようにプログラムされたプロセッサ及びメモリと一つ以上のハードウェア論理回路により構成されたプロセッサとの組み合わせにより構成された一つ以上の専用コンピュータにより実現されても良い。又、コンピュータプログラムは、コンピュータにより実行されるインストラクションとして、コンピュータ読み取り可能な非遷移有形記録媒体に記憶されていても良い。
【符号の説明】
【0071】
図面中、1は電子制御装置、10は制御部、12は第1フラッシュROM(第1記憶部)、13は第2フラッシュROM(第2記憶部)である。