(57)【特許請求の範囲】
【請求項１】
被制御対象を制御する制御装置（２００）と、前記制御装置と通信可能に接続される書換装置（３００）と、を備える書換システムであって、
前記制御装置は、
プログラム（２４６）が格納された不揮発性メモリ（２４２）を有する記憶部（２４０）と、
前記プログラムを書き換えるプログラム書換部（Ｓ５０）と、
を有し、
前記不揮発性メモリは、大ブロック単位で記憶内容を電気的に消去可能であるとともに、前記大ブロックを分割してなる小ブロック単位で記憶内容を電気的に書き込み可能であり、
前記プログラム書換部は、前記不揮発性メモリの記憶内容を前記大ブロック単位で電気的に消去するとともに前記小ブロック単位で電気的に書き込みすることで前記プログラムを書き換え、前記小ブロックに前記プログラムを書き込む度に前記書換装置へ書込完了通知を送信し、
前記書換装置は、前記プログラムを書き換えるものであって、
前記プログラムの書き込みが完了した前記小ブロックのアドレスを示す書込完了アドレスを前記書込完了通知を受信する度に更新する更新部（Ｓ２２）と、
前記プログラムの書き換えが途中で失敗したか否かを判定する失敗判定部（Ｓ２０）と、
前記失敗判定部により前記プログラムの書き換えが途中で失敗したと判定された場合、前記書込完了アドレスに基づき、書き込みが失敗した前記小ブロックのアドレスを、前記プログラムの書き換えを再開させる前記小ブロックのアドレスである開始アドレスに設定するアドレス設定部（Ｓ３０）と、
前記プログラムを書き換えるための書換データと、前記開始アドレスと、を前記制御装置に送信するデータ送信部（Ｓ１４，Ｓ１８）と、
を有し、
前記プログラムの書き換えが失敗した後に再開すると、前記プログラム書換部は、
前記開始アドレスを含む前記大ブロックのうちの書き換えが完了している前記小ブロックの記憶内容を、前記記憶部に退避し、
前記開始アドレスを含む前記大ブロックの記憶内容を消去し、記憶内容を消去した前記大ブロックに対して、前記記憶部に退避した記憶内容を書き込む書換システム。
【請求項２】
前記プログラム書換部は、前記記憶部に退避した記憶内容を前記小ブロックに書き込む度に前記書換装置へ前記書込完了通知を送信する請求項１に記載の書換システム。
【請求項３】
前記失敗判定部は、前記プログラムの書き換えが失敗した回数であるエラー回数を判定し、
前記アドレス設定部は、
前記失敗判定部により前記エラー回数が１回と判定された場合、書き込みが失敗した前記小ブロックのアドレスを前記開始アドレスに設定し、
前記失敗判定部により前記エラー回数が２回以上と判定された場合、書き込みが失敗した前記小ブロックを含む前記大ブロックの先頭アドレスを前記開始アドレスに設定する請求項１に記載の書換システム。
【請求項４】
前記プログラム書換部は、前記プログラムの書き換えにおいて、前記大ブロックの書き換えが完了する度に前記書換装置へ大ブロック通知を送信し、
前記アドレス設定部は、前記エラー回数が２回以上の場合、前記大ブロック通知及び前記書込完了通知に基づき、書き換えが失敗した前記小ブロックを含む前記大ブロックの先頭アドレスを前記開始アドレスに設定する請求項３に記載の書換システム。
【請求項５】
前記大ブロックのアドレスが予め記憶された記憶装置（３３０）をさらに備え、
前記アドレス設定部は、前記エラー回数が２回以上の場合、前記書込完了通知及び前記記憶装置に記憶された前記大ブロックのアドレスに基づき、書き換えが失敗した前記小ブロックを含む前記大ブロックの先頭アドレスを前記開始アドレスに設定する請求項３に記載の書換システム。
【請求項６】
前記プログラムの書き換えが失敗した後に再開すると、前記プログラム書換部は、前記開始アドレスを含む前記大ブロックのうちの書き換えが完了している前記小ブロックの記憶内容を、前記不揮発性メモリに退避する請求項１〜５のいずれか１項に記載の書換システム。
【請求項７】
前記制御装置は、前記プログラムの書き換えが失敗して再開すると、前記プログラムの書き換えが失敗する前に前記不揮発性メモリへ退避した記憶内容について、前記大ブロックへの書き込みが完了したか否かを判定する書込判定部（Ｓ６０）をさらに備え、
前記プログラムの書き換えが失敗した後に再開すると、前記プログラム書換部は、
前記書込判定部により、退避した記憶内容の書き込みが完了していないと判定された場合、
前記開始アドレスを含む前記大ブロックの記憶内容を消去し、前記プログラムの書き込みが失敗する前に退避した前記不揮発性メモリの記憶内容を、記憶内容を消去した前記大ブロックに対して書き込み、
前記書込判定部により、退避した記憶内容の書き込みが完了したと判定された場合、
前記開始アドレスを含む前記大ブロックのうちの書き換えが完了している前記小ブロックの記憶内容を前記不揮発性メモリに退避するとともに、前記開始アドレスを含む前記大ブロックの記憶内容を消去し、前記プログラムの書き換えが再開した後に前記不揮発性メモリへ退避した記憶内容を、記憶内容を消去した前記大ブロックに対して書き込む請求項６に記載の書換システム。
【請求項８】
前記記憶部は、電気的に記憶内容が書き換え可能な揮発性メモリ（２４４）を有し、
前記プログラムの書き換えが失敗した後に再開すると、前記プログラム書換部は、前記開始アドレスを含む前記大ブロックのうちの書き換えが完了している前記小ブロックの記憶内容を、前記揮発性メモリに退避する請求項１〜５のいずれか１項に記載の書換システム。
【請求項９】
前記失敗判定部は、前記データ送信部が前記書換データを送信したにも関わらず、前記書込完了通知を受信していない場合に、前記プログラムの書き換えが失敗したと判定する請求項１〜８のいずれか１項に記載の書換システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この明細書における発明は、被制御対象を制御する制御装置と、制御装置と通信可能に接続される書換装置と、を備える書換システムに関する。
【背景技術】
【０００２】
従来、特許文献１に記載のように、プログラム書換ツール（書換装置）と通信可能に接続されるＥＣＵ（制御装置）が知られている。ＥＣＵは、フラッシュＲＯＭ（不揮発性メモリ）とＣＰＵとを有している。フラッシュＲＯＭには、制御対象器（被制御対象）を制御するためのアプリケーションと、アプリケーションの内容を書き換えるためのファームウェアと、が格納されている。フラッシュＲＯＭの記憶領域は、複数のブロックに分割されている。書き換え対象であるアプリケーションは、複数のブロックに格納されている。プログラム書換ツールは、アプリケーションを書き換えるためのデータをＥＣＵに送信する。
【０００３】
アプリケーションを格納する各ブロックには、書換処理の進行状況を管理するための識別ＩＤが設けられている。各ブロックの識別ＩＤは、ブロックの記憶内容が書き換えられていない場合に書換中を示す値に設定され、記憶内容が書き換えられた場合に書き換え正常完了を示す値に設定される。そのため、ＥＣＵの電源遮断、通信途絶等によって書換処理が途中で中断した場合であっても、ＥＣＵは中断したブロックを識別ＩＤによって特定することができる。
【０００４】
中断したブロックを特定することで、ＥＣＵは、書換処理が途中で中断した場合に、書き換えが完了したブロックを再度書き換えることなく、書き換えていないブロックのみを書き換えることができる。したがって、書換処理が途中で中断して再開する場合に、アプリケーションを格納する全てのブロックを書き換える構成に較べて、書き換える時間を短くすることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２９８２６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記構成では、各ブロックに識別ＩＤを設ける必要があり、フラッシュＲＯＭにおいて識別ＩＤ分の容量を確保しなければならない。よって、フラッシュＲＯＭの記憶容量が増大する虞がある。
【０００７】
ところで一般的に、フラッシュＲＯＭでは、記憶内容を書き込み可能な最小の単位と、消去可能な最小の単位と、が互いに異なる。以下、書き込み可能な最小の単位を小ブロック、消去可能な最小の単位を大ブロックと示す。大ブロックは、複数の小ブロックを含んで構成される。書換処理が途中で失敗して再開した場合、大ブロックの記憶内容を消去した後でなければ、この大ブロックを構成する小ブロックに書き込むことができない。
【０００８】
上記構成では、大ブロックの途中まで書き換えていたときに書換処理が中断した場合、書き込みを再開するために、書き込みが失敗した大ブロックの記憶内容を消去する必要がある。これによれば、既に書き込みが完了した小ブロックも再度書き換える必要がある。よって、書換処理に掛かる時間が長くなる虞がある。
【０００９】
本発明はこのような課題に鑑みてなされたものであり、不揮発性メモリの記憶容量が増大するのを抑制しつつ、プログラムを書き換える時間が長くなるのを抑制する書換システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本開示は、上記目的を達成するために以下の技術的手段を採用する。なお、括弧内の符号は、ひとつの態様として下記の実施形態における具体的手段との対応関係を示すものであって、技術的範囲を限定するものではない。
【００１１】
本発明のひとつは、被制御対象を制御する制御装置（２００）と、制御装置と通信可能に接続される書換装置（３００）と、を備える書換システムであって、
制御装置は、
プログラム（２４６）が格納された不揮発性メモリ（２４２）を有する記憶部（２４０）と、
プログラムを書き換えるプログラム書換部（Ｓ５０）と、
を有し、
不揮発性メモリは、大ブロック単位で記憶内容を電気的に消去可能であるとともに、大ブロックを分割してなる小ブロック単位で記憶内容を電気的に書き込み可能であり、
プログラム書換部は、不揮発性メモリの記憶内容を大ブロック単位で電気的に消去するとともに小ブロック単位で電気的に書き込みすることでプログラムを書き換え、小ブロックにプログラムを書き込む度に書換装置へ書込完了通知を送信し、
書換装置は、プログラムを書き換えるものであって、
プログラムの書き込みが完了した小ブロックのアドレスを示す書込完了アドレスを書込完了通知を受信する度に更新する更新部（Ｓ２２）と、
プログラムの書き換えが途中で失敗したか否かを判定する失敗判定部（Ｓ２０）と、
失敗判定部によりプログラムの書き換えが途中で失敗したと判定された場合、書込完了アドレスに基づき、書き込みが失敗した小ブロックのアドレスを、プログラムの書き換えを再開させる小ブロックのアドレスである開始アドレスに設定するアドレス設定部（Ｓ３０）と、
プログラムを書き換えるための書換データと、開始アドレスと、を制御装置に送信するデータ送信部（Ｓ１４，Ｓ１８）と、
を有し、
プログラムの書き換えが失敗した後に再開すると、プログラム書換部は、
開始アドレスを含む大ブロックのうちの書き換えが完了している小ブロックの記憶内容を、記憶部に退避し、
開始アドレスを含む大ブロックの記憶内容を消去し、記憶内容を消去した大ブロックに対して、記憶部に退避した記憶内容を書き込む。
【００１２】
上記構成において、アドレス設定部は、書換装置からの書込完了通知に応じて、開始アドレスを設定している。これによれば、識別ＩＤを設けることなく書き換えが失敗した小ブロックを特定することができる。したがって、不揮発性メモリの記憶容量が増大するのを抑制することができる。
【００１３】
また、上記構成において、プログラム書換部は、書き換えが失敗した場合、書き換えが完了している小ブロックの記憶内容を制御装置の記憶部に退避し、退避した記憶内容を大ブロックに再度書き込んでいる。これによれば、書換処理が失敗して再開する場合に、書換装置から書換データが再度送信され、この書換データに応じてプログラム書換部が書き込みを行う構成に較べて、プログラムを書き換える時間が短い。すなわち、プログラムを書き換える時間が長くなるのを抑制することができる。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態に係る書換システムの概略構成を示すブロック図である。
【図２】書換装置における書換処理の処理手順を示すフローチャートである。
【図３】ＥＣＵにおける書換処理の処理手順を示すフローチャートである。
【図４】受信書込処理の処理手順を示すフローチャートである。
【図５】退避書込処理の手順を示すフローチャートである。
【図６】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図７】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図８】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図９】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１０】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１１】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１２】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１３】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１４】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１５】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１６】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図１７】第２実施形態に係る書換システムにおいて、ＥＣＵにおける書換処理の処理手順を示すフローチャートである。
【図１８】退避書込処理の手順を示すフローチャートである。
【図１９】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図２０】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図２１】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【図２２】第３実施形態に係る書換システムにおいて、受信書込処理の処理手順を示すフローチャートである。
【図２３】書換装置における書換処理の処理手順を示すフローチャートである。
【図２４】書換処理を説明するための図であって、フラッシュＲＯＭ及びＲＡＭの記憶内容を示す図である。
【図２５】書換処理を説明するための図であって、フラッシュＲＯＭの記憶内容を示す図である。
【発明を実施するための形態】
【００１５】
図面を参照して説明する。なお、複数の実施形態において、共通乃至関連する要素には同一の符号を付与するものとする。
【００１６】
（第１実施形態）
先ず、図１に基づき、書換システム１００の概略構成について説明する。
【００１７】
書換システム１００は、ＥＣＵ２００と書換装置３００とを備えて構成されている。なお、ＥＣＵは、Electronic Control Unitの略称である。書換システム１００は、ＥＣＵ２００に記憶されているプログラムを、書換装置３００によって書換データに書き換えるものである。例えばＥＣＵ２００の工場出荷時や、工場出荷後にディーラーなどで、書換装置３００によって、ＥＣＵ２００に記憶されているプログラムが書き換えられる。
【００１８】
なお、書き換えるプログラムは、ＥＣＵ２００が各種制御を実行するためのアプリケーション２４６である。アプリケーション２４６は、特許請求の範囲に記載のプログラムに相当する。アプリケーション２４６は、製品ソフト、制御用ソフトウェアと言い換えることもできる。また、プログラムの書き換えは、リプログラミングと言い換えることができる。さらに、リプログラミングはリプロと省略することができる。書換データは、ＥＣＵ２００に既に記憶されているアプリケーション２４６にかわって、新たに書き換えられるアプリケーション２４６のデータである。以下、書換システム１００においてアプリケーション２４６を書き換える処理を書換処理と示す。
【００１９】
本実施形態では、ＥＣＵ２００が車両に配置されている。すなわち、ＥＣＵ２００は、車両用のＥＣＵである。ＥＣＵ２００としては、例えば、メータＥＣＵ、エンジンＥＣＵ、ＨＶＥＣＵ、ブレーキＥＣＵ、電源制御ＥＣＵ、トランスミッションＥＣＵ、エアコンＥＣＵを採用することができる。また、ＥＣＵ２００として、ゲートウェイＥＣＵ、ボディＥＣＵ、ナビ制御用ＥＣＵ、電動パワステＥＣＵ、照合ＥＣＵ、前照灯ＥＣＵ、カメラＥＣＵ、障害物検知用ＥＣＵを採用することもできる。ＥＣＵ２００は、特許請求の範囲に記載の制御装置に相当する。
【００２０】
車両には、ＥＣＵ２００の他に、通信バス４００、ＥＣＵ２００と異なるＥＣＵ４１０、コネクタ４２０、図示しないバッテリが設けられている。図１において一点鎖線に囲まれた範囲が、車両に設けられた範囲を示している。ＥＣＵ２００は、通信バス４００を介して、ＥＣＵ４１０及びコネクタ４２０と電気的に接続されている。通信バス４００を介した通信としては、例えば、ＣＡＮ通信、シリアル通信を採用できる。ＣＡＮは登録商標である。コネクタ４２０は、ＥＣＵ２００と書換装置３００とを電気的に中継するものである。ＥＣＵ２００は、バッテリから電源が入力されている。
【００２１】
ＥＣＵ２００は、ＣＰＵ２１０、通信Ｉ／Ｆ２２０、バッファ２３０、記憶部２４０、Ｉ／Ｏ２５０を有している。なお、ＣＰＵは、Central Processing Unitの略称である。ＥＣＵ２００では、通信バスを介して、ＥＣＵ２００の構成要素同士が電気的に接続されている。ＥＣＵ２００は、例えば、マイコン及びＩＣによって構成されている。
【００２２】
ＣＰＵ２１０は、フラッシュＲＯＭ２４２に格納されたプログラムを実行するものである。ＣＰＵ２１０は、通信Ｉ／Ｆ２２０、通信バス４００、及び、コネクタ４２０を介して、書換装置３００と通信を行う。バッファ２３０は、ＥＣＵ２００がＥＣＵ４１０又は書換装置３００と通信する際、一時的にデータを格納する記憶領域である。ＣＰＵ２１０は、フラッシュＲＯＭ２４２に格納されたプログラムの実行により取得した信号、及び、書換装置３００からの信号に応じて、信号処理を行う。この信号処理には、書換処理が含まれている。ＣＰＵ２１０は、信号処理で得た信号をＥＣＵ４１０又は書換装置３００に送信する。
【００２３】
ＥＣＵ２００は、書換装置３００から下記の書換要求信号を受信した場合、書換処理を開始する。ＥＣＵ２００は、書換処理を開始すると、ＡＣＫ信号を書換装置３００へ送信する。なお、ＡＣＫはAcknowledgementの略称である。ＡＣＫ信号は、ＥＣＵ２００が書換要求信号を受信したか否かを書換装置３００が判定するための信号である。言い換えると、ＡＣＫ信号は、ＥＣＵ２００が通信可能か否かを書換装置３００が判定するための信号である。
【００２４】
記憶部２４０は、フラッシュＲＯＭ２４２とＲＡＭ２４４とを有している。すなわち、記憶部２４０は、複数の半導体メモリを有している。なお、ＲＯＭは、Read Only Memoryの略称である。ＲＡＭは、Random Access Memoryの略称である。記憶部２４０は、非遷移的実体的記録媒体と言い換えることもできる。
【００２５】
フラッシュＲＯＭ２４２は、書き換え対象であるアプリケーション２４６を格納する記憶装置である。フラッシュＲＯＭ２４２は、特許請求の範囲に記載の不揮発性メモリに相当する。フラッシュＲＯＭ２４２は、フラッシュメモリと称することもできる。フラッシュＲＯＭ２４２の記憶領域では１バイト毎に１つのアドレスが割り当てられている。
【００２６】
フラッシュＲＯＭ２４２は、記憶内容が電気的に書き換え可能に構成されている。フラッシュＲＯＭ２４２の記憶領域は、複数の大ブロックを含んで構成されている。なお、フラッシュＲＯＭ２４２の記憶領域は、１つの大ブロックで構成されていてもよい。
【００２７】
アプリケーション２４６は、複数の大ブロックに格納されている。なお、アプリケーション２４６は、１つの大ブロックに格納されていてもよい。大ブロックは、フラッシュＲＯＭ２４２において記憶内容を電気的に消去可能な最小単位である。言い換えると、フラッシュＲＯＭ２４２は、大ブロック単位で記憶内容を電気的に消去可能に構成されている。大ブロックは、セクタ、単にブロックと称することもできる。大ブロックの容量は、例えば４ｋバイトとされている。
【００２８】
大ブロックは、複数の小ブロックを含んで構成されている。すなわち、大ブロックは複数の小ブロックに分割されてなる。小ブロックは、フラッシュＲＯＭ２４２において記憶内容を電気的に書き込み可能な最小単位である。言い換えると、フラッシュＲＯＭ２４２は、小ブロック単位で記憶内容を書き込み可能に構成されている。小ブロックは、ワード、ページと称することもできる。小ブロックには、複数のアドレスが割り当てられている。なお、小ブロックには、少なくとも１つのアドレスが割り当てられていればよい。小ブロックの容量は、例えば１２８バイトとされている。
【００２９】
本実施形態において、フラッシュＲＯＭ２４２にはファームウェア２４８も格納されている。ファームウェア２４８は、アプリケーション２４６を書き換えるためのプログラムを含んでいる。ＥＣＵ２００では、ＣＰＵ２１０がファームウェア２４８を実行することにより、アプリケーション２４６が書き換えられる（プログラム書換部）。ＣＰＵ２１０がファームウェア２４８を実行することによってアプリケーション２４６を書き換えることを、ファームウェア２４８がアプリケーション２４６を書き換える、と言い換えることもできる。
【００３０】
フラッシュＲＯＭ２４２では、書換データを書き換える際、先ず、書き換える対象の大ブロックの記憶内容を消去する必要がある。ＥＣＵ２００は、大ブロックの記憶内容を消去した後、アドレスの番号が小さい小ブロックから順に書換データを書き込んでいく。
【００３１】
書換処理の実行中にＥＣＵ２００の電源が遮断された場合や、ＥＣＵ２００と書換装置３００との通信が途中で途絶えた場合には、書換処理が途中で失敗する。書換処理において書換データをフラッシュＲＯＭ２４２に書き込んでいるときに上記通信途絶等が発生すると、通信途絶等が発生した時点で書き込んでいた小ブロックに、不完全なデータが格納される虞がある。書換システム１００では、書換処理が途中で失敗すると、作業者の操作又は自動で、ＥＣＵ２００及び書換装置３００が書換処理を再開する。
【００３２】
ＥＣＵ２００は、小ブロックに書換データを書き込む度に、書換装置３００へ書込完了通知を送信する。書込完了通知は、ＥＣＵ２００による小ブロックの書き込みが完了したことを書換装置３００へ通知するための信号である。書込完了通知は、書込処理が途中で失敗して書込処理を再開する場合、どの小ブロックで書込処理が失敗したかを書換装置３００が識別するために設けられている。本実施形態において書込完了通知は、書き込みが完了した小ブロックのアドレスを含んでいる。例えば、書込完了通知は、書き込みが完了した小ブロックの末尾アドレスを含んでいる。
【００３３】
本実施形態において、小ブロック及び大ブロックでは、先頭アドレスから末尾アドレスまで番号が順に大きくなるようにアドレスの番号が割り当てられている。末尾アドレスとは、小ブロックや大ブロック等の記憶領域において最も大きい番号が割り当てられたアドレスである。末尾アドレスは、終了アドレスと称することもできる。また、小ブロックや大ブロック等の記憶領域において最も小さい番号が割り当てられたアドレスが先頭アドレスである。
【００３４】
ＲＡＭ２４４は、書換処理における作業用のメモリである。書換処理においてＲＡＭ２４４には、書換データや、下記の開始アドレス等が一時的に格納される。ＲＡＭ２４４は、特許請求の範囲に記載の揮発性メモリに相当する。
【００３５】
本実施形態では、退避フラグが、記憶部２４０のＲＡＭ２４４に格納されている。退避フラグとは、書換処理が失敗して再開する場合においてアプリケーション２４６に格納された記憶領域を記憶部２４０に退避したか否かを決定するためのフラグである。以下、記憶部２４０に退避したデータを退避データと示す。なお、退避フラグがフラッシュＲＯＭ２４２に格納された例を採用することもできる。
【００３６】
退避フラグは、オンの場合に、記憶部２４０に退避データが格納されていることを示す。退避フラグをオンにすることは、退避フラグを立てる、と言い換えることもできる。退避フラグは、オフの場合に、記憶部２４０に退避データが格納されていないことを示す。退避フラグをオフにすることは、退避フラグを倒す、と言い換えることもできる。Ｉ／Ｏ２５０は、スイッチやセンサ等からの信号が入力されるとともに、被制御対象へ制御信号を出力するものである。
【００３７】
本実施形態において、書換装置３００は、ＣＰＵ３１０及び通信Ｉ／Ｆ３２０を有している。書換装置３００は、書換ツールと称することもできる。書換装置３００は、ディーラ等の作業者によって操作される。なお、作業者は、ユーザと称することもできる。
【００３８】
ＣＰＵ３１０は、通信Ｉ／Ｆ３２０を介してＥＣＵ２００と通信可能に設けられている。本実施形態では、書換装置３００がさらにメモリ３３０を有している。通信バスを介して、書換装置３００の構成要素同士が電気的に接続されている。メモリ３３０は、特許請求の範囲に記載の記憶装置に相当する。
【００３９】
メモリ３３０には、書換データが格納されている。書換装置３００は、書換データをＥＣＵ２００に送信する（データ送信部）。また書換装置３００は、書換要求信号をＥＣＵ２００へ送信する。書換要求信号は、ＥＣＵ２００が書換処理を開始するための信号である。また、書換要求信号は、フラッシュＲＯＭ２４２において書換データが書き込まれるアドレスをＥＣＵ２００が特定するための情報を含んでいる。以下、この情報をアドレス特定情報と示す。
【００４０】
本実施形態において書換要求信号は、アドレス特定情報として、下記の開始アドレス、及び、書換データのデータサイズの情報を含んでいる。すなわち、書換装置３００は、開始アドレスをＥＣＵ２００へ送信する（データ送信部）。なお、書換要求信号は、アドレス特定情報として、開始アドレスと、フラッシュＲＯＭ２４２において書き換えられた後のアプリケーション２４６が格納される記憶領域のうちの末尾アドレスと、の情報を含む信号であってもよい。
【００４１】
本実施形態では、フラッシュＲＯＭ２４２における大ブロックのアドレスが、予めメモリ３３０に格納されている。詳しく言うと、フラッシュＲＯＭ２４２における大ブロックの先頭アドレス及び末尾アドレスの少なくとも一方が、予めメモリ３３０に格納されている。この大ブロックのアドレスに基づき、書換装置３００は、書換データを各大ブロックの記憶容量に相当する容量のデータに分けて、ＥＣＵ２００へ複数回送信する。また、メモリ３３０には、書込完了アドレス、エラーログ、開始アドレスが格納される。
【００４２】
書込完了アドレスとは、書換処理において書き込みが完了した小ブロックのアドレスである。詳しく言うと、書込完了アドレスは、書換処理において書き込みが完了した小ブロックにおける末尾アドレスである。書換装置３００は、ＥＣＵ２００から書込完了通知を受信する度に書込完了アドレスの値を更新する（更新部）。
【００４３】
エラーログとは、書換処理が失敗したことを示すデータである。本実施形態において、書換装置３００は、書換データを送信したにも関わらずＥＣＵ２００からの書込完了通知を受信していない場合に、書換処理が途中で失敗したと判定し（失敗判定部）、エラーログを作成する。なお、書換装置３００は、エラーログを作成する代わりに、書換処理が途中で失敗したことを示すフラグをオンにしてもよい。
【００４４】
開始アドレスとは、書換処理が開始された場合に、ＥＣＵ２００がフラッシュＲＯＭ２４２において最初に書き込む小ブロックのアドレスである。開始アドレスは、作業者が書換装置３００を操作することで設定される。書換処理が途中で失敗した場合は、書換装置３００が、書込完了アドレスに基づき開始アドレスを設定する（アドレス設定部）。
【００４５】
なお、書換装置３００がメモリ３３０を有する例を示したが、これに限定するものではない。大ブロックのアドレス、開始アドレス、及び、書換データ等のデータを格納するメモリが書換装置３００の外部に設けられた例を採用することもできる。この例では、書換装置３００が、外部に設けられたメモリとデータを送受信しながら書換処理を行う。
【００４６】
次に、図２〜図５に基づき、書換システム１００の動作について説明する。先ず、図２に基づき、書換装置３００による書換処理の処理手順について説明する。
【００４７】
例えば、作業者によって、書換装置３００がコネクタ４２０に接続され、書換装置３００の開始ボタンが押されることによって、書換装置３００による書換処理が開始する。書換処理が開始すると、先ず、書換装置３００は、メモリ３３０にエラーログが格納されているか否かを判定する（Ｓ１０）。これによって、書換処理が開始する前に、書換処理が失敗したか否かを判定することができる。エラーログは、書換装置３００によって、下記のＳ２８で作成される。
【００４８】
Ｓ１０においてエラーログが格納されてないと判定した場合、書換装置３００は、作業者が設定したアドレスを開始アドレスに設定する（Ｓ１２）。これによって、フラッシュＲＯＭ２４２で最初に書き換えられる小ブロックが決定する。
【００４９】
次に、書換装置３００は、書換要求信号をＥＣＵ２００へ送信する（Ｓ１４）。これにより、ＥＣＵ２００の書換処理を開始させることができ、且つ、アドレス特定情報をＥＣＵ２００へ送信することができる。
【００５０】
次に、書換装置３００は、ＥＣＵ２００からＡＣＫ信号を受信したか否かを判定する（Ｓ１６）。詳しく言えば、書換装置３００は、Ｓ１４における書換要求信号の送信から所定時間内にＥＣＵ２００からＡＣＫ信号を受信したか否かを判定する。これにより、ＥＣＵ２００が書換装置３００と通信可能か否かを判定することができる。Ｓ１６において書換装置３００がＡＣＫ信号を受信していない場合、ＥＣＵ２００に電源が入力されていないこと、ＥＣＵ２００が壊れていること、又は、ＥＣＵ２００と書換装置３００との通信状態が悪いこと等が想定される。Ｓ１６においてＡＣＫ信号を受信していないと判定した場合、書換装置３００は書換処理を終了する。
【００５１】
Ｓ１６においてＡＣＫ信号を受信すると、書換装置３００は、書換データのうちの１つの大ブロックの記憶容量に相当するデータをＥＣＵ２００に送信する（Ｓ１８）。つまり、書換装置３００は、ＥＣＵ２００に電源が入力され、ＥＣＵ２００が壊れておらず、且つ、ＥＣＵ２００と通信可能であることを条件に、書換データをＥＣＵ２００に送信する。
【００５２】
次に、書換装置３００は、ＥＣＵ２００から書込完了通知を受信したか否かを判定する（Ｓ２０）。詳しく言えば、書換装置３００は、Ｓ１８におけるデータの送信から所定時間内にＥＣＵ２００から書込完了通知を受信したか否かを判定する。これによれば、書換データの書き込みが途中で失敗した否かを判定することができる。
【００５３】
次に、書換装置３００は、ＥＣＵ２００から書込完了通知を受信する度に、書込完了アドレスを更新する（Ｓ２２）。これにより、書換装置３００は、アプリケーション２４６の書き込みが完了した小ブロックのアドレスを管理することができる。
【００５４】
次に、書換装置３００は、書込完了通知を大ブロック分受信したか否かを判定する（Ｓ２４）。これにより、書換装置３００は、Ｓ１８で送信した書換データがフラッシュＲＯＭ２４２に書き込まれたか否かを判定することができる。本実施形態では、書換装置３００が、予め記憶された大ブロックのアドレスと、書込完了アドレスが示すアドレスと、を比較してＳ２４の判定を行うことができる。
【００５５】
Ｓ２４において書込完了通知を大ブロック分受信していないと判定した場合、Ｓ２０へ戻る。よって、書換装置３００は、書込完了通知を大ブロック分受信するまで、Ｓ２０〜Ｓ２４の処理を繰り返し行う。
【００５６】
Ｓ２４において大ブロック分の書込完了通知を受信すると、書換装置３００は、全ての書換データを送信したか否かを判定する（Ｓ２６）。Ｓ２６において全ての書換データを送信していないと判定した場合、Ｓ１８へ戻る。よって、書換装置３００は、全ての書換データを送信するまで、Ｓ１８〜Ｓ２６の処理を繰り返し行う。
【００５７】
Ｓ２０において書込完了通知を受信していない場合、書換装置３００は、エラーログを作成する（Ｓ２８）。書換装置３００は、作成したエラーログをメモリ３３０に格納する。これにより、書換処理が失敗した後に再開した場合、書換装置３００は、Ｓ１０においてエラーログがメモリ３３０に格納されていると判定する。書換装置３００は、Ｓ２８の処理を行う度に、エラーログの内容を書き換える。
【００５８】
Ｓ１０においてエラーログが格納されていると判定した場合、書換装置３００は、書込完了アドレスの次の小ブロックの先頭アドレスを開始アドレスに設定する（Ｓ３０）。これによれば、書換処理において書き込みが途中で失敗した場合に、書換装置３００は、書き込みが失敗した小ブロックの先頭アドレスを、開始アドレスに設定することができる。Ｓ３０の後、書換装置３００は、Ｓ１４の処理を行う。
【００５９】
次に、図３〜図５に基づき、ＥＣＵ２００による書換処理の処理手順について説明する。
【００６０】
ＥＣＵ２００は、書換装置３００からの書換要求信号を受信すると、書換処理を開始する。ＥＣＵ２００は、書換処理を開始するとＡＣＫ信号を書換装置３００へ送信する（Ｓ４０）。これにより、ＥＣＵ２００が書換装置３００と通信可能な状態であることを書換装置３００に示すことができる。
【００６１】
次に、ＥＣＵ２００は、書換要求信号の示す開始アドレスが、大ブロックの先頭のアドレスであるか否かを判定する（Ｓ４２）。言い換えると、ＥＣＵ２００は、書換要求信号の示す開始アドレスが、大ブロックにおける途中のアドレスであるか否かを判定する。詳しく言うと、ＥＣＵ２００は、書換要求信号が示す開始アドレスと、大ブロックの先頭アドレスと、を比較してＳ４２の判定を行う。
【００６２】
上記したように、フラッシュＲＯＭ２４２では書換データを書き換える際、先ず、書き換える対象の大ブロックの記憶内容を消去する必要がある。Ｓ４２を行うことで、大ブロックの記憶内容を消去する前に退避する必要があるか否かを判定することができる。
【００６３】
開始アドレスが大ブロックの先頭のアドレスと判定すると、ＥＣＵ２００は、退避フラグをオフにする（Ｓ４４）。これにより、ＥＣＵ２００が下記のＳ４８の判定を行うことができる。
【００６４】
次に、ＥＣＵ２００は、書き換える対象の大ブロックを消去する（Ｓ４６）。ＥＣＵ２００は、書換要求信号が示すアドレス特定情報に基づき、書き換える対象の大ブロックを特定し、書き換える対象の大ブロック全ての記憶内容を消去する。これにより、書き換え対象の大ブロックに書換データを書き込むことができる。
【００６５】
次に、ＥＣＵ２００は、退避データが格納されているか否かを判定する（Ｓ４８）。詳しくは、退避フラグの値に基づきＥＣＵ２００が判定を行う。Ｓ４８において退避データが格納されていないと判定した場合、ＥＣＵ２００は、書換装置３００が送信した書換データを対象の大ブロックに書き込む受信書込処理を行う（Ｓ５０）。
【００６６】
次に、図４に基づき、ＥＣＵ２００による受信書込処理の処理手順について説明する。
【００６７】
受信書込処理においてＥＣＵ２００は、先ず、書換装置３００が送信した大ブロック分の書換データを受信する（Ｓ７０）。すなわち、書換装置３００がＳ１８で送信した書換データを受信する。そして、ＥＣＵ２００は、このデータを一時的にＲＡＭ２４４に格納する。
【００６８】
次に、ＥＣＵ２００は、Ｓ７０で受信した書換データを、小ブロック毎に書き込む（Ｓ７２）。そして、ＥＣＵ２００は、１つの小ブロックにデータを書き込む度に、書込完了通知を書換装置３００へ送信する（Ｓ７４）。
【００６９】
次に、ＥＣＵ２００は、Ｓ７０で受信したデータの書き込みが完了したか否かを判定する（Ｓ７６）。例えば、ＥＣＵ２００は、Ｓ７０で受信した書換データが書き込まれる大ブロックの末尾アドレスを特定し、この末尾アドレスとＳ７２で書き込んだ小ブロックの末尾アドレスと、を比較してＳ７６の判定を行うことができる。ＥＣＵ２００は、アドレス特定情報に基づき、Ｓ７０で受信した書換データが書き込まれる大ブロックの末尾アドレスを特定することができる。
【００７０】
Ｓ７６においてデータの書き込みが完了していないと判定すると、Ｓ７２へ戻る。よって、ＥＣＵ２００は、Ｓ７０で受信したデータの書き込みが完了するまで、Ｓ７２〜Ｓ７６の処理を繰り返し行う。Ｓ７６で受信したデータの書き込みが完了したと判定すると、ＥＣＵ２００は、受信書込処理を終了する。
【００７１】
受信書込処理を終了すると、ＥＣＵ２００は、全ての書換データの書き込みが完了したか否かを判定する（Ｓ５２）。例えば、ＥＣＵ２００は、フラッシュＲＯＭ２４２において全ての書換データが格納される記憶領域の末尾アドレスを特定し、この末尾アドレスと、Ｓ７２で書き込んだ小ブロックの末尾アドレスと、を比較してＳ５２の判定を行う。ＥＣＵ２００は、アドレス特定情報に基づき、フラッシュＲＯＭ２４２において全ての書換データが格納される記憶領域の末尾アドレスを特定することができる。
【００７２】
Ｓ５２において全書換データの書き込みが完了していないと判定すると、Ｓ５０へ戻る。よって、ＥＣＵ２００は、全ての書換データの書き込みが完了するまで、Ｓ５０及びＳ５２の処理を繰り返し行う。Ｓ５２において全ての書換データの書き込みが完了したと判定すると、ＥＣＵ２００は書換処理を終了する。例えば、書換装置３００は、ＥＣＵ２００により全ての書換データの書き込みが完了した後に、エラーログを消去する。
【００７３】
Ｓ４２において開始アドレスが大ブロックの途中のアドレスであると判定すると、ＥＣＵ２００は、退避フラグをオンにする（Ｓ５４）。そして、ＥＣＵ２００は、開始アドレスを含む大ブロックに格納されている記憶内容のうちの開始アドレスより前のアドレスのデータを、ＥＣＵ２００内の記憶領域に退避する（Ｓ５６）。
【００７４】
本実施形態では、フラッシュＲＯＭ２４２においてアプリケーション２４６及びファームウェア２４８が格納される大ブロックとは異なる大ブロックに上記データを退避する。すなわち、フラッシュＲＯＭ２４２に退避データを作成する。これによれば、退避書込処理の途中にＥＣＵ２００の電源が遮断されて退避データの書き込みが失敗した場合であっても、フラッシュＲＯＭ２４２に格納された退避データは保持される。
【００７５】
Ｓ５６によれば、書き換える対象の大ブロックの記憶内容を消去する前に、書き込みが正常に完了しているデータを退避することができる。Ｓ５６の処理を行った後、ＥＣＵ２００は、Ｓ４６及びＳ４８の処理を行う。Ｓ４８において退避データが格納されていると判定すると、ＥＣＵ２００は、退避データをフラッシュＲＯＭ２４２に書き込む退避書込処理を行う（Ｓ５８）。ＥＣＵ２００は、退避データを、フラッシュＲＯＭ２４２において退避する前に格納されていた記憶領域のアドレスと同じアドレスに書き込む。なお、ＥＣＵ２００は、Ｓ５８の後、退避データを消去してもよい。
【００７６】
次に、図５に基づき、ＥＣＵ２００による退避書込処理の処理手順について説明する。
【００７７】
退避書込処理においてＥＣＵ２００は、先ず、退避データを対応する小ブロックに書き込む（Ｓ９０）。本実施形態において、ＥＣＵ２００は、Ｓ９０において小ブロックの書き込みが完了すると、書込完了通知を書換装置３００へ送信する（Ｓ９２）。
【００７８】
次に、ＥＣＵ２００は、全ての退避データの書き込みが完了したか否かを判定する（Ｓ９４）。例えば、ＥＣＵ２００は、書換要求信号が示す開始アドレスの１つ前のアドレスと、Ｓ９０で書き込んだ小ブロックの末尾アドレスと、を比較して判定を行う。Ｓ９４において全退避データの書き込みが完了していないと判定すると、Ｓ９０に戻る。よって、ＥＣＵ２００は、全ての退避データの書き込みが完了するまで、Ｓ９０〜Ｓ９４の処理を繰り返し行う。ＥＣＵ２００は、全退避データの書き込みが完了すると、受信書込処理を行う（Ｓ５０）。
【００７９】
次に、図６〜図１２に基づき、アプリケーション２４６の書き換えが途中で失敗することなく正常に終了する場合、及び、書き換えが途中で失敗して、その後に再開された場合の書換処理について、フラッシュＲＯＭ２４２のイメージ図を用いて説明する。
【００８０】
本実施形態では、アプリケーション２４６がフラッシュＲＯＭ２４２において５つの大ブロックに格納される例を示している。各大ブロックには、互いに異なる１〜６の番号が割り当てられている。１〜６の大ブロックのうちの１〜５の大ブロックはアプリケーション２４６を格納し、６の大ブロックは退避データを格納する。
【００８１】
また、各大ブロックが５つの小ブロックにより構成された例を示している。各小ブロックには、互いに異なる二桁の番号が割り当てられている。この二桁の番号における十の位は、小ブロックが所属する大ブロックの番号である。二桁の番号における一の位は、１〜５の番号である。また、小ブロックには、１００個のアドレスが割り当てられている。しかしながら、大ブロックの数、小ブロックの数、アドレスの数は、以上の値に限定するものではない。
【００８２】
図６〜図１２に示す例では、作業者が設定した開始アドレスが大ブロックの先頭アドレスとされた例を示している。なお、図６〜図１２では、記憶内容が消去された小ブロックを白で示し、記憶内容が書き込まれた小ブロックにハッチングを施している。記憶内容が正常に書き込まれた小ブロックには、斜線のハッチングを施している。一方、書き込みが途中で失敗した小ブロックには、ドットのハッチングを施している。
【００８３】
先ず、図６〜図８に基づき、アプリケーション２４６の書き換えが途中で失敗することなく正常に終了する場合の書換処理について、フラッシュＲＯＭ２４２のイメージ図を用いて説明する。
【００８４】
書込処理が開始されると、図６に示すように、書き換える対象の大ブロックが消去される（Ｓ４６）。次に、図７に示すように、アドレスの番号が小さい小ブロックから書換データが書き込まれていく（Ｓ５０）。そして、図８に示すように、全ての小ブロックで書き込みが完了すると、書換処理が終了する。
【００８５】
次に、図９〜図１２に基づき、受信書込処理においてアプリケーション２４６の書き換えが途中で失敗して、その後に再開された場合の書換処理について、フラッシュＲＯＭ２４２のイメージ図を用いて説明する。
【００８６】
図９〜図１２に示す例では、大ブロックの途中の小ブロックで、ＥＣＵ２００による書換データの書き込みが失敗している。詳しく言うと、ＥＣＵ２００は、小ブロック５４まで書換データの書き込みが完了し、小ブロック５５を書き込んでいるときに書換処理が失敗している。そのため、特定の大ブロックは、書き込みが正常に完了した小ブロックと、書き込みが途中で失敗した小ブロックと、を含んでいる。
【００８７】
受信書込処理においてＥＣＵ２００によるアプリケーション２４６の書き込みが失敗すると、書換装置３００は、エラーログを作成し（Ｓ２８）、書換処理を終了する。次に、書換処理が再開し、書き込みが失敗した小ブロックの先頭アドレスが開始アドレスに設定される（Ｓ３０）。そして、図１０に示すように、書き込みが失敗した小ブロックを含む大ブロックのうちの、書き込みが正常に完了した小ブロックの記憶内容が退避される（Ｓ５６）。
【００８８】
次に、図１１に示すように、ＥＣＵ２００は、書き換える対象の大ブロックの記憶内容を消去する（Ｓ４６）。そして、図１２に示すように、退避データが、退避される前に格納されていたフラッシュＲＯＭ２４２の記憶領域に書き込まれる（Ｓ５８）。退避データの書き込みが終了すると、書換データが書き込まれていない小ブロックに書換データが書き込まれる（Ｓ５０）。全ての書換データの書き込みが終了すると、書換処理が終了する。
【００８９】
次に、図１３〜図１６に基づき、退避書込処理においてアプリケーション２４６の書き込みが途中で失敗して、その後に再開された場合の書換処理について、フラッシュＲＯＭ２４２のイメージ図を用いて説明する。
【００９０】
ＥＣＵ２００は、退避書込処理で書き込みが途中で失敗した場合と、受信書込処理で書き込みが途中で失敗した場合と、で互いに同じ処理を行う。言い換えるとＥＣＵ２００は、アプリケーション２４６の書き込みが失敗した場合、退避書込処理で失敗したか、受信書込処理で失敗したか、を区別しない。
【００９１】
図１３に示すように、本実施形態では、ＥＣＵ２００が、退避書込処理において、１つ目の小ブロックの書き込みが完了した後、２つ目の小ブロックにおいて退避データの書き込みが失敗している。退避書込処理においてＥＣＵ２００によるアプリケーション２４６の書き込みが失敗すると、書換装置３００は、エラーログを作成し（Ｓ２８）、書換処理を終了する。書換処理が再開すると、書き込みが失敗した小ブロックの先頭アドレスが開始アドレスに設定される（Ｓ３０）。そして、図１４に示すように、書き込みが失敗した小ブロックを含む大ブロックのうちの、書き込みが正常に完了した小ブロックの記憶内容が退避される（Ｓ５６）。
【００９２】
次に、図１５に示すように、書換装置３００は、開始アドレスに基づき書き換える対象の大ブロックの記憶内容を消去する（Ｓ４６）。そして、図１６に示すように、退避データが、退避される前に格納されていたフラッシュＲＯＭ２４２の記憶領域に書き込まれる（Ｓ５８）。
【００９３】
次に、上記した書換システム１００の効果について説明する。
【００９４】
本実施形態において、ＥＣＵ２００は、書換装置３００からの書込完了通知に応じて、開始アドレスを設定している。これによれば、フラッシュＲＯＭ２４２に識別ＩＤを設けることなく書き換えが失敗した小ブロックを特定することができる。なお、本実施形態では、フラッシュＲＯＭ２４２又はＲＡＭ２４４に退避フラグが格納される。しかしながら、識別ＩＤを各大ブロックに設ける従来構成に較べて、退避フラグを格納するための記憶容量は、識別ＩＤを格納するための記憶容量よりも少なくてよい。したがって、フラッシュＲＯＭ２４２に退避フラグを格納する構成であっても、フラッシュＲＯＭ２４２の記憶容量が増大するのを抑制することができる。
【００９５】
また、本実施形態では、退避データがフラッシュＲＯＭ２４２に格納されている。しかしながら、退避データをフラッシュＲＯＭ２４２に再度書き込んだ後、ＥＣＵ２００は、退避データを消去することができる。したがって、フラッシュＲＯＭ２４２の記憶容量が増大するのを抑制することができる。
【００９６】
また、本実施形態において、ＥＣＵ２００は、書き換えが失敗した場合、書き換えが完了している小ブロックの記憶内容を記憶部２４０に退避し、退避データを大ブロックに再度書き込んでいる。これによれば、書換処理が失敗して再開する場合に、書換装置３００から書換データが再度送信され、この書換データに応じてＥＣＵ２００が書き込みを行う構成に較べて、アプリケーション２４６を書き換える時間が短い。すなわち、アプリケーション２４６を書き換える時間が長くなるのを抑制することができる。
【００９７】
また、本実施形態では、退避データが小ブロックに書き込まれる度に書込完了通知が更新される。そして、退避書込処理において書き込みが途中で失敗し、書換処理が再開する場合、書換装置３００は、書き込みが失敗した小ブロックのアドレスを開始アドレスに設定する。よって、ＥＣＵ２００は、書換処理が再開すると、退避データの書き込みが失敗した小ブロックから書き込みを開始することができる。これによれば、書換処理が再開する場合に、退避データの書き込みが失敗した小ブロックを含む大ブロックの先頭からＥＣＵ２００が書き込みを開始する構成に較べて、アプリケーション２４６を書き換える時間が短い。すなわち、アプリケーション２４６を書き換える時間が長くなるのを効果的に抑制することができる。
【００９８】
また、本実施形態では、書き換え対象であるアプリケーション２４６を格納するフラッシュＲＯＭ２４２に退避データが格納されている。したがって、退避データを格納するために、フラッシュＲＯＭ２４２の他に新たなメモリを設ける必要がない。よって、コストが増大するのを抑制することができる。
【００９９】
各大ブロックに識別ＩＤを設ける従来構成では、識別ＩＤの格納されたアドレスを考慮してアプリケーション２４６を設計する必要があった。これに対して本実施形態では、各大ブロックに識別ＩＤを設ける必要がない。そのため、アプリケーション２４６を設計する自由度が低下するのを抑制することができる。
【０１００】
なお、本実施形態では、退避データがフラッシュＲＯＭ２４２に格納される例を示したが、これに限定するものではない。退避データがＲＡＭ２４４に格納される例を採用することもできる。
【０１０１】
（第２実施形態）
本実施形態において、第１実施形態に示した書換システム１００と共通する部分についての説明は割愛する。
【０１０２】
ＥＣＵ２００は、書換処理が失敗して再開すると、書き換えが失敗する前に作成した退避データについて、書き換え対象の大ブロックへの書き込みが完了したか否かを判定する（書込判定部）。すなわち、ＥＣＵ２００は、フラッシュＲＯＭ２４２に格納した退避データが大ブロックへ書き込まれたか否かを判定する。言い換えると、ＥＣＵ２００は、退避データの書き込みが途中で失敗したか否かを判定する。詳しく言うと、ＥＣＵ２００は、退避データが有効か否かを示す有効フラグを用いて上記判定を行う。有効フラグは、例えば、ＲＡＭ２４４、又は、フラッシュＲＯＭ２４２に格納されている。
【０１０３】
有効フラグは、オンの場合に、書き換え対象ではない記憶領域に退避データが格納されており、且つ、書き換え対象の大ブロックに退避データが書き込まれていないことを示す。すなわち、有効フラグがオンの場合、退避データの書き込みが途中で失敗している。有効フラグをオンにすることは、退避データを有効にする、有効フラグを立てる、と言い換えることもできる。
【０１０４】
有効フラグは、オフの場合に、書き換え対象ではない記憶領域に退避データが格納されていない、又は、退避データの書き込みが完了していることを示す。有効フラグをオフにすることは、退避データを無効にする、有効フラグを倒す、と言い換えることもできる。
【０１０５】
図１７に示すように、ＥＣＵ２００は、Ｓ５４の後、有効フラグに基づき、退避データが有効か無効かを判定する（Ｓ６０）。言い換えると、ＥＣＵ２００は、有効フラグがオンかオフかを判定する。ＥＣＵ２００は、Ｓ６０の処理を行うことで、フラッシュＲＯＭ２４２に格納した退避データが大ブロックへ書き込まれたか否かを判定することができる。
【０１０６】
Ｓ６０において退避データが無効であると判定すると、ＥＣＵ２００は、Ｓ５６で退避データを作成する。そして、ＥＣＵ２００は、Ｓ５６の後、退避データを有効にする（Ｓ６２）。ＥＣＵ２００は、Ｓ６２の後、Ｓ４６の処理を行う。
【０１０７】
Ｓ６０において退避データが有効であると判定すると、ＥＣＵ２００は、Ｓ５６で退避データを作成することなく、Ｓ４６の処理を行う。また、ＥＣＵ２００は、Ｓ５８で退避データの書き込みが完了すると、退避データを無効にする（Ｓ６４）。ＥＣＵ２００は、Ｓ６４の後、Ｓ５０の処理を行う。
【０１０８】
また、図１８に示すように、退避書込処理においてＥＣＵ２００は、Ｓ９０の後に、書込完了通知を書換装置３００へ送信しない。言い換えると、ＥＣＵ２００は、退避データを小ブロックに書き込む毎に書込完了通知を送信しない。すなわち、ＥＣＵ２００は、Ｓ９２の処理を行わない。
【０１０９】
ＥＣＵ２００は、Ｓ９０の後、Ｓ９４の処理を行う。そのため、ＥＣＵ２００が退避書込処理を行う場合であっても、書換装置３００は書込完了アドレスを更新しない。これによれば、開始アドレスは、退避データの書き込みが完了し、受信書込処理が行われるまで変わらない。
【０１１０】
次に、図１９〜図２１に基づき、退避書込処理においてアプリケーション２４６の書き込みが途中で失敗して、その後に再開された場合の書換処理について、フラッシュＲＯＭ２４２のイメージ図を用いて説明する。
【０１１１】
ＥＣＵ２００は、退避データの作成後（Ｓ５６）、退避データを有効にする（Ｓ６２）。次に、本実施形態では、図１９に示すように、退避書込処理においてＥＣＵ２００が、１つ目の小ブロックに退避データを書き込んだ後、２つ目の小ブロックの書き込んでいるときに書き込みが失敗している。
【０１１２】
次に、ＥＣＵ２００は、書換処理を再開すると、Ｓ６０で退避データが有効であると判定する。そして、ＥＣＵ２００は、図２０に示すように、書き込みが失敗した小ブロックを含む大ブロックの記憶内容を退避することなく消去する（Ｓ４６）。
【０１１３】
次に、ＥＣＵ２００は、図２１に示すように、書き込みが失敗する前に作成した退避データを、Ｓ４６で消去した大ブロックに書き込んでいく（Ｓ５８）。退避データの書き込みが完了すると、ＥＣＵ２００は、Ｓ５０で受信書込処理を行う。受信書込処理でＥＣＵ２００が書き込みを開始させる開始アドレスは、Ｓ５８で最後に退避データの書き込みが完了した小ブロックの次の小ブロックにおける先頭アドレスである。
【０１１４】
本実施形態では、第１実施形態と同様の効果を奏することができる。さらに本実施形態では、退避書込処理で書き込みが途中で失敗し、書換処理が再開する場合、ＥＣＵ２００が、書き込みが失敗する前に作成した退避データを用いて書き込みを開始する。これによれば、書換処理が再開する場合に、書換装置３００が書換データを再度送信し、この書換データをＥＣＵ２００がフラッシュＲＯＭ２４２に書き込む構成に較べて、アプリケーション２４６を書き換える時間が短い。すなわち、アプリケーション２４６を書き換える時間が長くなるのを効果的に抑制することができる。
【０１１５】
（第３実施形態）
本実施形態において、第１実施形態に示した書換システム１００と共通する部分についての説明は割愛する。
【０１１６】
本実施形態では、フラッシュＲＯＭ２４２における大ブロックのアドレスが、予めメモリ３３０に格納されていない。図２２に示す受信書込処理において、ＥＣＵ２００は、Ｓ７２の後に、Ｓ７２において大ブロックの末尾アドレスまで書換データを書き込んだか否かを判定する（Ｓ７８）。言い換えると、ＥＣＵ２００は、Ｓ７２で書き込みを行った小ブロックが、大ブロックにおける末尾アドレスを含む小ブロックか否かを判定する。
【０１１７】
Ｓ７８において大ブロックの末尾アドレスまで書換データを書き込んだと判定すると、ＥＣＵ２００は、書込完了通知として大ブロック通知を書換装置３００へ送信する（Ｓ８０）。大ブロック通知は、Ｓ７２の書き込みにより大ブロックの書き込みが完了したことを書換装置３００に示すものであって、Ｓ７２で書き込みが完了した大ブロックの末尾アドレスを含んでいる。大ブロック通知を送信すると、ＥＣＵ２００はＳ７６の処理を行う。
【０１１８】
Ｓ７８において大ブロックの末尾アドレスまで書き込んでいないと判定すると、ＥＣＵ２００は、書込完了通知として小ブロック通知を書換装置３００へ送信する（Ｓ８２）。小ブロック通知は、Ｓ７２の書き込みにより小ブロックの書き込みが完了したこと、及び、大ブロックの書き込みが完了していないことを書換装置３００に示すものである。小ブロック通知は、Ｓ７２で書き込みが完了した小ブロックの末尾アドレスを含んでいる。Ｓ７８〜Ｓ８２により、ＥＣＵ２００が大ブロックのアドレスを書換装置３００へ送信することができる。
【０１１９】
なお、本実施形態では、ＥＣＵ２００が、書込完了通知として大ブロック通知を送信している。しかしながら、これに限定するものではない。ＥＣＵ２００が小ブロックを書き込む毎に書込完了通知を送信するとともに、書込完了通知に加えて大ブロック通知を送信する例を採用することもできる。言い換えると、書込完了通知と大ブロック通知とが互いに別の信号とされていてもよい。
【０１２０】
本実施形態において、Ｓ５６においてＥＣＵ２００は、フラッシュＲＯＭ２４２ではなくＲＡＭ２４４に退避データを格納する。そして、ＥＣＵ２００は、Ｓ５８の退避書込処理において、ＲＡＭ２４４に格納された退避データをフラッシュＲＯＭ２４２に書き込む。なお、ＥＣＵ２００の電源が遮断された場合、ＲＡＭ２４４に格納された記憶内容は消去される。
【０１２１】
図２３に示す書換処理のＳ２０において、書換装置３００は、書込完了通知として大ブロック通知及び小ブロック通知を受信する。これにより、書換装置３００は、Ｓ２２で書込完了アドレスを更新するとともに、大ブロックのアドレスをメモリ３３０に格納する。
【０１２２】
本実施形態において書換装置３００は、Ｓ２８で、アプリケーション２４６の書き換えが失敗した回数であるエラー回数をエラーログに記録する。エラー回数は、書換処理が開始してから、この書換処理が終了するまでにエラーログが作成された回数である。
【０１２３】
そして、書換装置３００は、アプリケーション２４６の書き換えが失敗した回数であるエラー回数を判定する（失敗判定部）。詳しく言うと、書換装置３００は、Ｓ１０においてエラーログがメモリ３３０に格納されていると判定すると、エラーログに記録されたエラー回数が１回か２回以上かを判定する（Ｓ３２）。Ｓ３２においてエラー回数が１回と判定すると、ＥＣＵ２００は、Ｓ３０の処理を行う。
【０１２４】
一方、Ｓ３２においてエラー回数が２回以上と判定すると、書換装置３００は、書込完了アドレスが所属する大ブロックの先頭アドレスを開始アドレスに設定する（Ｓ３４）。言い換えると、書換装置３００は、書き込みが失敗した小ブロックを含む大ブロックの先頭アドレスを開始アドレスに設定する。Ｓ３４において書換装置３００は、メモリ３３０に格納された大ブロックのアドレスに基づき、書込完了アドレスが所属する大ブロックの先頭アドレスを特定する。書換装置３００は、Ｓ３４の後にＳ１４の処理を行う。
【０１２５】
書換装置３００がＳ３４の処理を行った場合、ＥＣＵ２００は、Ｓ４２において、開始アドレスが大ブロックの先頭アドレスであると判定する。次に、ＥＣＵ２００は、Ｓ４４の処理を行った後、書き込みが失敗した小ブロックを含む大ブロックの記憶内容をＳ４６で消去する。
【０１２６】
次に、図２４及び図２５に基づき、アプリケーション２４６の書き換えが複数回失敗した場合の書換処理について、フラッシュＲＯＭ２４２及びＲＡＭ２４４のイメージ図を用いて説明する。
【０１２７】
ＥＣＵ２００は、書き込みの失敗が１回目であるとき、ＲＡＭ２４４にデータを退避する（Ｓ５６）。そして、ＥＣＵ２００は、ＲＡＭ２４４に格納した退避データをフラッシュＲＯＭ２４２対して小ブロック毎に書き込む（Ｓ９０）。
【０１２８】
本実施形態では、図２４に示すように、退避書込処理においてＥＣＵ２００が、１つ目の小ブロックに退避データを書き込んだ後、２つ目の小ブロックの書き込んでいるときに書き込みが失敗している。このとき、アプリケーション２４６の書き換えが失敗した回数は、２回である。また、本実施形態では、ＥＣＵ２００の電源遮断により退避データの書き込みが失敗しており、ＲＡＭ２４４に格納された退避データは消去されている。
【０１２９】
書換装置３００は、書換処理を再開すると、書き込みが失敗した小ブロックを含む大ブロックの先頭アドレスを開始アドレスに設定する（Ｓ３４）。そして、書換装置３００は、書き込みが失敗した小ブロックを含む大ブロックに書き込むべき書換データを、ＥＣＵ２００に送信する（Ｓ１８）。
【０１３０】
図２５に示すように、ＥＣＵ２００は、書き込みが失敗した小ブロックを含む大ブロックの記憶内容を消去する（Ｓ４６）。そして、ＥＣＵ２００は、退避書込処理を行うことなく、書換装置３００からの書換データを、記憶内容を消去した大ブロックに書き込んでいく（Ｓ５０）。
【０１３１】
本実施形態では、第１実施形態と同様の効果を奏することができる。さらに本実施形態において、書換装置３００は、ＥＣＵ２００からの大ブロック通知に基づき、大ブロックのアドレスを特定する。これによれば、フラッシュＲＯＭ２４２における大ブロックのアドレスを予めメモリ３３０に格納しておく必要がない。
【０１３２】
また、本実施形態では、退避データがＲＡＭ２４４に格納される。よって、退避データがフラッシュＲＯＭ２４２に格納される構成に較べて、フラッシュＲＯＭ２４２の規模を小さくすることができる。
【０１３３】
なお、本実施形態では、退避データがＲＡＭ２４４に格納される例を示したが、これに限定するものではない。退避データがフラッシュＲＯＭ２４２に格納される例を採用することもできる。
【０１３４】
また、本実施形態では、ＥＣＵ２００が大ブロックのアドレスを示す大ブロック通知を書換装置３００へ送信する例を示したが、これに限定するものではない。ＥＣＵ２００が大ブロック通知を書換装置３００へ送信しない例を採用することもできる。フラッシュＲＯＭ２４２における大ブロックのアドレスが、予めメモリ３３０に格納されていてもよい。この例では、書換装置３００が、メモリ３３０に予め格納された大ブロックのアドレスに基づき、Ｓ３４で開始アドレスを設定する。
【０１３５】
以上、本発明の好ましい実施形態について説明したが、本発明は上記実施形態になんら制限されることなく、本発明の主旨を逸脱しない範囲において、種々変形して実施することが可能である。
【０１３６】
上記実施形態において、書換装置３００は、書換処理のＳ１８において、書換データのうちの１つの大ブロックの記憶容量に相当するデータをＥＣＵ２００に送信する例を示した。しかしながら、これに限定するものではない。書換装置３００が送信する書換データのデータ容量は、大ブロックの記憶容量と異なっていてもよい。例えば、Ｓ１８において書換装置３００は、１つ又は複数の小ブロックに相当するデータを複数回に分けてＥＣＵ２００へ送信してもよい。また、書換装置３００は、全ての書換データをＥＣＵ２００へ一度に送信してもよい。以上の構成では、大ブロックのアドレスを予めメモリ３３０に格納させておく必要がない。
【０１３７】
また、上記実施形態では、書換装置３００が、書込完了通知を受信していない場合に、アプリケーション２４６の書き換えが失敗したと判定したが、これに限定するものではない。アプリケーション２４６の書き換えが失敗した場合に、書き換えが失敗したことを示すエラー信号をＥＣＵ２００が書換装置３００へ送信する例を採用することもできる。この例では、書換装置３００が、エラー信号に基づき、アプリケーション２４６の書き換えが失敗したと判定する。
【０１３８】
また、上記実施形態において、書換装置３００は、コネクタ４２０に接続されることで、ＥＣＵ２００と通信する例を示したが、これに限定するものではない。書換装置３００が、無線通信により、ＥＣＵ２００と通信する例を採用することもできる。
【０１３９】
また、上記実施形態において、書込完了通知は、ＥＣＵ２００により書き込みが完了した小ブロックのアドレスを含む例を示したが、これに限定するものではない。書込完了通知は、書き込みが完了した小ブロックのアドレスを含まない例を採用することもできる。この例において書換装置３００は、作業者の設定した開始アドレス、及び、書換完了通知を受信した回数に応じて、ＥＣＵ２００による書き込みが完了した小ブロックのアドレスを特定することができる。
【符号の説明】
【０１４０】
１００…書換システム、２００…ＥＣＵ、２１０…ＣＰＵ、２２０…通信Ｉ／Ｆ、２３０…バッファ、２４０…記憶部、２４２…フラッシュＲＯＭ、２４４…ＲＡＭ、２４６…アプリケーション、２４８…ファームウェア、２５０…Ｉ／Ｏ、３００…書換装置、３１０…ＣＰＵ、３２０…通信Ｉ／Ｆ、３３０…メモリ、４００…通信バス、４１０…ＥＣＵ、４２０…コネクタ
【図１】
0006447469.tif 000002
【図２】
0006447469.tif 000003
【図３】
0006447469.tif 000004
【図４】
0006447469.tif 000005
【図５】
0006447469.tif 000006
【図６】
0006447469.tif 000007
【図７】
0006447469.tif 000008
【図８】
0006447469.tif 000009
【図９】
0006447469.tif 000010
【図１０】
0006447469.tif 000011
【図１１】
0006447469.tif 000012
【図１２】
0006447469.tif 000013
【図１３】
0006447469.tif 000014
【図１４】
0006447469.tif 000015
【図１５】
0006447469.tif 000016
【図１６】
0006447469.tif 000017
【図１７】
0006447469.tif 000018
【図１８】
0006447469.tif 000019
【図１９】
0006447469.tif 000020
【図２０】
0006447469.tif 000021
【図２１】
0006447469.tif 000022
【図２２】
0006447469.tif 000023
【図２３】
0006447469.tif 000024
【図２４】
0006447469.tif 000025
【図２５】
0006447469.tif 000026