(57)【要約】      （修正有）【課題】  不揮発性メモリに搭載されている制御用のソフトウェアの書き換え処理を、より短時間で行うことができる自動車用制御ユニットを提供する。【解決手段】  ＥＣＵ１において、フラッシュＲＯＭ５には、現行バージョンプログラムを格納するための主格納エリア２０と、更新バージョンプログラムを格納するための副格納エリア２１とが形成されている。プログラム書換えツール５ａは、外部から取得した更新バージョンプログラムを副格納エリア２１に格納するプログラム格納処理と、更新バージョンプログラムの副格納エリア２１への書き込みに成功した場合は、現在主格納エリア２０として使用されているメモリ領域に代え、更新バージョンプログラムの格納が完了した副格納エリア２１を、新たな主格納エリアとして切り替える一方、副格納エリア２１への書き込みに失敗した場合は当該切替えを行わないメモリ切替え処理とを含むプログラム書換え処理を実行する。【選択図】    図１
2006301960.tif 000002
【特許請求の範囲】
【請求項１】
自動車上に搭載される電子機器の制御処理を司る制御用ソフトウェアを格納するとともに、記憶内容が電気的に書換え可能であって、外部からのリセット信号を受けても当該記憶内容を保持する不揮発性メモリと、該制御用ソフトウェアの実行メモリとなるＲＡＭと、前記制御用ソフトウェアの実行に基づいて前記電子機器の制御処理を行なうＣＰＵとを備え、
前記不揮発性メモリは、前記制御用ソフトウェアの現在使用中のバージョンプログラムである現行バージョンプログラムを格納するための主格納エリアと、前記現行バージョンプログラムからの更新点を含む更新バージョンプログラムを格納するための副格納エリアとを有し、さらに、
外部から取得した前記更新バージョンプログラムを前記副格納エリアに格納するプログラム格納処理と、前記更新バージョンプログラムの前記副格納エリアへの書き込みに成功した場合は、現在主格納エリアとして使用されているメモリ領域に代え、前記更新バージョンプログラムの格納が完了した前記副格納エリアを、新たな主格納エリアとして切り替える一方、前記副格納エリアへの書き込みに失敗した場合は当該切替えを行わないメモリ切替え処理とを含むプログラム書換え処理とを実行するプログラム書換え手段を有してなることを特徴とする自動車用制御ユニット。
【請求項２】
前記不揮発性メモリは、その記憶領域が複数の書換え単位ブロックに分割されるとともに、該書換え単位ブロックを単位とする形でのみ記憶内容の消去、書き込み及び書き換えが可能とされ、前記主格納エリアと前記副格納エリアとを互いに異なる書換え単位ブロック内に形成する請求項１記載の自動車用制御ユニット。
【請求項３】
前記不揮発性メモリは、各々固有の前記書換え単位ブロックの集合よりなる固定メモリとして構成された第一メモリと第二メモリとを有し、
前記プログラム書換え手段は、同じ制御用ソフトウェアに対し、前記更新バージョンプログラムを新たに取得する毎に、前記副格納エリアを前記第一メモリと第二メモリとに交互に形成する請求項２記載の自動車用制御ユニット。
【請求項４】
前記プログラム書換え手段は、前記副格納エリアに対し前記更新バージョンプログラムを、そのバージョンを特定するバージョン情報とともに書き込むものであり、
当該更新後の制御用ソフトウェアを実行するに際して、前記第一メモリと前記第二メモリとにそれぞれ格納されているバージョンの異なるプログラムの格納エリアにそれぞれアクセスして、各プログラムに付与されているバージョン情報を読み出して比較し、新しいバージョンとして識別されたプログラムを前記現行バージョンプログラムとして使用する制御用ソフトウェア起動手段が設けられている請求項３記載の自動車用制御ユニット。
【請求項５】
前記プログラム書換え手段は、前記副格納エリアに対し、前記更新バージョンプログラムを正常に書き込み終了するに対応して正常終了情報を書き込むものであり、前記制御用ソフトウェア起動手段は当該正常終了情報を有するプログラムについてのみ起動を許可するものである請求項４記載の自動車用制御ユニット。
【請求項６】
前記第一メモリと前記第二メモリは、それぞれ機能の異なる複数の制御用ソフトウェアのプログラムを格納するものであり、前記プログラム書換え手段は、個々の制御用ソフトウェアにプログラム更新が発生する毎に、いずれのメモリに該制御用ソフトウェアの主格納エリア及び副格納エリアを形成するかを独立に定めるものであり、
前記第一メモリ及び前記第二メモリには、異なる制御用ソフトウェアの主格納エリアと副格納エリアとが、各制御用ソフトウェアの更新回数に応じて混在形成される請求項４又は請求項５に記載の自動車用制御ユニット。
【請求項７】
前記不揮発性メモリには、前記プログラム書換え手段の機能実現用ファームウェアである書換用ファームウェアが格納され、
前記ＣＰＵは、前記更新バージョンプログラムを取得した場合に、前記書換用ファームウェアによる前記プログラム書換え処理を、前記現行バージョンプログラムの実行処理とは独立して行なう請求項１ないし請求項６のいずれか１項に記載の自動車用制御ユニット。
【請求項８】
前記複数の制御用ソフトウェアの起動状態を管理する制御用ソフトウェア起動管理手段と、
前記制御用ソフトウェア起動管理手段による起動管理状態に基づいて、全制御用ソフトウェアが共通に作動休止している共通休止作動期間を特定する共通休止作動期間特定手段とを備え、
前記書換用ファームウェアは、特定された前記共通休止作動期間に前記プログラム書換え処理を行なう請求項７記載の自動車用制御ユニット。
【請求項９】
前記書換用ファームウェアは、前記プログラム書換え処理を、時系列的に順次到来する複数の前記共通休止作動期間にまたがる時分割処理にて行なう請求項８記載の自動車用制御ユニット。
【請求項１０】
前記制御用ソフトウェア起動管理手段は、前記複数の実行タスクを予め定められた時系列順序にて周期的に起動管理するスケジューラを有し、
前記書換用ファームウェアは、前記プログラム書換え処理を行なう場合に、前記スケジューラにおける前記複数の制御用ソフトウェアの実行タスク配列に、前記プログラム書換え処理のタスクを組み込む形で前記時分割処理を行なう請求項９記載の自動車用制御ユニット。
【請求項１１】
前記共通休止作動期間特定手段は、前記共通休止作動期間を前記複数のアプリケーションのいずれに対しても外部からの起動要求が存在しない期間として特定するものであり、
前記共通休止作動期間にて前記更新バージョンプログラムが取得されていない場合は、前記ＣＰＵに対し、通常動作モードよりも消費電力量が少ないスリープモードへ移行するためのスリープ設定を行い、前記共通休止作動期間において前記更新バージョンプログラムが取得されている場合は、前記書換用ファームウェアによる前記プログラム書換え処理を立ち上げるスリープ制御手段を有する請求項９又は請求項１０に記載の自動車用制御ユニット。
【請求項１２】
前記スリープモードは、前記通常モードから時系列的に直接移行可能な第一レベルスリープモードと、該第一レベルスリープモードが所定時間継続した場合に移行可能なスリープモードであって、該第一レベルスリープモードよりもさらに消費電力が小さい第二レベルスリープモードとを有し、前記スリープ制御手段は、前記更新バージョンプログラムの取得の如何によらず、前記共通休止作動期間において前記第一レベルスリープモードによるスリープ設定を行い、かつ、前記更新バージョンプログラムが取得されている場合には、前記第二レベルスリープモードへの移行に代えて前記プログラム書換え処理を立ち上げる請求項１１記載の自動車用制御ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、自動車用制御ユニットに関する。
【背景技術】
【０００２】
【特許文献１】特開２００３−３３７７４８号公報
【特許文献２】特開２００３−１７２１９９号公報
【特許文献３】特開２００１−２２９０１４号公報
【０００３】
自動車には、各種機器（被制御要素）を制御するためにＥＣＵが搭載されている。ＥＣＵは、ＣＰＵからなる主制御部を有し、自動車上に搭載される電子機器の制御処理を予め定められた制御用ソフトウェアの実行に基づいて実施する。この制御用ソフトウェアは、バージョンアップやバグ修正等のために、内容を随時更新できるよう、フラッシュＲＯＭ（フラッシュメモリ）に記憶されることが多い（特許文献１〜３）。
【０００４】
アプリケーションの更新処理は、従来は車両持込にて販売店などで行われることが多かったが、近年では無線通信による車両外部インフラ（例えば携帯電話網など）の普及により、カーナビゲーションシステムにおける機能追加や地図データの更新、さらにはカーオーディオシステムで使用する音楽ソフト配信など、ユーザー自身の手で実行させるシーンも十分想定されるようになってきた。この場合、ユーザーが車両を使用しながら、制御用ソフトウェアの更新バージョンを上記車両外部インフラから無線受信する形でダウンロードし、フラッシュＲＯＭに書き込む形で更新処理がなされる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記の状況では、ユーザーが旧バージョンの制御用ソフトウェアの機能を使用しながら、これをリアルタイムで新バージョンに更新する処理に該当するから、フラッシュＲＯＭ内の旧バージョンの制御用ソフトウェアを上書き（あるいは無効化）する形で書換え処理を行った場合、その新バージョンのソフトウェアの書き込み処理中に、何らかの要因（例えば通信途絶、書換え処理のバグや暴走、ハードウェア異常など）でその書き込み処理に失敗してしまった場合は、新バージョンはもちろんのこと、旧バージョンのソフトウェアも使用不能あるいは機能不全を来たすこととなり、ユーザーへの機能提供に深刻な影響が及ぶ。
【０００６】
本発明の課題は、不揮発性メモリに搭載されている制御用ソフトウェアの書換え処理を、書換え失敗時においてもユーザーへの機能提供を確保した上で行なうことができる自動車用制御ユニットを提供することにある。
【課題を解決するための手段及び発明の効果】
【０００７】
上記の課題を解決するために、本発明の自動車用制御ユニットは、
自動車上に搭載される電子機器の制御処理を司る制御用ソフトウェアを格納するとともに、記憶内容が電気的に書換え可能であって、外部からのリセット信号を受けても当該記憶内容を保持する不揮発性メモリと、該制御用ソフトウェアの実行メモリとなるＲＡＭと、制御用ソフトウェアの実行に基づいて電子機器の制御処理を行なうＣＰＵとを備え、
不揮発性メモリは、制御用ソフトウェアの現在使用中のバージョンプログラムである現行バージョンプログラムを格納するための主格納エリアと、現行バージョンプログラムからの更新点を含む更新バージョンプログラムを格納するための副格納エリアとを有し、さらに、
外部から取得した更新バージョンプログラムを副格納エリアに格納するプログラム格納処理と、更新バージョンプログラムの副格納エリアへの書き込みに成功した場合は、現在主格納エリアとして使用されているメモリ領域に代え、更新バージョンプログラムの格納が完了した副格納エリアを、新たな主格納エリアとして切り替える一方、副格納エリアへの書き込みに失敗した場合は当該切替えを行なわないメモリ切替え処理とを含むプログラム書換え処理とを実行するプログラム書換え手段を有してなることを特徴とする。更新バージョンプログラムは、例えば無線通信網を介して受信取得されるものであるが、これに限られるものではない。
【０００８】
上記本発明によると、制御用ソフトウェアを格納する不揮発性メモリに、制御用ソフトウェアの現行バージョンプログラムを格納する主格納エリアと、新たに取得する更新バージョンプログラムを格納するための副格納エリアとを設け、外部から取得した更新バージョンプログラムを、現在使用中の現行バージョンプログラムを格納する主格納エリアとは別に確保された副格納エリアに格納する。そして、更新バージョンプログラムの副格納エリアへの書き込みに成功した場合は、現在主格納エリアとして使用されているメモリ領域に代え、更新バージョンプログラムの格納が完了した副格納エリアを、新たな主格納エリアとして切り替える一方、副格納エリアへの書き込みに失敗した場合は当該切替えを行なわない。これにより、万一更新バージョンプログラムの書き込みに失敗しても、現行バージョンプログラムは主格納エリア内に無傷で残り、また、例えば不完全な更新バージョンプログラムしか書き込まれてない副格納エリアを主格納エリアに切り替える処理も行われないから、現行バージョンプログラムを引き続き使用することができ、書換え失敗時においてもユーザーへの機能提供を確保することができる。
【０００９】
不揮発性メモリは、その記憶領域が複数の書換え単位ブロックに分割されるとともに、該書換え単位ブロックを単位とする形でのみ記憶内容の消去、書き込み及び書き換えが可能とされたものを使用できる（代表例はフラッシュメモリ（あるいは、フラッシュＲＯＭ）である）。この場合、主格納エリアと副格納エリアとは、互いに異なる書換え単位ブロック内に形成することが望ましい。
【００１０】
例えばフラッシュメモリは、最近は大容量化の開発が急速に進み、サイズの大きい制御用ソフトウェアを問題なく格納できるようになってきた。本発明において、主格納エリアと副格納エリアは、プログラムがアドレス空間内にてリロケータブルに記述されていれば、例えばメモリ内の空き領域の大きさと位置とを考慮して、主格納エリアと副格納エリアとをメモリ空間内で随時位置を変えて形成するようなことも可能である。しかし、フラッシュメモリは記憶内容の電気的な書き換えが可能ではあるが、読み出し時の駆動電圧と書き込み消去時の駆動電圧が異なるため、ＲＡＭのようなビット単位の書き換えが不能であり、上記のごとく、一定の大きさのブロック単位でしか書き込みができない物理構造となっている。この構造では、もし上記のように、不揮発性メモリに割り振られたアドレス空間内での位置に制限なく、主格納エリアと副格納エリアとを設定すると、主格納エリアと副格納エリアとの双方が同じ書換え単位ブロックに形成されてしまうこともありえ、例えば副格納エリアへの更新バージョン書き込み時に暴走などの不具合が生じたとき、主格納エリア内のプログラムデータが破壊される惧れがある。しかし、主格納エリアと副格納エリアとを、互いに異なる書換え単位ブロック内に形成すれば、このような不具合は生じない。
【００１１】
この場合、不揮発性メモリは、各々固有の前記書換え単位ブロックの集合よりなる固定メモリとして構成された第一メモリと第二メモリとを有するものとし、プログラム書換え手段は、同じ制御用ソフトウェアに対し、更新バージョンプログラムを新たに取得する毎に、副格納エリアを第一メモリと第二メモリとに交互に形成するように構成することができる。このようにすると、主格納エリアと副格納エリアとの形成先を第一メモリと第二メモリとの間で交替的に指定することで、同じ制御用ソフトウェアのプログラム更新処理を繰り返し実施する処理を、簡便かつ合理的に行なうことができる。また、この方式を採用する場合の当然の帰結として、副格納エリアの形成側として使用されるメモリには、現行バージョンプログラムよりも古いバージョンのプログラムしか書き込まれていないから、上書きや消去に関する自由度が高い。従って、更新バージョンプログラム書き込みに際して、データ退避などの余分な処理は最小限に留めることができ、該書き込み処理のステップ数も少なくて済む。この場合、プログラム書換え手段は、現行バージョンプログラムに先行する旧バージョンプログラムが主格納エリアとして使用していたメモリエリアに上書きする形で副格納エリアを設定すると、書換え時に新たに消費するメモリ領域を最小限に留めることができ、不揮発性メモリの容量をより有効活用することができる。
【００１２】
上記の第一メモリと第二メモリとは、同じ不揮発性メモリチップのメモリ空間内に区画形成することも可能であるし、第一メモリと第二メモリとを個別の不揮発性メモリチップとして構成することもできる。前者の場合は不揮発性メモリチップの個数が減り、ハードウェアコストの低減に寄与するが、不揮発性メモリチップのハードウェア異常が生じた場合は、第一メモリと第二メモリとが一蓮托生となってしまう問題がある。他方、第一メモリと第二メモリとを個別の不揮発性メモリチップで構成すると、余分な不揮発性メモリチップやメモリ切替えのためのスイッチ機構なども必要となり、ハードウェアコストは増大するが、片方の不揮発性メモリチップが故障しても、他方の不揮発性メモリチップをバックアップ用として活用できる利点がある。
【００１３】
次に、プログラム書換え手段は、副格納エリアに対し更新バージョンプログラムを、そのバージョンを特定するバージョン情報とともに書き込むものとして構成できる。この場合、当該更新後の制御用ソフトウェアを実行するに際して、第一メモリと第二メモリとにそれぞれ格納されているバージョンの異なるプログラムの格納エリアにそれぞれアクセスして、各プログラムに付与されているバージョン情報を読み出して比較し、新しいバージョンとして識別されたプログラムを現行バージョンプログラムとして使用する制御用ソフトウェア起動手段を設けることができる。本発明では、同じ制御用ソフトウェアの現行バージョンプログラムと更新バージョンプログラムとが、不揮発性メモリ内に一時的に並存する形となるので、上記のようにバージョン情報を書き込むことで両者を適確に識別でき、更新後に古いバージョンのプログラムを誤って実行してしまう不具合を防止できる。
【００１４】
この場合、プログラム書換え手段は、副格納エリアに対し、更新バージョンプログラムを正常に書き込み終了するに対応して正常終了情報をバージョン情報とともに書き込むものとすることができる。そして、制御用ソフトウェア起動手段は、当該正常終了情報を有するプログラムについてのみ起動を許可するものとすることができる。つまり、実行対象プログラムを上記バージョン情報の識別だけで特定しようとすると、更新バージョンプログラムがバージョン情報とともに書き込み処理に供されたとき、書き込みが正常完了していなくとも、バージョン情報だけが新しくなっていれば、当該不完全なプログラムが実行に供されてしまう矛盾を招来する。しかし、正常終了情報をバージョン情報とともに書き込むことで、更新バージョンプログラムが正常に使える状態で書き込まれているかどうかを適確に把握でき、こうした矛盾を解消することができる。この場合、バージョン情報が新しいバージョンを示している場合であって正常終了情報が随伴している場合に、更新バージョンプログラムが移行の現行バージョンプログラムとして実施に供され、結果として、副格納エリアは主格納エリアに切り替えられたこととなる。
【００１５】
第一メモリと第二メモリは、それぞれ機能の異なる複数の制御用ソフトウェアのプログラムを格納するものとすることができる。この場合、プログラム書換え手段は、個々の制御用ソフトウェアにプログラム更新が発生する毎に、いずれのメモリに該制御用ソフトウェアの主格納エリア及び副格納エリアを形成するかを独立に定めるものとすることができる。その結果、第一メモリ及び第二メモリには、異なる制御用ソフトウェアの主格納エリアと副格納エリアとが、各制御用ソフトウェアの更新回数に応じて混在形成されることとなる。しかしながら、前述のバージョン情報の書き込んでおくことにより、混在形成された種々の制御用ソフトウェアの主格納エリアと副格納エリアとを問題なく識別でき、不揮発性メモリ内に共存している複数の制御用ソフトウェアのそれぞれについて、更新後に古いバージョンのプログラムを誤って実行してしまう不具合を防止できる。
【００１６】
上記の不揮発性メモリには、プログラム書換え手段の機能実現用ファームウェアである書換用ファームウェアを格納しておくことができる。この場合、ＣＰＵは、更新バージョンプログラムを取得した場合に、書換用ファームウェアによるプログラム書換え処理を、現行バージョンプログラムの実行処理とは独立して行なうものとすることができる。これにより、現行バージョンプログラムの実行処理のバックグラウンドでプログラム書換え処理を行なうことができ、対象となる制御用ソフトウェアに基づく機能が、プログラム書換えのために使用不能となる期間を低減ないし排除することが可能となる。
【００１７】
この場合、複数の制御用ソフトウェアの起動状態を管理する制御用ソフトウェア起動管理手段と、制御用ソフトウェア起動管理手段による起動管理状態に基づいて、全制御用ソフトウェアが共通に作動休止している共通休止作動期間を特定する共通休止作動期間特定手段とを設けることができる。書換用ファームウェアは、特定された共通休止作動期間にプログラム書換え処理を行なうものとして構成できる。このようにすると、複数の制御用ソフトウェアに共通する休止期間を用いてプログラム書換え処理を行なうので、プログラム書換えのためのバックグラウンド処理負荷により個々の制御用ソフトウェア処理に対する圧迫が加わり難くなる。これにより、特定の制御用ソフトウェアの処理速度だけが極端に低下して当該制御用ソフトウェアに対応する自動車機能の動作レスポンスが遅れたりする不具合を効果的に抑制することができる。
【００１８】
この場合、書換用ファームウェアは、プログラム書換え処理を、時系列的に順次到来する複数の共通休止作動期間にまたがる時分割処理にて行なうようにすると、更新対象の制御用ソフトウェアのサイズが大きい場合でも、上記効果を享受することができる。
【００１９】
例えば、制御用ソフトウェア起動管理手段が、複数の制御用ソフトウェアの実行タスクを予め定められた時系列順序にて周期的に起動管理するスケジューラを有する場合、書換用ファームウェアは、プログラム書換え処理を行なう場合に、スケジューラにおける複数のアプリケーションの実行タスク配列に、プログラム書換え処理のタスクを組み込む形で時分割処理を行なうものとして構成できる。これにより、プログラム書換えの（個々のアプリケーションから見た）バックグラウンド処理による負荷が、特定のアプリケーションにしわ寄せされる不具合を効果的に防止できる。
【００２０】
上記の態様では、スケジューラが共通休止作動期間特定手段を兼ねており、アプリケーションの実行タスク配列にプログラム書換え処理のタスクを組み込むことで、共通休止作動期間を強制的に形成する形になっていた。他方、共通休止作動期間特定手段は、共通休止作動期間を複数のアプリケーションのいずれに対しても外部からの起動要求が存在しない期間として特定するものとすることも可能である。この場合、該共通休止作動期間において更新バージョンプログラムが取得されていない場合は、ＣＰＵに対し、通常動作モードよりも消費電力量が少ないスリープモードへ移行するためのスリープ設定を行い、共通休止作動期間において更新バージョンプログラムが取得されている場合は、書換用ファームウェアによるプログラム書換え処理を立ち上げるスリープ制御手段を設けることができる。つまり、どのアプリケーションに対しても対応する自動車機能への動作要求がなく、通常であれば省電力のためにスリープモードに移行させてしまうような軽処理負荷の期間が到来するのを待ってプログラム書換え処理を立ち上げることで、個々のアプリケーションの実行処理を圧迫する惧れをさらに低減できる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施の形態を、図面を参照して説明する。
図１は、本発明の自動車用制御ユニットの概念が適用されるＥＣＵの電気的な構成図である。ＥＣＵ１は、ＣＰＵ３からなる主制御部を有し、自動車上に搭載される電子機器（制御対象機器：被制御要素）の制御処理を該主制御部による予め定められたアプリケーション（制御用ソフトウェア）１８の実行に基づいて実施するものであり、具体的には、ＣＰＵ３、ＲＯＭ５、ＲＡＭ４及び入出力部（Ｉ／Ｏポート）２がバス接続されたマイクロプロセッサからなる。ＥＣＵ１は、本実施形態では自動車のボデー系の制御を司るボデー系ＥＣＵとして構成される。各アプリケーション１８はプラットフォーム５ｂ上で動作するものであり、ＲＡＭ４内に個別のワークエリアが確保されている。プラットフォーム５ｂは、ベースとなるハードウェアが相違する場合にも、各アプリケーションに共通の動作環境を与えるためのものであり、該アプリケーションに対する基本ソフト（ＯＳ）のほか、アプリケーションやハードウェアとの連携を図るインターフェースプログラムなどを含んで構成されるが、概念的には周知の部分なので説明の詳細は省略する。
【００２２】
アプリケーションは、車両利用者による車両各部の操作に係る機能であるボデー系機能を実現するものである。このボデー系機能とは、具体的には、ドア開閉に伴う制御、窓開閉に伴う制御、ライトスイッチのオン／オフに伴う制御、キーレスエントリ方式等に採用されるワイヤレスドアロック機構の制御、・・・といったものをいう。具体的には、以下のようなものを例示できる：
・運転席ドア、助手席ドア、後部右側座席ドア、後部左側座席ドア、ルーフなどのロック／ロック解除、パワーウィンドウ動作など。
・エアコン、カーオーディオ、カーナビゲーションシステムなどの電源動作など。
・ルームランプ、コックピットランプ、ヘッドライト、スモールランプ、ハザードランプ、テールランプなどのスイッチ点灯制御など。
【００２３】
ＥＣＵ１は、必要に応じて外部からのスイッチやセンサからの入力信号等も参照しつつ、各アプリケーションの実行により、前述した各種ボデー系の制御対象機器（被制御要素）の動作制御を司る。また、ＥＣＵ１は、ある条件で、例えば、車両が駐車状態にある場合、又はあるスイッチ操作がない場合にはスリープモードに移行する。このスリープモードへの移行は、具体的には全てのアプリケーションが動作終了し、次の動作開始のための待機状態になっている場合に、ＥＣＵ１全体を低消費電力モード（ここでは、ＣＰＵ３の動作クロックを与える主クロック回路８を停止したスタンバイモードとする）へ移行させる形で行なうものであり、その制御はスリープ管理ソフトウェア５ｃが担う。
【００２４】
図３に示すように、プラットフォームの機能の一部として形成されたスケジューラ（制御用ソフトウェア起動管理手段の機能の一部をなす）によって、複数のアプリケーション１，２‥ｎの実行タスクは、予め定められた時系列順序にて周期的に起動管理される。あるアプリケーションの実行タスクが到来し、かつ、対応する機能への動作要求が外部から入力されている場合は、そのアプリケーションは起動されることになるし、動作要求が入力されていなければそのアプリケーションの実行タスクはスキップされる。そして、各アプリケーションは、対応する機能への動作要求が入力されない状態で一定時間経過すれば、上記のスリープ状態に移行可能となる。ここで、敢えて移行「可能」と記載したのは、他のソフトウェアに係る機能への動作要求入力が存在する場合は、ＣＰＵ３全体をスリープモードに移行させることができないからである。
【００２５】
また、一旦スリープモードへ移行したＣＰＵ３は、いずれかのアプリケーションに対する外部からの起動要求を、外部ウェイクアップ信号として受けることによりウェイクアップするが、ＣＰＵ３が一時的にでもウェイクアップしていないと入力を認識できない起動要求信号も存在する。このような入力をトリガーとして特定のアプリケーションを起動したい場合は、スリープ中であっても対応するアプリケーションを周期的に一定時間だけウェイクアップさせ、上記受信入力等がなければ再びスリープ状態に移行する処理が必要となる。すなわち、複数のアプリケーションのいずれに対しても外部からの作動要求がない場合にＣＰＵ３をスリープモードへ移行させ、その後、一定のスリープ期間と、外部からの作動要求の有無を確認するために通常モードへウェイクアップさせる一定のウェイクアップ期間とからなるスリープ／ウェイクアップ周期を繰り返す処理（以下、内部ウェイクアップ処理という）が必要となり、この機能は、スリープ管理ソフトウェア５ｃと、ＣＰＵ３とは別ハードウェアとして構成されたスリープ制御回路７とによって実現される。
【００２６】
内部ウェイクアップ処理に関しては、要求されるウェイクアップ周期が、一般にはアプリケーション毎に異なり、かつ、外部ウェイクアップ信号によりウェイクアップしてから、再びスリープに移行するタイミングもまちまちである。スリープ管理ソフトウェア５ｃはタイマールーチンを有し、各アプリケーションに対する外部からの起動要求信号の受信タイミングを把握し、全てのアプリケーションへの起動要求信号の入力が途絶えた場合に、共通休止作動期間に入ったものと判定する。そして、各アプリケーションから要求されるウェイクアップ周期も統括的に把握するとともに、最も短いウェイクアップ周期を見出し、上記共通休止作動期間に入ってから予め定められた時間経過すれば、スリープ制御回路７内に設けられたスリープタイマーにその見出されたウェイクアップ周期をセットして主クロック回路８の動作を停止し、ＣＰＵ３をスリープさせる（図３も参照）。
【００２７】
一旦スリープしたＣＰＵ３は、演算回路としての動作を停止しているのだから、ウェイクアップ処理を自分で行なうことはできない。そこで、スリープ制御回路７は、スリープタイマーにセットされたウェイクアップ周期が経過すると、主クロック回路８に起動信号（内部ウェイクアップ信号）を送ってこれを起動させ、ＣＰＵ３の動作を再開させる（スリープ制御回路７に自分で目覚し時計（スリープタイマー）をセットして眠りに入り、時刻が到来すればその目覚し時計に起こしてもらう、とイメージすればわかりやすいであろう）。そして、ＣＰＵ３に対しても、割り込み起動信号（内部ウェイクアップ信号）を送る。ＣＰＵ３はこれを受け、予め定められた割り込み処理によりウェイクアップのためのリソース設定処理等を行い、ウェイクアップする。
【００２８】
次に、ＥＣＵ１は、図２に示すように、シリアル通信バス３０を介して他のＥＣＵ１’、１”等と接続されており、図１に示すように、シリアル通信バス３０と各ＥＣＵの内部バスとは、シリアル通信インターフェース６を介して接続されている。このシリアル通信により、例えば、リセット指示又はウェイクアップ要因を判断するためのデータや、アプリケーション（制御用ソフトウェア）のバージョンアップに関するデータ、つまり更新バージョンプログラムのデータを受信する。符号６Ｂは、受信したデータを一次格納するための受信バッファである。
【００２９】
アプリケーション１８が格納されているＲＯＭ５は、記憶内容が電気的に書換え可能であって、外部からのリセット信号を受けても当該記憶内容を保持する不揮発性メモリ、本実施形態では、フラッシュＲＯＭ（フラッシュメモリ）にて構成されている（以下、フラッシュＲＯＭ５ともいう）。フラッシュＲＯＭ５は、読み出し時の駆動電圧と書き込み消去時の駆動電圧が異なり、後者（例えば９Ｖ）が前者（例えば５Ｖ：リセット信号も同レベルのエッジトリガ信号である）よりも高く設定されている。つまり、書き込み／消去の信号電圧がリセット信号よりも電圧で制御されるため、リセット信号を受けてもフラッシュＲＯＭ５の記憶内容は保持される。フラッシュＲＯＭ（不揮発性メモリ）５は、その記憶領域が、複数の書換え単位ブロック１５に分割されており、該書換え単位ブロック１５を単位とする形で記憶内容の消去、書き込み及び書き換えが可能である。図１では、１つの書換え単位ブロック１５内に２つのアプリケーションが格納されるように描いているが、アプリケーションのサイズによってその個数が変わることはもちろんであり、特にサイズの大きいアプリケーションの場合、複数の書換え単位ブロックにまたがって格納されることもありえる。本実施形態においてフラッシュＲＯＭ（不揮発性メモリ）５は、単一のメモリチップからなり、各々固有の書換え単位ブロックの集合よりなる固定メモリとして構成された第一メモリ５Ｐと第二メモリ５Ｓとが区画形成されている。
【００３０】
また、フラッシュＲＯＭ５には、アプリケーション（制御用ソフトウェア）更新用のファームウェアとして、書換用ファームウェア５ａが格納されている。アプリケーションの更新先となるＥＣＵ１において、フラッシュＲＯＭ５（不揮発性メモリ）には、アプリケーション（制御用ソフトウェア）の現在使用中のバージョンプログラムである現行バージョンプログラムを格納するための主格納エリア２０と、現行バージョンプログラムからの更新点を含む更新バージョンプログラムを格納するための副格納エリア２１とが形成されている。そして、書換用ファームウェア５ａは、外部から取得した更新バージョンプログラムを副格納エリア２１に格納するプログラム格納処理と、更新バージョンプログラムの副格納エリア２１への書き込みに成功した場合は、現在主格納エリア２０として使用されているメモリ領域に代え、更新バージョンプログラムの格納が完了した副格納エリア２１を、新たな主格納エリアとして切り替える一方、副格納エリア２１への書き込みに失敗した場合は当該切替えを行なわないメモリ切替え処理とを含むプログラム書換え処理（以下、リプログラム処理ともいう）を実行するためのファームウェアである。書換用ファームウェア５ａは、プラットフォーム５ｂ及びスリープ管理ソフトウェア５ｃとともに、アプリケーション群の格納先となる第一メモリ５Ｐ及び第二メモリ５Ｓとは異なるベースメモリ５Ｂに格納されており、ＣＰＵ３は、更新バージョンプログラムを取得した場合に、書換用ファームウェア５ａによるプログラム書換え処理を、現行バージョンプログラムの実行処理とは独立して行なうようになっている。
【００３１】
図１において、アプリケーション１’，アプリケーション２’，‥と、識別の番号に「’」を付与したものが更新バージョンプログラム、「’」を付与していないものが現行バージョンプログラムであり、番号の同じアプリケーションは、同一アプリケーションであってバージョンが相違するものであることを意味する。書換用ファームウェアによるリプログラム処理は、同じアプリケーションに対し、更新バージョンプログラムを新たに取得する毎に、副格納エリアを第一メモリ５Ｐと第二メモリ５Ｓとに交互に形成する形で実施される。
【００３２】
第一メモリ５Ｐと第二メモリ５Ｓは、それぞれ機能の異なる複数のアプリケーションのプログラムが格納される。同一アプリケーションに対する主格納エリア２０と副格納エリア２１とは、一方が第一メモリ５Ｐに、他方が第二メモリ５Ｓに形成されている（メモリが異なるのだから、同一アプリケーションに対する主格納エリア２０と副格納エリア２１とは、互いに異なる書換え単位ブロック内に形成されていることは明らかである）。具体的には、書換用ファームウェア５ａは、個々のアプリケーションにプログラム更新が発生する毎に、いずれのメモリ５Ｐ，５Ｓに該アプリケーションの主格納エリア２０及び副格納エリア２１を形成するかを独立に定める。その結果、第一メモリ５Ｐ及び第二メモリ５Ｓには、異なるアプリケーションの主格納エリア２０と副格納エリア２１とが、各アプリケーションの更新回数に応じて混在形成されている。つまり、２つのアプリケーション１及びアプリケーション２とで、副格納エリアが異なるメモリに形成されているのは、両アプリケーション間でバージョンアップ（更新）の回数が異なるからである。
【００３３】
また、書換用ファームウェア５ａは、副格納エリア２１に対し更新バージョンプログラムを、そのバージョンを特定するバージョン情報とともに書き込む。また、副格納エリアに対し、更新バージョンプログラムを正常に書き込み終了するに対応して正常終了ＩＤ（情報）をバージョン情報とともに書き込む。アプリケーション１については、主格納エリア２０内の現行バージョンプログラムについてもバージョン情報と正常終了ＩＤとが書き込まれているが、これは、前回の更新時には、その主格納エリア２０が副格納エリアとして使用されていたためであり、該バージョン情報と正常終了ＩＤとはそのときに書き込まれたものである。一方、アプリケーション２については、副格納エリア２１内の更新バージョンプログラムに対し正常終了ＩＤが付与されていない。これは、通信途絶等の要因によって更新バージョンプログラムの書き込みが失敗したことを意味している。
【００３４】
以下、図１の制御対象機器がカーナビゲーションシステムであり、そのカーナビゲーションシステムの機能制御用アプリケーションをバージョンアップのために更新する場合を例にとり、より詳細に説明するが、本発明はもちろんこれに限定されるものではない。図２において、ＥＣＵ１で使用するアプリケーションの更新バージョンプログラムが、ＥＣＵ１’に接続された無線通信ユニット３１により受信されたとする。この更新バージョンプログラムの受信は種々の形態で行なうことができる。例えば、定期バージョンアップのように、サーバーからの更新バージョンプログラムの配信時刻が決まっており、その時刻に合せて更新バージョンプログラムをＥＣＵ１’が一方的に配信されてくる場合は、その更新バージョンプログラムを無線通信ユニット３１にて自発的に受信すればよい。また、ユーザー側の希望により更新バージョンプログラムをダウンロードして取得する場合は、無線通信ユニット３１からサーバーに更新バージョンプログラムの配信要求を無線送信し、これを受けてサーバーから送られてくる更新バージョンプログラムを無線通信ユニット３１で受ける方式も可能であるし、ユーザーが携帯電話端末から配信要求を無線送信し、その携帯電話端末にて更新バージョンプログラムを受けた後、Blue Toothなどの近距離無線により無線通信ユニット３１へ転送する方式を採用してもよい。いずれの場合も受信した更新バージョンプログラムは、ＥＣＵ１’内の固定記憶部（例えばフラッシュＲＯＭ）内にダウンロードされる。図２において、ＥＣＵ１’はＥＣＵ１にシリアル通信バス３０を介して更新バージョンプログラムの受信を通知する。
【００３５】
図４に示すように、上記リプログラム処理を行なう場合、スケジューラにおける複数のアプリケーションの実行配列に上記のリプログラム処理のタスクが組み込まれる。図５は、そのスケジューラの管理処理に係るフローチャートであり、Ｓ１０１において更新バージョンプログラムの受信通知を受けるとＳ１０２に進み、スケジューラに書換用ファームウェアによるリプログラム処理のタスクを組み入れる。これにより、リプログラム処理は、各アプリケーションのバックグラウンドにて並列に実行されることとなる。
【００３６】
まず、図６は、副格納エリア決定処理の流れを示すものである。まずＳ５１で、更新対象となるアプリケーション名を取得する。Ｓ５２では第一メモリ５Ｐにてそのアプリケーションの格納エリアを検索する。Ｓ５３で対応するアプリケーションの格納エリアが存在した場合、Ｓ５４に進んで、その格納エリアに書き込まれているバージョン情報を読み取る。次に、Ｓ５５では第二メモリ５Ｓにてそのアプリケーションの格納エリアを検索する。Ｓ５６で対応するアプリケーションの格納エリアが存在した場合、Ｓ５７に進んで、その格納エリアに書き込まれているバージョン情報を読み取る。
【００３７】
そして、Ｓ５８では、各メモリから読み取った２つのバージョン情報を比較し、Ｓ５９でどちらが古いバージョンかを判定する。そして、第一メモリ５Ｐ側が古ければ、該第一メモリ５Ｐ側の格納エリアを副格納エリアとして指定し（Ｓ６１）、第二メモリ５Ｓ側が古ければ、該第二メモリ５Ｓ側の格納エリアを副格納エリアとして指定する（Ｓ６２）。つまり、当該アプリケーションの、現行バージョンプログラムに先行するさらに古いバージョンプログラムが格納されている格納エリアを、最新の更新バージョンプログラムを格納するための副格納エリアとして、ここに該更新バージョンプログラムを上書きする処理とするのである。
【００３８】
なお、Ｓ５３及びＳ５４で、第一メモリ５Ｐないし第二メモリ５Ｓにそれぞれ、対応するアプリケーションが格納されていなかった場合、そのアプリケーションは、高々１バージョンしかインストール実績がないものであることを意味するから、該アプリケーションが非格納となっているメモリ側に、更新バージョンプログラムの格納先となる副格納エリアを新たに作成することとなる（Ｓ６２，Ｓ６３）。
【００３９】
次に、図７はリプログラム処理の流れを示すフローチャートである。Ｓ１では、更新バージョンプログラムの受信元となっているＥＣＵ１’に、プログラムデータの送信要求を送る。ＥＣＵ１’はこれを受け、更新バージョンプログラムを一定のブロックに区切ってデータフレームを作成し、シリアル通信バス３０に送出するので、Ｓ２でそのデータブロックを受信する。一本のプログラム全体の送信が完了した場合はＥＣＵ１’からプログラム送信完了通知が送られてくるので、Ｓ３でこれを確認する。
【００４０】
プログラム送信完了通知がなければＳ４に進み、受け取ったデータブロックを図１のＲＡＭ４内に形成されているプログラム書換え用ワークエリア４ａに一旦バッファリングする。そして、そのバッファリングしたデータブロックを、フラッシュＲＯＭの副格納エリア２１に書き込む。Ｓ６で、スケジューラによるリプログラム処理への１周期分の割当時間が経過していなければ、次のデータブロックの受信・書き込みのためＳ１へ戻り、以下の処理を繰り返す。他方、Ｓ６において次周期でタイムオーバーになることが見込まれる場合にはＳ７に進み、更新バージョンプログラムの書き込み処理を途中で終了するため、フラッシュＲＯＭの副格納エリア２１への書き込み中ファイルを一旦クローズする。
【００４１】
そして、図４の下に示すように、スケジューラによるアプリケーション起動サイクルの次の周期にて、再びリプログラム処理のタスクがめぐってくれば、続きのデータブロックの受信・書き込み処理が再開される。スケジューラはタイマー計測により、リプログラム処理のタスクが到来したかどうかを常時把握しており、該タスクの到来時には、他の全てのアプリケーション（制御用ソフトウェア）は動作を休止（起動スタンバイ状態）している。リプログラム処理（プログラム書換え処理）が共通休止作動期間に実行されていること、また、スケジューラが制御用ソフトウェア起動管理手段と共通休止作動期間を特定する共通休止作動期間特定手段の機能を兼ねていることは明らかである。さらに、一度のリプログラム処理のタスクで更新バージョンプログラム全体の受信・書き込みが完了しない場合は、図７のリプログラム処理が、スケジューラによる実行周期が到来するたびに繰り返されるので、プログラム処理が、時系列的に順次到来する複数の共通休止作動期間にまたがる時分割処理にて実行される形になっていることも明らかである。
【００４２】
最初のデータブロックを受信・書き込みする際には、対象となる更新バージョンプログラムのバージョン情報を副格納エリアに書き込む一方、正常終了ＩＤはリセット（消去）しておく。そして、全てのデータブロックの受信・書き込みを完了し、Ｓ３でプログラム送信完了通知を受けた場合はＳ８に進み、正常終了ＩＤを書き込んでリプログラム処理は終了する。スケジューラでは、これに対応してリプログラム処理のタスクを実行周期から削除する処理を行なう。他方、更新バージョンプログラムの受信・書き込みが途中で失敗した場合は、正常終了ＩＤが書き込まれないままとなる。図１の第一メモリ５Ｐには、アプリケーション２の更新バージョンプログラムが副格納エリア２１に書き込まれているが、受信・書き込みが失敗したため、正常終了ＩＤが欠落している。
【００４３】
図８は、リプログラム処理後におけるアプリケーションの起動処理の流れを示すものである。Ｓ１５１で、起動するアプリケーション名を取得する。Ｓ１５２では第一メモリ５Ｐにてそのアプリケーションの格納エリアを検索する。Ｓ１５３で対応するアプリケーションの格納エリアが存在した場合、Ｓ１５４に進んで、その格納エリアに書き込まれているバージョン情報を読み取る。次に、Ｓ１５５では第二メモリ５Ｓにてそのアプリケーションの格納エリアを検索する。Ｓ１５６で対応するアプリケーションの格納エリアが存在した場合、Ｓ１５７に進んで、その格納エリアに書き込まれているバージョン情報を読み取る。
【００４４】
そして、Ｓ１５８では、各メモリから読み取った２つのバージョン情報を比較し、Ｓ１５９でどちらが古いバージョンかを判定する。そして、第一メモリ５Ｐ側が新しければＳ１６０に進み、該第一メモリ５Ｐ側の格納エリアに正常終了ＩＤがあるかどうかを判定する。他方、第二メモリ５Ｓ側が新しければＳ１６２に進み、該第二メモリ５Ｓ側の格納エリアに正常終了ＩＤがあるかどうかを判定する。いずれの場合も、正常終了ＩＤがあれば、新バージョンの格納されているメモリ側からアプリケーションを起動し（Ｓ１６０→Ｓ１６１又はＳ１６２→Ｓ１６３）、正常終了ＩＤがない場合は、旧バージョンの格納されているメモリ側からアプリケーションを起動する（Ｓ１６０→Ｓ１６３又はＳ１６２→Ｓ１６１）。アプリケーションの起動先と指定されるのは、上記の副格納エリアであることは明らかであり、起動先として指定された瞬間から、更新バージョンプログラムは現行バージョンプログラムとして認知され、それまで副格納エリアであったものが主格納エリアに昇格し、他方主格納エリアであったものは副格納エリアに格下げされることとなる（次のプログラム更新処理時には、この関係は再び逆転する）。
【００４５】
一方、Ｓ１５３及びＳ１５６で、第一メモリ５Ｐないし第二メモリ５Ｓにそれぞれ、対応するアプリケーションが格納されていなかった場合、そのアプリケーションは、他方のメモリ側に１バージョンしかインストールされていないことを意味するから、各々そのメモリの側からアプリケーションを立ち上げることとなる（Ｓ１６７，Ｓ１７０）。いずれの場合も、その唯一インストールされているアプリケーションバージョンについて、正常終了ＩＤが存在しているかどうかを確認した後（Ｓ１６６，Ｓ１６９）、アプリケーションの立ち上げ処理に移行するようにしている。
【００４６】
上記のリプログラム処理は、複数のアプリケーションの実行周期にタスクを組み入れる形で行っていたが、この方式では、アプリケーションが動作中の場合でも、スケジューラによりリプログラム処理に対して強制的にタイムシェアリングがなされるので、アプリケーションの動作を圧迫する可能性もある。そこで、リプログラム処理を、複数のアプリケーションの全てに対して外部からの動作要求が存在しない期間、すなわち、本来であればＣＰＵがスリープ状態に移行してもよい期間を狙って実行するようにすれば、こうした不安を解消することができる（この場合、共通休止作動期間はアプリケーションの全てに対して外部からの動作要求が存在しない該期間として特定されることとなる）。
【００４７】
本実施形態では、スリープモードが、通常モードから時系列的に直接移行可能な第一レベルスリープモードと、該第一レベルスリープモードが所定時間継続した場合に移行可能なスリープモードであって、該第一レベルスリープモードよりもさらに消費電力が小さい第二レベルスリープモードとを有する場合を例にとる。この場合、図１のスリープ管理ソフトウェア（スリープ制御手段）５ｃは、更新バージョンプログラムの取得の如何によらず、共通休止作動期間において第一レベルスリープモードによるスリープ設定を行い、かつ、更新バージョンプログラムが取得されている場合には、第二レベルスリープモードへの移行に代えてプログラム書換え処理を立ち上げるようにする。例えば、長期間の駐車時など、個々のアプリケーションの起動要求が極度に減少する期間においては、上記のように第二レベルスリープモードが設定されることが多く（当業者は第二レベルスリープモードに入ることを「深い眠りに入る」等とも称している）、これを狙ってプログラム書換え処理を行なえば、アプリケーションの実働処理とのバッティングがほとんど起こらず、また、サイズの大きいプログラムを一括して書き換えることも可能となる。例えば、図１においてスリープ管理ソフトウェア５ｃ及びスリープ制御回路７（スリープ制御手段）は、複数のアプリケーションのいずれに対しても外部からの作動要求がない場合にＣＰＵ３をスリープモードへ移行させ、その後、一定のスリープ期間と、外部からの作動要求の有無を確認するために一定期間通常モードへウェイクアップさせるウェイクアップ期間とからなるスリープ／ウェイクアップ周期を繰り返す機能（ウェイクアップ制御手段）を有するものとして構成できる。この場合、図９に示すように、第二レベルスリープモードは、該スリープ／ウェイクアップ周期におけるスリープ期間の長さが、第一レベルスリープモードよりも長く設定される。
【００４８】
図１０は、この場合のスリープ管理処理の具体例を示す。この処理は、スリープ期間中であっても、周期的に到来する内部ウェイクアップ期間を利用して実施可能である。まず、図１のＲＡＭ４内には図示しないスリープフラグが形成されており、そのスリープフラグの設定状態により、現在設定されているのが第一レベルスリープモードであるか第二レベルスリープモードであるかを識別できる。図１０のＳ２０１では、このスリープフラグをリードし、Ｓ２０２及びＳ２０３で、設定されているのがいずれのレベルのスリープモードであるかを判定する。まず、外部からの起動指令によりウェイクアップした直後などでのタイミングでは、スリープ設定自体が行われておらず、Ｓ２０３からＳ２０８に進み、全てのアプリケーションからのスリープ要求があるかどうかを確認する。スリープ要求があればＳ２０９で第一レベルスリープモードの設定（第一レベルスリープモードに対応したスリープ時間を、スリープ制御回路７内のスリープタイマーにセットする）を行い、Ｓ２１０でスリープフラグを対応する状態とし、さらに、Ｓ２１１でスリープタイマーを起動する。
【００４９】
一方、Ｓ２０２でスリープフラグが第一レベルスリープ設定を示している場合はＳ２０４に進み、スリープタイマーをリードする。そして、Ｓ２０５で第二レベルスリープモードへ移行するための規定時間を超えていればＳ２０６へ進み、第二レベルスリープ設定を行い、Ｓ２０７でスリープフラグを対応する内容に書き換える。また、Ｓ２０２でスリープフラグが第一レベルスリープ設定となっていない場合はＳ２０３に進み、第二レベルスリープ設定となっていれば処理サイクルを終了する。
【００５０】
図１１は、この場合のリプログラム処理の流れを示すものであり、Ｓ０においてスリープフラグをリードし、第二レベルスリープ設定になっていれば、図7と同じＳ７以下のリプログラム処理を実行する（この場合、第二レベルスリープ設定でのウェイクアップ時に処理が実行されることとなる）。Ｓ６’で、外部からのウェイクアップ指令があるかどうかを確認し、ウェイクアップ指令がなければＳ１に戻ってリプログラム処理を継続する。他方、ウェイクアップ指令を受けた場合は、この処理を優先するためにＳ７に進んで一旦クローズ処理とする。リプログラム処理が再開するのは、次に再び第二レベルスリープが設定されるときである。
【００５１】
一方、バスに対する接続切替えによって、不揮発性メモリの同じアドレス空間を第一メモリ５Ｐと第二メモリ５Ｓとの間で共用化する形で使用してもよい。この場合、副格納エリア側のメモリをバスに接続し、更新バージョンプログラムの書き込み処理を行なう。この場合、図１２に示すように、独立したメモリチップとして構成されたフラッシュＲＯＭ（不揮発性メモリ）を設け、各々第一メモリ５Ｐ及び第二メモリ５Ｓとして個別に機能させるとともに、スイッチ９によりどちらか一方を選択的にバスに接続するようにする。書き込み処理が正常に完了すれば、バスに接続されているメモリの更新バージョンプログラムをそのまま新しい現行バージョンプログラムとして実行に供すればよい（結果として、副格納エリアは主格納エリアに切り替えられたこととなる）。このとき、それまで主格納エリア側として機能していたメモリはバスから切り離されたままだからＣＰＵ３からは見えなくなり、更新処理が成功しているにも拘わらず当該メモリ内の古いバージョンのプログラムが実行されることは、ハードウェア的にありえない。他方、書き込み処理が正常に完了しなかった場合（あるいは、時分割処理などで途中終了した場合）は、バスに接続されているメモリを主格納エリア側のものに切替え、更新前の現行バージョンプログラムを実行に供すればよい（つまり、前の主格納エリアがそのまま使用され、切替えは行われない）。このとき、副格納エリア側として機能していたメモリはバスから切り離され、書き込みに失敗した不完全な更新バージョンプログラムが実行されることは、ハードウェア的にありえない。この方式によれば、前述のバージョン情報や正常終了情報の書き込みは必ずしも必須ではなくなる。
【００５２】
ただし、上記の方式では、第一メモリ５Ｐと第二メモリ５Ｓのうち、バス接続されるものについては、格納されているプログラムが全て現行バージョンプログラムとなる必要がある（つまり、形成されている格納エリアが全て主格納エリアとなる）。この場合、第一メモリ５Ｐと第二メモリ５Ｓとの一方において、あるアプリケーションの更新バージョンプログラムを書き込んだ場合、残余のアプリケーションとともに、そのメモリの記憶内容を他方のメモリに丸ごとコピーする処理が必要となる。これにより、次の更新に伴うメモリ切替え時に、当該切替えによって主格納エリア側となるメモリに、非更新のアプリケーションについては、その最新のバージョンを保存することができる。
【００５３】
なお、図１２において、プラットフォーム５ｂ、書換用ファームウェア５ａ及びスリープ管理ソフトウェア５ｃとは、別のＲＯＭ５Ｂに格納されている。このＲＯＭ５ＢはマスクＲＯＭとして構成しても、フラッシュＲＯＭで構成してもいずれでもよい。
【００５４】
図１３は、この場合のリプログラム処理の一例を示すものである。メモリ切替え後のメモリコピー処理にある程度の時間を要するので、図１１と同様にスリープ時を利用したリプログラム処理となっている。先頭のＳ５００では、スリープフラグの設定内容をリードし、第二レベルスリープ設定がなされているかどうかを確認する。Ｓ５０５では、更新バージョンプログラムの受信が完了したかどうかを確認している。受信完了していなければ、図７と同様のＳ１〜Ｓ７の処理を行なう。ここで、Ｓ５において、プログラム送信完了通知を受け取っていればＳ５０１に進み、副格納エリア側として使用していたメモリの内容を、主格納エリア側として使用していたメモリにコピーする（メモリコピー処理）。このコピー処理は、副格納エリア側メモリをバスに接続→ＲＡＭ４へ内容コピー→主格納エリア側メモリをバスに接続→ＲＡＭ４の内容を主格納エリア側メモリに書き込み、の手順を繰り返すことで実行可能である
【００５５】
なお、途中で外部からウェイクアップ信号が割り込んだ場合はＳ７に進み、一旦クローズ処理とする。そして、再び第二レベルスリープ設定が確認できれば（Ｓ５００）、今度は「受信完了」なのでＳ５０５からＳ５０６へ進む。そして、メモリ切替えがまだであればＳ５０１へ進み、メモリコピー処理の続きを行なう。Ｓ５０３でコピー完了が確認できれば、Ｓ５０４へ進み、スイッチ９（図１２）に切替信号を出し、副格納エリア側として使用していたメモリをバスに接続する一方、主格納エリア側として使用していたメモリをバスから切り離すメモリ切替え処理を行なう。なお、リプログラミング処理が完了し、次の更新バージョンプログラムも受信していない場合は、Ｓ５０５→Ｓ５０６→リターンとなって、リプログラムに係る処理は実質的に何も行われない。
【図面の簡単な説明】
【００５６】
【図１】本発明の自動車用制御ユニットとして構成されたＥＣＵの第一例を示すブロック図。
【図２】複数のＥＣＵが接続された車内ネットワークの概念説明図。
【図３】スケジューラの概念図。
【図４】リプログラム処理をスケジューラに組み入れて実行する概念を示す図。
【図５】スケジューラ管理処理の一例を示すフローチャート。
【図６】副格納エリア決定処理の一例を示すフローチャート。
【図７】リプログラム処理の第一例を示すフローチャート。
【図８】アプリケーション起動処理の一例を示すフローチャート。
【図９】複数段階にスリープ設定を行なう一例を示すタイミングチャート。
【図１０】スリープ管理処理の一例を示すフローチャート。
【図１１】リプログラム処理の第二例を示すフローチャート。
【図１２】本発明の自動車用制御ユニットとして構成されたＥＣＵの第二例を示すブロック図。
【図１３】リプログラム処理の第三例を示すフローチャート。
【符号の説明】
【００５７】
１  ＥＣＵ（自動車用制御ユニット）
３  ＣＰＵ
４  ＲＡＭ
５  フラッシュＲＯＭ（不揮発性メモリ）
５ａ  書換用ファームウェア
５Ｐ  第一メモリ
５Ｓ  第二メモリ
２０  主格納エリア
２１  副格納エリア
【図１】
2006301960.tif 000003
【図２】
2006301960.tif 000004
【図３】
2006301960.tif 000005
【図４】
2006301960.tif 000006
【図５】
2006301960.tif 000007
【図６】
2006301960.tif 000008
【図７】
2006301960.tif 000009
【図８】
2006301960.tif 000010
【図９】
2006301960.tif 000011
【図１０】
2006301960.tif 000012
【図１１】
2006301960.tif 000013
【図１２】
2006301960.tif 000014
【図１３】
2006301960.tif 000015