(57)【要約】      （修正有）【課題】書き換え用のユーザプログラムを管理するユーザの管理負担を軽減させる。【解決手段】内蔵するフラッシュＲＯＭ１１０に格納されているユーザプログラム１１３を書き換え可能なマイコン装置１００であって、Ｆｌａｓｈステータス０領域のデータに基づいて、書き換え対象の各ブロックに対する書き換え処理を制御する第１の書き換えプログラム１１１と、Ｆｌａｓｈステータス０領域のデータによらずに、書き換え対象の各ブロックに対する書き換え処理を行う第２の書き換えプログラム１１２と、を有する。第１の書き換えプログラム１１１は、書き換え対象の最初のブロックに対する書き換え処理においては、Ｆｌａｓｈステータス０領域に対する書き込みを行わず、最後のブロックに対する書き換え処理を行った後に、書き換え用のユーザプログラムの記載に基づいて、Ｆｌａｓｈステータス０領域に対する書き込みを行う。【選択図】図１
2016148930.tif 000002
【特許請求の範囲】
【請求項１】
内蔵するフラッシュＲＯＭに格納されているユーザプログラムを書き換え可能なマイコン装置であって、
Ｆｌａｓｈステータス０領域のデータに基づいて、書き換え対象の各ブロックに対する消去、書き込み及びベリファイを含む書き換え処理を制御する第１の処理部と、
前記Ｆｌａｓｈステータス０領域のデータによらずに、書き換え対象の各ブロックに対する消去、書き込み及びベリファイを含む書き換え処理を行う第２の処理部と、を有し、
前記第１の処理部は、
書き換え対象の最初のブロックに対する書き換え処理においては、前記Ｆｌａｓｈステータス０領域に対する書き込みを行わず、書き換え対象の最後のブロックに対する書き換え処理を行った後に、書き換え用のユーザプログラムの記載に基づいて、前記Ｆｌａｓｈステータス０領域に対する書き込みを行うことを特徴とするマイコン装置。
【請求項２】
前記第１の処理部は、
書き換え対象の最初のブロックに対する書き換え処理を行う前に、該最初のブロックのＦｌａｓｈステータス０領域のデータを保持し、
書き換え対象の最後のブロックに対する書き換え処理を行った後に、前記保持されたデータを用いて、ＲＯＭＳＵＭ計算を行うことを特徴とする請求項１に記載のマイコン装置。
【請求項３】
前記第１の処理部は、
書き換え対象の最初のブロックに対する書き込みを行った後、該最初のブロックに対するベリファイを行う際に、予め定められた固定値をＦｌａｓｈステータス０領域に書き込まれるコードとして、ベリファイを行うことを特徴とする請求項１または２に記載のマイコン装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイコン装置に関する。
【背景技術】
【０００２】
従来より、マイコン装置等に内蔵されたフラッシュＲＯＭ（Read Only Memory）には、ユーザプログラムを書き換えるための書き換えプログラムが搭載されており、当該書き換えプログラムを実行させることで、ユーザプログラムの書き換えを行うことができる。
【０００３】
一般に、書き換えプログラムは、Ｆｌａｓｈステータス０領域（書き換え完了コードの書き込みに利用されるステータス領域）に書き込まれているデータの使用有無により、２種類の書き換えプログラムに分類できる。また、それぞれの例として、マイコン装置メーカ等により提供される汎用の書き換えプログラムと、ＯＥＭ（Original equipment manufacturer）メーカ等により提供される固有の書き換えプログラムとが挙げられる。
【０００４】
ＯＥＭメーカ等により提供される固有の書き換えプログラムのように、Ｆｌａｓｈステータス０領域のデータに基づいて、ユーザプログラムの書き換え処理を制御する場合、書き込み時にエラーが発生した場合でも、書き換えプログラムを再実行させることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１６５７２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、汎用の書き換えプログラムと固有の書き換えプログラムとが搭載されているマイコン装置の場合、ユーザは、書き換え用の新たなユーザプログラムとして、それぞれの書き換えプログラムに応じたユーザプログラムを用意しておく必要がある。具体的には、Ｆｌａｓｈステータス０領域に書き込まれるコードが互いに異なる２種類のユーザプログラムを用意しておく必要がある。固有の書き換えプログラムの場合、汎用の書き換えプログラムとは異なり、Ｆｌａｓｈステータス０領域に書き込まれるコード次第で、それ以降の書き換え処理に影響を及ぼすことがあるからである。
【０００７】
このように、Ｆｌａｓｈステータス０領域に書き込まれるコードに起因する書き換え処理への影響の有無を考慮して、書き換えプログラムごとに異なるユーザプログラムを用意しなければならないとすると、ユーザプログラムを管理するユーザの管理負担が大きい。
【０００８】
これに対して、例えば、Ｆｌａｓｈステータス０領域へコードを書き込んだ後の書き換え処理への影響を排除することができれば、Ｆｌａｓｈステータス０領域に書き込まれるコードを同じにすることができる。つまり、書き換え用の新たなユーザプログラムを共通化することが可能となり、ユーザの管理負担を軽減させることができるものと考えられる。
【０００９】
そこで、本開示は、書き換え用の新たなユーザプログラムを管理するユーザの管理負担を軽減させることを目的とする。
【課題を解決するための手段】
【００１０】
本開示の一局面によれば、内蔵するフラッシュＲＯＭに格納されているユーザプログラムを書き換え可能なマイコン装置であって、Ｆｌａｓｈステータス０領域のデータに基づいて、書き換え対象の各ブロックに対する消去、書き込み及びベリファイを含む書き換え処理を制御する第１の処理部と、前記Ｆｌａｓｈステータス０領域のデータによらずに、書き換え対象の各ブロックに対する消去、書き込み及びベリファイを含む書き換え処理を行う第２の処理部と、を有し、前記第１の処理部は、書き換え対象の最初のブロックに対する書き換え処理においては、前記Ｆｌａｓｈステータス０領域に対する書き込みを行わず、書き換え対象の最後のブロックに対する書き換え処理を行った後に、書き換え用のユーザプログラムの記載に基づいて、前記Ｆｌａｓｈステータス０領域に対する書き込みを行うことを特徴とするマイコン装置を提供する。
【発明の効果】
【００１１】
本開示は、書き換え用の新たなユーザプログラムを管理するユーザの管理負担を軽減させることができる。
【図面の簡単な説明】
【００１２】
【図１】マイコン装置のハードウェア構成を示す図である。
【図２】フラッシュＲＯＭの構成を示す図である。
【図３】書き換え用のユーザプログラムの一例を示す図である。
【図４】第１及び第２の処理部の機能構成を示す図である。
【図５】従来の第１の書き換えプログラムによる書き換え処理を説明するための図である。
【図６】従来の第２の書き換えプログラムによる書き換え処理を説明するための図である。
【図７】第１の実施形態に係る第１の書き換えプログラムによる書き換え処理を説明するための図である。
【図８】ＲＯＭＳＵＭ計算部によるＲＯＭＳＵＭ計算処理と、書き換え装置によるＳＵＭ計算処理とを模式的に示した図である。
【図９】第１の実施形態に係る第２の書き換えプログラムによる書き換え処理を説明するための図である。
【図１０】第２の実施形態に係る第１の書き換えプログラムによる書き換え処理を説明するための図である。
【図１１】ＲＯＭＳＵＭ計算部によるＲＯＭＳＵＭ計算処理と、書き換え装置によるＳＵＭ計算処理とを模式的に示した図である。
【図１２】第３の実施形態に係る第１の書き換えプログラムによる書き換え処理を説明するための図である。
【図１３】第３の実施形態に係る第１の書き換えプログラムによるベリファイを説明するための図である。
【発明を実施するための形態】
【００１３】
以下、本発明の各実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
【００１４】
［第１の実施形態］
＜（１）マイコン装置のハードウェア構成＞
はじめに、本実施形態に係るマイコン装置のハードウェア構成について説明する。図１は、本実施形態に係るマイコン装置のハードウェア構成を示す図である。
【００１５】
図１に示すように、マイコン装置１００は、フラッシュＲＯＭ１１０、ＲＡＭ１２０、ＣＰＵ１３０、通信Ｉ／Ｆ１４０等の各部を有し、これらの各部はバス１５０を介して接続されている。
【００１６】
フラッシュＲＯＭ１１０は、ＣＰＵ１３０によって実行されるユーザプログラム１１３を記憶する。また、フラッシュＲＯＭ１１０は、ユーザプログラム１１３を新たなユーザプログラム（以下、「書き換え用のユーザプログラム」と称す）１７１に書き換えるための、第１の書き換えプログラム１１１、第２の書き換えプログラム１１２を記憶する。
【００１７】
なお、以下の説明において、第１の書き換えプログラム１１１は、例えば、ＯＥＭメーカ等により提供される固有の書き換えプログラムであり、Ｆｌａｓｈステータス０領域のデータに基づいて書き換え処理を制御する書き換えプログラムである。
【００１８】
第１の書き換えプログラム１１１では、フラッシュＲＯＭ１１０の書き換え対象の最初のブロックに含まれるＦｌａｓｈステータス０領域のデータに基づいて、書き換え処理を制御する。なお、第１の書き換えプログラム１１１による書き換え処理には、フラッシュＲＯＭの書き換え対象の各ブロックに対する消去、書き込み、ベリファイが含まれるものとする。
【００１９】
また、第１の書き換えプログラム１１１では、書き換え用のユーザプログラム１７１により正しく書き換えが行われたことを確認するために、ＲＯＭＳＵＭ計算を行い、ＲＯＭＳＵＭ計算結果１７２を書き換え装置１６０に出力する。なお、ＲＯＭＳＵＭ計算とは、フラッシュＲＯＭ１１０の書き換え対象の各ブロックに書き込まれたデータを加算し、加算値を算出することを指す。
【００２０】
一方、第２の書き換えプログラム１１２は、例えば、マイコン装置メーカ等により提供される汎用の書き換えプログラムであり、Ｆｌａｓｈステータス０領域のデータによらずに書き換え処理を行う書き換えプログラムである。第２の書き換えプログラム１１２では、フラッシュＲＯＭ１１０の書き換え対象の最初のブロックに含まれるＦｌａｓｈステータス０領域のデータによらずに、書き換え対象のブロックに対する書き換え処理を行う。なお、第２の書き換えプログラム１１２による書き換え処理には、フラッシュＲＯＭ１１０の書き換え対象の各ブロックに対する消去、書き込み、ベリファイが含まれるものとする。
【００２１】
ＲＡＭ１２０は主記憶装置であり、フラッシュＲＯＭ１１０に記憶された各種プログラムがＣＰＵ１３０によって実行される際に展開される、作業領域として機能する。また、フラッシュＲＯＭ１１０に記憶された各種プログラムがＣＰＵ１３０によって実行されることで算出されるデータを一時的に保持する、保持領域として機能する。
【００２２】
ＣＰＵ１３０は、フラッシュＲＯＭ１１０に記憶された各種プログラムを実行するコンピュータである。
【００２３】
通信Ｉ／Ｆ（Interface）１４０は通信インタフェースである。通信Ｉ／Ｆ１４０は、例えば、ＵＡＲＴ（Universal Asynchronous Receiver Transmitter）やその他のシリアル通信、またはＣＡＮ（Controller Area Network）等の車内ＬＡＮ（Local Area Network）などのプロトコルに対応している。通信Ｉ／Ｆ１４０は、書き換え装置１６０が、書き換え用のユーザプログラム１７１をマイコン装置１００に提供する際に、書き換え装置１６０との間で通信を行う。
【００２４】
通信Ｉ／Ｆ１４０を介してマイコン装置１００と接続される書き換え装置１６０は、フラッシュＲＯＭ１１０に格納されているユーザプログラム１１３を書き換えるための書き換え用のユーザプログラム１７１を、マイコン装置１００に提供する。また、マイコン装置１００に対して、第１の書き換えプログラム１１１または第２の書き換えプログラム１１２の実行を指示する。更に、第１の書き換えプログラム１１１が実行されることで算出されたＲＯＭＳＵＭ計算結果１７２を受信し、書き換え用のユーザプログラム１７１のＳＵＭ計算結果と比較することで、書き換えが正しく行われたか否かを判定する。なお、ＳＵＭ計算とは、書き換え用のユーザプログラム１７１の記載内容を加算し加算値を算出することを指す。
【００２５】
なお、上記説明では、ＲＯＭＳＵＭ計算結果１７２とＳＵＭ計算結果とを比較し、書き換えが正しく行われたか否かを判定する処理を書き換え装置１６０が行うものとしたが、当該処理は、マイコン装置１００が行うように構成してもよい。
【００２６】
＜（２）フラッシュＲＯＭの構成＞
次に、フラッシュＲＯＭ１１０の構成について説明する。図２は、フラッシュＲＯＭ１１０の構成（メモリマップ）を示す図である。図２に示すように、フラッシュＲＯＭ１１０は、例えば、６４Ｋバイトを単位とするブロック０からブロックｎに分割されている。
【００２７】
ブロック０には、書き換え完了コードの書き込みに利用されるＦｌａｓｈステータス０領域２００＿０Ａと、ユーザプログラム１１３を分けて格納した際のユーザプログラム１１３の一部が書き込まれた領域２００＿０Ｂとが含まれる。ブロック０は、第１の書き換えプログラム１１１または第２の書き換えプログラム１１２により書き換え処理が行われる際に、最初に書き換え処理が行われるブロックである。また、ブロックｎは、第１の書き換えプログラム１１１または第２の書き換えプログラム１１２により書き換え処理が行われる際に、最後に書き換え処理が行われるブロックである。ブロック１からブロックｎには、それぞれ、ユーザプログラム１１３を分けて格納した際のユーザプログラム１１３の一部が書き込まれた領域２００＿１〜２００＿ｎが含まれる。
【００２８】
なお、本実施形態において、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードとして、"０ｘ５５ＡＡ・・・"が書き込まれるものとする。
【００２９】
＜（３）書き換え用のユーザプログラム＞
次に、書き換え装置１６０により提供される書き換え用のユーザプログラム１７１について説明する。図３は、書き換え用のユーザプログラム１７１の一例を示す図である。図３に示すように、書き換え用のユーザプログラム１７１は、書き換えに際してＦｌａｓｈステータス０領域２００＿０Ａに書き込む「書き換えコード」が記録された書き換えコード領域３０１と、プログラム本体が記録された本体領域３０２とを有する。
【００３０】
本実施形態では、書き換え処理時にＦｌａｓｈステータス０領域２００＿０Ａに書き込む書き換えコードとして、"０ｘ５５ＡＡ・・・"を用いる。つまり、本実施形態では、書き換え用のユーザプログラム１７１として「書き換え完了コード」と同じコードが、書き換えコード領域３０１に記録されたプログラムが用いられる。
【００３１】
マイコン装置１００では、書き換え装置１６０より書き換え用のユーザプログラム１７１が提供されることで、書き換え処理時に書き換えコード領域３０１に記録されている書き換えコードを、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込む。また、本体領域３０２に記録されているプログラム本体を、ブロック０からブロックｎの領域２００＿０Ｂ、２００＿１〜２００＿ｎに分けて書き込む。
【００３２】
＜（４）第１及び第２の処理部の説明＞
次に、第１の書き換えプログラム１１１がＣＰＵ１３０により実行されることで実現される第１の処理部４１０と、第２の書き換えプログラム１１２がＣＰＵ１３０により実行されることで実現される第２の処理部４２０について説明する。
【００３３】
図４は第１及び第２の処理部の機能構成を示す図である。このうち、図４（ａ）は、第１の処理部４１０の機能構成を示している。図４（ａ）に示すように、第１の処理部４１０は、書き換えブロック管理部４１１、Ｆｌａｓｈステータス０管理部４１２、消去部４１３、書き込み部４１４、ベリファイ部４１５、ＲＯＭＳＵＭ計算部４１６を有する。
【００３４】
書き換えブロック管理部４１１は、書き換え対象のブロックを管理する。Ｆｌａｓｈステータス０管理部４１２は、Ｆｌａｓｈステータス０領域に書き込まれているデータを管理する。Ｆｌａｓｈステータス０管理部４１２では、Ｆｌａｓｈステータス０領域２００＿０Ａに書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている場合、書き換え処理が完了しているものと認識する。一方、Ｆｌａｓｈステータス０領域２００＿０Ａに書き換え完了コード以外のデータが書き込まれている場合、書き換え処理中であると認識する。
【００３５】
消去部４１３は、書き換え処理時に、各ブロックに書き込まれているデータを消去する。消去部４１３によりデータが消去されることで、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"となる。同様に、ブロック０の領域２００＿０Ｂ及びブロック１〜ブロックｎの領域２００＿１〜２００＿ｎのデータも"０ｘＦＦＦＦ・・・"となる。
【００３６】
書き込み部４１４は、書き換え処理時に、書き換え装置１６０より提供される書き換え用のユーザプログラム１７１を用いて、ブロック０からブロックｎまで順次書き込みを行う。具体的には、ブロック０の領域２００＿０Ｂ、ブロック１の領域２００＿１〜ブロックｎの領域２００＿ｎに対して、順次、書き換え用のユーザプログラム１７１の本体領域３０２に記録されているプログラム本体を分けて書き込んでいく。
【００３７】
なお、書き込み部４１４は、ブロック０を書き換え対象として書き換え処理を行う場合には、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みは行わない。書き込み部４１４では、ブロックｎを書き換え対象として書き換え処理を行い、更に、ＲＯＭＳＵＭ計算部４１６によりＲＯＭＳＵＭ計算が行われた後に、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みを行う。これにより、Ｆｌａｓｈステータス０領域２００＿０Ａに対しては、ＲＯＭＳＵＭ計算が行われた後に、書き換え用のユーザプログラム１７１の書き換えコード領域３０１に記録された書き換えコードである"０ｘ５５ＡＡ・・・"が書き込まれる。
【００３８】
ベリファイ部４１５は、書き込み部４１４により書き込みが行われたブロックについてベリファイを行い、書き込まれたデータに誤りがないかを確認する。ベリファイ部４１５は、各ブロックに対する書き込みが完了するごとにブロック単位でベリファイを行う。
【００３９】
なお、ベリファイ部４１５では、ブロック０についてのベリファイを行う際、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータを、ベリファイの対象から除外する。つまり、ブロック０の領域２００＿０Ｂに書き込まれているデータを対象として、ベリファイを行う。
【００４０】
図４（ｂ）は、第２の処理部の機能構成を示している。図４（ｂ）に示すように、第２の処理部４２０は、消去部４２１、書き込み部４２２、ベリファイ部４２３を有する。なお、第２の処理部４２０は、更に、書き換えブロック管理部とＲＯＭＳＵＭ計算部とを有していてもよい。
【００４１】
消去部４２１は、書き換え処理時に、各ブロックに書き込まれているデータを消去する。消去部４２１によりデータが消去されることで、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"となる。また、ブロック０の領域２００＿０Ｂ及びブロック１〜ブロックｎの領域２００＿１〜２００＿ｎのデータも"０ｘＦＦＦＦ・・・"となる。
【００４２】
書き込み部４２２は、書き換え処理時に、書き換え装置１６０より提供される書き換え用のユーザプログラム１７１を用いて、ブロック０からブロックｎまで順次書き込みを行う。具体的には、書き換え用のユーザプログラム１７１の書き換えコード領域３０１に記録されている書き換えコードを、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込む。また、書き換え用のユーザプログラム１７１の本体領域３０２に記録されているプログラム本体を分けて、ブロック０の領域２００＿０Ｂ、ブロック１の領域２００＿１〜ブロックｎの領域２００＿ｎに順次書き込んでいく。
【００４３】
ベリファイ部４２３は、書き込み部４１４により書き込みが行われたブロックについてベリファイを行い、書き込まれたデータに誤りがないかを確認する。ベリファイ部４２３では、各ブロックに対する書き込みが完了するごとにブロック単位でベリファイを行う。
【００４４】
＜（５）第１及び第２の書き換えプログラムによる書き換え処理の説明＞
次に、第１及び第２の書き換えプログラム１１１、１１２による書き換え処理について説明する。なお、以下では、本実施形態に係る第１及び第２の書き換えプログラム１１１、１１２による書き換え処理について説明する前に、比較対象のため、従来の第１及び第２の書き換えプログラムによる書き換え処理について簡単に説明する。なお、従来の第１及び第２の書き換えプログラムは、図１に示す構成を有するマイコン装置に内蔵された、図２に示す構成を有するフラッシュＲＯＭに記憶されているものとして説明を行う。ただし、本実施形態に係る第１及び第２の書き換えプログラム１１１、１１２を有するマイコン装置１００と区別するため、従来の第１及び第２の書き換えプログラムを有するマイコン装置は、マイコン装置５００として説明を行う。
【００４５】
＜（５−１）従来の第１の書き換えプログラムによる書き換え処理＞
図５は、従来の第１の書き換えプログラム（ＯＥＭメーカ等により提供される固有の書き換えプログラムであって、従来のもの）による書き換え処理を説明するための図である。図５（ａ）に示すように、書き換え装置１６０がマイコン装置５００に接続されることで、書き換え用のユーザプログラム５０１がマイコン装置５００に提供される。このとき、マイコン装置５００に提供される書き換え用のユーザプログラム５０１には、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込む書き換えコードとして、"０ｘＦＦＦＦ・・・"が記録されている。
【００４６】
従来の第１の書き換えプログラムでは、ブロック０からブロックｎまで順次に書き換え処理を行うものとする。この場合、はじめにブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込むコードを、書き換え完了コードである"０ｘ５５ＡＡ・・・"以外のコードにしておく必要がある。図５の例では、書き換え完了コードである"０ｘ５５ＡＡ・・・"以外の値として、"０ｘＦＦＦＦ・・・"を書き込むことにしている。
【００４７】
図５（ｂ）は、フラッシュＲＯＭ１１０のブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータの書き換え処理中の遷移を、書き換え処理の動作と関連付けて示したものである。図５（ｂ）に示すように、書き換え処理開始直後、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている。
【００４８】
その後、ブロック０に対する消去（ステップＳ５１１）が行われ、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータが消去されると、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"に遷移する。
【００４９】
更に、ブロック０に対する書き込み（ステップＳ５１２）が行われ、書き換え用のユーザプログラム５０１の書き換えコード領域に記録されている"０ｘＦＦＦＦ・・・"が、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれる。
【００５０】
以降、ブロック０のベリファイからブロックｎのベリファイまでの間、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"のまま推移する。ブロックｎのベリファイが完了すると、各ブロックの書き換え処理が完了したと判断し、従来の第１の書き換えプログラムでは、Ｆｌａｓｈステータス０領域２００＿０Ａに書き換え完了コードである"０ｘ５５ＡＡ・・・"を書き込む。これにより、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘ５５ＡＡ・・・"に遷移する。
【００５１】
＜（５−２）従来の第２の書き換えプログラムによる書き換え処理＞
図６は、従来の第２の書き換えプログラム（マイコン装置メーカ等により提供される汎用の書き換えプログラムであって、従来のもの）による書き換え処理を説明するための図である。図６（ａ）に示すように、書き換え装置１６０がマイコン装置５００に接続されることで、書き換え用のユーザプログラム６０１がマイコン装置５００に提供される。このとき、従来の第２の書き換えプログラムでは、Ｆｌａｓｈステータス０領域２００＿０Ａのデータによらずに書き換え対象の各ブロックに対する書き換え処理を行う。このため、Ｆｌａｓｈステータス０領域２００＿０Ａに"０ｘ５５ＡＡ・・・"以外のデータが書き込まれていなくても、各ブロックの書き換え処理が行われる。しかしながら、書き換え処理が完了した後は、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている必要がある。このため、図６（ａ）に示すように、書き換え用のユーザプログラム６０１の書き換えコード領域には、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込む書き換えコードとして、"０ｘ５５ＡＡ・・・"が記録されている。
【００５２】
図６（ｂ）は、フラッシュＲＯＭ１１０のブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータの書き換え処理中の遷移を、書き換え処理の動作と関連付けて示したものである。図６（ｂ）に示すように、書き換え処理開始直後、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている。
【００５３】
その後、ブロック０に対する消去（ステップＳ６１１）が行われ、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータが消去されると、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"に遷移する。
【００５４】
更に、ブロック０に対する書き込み（ステップＳ６１２）が行われ、書き換え用のユーザプログラム６０１の書き換えコード領域に記録されている書き換えコード"０ｘ５５ＡＡ・・・"が、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれる。
【００５５】
以降、ブロック０のベリファイからブロックｎのベリファイまでの間、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘ５５ＡＡ・・・"のまま推移する。これにより、ブロックｎの書き換え処理が完了した時点で、Ｆｌａｓｈステータス０領域２００＿０Ａには、"０ｘ５５ＡＡ・・・"が書き込まれていることになる。
【００５６】
このように、従来の第１の書き換えプログラムを用いて書き換え処理を行う場合と、従来の第２の書き換えプログラムを用いて書き換え処理を行う場合とでは、書き換えコードの異なる書き換え用のユーザプログラム（５０１、６０１）を用いる必要があった。つまり、Ｆｌａｓｈステータス０領域のデータに基づいて書き換え処理を制御する書き換えプログラムと、Ｆｌａｓｈステータス０領域のデータによらずに、書き換え処理を行う書き換えプログラムとで、異なる書き換え用のユーザプログラムが必要であった。このため、書き換え用のユーザプログラムを管理するユーザの管理負担が大きかった。なお、Ｆｌａｓｈステータス０領域のデータに基づいて書き換え処理を制御する書き換えプログラムは、例えば、下記特許文献１に開示されている。特許文献１の開示によれば、Ｆｌａｓｈステータス０領域のデータが"０ｘ５５ＡＡ・・・"以外であると判定された場合、書き換え処理が失敗したと判断して、書き換えプログラムを再実行するよう制御する。
【００５７】
これに対して、以下に説明する本実施形態に係る第１の書き換えプログラム１１１では、第２の書き換えプログラム１１２との間で、書き換え用のユーザプログラムを共通化することができる。
【００５８】
以下、本実施形態に係る第１及び第２の書き換えプログラム１１１、１１２による書き換え処理について説明する。
【００５９】
＜（５−３）第１の書き換えプログラムによる書き換え処理の説明＞
はじめに、本実施形態に係る第１の書き換えプログラム１１１による書き換え処理について説明する。図７は、本実施形態に係る第１の書き換えプログラムによる書き換え処理を説明するための図である。図７（ａ）に示すように、書き換え装置１６０がマイコン装置１００に接続されることで、書き換え用のユーザプログラム１７１がマイコン装置１００に提供される。上述したように、マイコン装置１００に提供される書き換え用のユーザプログラム１７１の書き換えコード領域３０１には、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込む書き換えコードとして、"０ｘ５５ＡＡ・・・"が記録されている。
【００６０】
図７（ｂ）は、フラッシュＲＯＭ１１０のブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込まれるデータの書き換え処理中の遷移を、書き換え処理の動作と関連付けて示したものである。図７（ｂ）に示すように、書き換え処理開始直後、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている。
【００６１】
その後、ブロック０に対する消去（ステップＳ７１１）が行われ、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータが消去されると、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"に遷移する。
【００６２】
更に、ブロック０に対する書き込み（ステップＳ７１２）が行われる。このとき、書き込み部４１４では、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域について書き込みを行い、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みは行わない。
【００６３】
このため、ブロック０に対する書き込みが完了した時点でも、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"のままである。したがって、第１の処理部４１０では、各ブロックに対する書き込みは継続して行うことができる。
【００６４】
続いて、ブロック０に対するベリファイ（ステップＳ７１３）が行われる。このとき、ベリファイ部４１５では、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域２００＿０Ｂを対象にベリファイを行う。Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれる書き換えコードは、"０ｘ５５ＡＡ・・・"であるところ、ステップＳ７１２では、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みを行っていない。このため、仮にブロック０全体に対してベリファイを行うこととするとエラーが発生することになる。しかしながら、上述したとおり、Ｆｌａｓｈステータス０領域２００＿０Ａのデータをベリファイの対象から除いていることから、ステップＳ７１３では、エラーは発生しない。
【００６５】
その後、ブロック１以降のブロックに対する書き換え処理が行われ、ブロックｎに対するベリファイが終了すると、ＲＯＭＳＵＭ計算部４１６では、ＲＯＭＳＵＭ計算を行う（ステップＳ７２１）。このとき、ＲＯＭＳＵＭ計算部４１６では、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域を対象に、ＲＯＭＳＵＭ計算を行う（書き換え装置１６０でも、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込む書き換えコードを除いてＳＵＭ計算を行う）。
【００６６】
Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれる書き換えコードは、"０ｘ５５ＡＡ・・・"であるが、この時点では、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みを行っていない。このため、仮にブロック０からブロックｎ全体に対してＲＯＭＳＵＭ計算を行うこととすると、ＲＯＭＳＵＭ計算結果１７２とＳＵＭ計算結果とが一致せず、エラーが発生することになる。これに対して、本実施形態では上述したとおり、Ｆｌａｓｈステータス０領域２００＿０ＡをＲＯＭＳＵＭ計算の対象から除いている（書き換え装置１６０でも、書き換えコードを除いてＳＵＭ計算を行っている）。このため、ＲＯＭＳＵＭ計算結果１７２とＳＵＭ計算結果との間で不一致は生じない。
【００６７】
ＲＯＭＳＵＭ計算が完了した後に、書き込み部４１４では、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みを行う（ステップＳ７２２）。これにより、書き換え用のユーザプログラム１７１の書き換えコード領域３０１に記録されている書き換えコード"０ｘ５５ＡＡ・・・"が、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれる。
【００６８】
このように、Ｆｌａｓｈステータス０領域２００＿０Ａへの書き込みを最後に行う構成とした場合、以降に書き込みが行われる領域が存在しない。このため、Ｆｌａｓｈステータス０領域への書き込みが、以降の書き換え処理へ影響を及ぼすことがない。つまり、Ｆｌａｓｈステータス０領域へコードを書き込んだ後の書き換え処理への影響を排除することができる。
【００６９】
図８は、ＲＯＭＳＵＭ計算部４１６によるＲＯＭＳＵＭ計算処理と、書き換え装置１６０によるＳＵＭ計算処理との関係を模式的に示した図である。図８に示すように、ＲＯＭＳＵＭ計算部４１６では、ブロック０の領域２００＿０Ｂ、ブロック１の領域２００＿１、ブロック２の領域２００＿２、・・・・ブロックｎの領域２００＿ｎにそれぞれ書き込まれたデータをＲＯＭＳＵＭ計算の計算対象としている。一方、書き換え装置１６０では、書き換え用のユーザプログラム１７１の本体領域３０２に記録されたプログラム本体を、ＳＵＭ計算の計算対象としている。
【００７０】
したがって、第１の書き換えプログラム１１１による書き込みが正しく行われた場合、ＲＯＭＳＵＭ計算結果１７２とＳＵＭ計算結果とは一致する。
【００７１】
＜（５−４）第２の書き換えプログラムによる書き換え処理の説明＞
次に、本実施形態に係る第２の書き換えプログラム１１２による書き換え処理について説明する。本実施形態に係る第２の書き換えプログラム１１２は、従来の第２の書き換えプログラムと同じである。そこで、以下では、本実施形態に係る第１の書き換えプログラム１１１が書き換え処理で用いた書き換え用のユーザプログラム１７１と同じユーザプログラムを用いた場合でも、本実施形態に係る第２の書き換えプログラム１１２が適切に動作することを説明する。
【００７２】
図９は、本実施形態に係る第２の書き換えプログラム１１２による書き換え処理を説明するための図である。図９（ａ）に示すように、書き換え装置１６０がマイコン装置１００に接続されることで、書き換え用のユーザプログラム１７１がマイコン装置１００に提供される。このときマイコン装置１００に提供される書き換え用のユーザプログラム１７１は、図７において、マイコン装置１００に提供された書き換え用のユーザプログラム１７１と同じである。
【００７３】
図９（ｂ）は、フラッシュＲＯＭ１１０のブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込まれるデータの書き換え処理中の遷移を、書き換え処理の動作と関連付けて示したものである。図９（ｂ）に示すように、書き換え処理開始直後、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている。
【００７４】
その後、ブロック０に対する消去（ステップＳ９１１）が行われ、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータが消去されると、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"に遷移する。
【００７５】
更に、ブロック０に対する書き込み（ステップＳ９１２）が行われ、書き換え用のユーザプログラム１７１の書き換えコード領域３０１に記録されている書き換えコード"０ｘ５５ＡＡ・・・"が、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれる。
【００７６】
以降、ブロック０のベリファイからブロックｎのベリファイまでの間、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘ５５ＡＡ・・・"のまま推移する。この結果、ブロックｎのベリファイが完了した時点で、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードと同じ"０ｘ５５ＡＡ・・・"が書き込まれていることになる。
【００７７】
このように、本実施形態によれば、第１の書き換えプログラム１１１を用いて書き換え処理を行う場合と、第２の書き換えプログラム１１２を用いて書き換え処理を行う場合とで、同じ書き換え用のユーザプログラム１７１を用いることができる。つまり、Ｆｌａｓｈステータス０領域のデータに基づいて書き換え処理を制御する書き換えプログラムと、Ｆｌａｓｈステータス０領域のデータによらず書き換え処理を行う書き換えプログラムとで、同じ書き換え用のユーザプログラムを用いることができる。この結果、書き換え用のユーザプログラムを管理するユーザの管理負担を軽減させることが可能になる。
【００７８】
＜（６）まとめ＞
以上の説明から明らかなように、本実施形態に係る第１の書き換えプログラム１１１では、
・ブロック０に対する書き換え処理を行う際に、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａに対しては書き込みを行わない構成とした。
・また、ブロックｎに対する書き換え処理後に、書き換え用のユーザプログラム１７１に記録されたコード（Ｆｌａｓｈステータス０領域に書き込むべきコード）に基づいてブロック０のＦｌａｓｈステータス０領域２００＿０Ａに対して書き込みを行う構成とした。
【００７９】
このようにＦｌａｓｈステータス０領域への書き込みを最後に行うことで、Ｆｌａｓｈステータス０領域へコードを書き込んだ後の書き換え処理への影響を排除することができる。これにより、Ｆｌａｓｈステータス０領域に書き込まれるコードを同じにすることができ、第２の書き換えプログラム１１２との間で、書き換え用のユーザプログラム１７１を共通化させることが可能となる。
【００８０】
この結果、書き換え用の新たなユーザプログラムを管理するユーザの管理負担を軽減させることが可能になる。
【００８１】
また、本実施形態に係る第１の書き換えプログラム１１１では、
・ベリファイ部４１５がベリファイを行う際に、ブロック０については、Ｆｌａｓｈステータス０領域２００＿０Ａのデータを除く構成とした。
・ＲＯＭＳＵＭ計算部４１６がＲＯＭＳＵＭ計算を行う際に、Ｆｌａｓｈステータス０領域２００＿０Ａのデータを除く構成とした。
【００８２】
これにより、書き換え用のユーザプログラム１７１の共通化を可能にした場合であっても、第１の書き換えプログラム１１１では、各ブロックのベリファイ、ブロック全体のＲＯＭＳＵＭ計算を行うことができるため、書き込みエラーを確実に検出することができる。
【００８３】
［第２の実施形態］
上記第１の実施形態では、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａのデータを除いてＲＯＭＳＵＭ計算を行った。これに対して、第２の実施形態では、ブロック０を消去する前に、Ｆｌａｓｈステータス０領域２００＿０ＡのデータをＲＡＭ１２０に格納しておく。そして、ブロックｎに対する書き換え処理が完了した後に、ＲＡＭ１２０に格納しておいたデータを用いてＲＯＭＳＵＭ計算を行う。以下、第２の実施形態について説明する。なお、説明は、上記第１の実施形態との相違点を中心に行う。
【００８４】
＜（１）第１の書き換えプログラムによる書き換え処理の説明＞
図１０は、第２の実施形態に係る第１の書き換えプログラム１１１による書き換え処理を説明するための図である。図１０（ａ）に示すように、書き換え装置１６０がマイコン装置１００に接続されることで、書き換え用のユーザプログラム１７１がマイコン装置１００に提供される。
【００８５】
図１０（ｂ）は、フラッシュＲＯＭ１１０のブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータの書き換え処理中の遷移を、書き換え処理の動作と関連付けて示したものである。図１０（ｂ）に示すように、書き換え処理開始直後、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている。
【００８６】
ステップＳ１００１において、Ｆｌａｓｈステータス０管理部４１２は、Ｆｌａｓｈステータス０領域２００＿０Ａのデータを、ＲＡＭ１２０の所定のバッファ領域に格納する。
【００８７】
その後、ブロック０に対する消去（ステップＳ７１１）が行われ、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータが消去されると、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"に遷移する。
【００８８】
更に、ブロック０に対する書き込み（ステップＳ７１２）が行われる。このとき、書き込み部４１４では、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域について書き込みを行い、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みは行わない。
【００８９】
このため、ブロック０に対する書き込みが完了した時点でも、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"のままである。したがって、第１の処理部４１０では、各ブロックに対する書き込みは継続して行うことができる。
【００９０】
以降、ブロック０に対するベリファイ（ステップＳ７１３）からブロックｎに対するベリファイまでは、上記第１の実施形態において、図７を用いて説明した処理と同じである。
【００９１】
ブロックｎに対するベリファイが終了すると、ＲＯＭＳＵＭ計算部４１６では、ＲＯＭＳＵＭ計算を行う（ステップＳ１００２）。このとき、ＲＯＭＳＵＭ計算部４１６では、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域を計算対象としてＲＯＭＳＵＭ計算を行う。また、ＲＯＭＳＵＭ計算部４１６では、このときの計算結果に、ＲＡＭ１２０の所定のバッファ領域に格納したデータ（ブロック０の消去前のＦｌａｓｈステータス０領域２００＿０Ａのデータ）を加算する。更に、ＲＯＭＳＵＭ計算部４１６では、加算結果をＲＯＭＳＵＭ計算結果１７２として書き換え装置１６０に出力する。
【００９２】
ＲＯＭＳＵＭ計算が完了した後に、書き込み部４１４では、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みを行う（ステップＳ７２２）。これにより、書き換え用のユーザプログラム１７１の書き換えコード領域３０１に書き換えコードとして記録されている"０ｘ５５ＡＡ・・・"が、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれる。
【００９３】
＜（２）ＲＯＭＳＵＭ計算の詳細＞
次に、ＲＯＭＳＵＭ計算（ステップＳ１００２）の詳細について説明する。図１１は、ＲＯＭＳＵＭ計算部４１６によるＲＯＭＳＵＭ計算処理（ステップＳ１００２）と、書き換え装置１６０によるＳＵＭ計算処理との関係を模式的に示した図である。
【００９４】
図１１に示すように、ＲＯＭＳＵＭ計算結果１７２の正否を判定するために、書き換え装置１６０では、書き換え用のユーザプログラム１７１に基づいてＳＵＭ計算を行う。このとき、書き換え装置１６０では、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込む書き換えコードが記録されている書き換えコード領域３０１と、プログラム本体が記録されている本体領域３０２とを計算対象として、ＳＵＭ計算を行う。
【００９５】
また、ＲＯＭＳＵＭ計算部４１６では、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａを除く領域２００＿０Ｂと、ブロック１からブロックｎの各領域２００＿１〜２００＿ｎとを計算対象としてＲＯＭＳＵＭ計算を行う。更に、ＲＯＭＳＵＭ計算部４１６では、ブロック０に対して消去を行う前にＲＡＭ１２０の所定のバッファ領域に格納したデータを当該計算結果に加算し、加算結果をＲＯＭＳＵＭ計算結果１７２として、書き換え装置１６０に出力する。
【００９６】
上述したように、ＳＵＭ計算結果には、書き換え用のユーザプログラム１７１の書き換えコード領域３０１に記録された書き換えコード"０ｘ５５ＡＡ・・・"と、書き換え用のユーザプログラム１７１の本体領域３０２に記録されたプログラム本体とが含まれる。一方、ＲＯＭＳＵＭ計算結果には、ブロック０からブロックｎの各領域２００＿１Ｂ、２００＿１〜２００＿ｎに分けて書き込まれた書き換え用のユーザプログラム１７１のプログラム本体が含まれる。更に、ＲＡＭ１２０の所定のバッファ領域に格納された書き換え完了コード＝"０ｘ５５ＡＡ・・・"が含まれる。なお、書き換え用のユーザプログラム１７１の書き換えコード領域３０１には、書き換え完了コードと同じコードが書き換えコードとして記録されている。
【００９７】
したがって、書き換え処理が正常に完了した場合、ＳＵＭ計算結果とＲＯＭＳＵＭ計算結果とは一致することとなる。このとき、書き換え装置１６０では、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込む書き換えコードも含めてＳＵＭ計算を行うことができる。つまり、第１の書き換えプログラム１１１にあわせて計算方法を変更することなく、ＳＵＭ計算を行うことができる。
【００９８】
＜（３）まとめ＞
以上の説明から明らかなように、本実施形態に係る第１の書き換えプログラム１１１では、
・ブロック０に対する書き換え処理を行う際に、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａに対しては書き込みを行わない構成とした。
・また、ブロックｎに対する書き換え処理が行われた後に、書き換え用のユーザプログラム１７１に基づいて、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａに対して書き込みを行う構成とした。
【００９９】
このようにＦｌａｓｈステータス０領域への書き込みを最後に行うことで、Ｆｌａｓｈステータス０領域へコードを書き込んだ後の書き換え処理への影響を排除することができる。これにより、Ｆｌａｓｈステータス０領域に書き込まれるコードを同じにすることができ、第２の書き換えプログラム１１２との間で、書き換え用のユーザプログラム１７１を共通化させることが可能となる。
【０１００】
この結果、書き換え用の新たなユーザプログラムを管理するユーザの管理負担を軽減させることが可能になる。
【０１０１】
また、本実施形態に係る第１の書き換えプログラム１１１では、
・ベリファイ部４１５がベリファイを行う際に、ブロック０については、Ｆｌａｓｈステータス０領域２００＿０Ａのデータを除く構成とした。
・ＲＯＭＳＵＭ計算部４１６がＲＯＭＳＵＭ計算を行う際に、Ｆｌａｓｈステータス０領域２００＿０Ａのデータを除く構成とした。更に、その時の計算結果に、ブロック０に対する消去前にＲＡＭ１２０の所定のバッファ領域に格納したデータを加算して、ＲＯＭＳＵＭ計算結果として出力する構成とした。
【０１０２】
これにより、書き換え用のユーザプログラム１７１の共通化を可能にした場合であっても、第１の書き換えプログラム１１１では、各ブロックのベリファイ、ブロック全体のＲＯＭＳＵＭ計算を行うことができるため、書き込みエラーを確実に検出することができる。更に、書き換え装置１６０では、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込むコード（書き換えコード）も含めてＳＵＭ計算を行うことができるため、第１の書き換えプログラム１１１にあわせて計算方法を変更することなくＳＵＭ計算を行うことができる。
【０１０３】
なお、本実施形態では、Ｆｌａｓｈステータス０領域２００＿０ＡのデータをＲＡＭ１２０に格納することとしたが、例えば、書き換え用のユーザプログラム１７１の書き換えコード領域３０１に記録されている書き換えコードを、ＲＡＭ１２０に格納してもよい。
【０１０４】
［第３の実施形態］
上記第１及び第２の実施形態では、ブロック０に対して、Ｆｌａｓｈステータス０領域２００＿０Ａのデータを除いてベリファイを行う構成とした。これに対して、第３の実施形態では、ブロック０に対して固定値を用いてベリファイを行う。以下、第３の実施形態について説明する。なお、説明は、上記第１及び第２の実施形態との相違点を中心に行う。
【０１０５】
＜（１）第１の書き換えプログラムによる書き換え処理の説明＞
図１２は、第３の実施形態に係る第１の書き換えプログラム１１１による書き換え処理を説明するための図である。図１２（ａ）に示すように、書き換え装置１６０がマイコン装置１００に接続されることで、書き換え用のユーザプログラム１７１がマイコン装置１００に提供される。
【０１０６】
図１２（ｂ）は、フラッシュＲＯＭ１１０のブロック０のＦｌａｓｈステータス０領域２００＿０Ａに書き込まれているデータの書き換え処理中の遷移を、書き換え処理の動作と関連付けて示したものである。図１２（ｂ）に示すように、書き換え処理開始直後、Ｆｌａｓｈステータス０領域２００＿０Ａには、書き換え完了コードである"０ｘ５５ＡＡ・・・"が書き込まれている。
【０１０７】
第１の処理部４１０では、ステップＳ１００１、Ｓ７１１、Ｓ７１２に示す各工程を実行する。なお、ステップＳ１００１は上記第２の実施形態において図１０を用いて説明済みであるため、ここでは説明を省略する。また、ステップＳ７１１、Ｓ７１２は上記第１の実施形態において図７を用いて説明済みであるため、ここでは説明を省略する。
【０１０８】
ステップＳ１２０１においてベリファイ部４１５は、ブロック０に対するベリファイを行う。このとき、ベリファイ部４１５では、Ｆｌａｓｈステータス０領域２００＿０Ａを含むブロック０全体を対象にベリファイを行う。
【０１０９】
なお、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込まれるコードは、"０ｘ５５ＡＡ・・・"であるのに対して、ステップＳ７１２では、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みを行っていない。このため、このままブロック０全体に対してベリファイを行うとエラーが発生してしまう。
【０１１０】
これに対して、本実施形態では、Ｆｌａｓｈステータス０領域２００＿０Ａについては、固定値（"０ｘＦＦＦＦ・・・"）を用いてベリファイを行う。
【０１１１】
Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、ブロック０に対する消去（ステップＳ７１１）により、"０ｘＦＦＦＦ・・・"となっている。このため、ブロック０に対する消去が正しく行われ、かつ、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａ以外の領域２００＿０Ｂに対する書き込みが正しく行われていれば、ブロック０に対するベリファイにおいてエラーは発生しない。
【０１１２】
ステップＳ１２０１において、ブロック０に対するベリファイが終了した後の処理は、上記第１または第２の実施形態において、図７または図１０を用いて説明済みであるため、ここでは説明を省略する。
【０１１３】
＜（２）ブロック０に対するベリファイの詳細＞
次に、ブロック０に対するベリファイ（ステップＳ１２０１）の詳細について説明する。図１３は、ブロック０に対するベリファイの詳細を説明するための図である。
【０１１４】
図１３に示すように、ベリファイ部４１５では、書き換え用のユーザプログラム１７１の本体領域３０２に記録されたプログラム本体のうち、ブロック０の領域２００＿０Ｂに分けて書き込まれる部分（ベリファイ対象）の合計値に、固定値を加算する。なお、固定値は、"０ｘＦＦＦＦ・・・・"である。更に、ベリファイ部４１５では、加算結果１３０１を保持する。
【０１１５】
また、ベリファイ部４１５では、書き込み部４１４によるブロック０に対する書き込みが終了した時点で、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａ及びそれ以外の領域２００＿０Ｂに書き込まれているデータの合計値１３１１を算出する。そして、予め保持しておいた加算結果１３０１と合計値１３１１と比較し、一致しているか否かを判定する。
【０１１６】
ここで、書き込み部４１４によるブロック０に対する書き込みが終了した時点で、Ｆｌａｓｈステータス０領域２００＿０Ａのデータは、"０ｘＦＦＦＦ・・・"となっている。ブロック０に対する書き込みの前に消去を行っており、かつ、ブロック０に対する書き込みの際、書き込み部４１４では、Ｆｌａｓｈステータス０領域２００＿０Ａに対する書き込みを行っていないため、ブロック０に対する消去の結果が残っているからである。一方、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａ以外の領域２００＿０Ｂに対しては、書き換え用のユーザプログラム１７１のプログラム本体の一部が書き込まれている。
【０１１７】
したがって、ブロック０に対する消去部４１３による消去が正しく行われ、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａ以外の領域２００＿０Ｂに対する書き込み部４１４による書き込みが正しく行われていた場合には、エラーは発生しない。換言すると、本実施形態におけるブロック０に対するベリファイによれば、消去の正否と、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域２００＿０Ｂに対する書き込みの正否とを確認することができる。
【０１１８】
＜（３）まとめ＞
以上の説明から明らかなように、本実施形態に係る第１の書き換えプログラム１１１では、
・ブロック０に対する書き換え処理を行う際に、ブロック０のＦｌａｓｈステータス０領域２００＿０Ａに対しては書き込みを行わない構成とした。
・また、ブロックｎに対する書き換え処理が行われた後に、書き換え用のユーザプログラム１７１に基づいてブロック０のＦｌａｓｈステータス０領域２００＿０Ａに対して書き込みを行う構成とした。
【０１１９】
このようにＦｌａｓｈステータス０領域への書き込みを最後に行うことで、Ｆｌａｓｈステータス０領域へコードを書き込んだ後の書き換え処理への影響を排除することができる。これにより、Ｆｌａｓｈステータス０領域に書き込まれるコードを同じにすることができ、第２の書き換えプログラム１１２との間で、書き換え用のユーザプログラム１７１を共通化させることが可能となる。
【０１２０】
この結果、書き換え用の新たなユーザプログラムを管理するユーザの管理負担を軽減させることが可能になる。
【０１２１】
また、本実施形態に係る第１の書き換えプログラム１１１では、
・ベリファイ部４１５がベリファイを行う際に、ブロック０については、Ｆｌａｓｈステータス０領域２００＿０Ａのデータとして固定値を用いて、ベリファイを行う構成とした。
・ＲＯＭＳＵＭ計算部４１６がＲＯＭＳＵＭ計算を行う際に、Ｆｌａｓｈステータス０領域２００＿０Ａのデータを除く構成とした。更に、その時の計算結果に、ブロック０に対する消去前にＲＡＭ１２０の所定のバッファ領域に格納したデータを加算して、ＲＯＭＳＵＭ計算結果を出力する構成とした。
【０１２２】
これにより、書き換え用のユーザプログラム１７１の共通化を可能にした場合であっても、第１の書き換えプログラム１１１では、各ブロックのベリファイ、ブロック全体のＲＯＭＳＵＭ計算を行うことができるため、書き込みエラーを確実に検出することができる。更に、第１の書き換えプログラム１１１では、Ｆｌａｓｈステータス０領域２００＿０Ａに書き込むコードも含めてベリファイを行うことができるため、Ｆｌａｓｈステータス０に対して消去が正しく行われたか否かを判定することができる。
【０１２３】
［その他の実施形態］
上記第１乃至第３の実施形態では、第１の書き換えプログラム１１１による書き換え処理が行われる際、はじめにブロック０に対する消去を行う構成とした。しかしながら、はじめに行う処理はブロック０に対する消去である必要はなく、例えば、ブロック０に対する消去の前に、Ｆｌａｓｈステータス０領域２００＿０Ａに対して０を書き込む処理を行う構成としてもよい。
【０１２４】
また、上記第３の実施形態では、ブロック０に対して固定値を用いてベリファイを行う処理を、上記第２の実施形態と組み合わせて説明したが、上記第１の実施形態と組み合わせてもよい。
【０１２５】
また、上記第１乃至第３の実施形態では、ベリファイをブロック単位で行うものとしたが、ベリファイは、アドレス単位または１ｂｙｔｅ単位で行うようにしてもよい。例えば、第１及び第２の実施形態の場合、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域について、アドレス単位または１ｂｙｔｅ単位でベリファイを行うようにしてもよい。また、第３の実施形態の場合、Ｆｌａｓｈステータス０領域２００＿０Ａについては、固定値（"０ｘＦＦＦＦ・・・"）を用いてベリファイを行う。そして、Ｆｌａｓｈステータス０領域２００＿０Ａ以外の領域についてアドレス単位または１ｂｙｔｅ単位でベリファイを行うようにしてもよい。
【０１２６】
なお、上記実施形態に挙げた構成等に、その他の要素との組み合わせなど、ここで示した構成に本発明が限定されるものではない。これらの点に関しては、本発明の趣旨を逸脱しない範囲で変更することが可能であり、その応用形態に応じて適切に定めることができる。
【符号の説明】
【０１２７】
１００      ：マイコン装置
１１０      ：フラッシュＲＯＭ
１２０      ：ＲＡＭ
１３０      ：ＣＰＵ
１４０      ：通信Ｉ／Ｆ
１５０      ：バス
１６０      ：書き換え装置
１７１      ：書き換え用のユーザプログラム
１７２      ：ＲＯＭＳＵＭ計算結果
４１０      ：第１の処理部
４１１      ：書き換えブロック管理部
４１２      ：Ｆｌａｓｈステータス０管理部
４１３      ：消去部
４１４      ：書き込み部
４１５      ：ベリファイ部
４１６      ：ＲＯＭＳＵＭ計算部
４２０      ：第２の処理部
４２１      ：消去部
４２２      ：書き込み部
４２３      ：ベリファイ部
【図１】
2016148930.tif 000003
【図２】
2016148930.tif 000004
【図３】
2016148930.tif 000005
【図４】
2016148930.tif 000006
【図５】
2016148930.tif 000007
【図６】
2016148930.tif 000008
【図７】
2016148930.tif 000009
【図８】
2016148930.tif 000010
【図９】
2016148930.tif 000011
【図１０】
2016148930.tif 000012
【図１１】
2016148930.tif 000013
【図１２】
2016148930.tif 000014
【図１３】
2016148930.tif 000015