(57)【要約】【課題】複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを更新するに際し、次の更新も考慮しプログラムデータを効率の良いメモリブロックに配置する。【解決手段】プログラム更新装置は、更新対象の旧プログラムブロックと共に同一のメモリブロック内に格納された更新対象以外のプログラムデータを記憶媒体に複写し、不揮発性メモリ２１ｃ内の、更新対象とされた旧プログラムブロック及び複写対象データを一部に含むメモリブロックの記憶内容を消去し、新たに不揮発性メモリ２１ｃに書き込むプログラムブロックのデータを複写データと共にメモリブロック単位で不揮発性メモリ２１ｃに書き込む。メモリ書き込みでは、各プログラムブロックの更新履歴を示す情報を保持しておき、その情報に応じて、更新対象以外のプログラムブロックの格納場所を検証する。【選択図】図３
2014115927.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを更新するプログラム更新装置であって、
データの書き込み及び読み出しが可能な記憶媒体と、
更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、前記記憶媒体に複写する複写部と、
前記不揮発性メモリ内の、前記更新対象とされた旧プログラムブロック及び前記記憶媒体への複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する消去部と、
新たに前記不揮発性メモリに書き込むプログラムブロックのデータを、前記記憶媒体に複写により記憶されたデータと共に、メモリブロック単位で前記不揮発性メモリに書き込むメモリ書き込み部と、を備え、
前記メモリ書き込み部は、各プログラムブロックの更新履歴を示す情報を保持する更新履歴保持部と、該更新履歴を示す情報に応じて、更新対象以外のプログラムブロックの格納場所を検証するプログラム格納位置検証部とを有することを特徴とするプログラム更新装置。
【請求項２】
複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを、プログラム更新装置が更新するプログラム更新方法であって、
更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、データの書き込み及び読み出しが可能な記憶媒体に複写する複写ステップと、
前記不揮発性メモリ内の、前記更新対象とされた旧プログラムブロック及び前記記憶媒体への複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する消去ステップと、
新たに前記不揮発性メモリに書き込むプログラムブロックのデータを、前記記憶媒体に複写により記憶されたデータと共に、メモリブロック単位で前記不揮発性メモリに書き込むメモリ書き込みステップと、を有し、
前記メモリ書き込みステップは、各プログラムブロックの更新履歴を示す情報を保持するステップと、該更新履歴を示す情報に応じて、更新対象以外のプログラムブロックの格納場所を検証するステップと、を有することを特徴とするプログラム更新方法。
【請求項３】
請求項２に記載のプログラム更新方法を、コンピュータに実行させるためのプログラム更新プログラム。
【請求項４】
請求項３に記載のプログラム更新プログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム更新装置、方法、プログラム、及び記憶媒体に関し、より詳細には、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能なフラッシュメモリ等の不揮発性メモリに記憶されたプログラムデータを更新するプログラム更新装置、プログラム更新方法、プログラム更新プログラム、及びそのプログラム更新プログラムを記憶したコンピュータ読み取り可能な記憶媒体に関する。
【背景技術】
【０００２】
画像処理装置等における制御部を構成する各種基板は、複数のメモリブロックで構成され且つメモリブロック単位で電気的に一括消去及び書き込みが可能なフラッシュメモリを有し、そのフラッシュメモリに格納したプログラムにより各種制御動作を行う。
【０００３】
図１は、従来技術による、プログラムを構成するプログラムブロックをフラッシュメモリに格納した状態を説明するための概念図である。プログラム全体１１は、機能I〜VIのプログラムブロックで構成される。ここで、機能IのデータをＯＳ（Operating System）とし、他の機能II〜VIをそれぞれＯＳに対して追加されたプログラムＡ〜Ｅとしている。さらに、これらのプログラムをフラッシュメモリに格納する場合、メモリ使用領域の削減を目的として、各プログラムブロックを圧縮した状態で格納する。圧縮後のプログラム全体１２は、フラッシュメモリのメモリブロック単位とは関係なく、機能Iａ〜VIａのデータ（それぞれ機能I〜VIを圧縮したデータ）を、フラッシュメモリ上の配置１３として示すようにフラッシュメモリの先頭アドレスから連続的に格納する場合が多い。
【０００４】
図２は、不揮発性メモリを含むＭＦＰ（Multifunction Peripheral）等の画像処理装置とＰＣ（Personal Computer）等の情報処理装置とでなるシステムの一例を示すブロック図である。ＭＦＰ２１の基板は、中央処理装置（ＣＰＵ：Central Processing Unit）２１ａと、ワークエリアとして使用するＲＡＭ（Random Access Memory）２１ｂ、更新対象となるプログラム（制御プログラム）を格納するフラッシュメモリ等の不揮発性メモリ２１ｃとを備える。ＭＦＰ２１はその他、ＰＣ２２と通信回線２３を介して接続するための通信ポート２１ｄや、画像処理機能を実現するための様々な構成要素を備える。ＭＦＰ２１の電源ＯＮ時には、ＣＰＵ２１ａから不揮発性メモリ２１ｃのプログラムを読み込み、ＲＡＭ２１ｂ上のワークエリアにてそのプログラムのデータを伸張して実行する。
【０００５】
ところで、不揮発性メモリ２１ｃ内のプログラムは、開発途上や不具合改善、新規機能追加などにより頻繁に更新がなされる。なお、ＰＣ２２は、ＣＰＵ２２ａ、ワークエリアとして使用するＲＡＭ２２ｂ、プログラム（ＰＣ２２の制御プログラム）を格納するＲＯＭ（フラッシュメモリやハードディスク等）２２ｃと、ＭＦＰ２１と通信回線２３を介して接続するための通信ポート２２ｄとを備える。そして、ＰＣ２２側から、ＭＦＰ２１の不揮発性メモリ２１ｃ内のプログラムを更新することが可能に構成されている。
【０００６】
そのために、不揮発性メモリ２１ｃ内のプログラムの更新は、更新を実行するためのプログラム（プログラム更新プログラム）が別途用意され、それを用いてなされる。プログラム更新プログラムの基本的な動作としては、更新対象（書換対象）のプログラムブロックが格納されているメモリブロックをメモリブロック単位で消去して、更新後の新プログラムブロックデータをそのメモリブロックに書き込む。なお、同メモリブロック内に書換対象以外のプログラムブロックのデータが格納されている場合は、書換対象以外のプログラムブロックのデータを一旦ワークエリア（ＲＡＭ２１ｂ）上にコピー（複写）して、上記書き込み作業時に、更新後の新プログラムブロックデータと、書換対象以外のプログラムブロックのデータを合わせて、同じメモリブロックに書き込む。
【０００７】
仮に、図１のような状態から、機能IIａのみのプログラムブロックを書き換える場合を想定する。機能IIａはメモリブロック１とメモリブロック２に跨って配置されているため、更新対象が機能IIａだけであっても、メモリブロック１に格納されている機能Iａの一部を退避するために、機能Iａ全体をワークエリア（ＲＡＭ２１ｂ）上に複写する必要がある。さらに、メモリブロック２に格納されている機能IIIａ全体及び機能IVａの一部を退避するために、機能IIIａ及び機能IVａ全体をＲＡＭ２１ｂ上に複写する必要がある。さらに、機能IVａはメモリブロック３の一部にも跨っているため、メモリブロック３に格納されている機能Vａ及び機能VIａまでもＲＡＭ２１ｂ上に複写する必要がある。つまり、機能IIａのみのプログラムブロックを書き換える場合であっても、メモリブロック０〜３に格納されている機能Iａ〜機能VIａの全て（機能IIａを除く）をＲＡＭ２１ｂ上に複写して、メモリブロック０〜３を消去して、機能Iａ〜機能VIａ（機能IIａのみ更新のための新たなデータ）を書き込む処理が必要となってしまう。
【０００８】
例えば、特許文献１に記載のプログラム更新装置では、図１の不揮発性メモリ上の配置１３のように先頭アドレスから連続的に空きを設けずに格納したものではなく、メモリブロック単位で格納された更新対象プログラムについて、上述のような複写、消去、及び書き込みを行っている。
【０００９】
また、特許文献２には、不揮発性メモリに対して高速にデータの書き込み、読み出しができる半導体記憶装置が開示されている。特許文献３には、フラッシュメモリのデータ更新に際して必要な部分のみデータの書き換えを実行する技術が開示されている。特許文献４には、フラッシュメモリをメモリブロックをさらに複数ブロックに分割し、その分割したブロック単位で、データの書き込み、読み出しを行うことで、データの読み書きの高速化を図る技術が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０００−２４２４８７号公報
【特許文献２】特開２００４−３１８９３３号公報
【特許文献３】特開２００６−４０１６８号公報
【特許文献４】特開２００６−３１３４１１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
図１で説明したような従来技術では、不揮発性メモリ上のプログラムブロックの格納位置を、フラッシュメモリのメモリブロックを考慮して配置されているわけではないため、不揮発性メモリ上のプログラムブロックの更新内容が軽微であったとしても、更新対象のプログラムブロックが格納位置によっては、更新対象のプログラムブロックが格納されているメモリブロック以外に格納されているプログラムブロックのＲＡＭへの退避、該当メモリブロックの消去、退避データの再書き込み処理が発生する可能性がある。
【００１２】
また、特許文献１に記載のプログラム更新装置では、空きを設けることを許容してメモリブロック単位で各機能のプログラムデータを格納した状態に対して、そのデータの更新を行う例が記載されているが、更新後には、退避のために複写したデータを空きが無い状態で書き込んでおり、退避のために複写したデータの再書き込み時のプログラムブロックの格納位置を定めていない。よって、この装置では、次に更新の必要が生じた場合には、結局同じような事態が生じ、退避や消去の対象となるデータが増えてしまう。
【００１３】
また、特許文献２〜４のいずれに記載の技術においても、更新を行う際の書き込み時のプログラムブロックの格納位置を、更新を考慮して定めたものではなく、同様に、更新を繰り返すとデータの退避や消去の対象が増えていってしまう。
【００１４】
本発明は、上述のような実状に鑑みてなされたものであり、その目的は、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能なフラッシュメモリ等の不揮発性メモリに記憶されたプログラムデータを更新するに際し、次の更新も考慮してプログラムデータを効率の良いメモリブロックに配置することが可能なプログラム更新装置、プログラム更新方法、プログラム更新プログラム、及びそのプログラム更新プログラムを記憶したコンピュータ読み取り可能な記憶媒体を提供することにある。
【課題を解決するための手段】
【００１５】
上記課題を解決するために、本発明の第１の技術手段は、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを更新するプログラム更新装置であって、データの書き込み及び読み出しが可能な記憶媒体と、更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、前記記憶媒体に複写する複写部と、前記不揮発性メモリ内の、前記更新対象とされた旧プログラムブロック及び前記記憶媒体への複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する消去部と、新たに前記不揮発性メモリに書き込むプログラムブロックのデータを、前記記憶媒体に複写により記憶されたデータと共に、メモリブロック単位で前記不揮発性メモリに書き込むメモリ書き込み部と、を備え、前記メモリ書き込み部は、各プログラムブロックの更新履歴を示す情報を保持する更新履歴保持部と、該更新履歴を示す情報に応じて、更新対象以外のプログラムブロックの格納場所を検証するプログラム格納位置検証部とを有することを特徴としたものである。
【００１６】
本発明の第２の技術手段は、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを、プログラム更新装置が更新するプログラム更新方法であって、更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、データの書き込み及び読み出しが可能な記憶媒体に複写する複写ステップと、前記不揮発性メモリ内の、前記更新対象とされた旧プログラムブロック及び前記記憶媒体への複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する消去ステップと、新たに前記不揮発性メモリに書き込むプログラムブロックのデータを、前記記憶媒体に複写により記憶されたデータと共に、メモリブロック単位で前記不揮発性メモリに書き込むメモリ書き込みステップと、を有し、前記メモリ書き込みステップは、各プログラムブロックの更新履歴を示す情報を保持するステップと、該更新履歴を示す情報に応じて、更新対象以外のプログラムブロックの格納場所を検証するステップと、を有することを特徴としたものである。
【００１７】
本発明の第３の技術手段は、第２の技術手段におけるプログラム更新方法を、コンピュータに実行させるためのプログラム更新プログラムである。
本発明の第４の技術手段は、第３の技術手段におけるプログラム更新プログラムを記憶したコンピュータ読み取り可能な記憶媒体である。
【発明の効果】
【００１８】
本発明によれば、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能なフラッシュメモリ等の不揮発性メモリに記憶されたプログラムデータを更新するに際し、次の更新も考慮してプログラムデータを効率の良いメモリブロックに配置することが可能になる。
【図面の簡単な説明】
【００１９】
【図１】従来技術による、プログラムを構成するプログラムブロックをフラッシュメモリに格納した状態を説明するための概念図である。
【図２】不揮発性メモリを含むＭＦＰとＰＣとでなるシステムの一例を示すブロック図である。
【図３】本発明に係るプログラム更新装置における不揮発性メモリに書き込まれたデータの一例を示す図である。
【図４】本発明に係るプログラム更新装置におけるメモリ書き込み処理の一例を説明するためのフロー図である。
【図５】図４のメモリ書き込み処理で使用するプログラムブロック管理リストの一例を示す図である。
【図６】図４のメモリ書き込み処理の具体例を説明するための概念図である。
【図７】本発明に係るプログラム更新装置におけるプログラム格納位置決定処理の一例を説明するためのフロー図である。
【図８】図７に続くフロー図である。
【図９】図７及び図８に続くフロー図である。
【図１０】図７〜図９に続くフロー図である。
【図１１】図７のプログラム格納位置決定処理における更新履歴マトリクス取得処理で取得する更新履歴マトリクスの一例を示す図である。
【図１２】図１１の更新履歴マトリクスを保持する処理の一例を説明するためのフロー図である。
【図１３】図７〜図１０のプログラム格納位置決定処理により決定された格納位置に対して、メモリ書き込み処理を施した具体例を説明するための概念図である。
【図１４】図７〜図１０のプログラム格納位置決定処理により決定された格納位置に対して、メモリ書き込み処理を施した具体例を説明するための概念図である。
【図１５】図７〜図１０のプログラム格納位置決定処理により決定された格納位置に対して、メモリ書き込み処理を施した具体例を説明するための概念図である。
【発明を実施するための形態】
【００２０】
本発明に係るプログラム更新装置は、不揮発性メモリに記憶されたプログラムデータを更新する装置である。ここで、本発明で対象とする不揮発性メモリは、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みを可能とし、電気的に一括消去及び書き込みが可能なフラッシュメモリ（ＲＯＭに分類されることもある）がその代表的なものとして挙げられるが、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能であればよい。
【００２１】
本発明に係るプログラム更新装置は、データの書き込み及び読み出しが可能な記憶媒体、後述の複写部、消去部、及びメモリ書き込み部を備え、図２で説明したような、不揮発性メモリを含むＭＦＰ等の画像処理装置に組み込まれる。上記の記憶媒体は、任意にデータの読み書きが可能となっており、以下、図２のＲＡＭ２１ｂを挙げて説明する。また、本発明において、ＭＦＰ２１の具備する画像処理機能についてはどのような機能であってもよい。また、ＭＦＰ以外の画像処理装置としては、スキャナ、プリンタ、ファクシミリ装置などが挙げられる。
【００２２】
図３は、本発明に係るプログラム更新装置における不揮発性メモリに書き込まれたデータの一例を示す図である。図３に示す不揮発性メモリ２１ｃは、例えば、図２のＭＦＰ等の画像処理装置に組み込まれるものであり、プログラム更新プログラム、更新対象プログラム、管理リスト、更新履歴を示す情報（以下、更新履歴情報）を格納している。
【００２３】
また、不揮発性メモリ２１ｃ内の更新対象プログラムは、ＰＣ２２からの更新データの受信及び更新指示により更新される。無論、ＰＣ２２に限らず、携帯電話機やサーバ装置等の他の機器であってもよく、さらにはＭＦＰ２１自身に差し込んだＵＳＢ（登録商標。以下同様。）メモリ等の記憶媒体からの更新データの受信及び更新指示により更新されてもよいし、ＵＳＢメモリ等の記憶媒体に記憶された更新データを用いてＭＦＰ２１自身の操作部からユーザ操作により入力された更新指示により更新されてもよい。
【００２４】
上記の複写部は、更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、ＲＡＭ２１ｂに複写する。上記の消去部は、不揮発性メモリ２１ｃ内の、上記更新対象とされた旧プログラムブロック及びＲＡＭ２１ｂへの複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する。つまり、上記の消去部は、不揮発性メモリ２１ｃ内の、上記更新対象とされた旧プログラムブロックを一部に含むメモリブロックの記憶内容、及び不揮発性メモリ２１ｃ内の、ＲＡＭ２１ｂへの複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を消去する。
【００２５】
上記のメモリ書き込み部は、新たに不揮発性メモリ２１ｃに書き込むプログラムブロックのデータを、ＲＡＭ２１ｂに複写により記憶されたデータ（複写データ）と共に、メモリブロック単位で不揮発性メモリ２１ｃに書き込む。
【００２６】
本発明における、メモリ書き込み部の主たる特徴は、このようなメモリブロック単位での書き込みを行う点と、メモリ書き込み部が次の更新履歴保持部とプログラム格納位置検証部を有する点にある。
【００２７】
この更新履歴保持部は、図３の構成例において更新履歴情報が不揮発性メモリ２１ｃに格納された例を図示したように、各プログラムブロックの更新履歴を示す情報（更新履歴情報）を保持する。そして、上記のプログラム格納位置検証部は、上記の更新履歴保持部で保持された更新履歴情報に応じて、更新対象以外のプログラムブロックも含め各プログラムブロックの格納場所を検証する。実際、メモリブロック単位の書き込みを行う際には、更新対象プログラムブロックのデータ量とメモリブロック単位とを比較しながら、順次メモリブロックに書き込むが、メモリブロック単位未満の残りのデータ（剰余部分）についてこのような検証により格納場所を決定する。
【００２８】
上記した複写部、消去部、及びメモリ書き込み部は、ハードウェアとして専用の回路で構成することもできるが、上述したように、不揮発性メモリ２１ｃ（又は別途設けたハードディスクや不揮発性メモリ等の記憶装置）に、各部をＣＰＵ２１ａに実行させるためのプログラム更新プログラムとして組み込むことが好ましい。無論、複写部、消去部、及びメモリ書き込み部をプログラムとして組み込んだ場合、そのプログラム（プログラム更新プログラム）自身については本発明の更新処理が適用できないため、プログラム更新プログラムについては、その更新により他のプログラムに影響を及ぼさないような格納領域に予め配置しておき、本発明の更新処理は、この格納領域を除いた領域を用いて実行すればよい。
【００２９】
このように、不揮発性メモリ２１ｃ上に格納する更新対象プログラムを、更新時（更新処理の書き込み時）に、不揮発性メモリ２１ｃのメモリブロック単位で格納するようにすることで、その更新対象プログラムのある機能を次に更新する際に、必要最低限のメモリブロックの消去及び書き込み処理を行うことで実現することができる。つまり、本発明によれば、次の更新も考慮してプログラムデータを効率の良いメモリブロックに配置することが可能になる。よって、本発明では、従来に比べて更新時間短縮、さらには不揮発性メモリの消去回数の削減を図ることができ、不揮発性メモリの寿命を延ばすことができる。
【００３０】
以下、本発明に係るプログラム更新装置における更新処理の一例について詳細に説明する。ここでは、図４に沿って、主にＣＰＵ２１ａが実行する、このようなメモリ書き込み処理のうち、特に図１のようなメモリブロック単位とは無関係に格納されたデータが元々存在した状態で、本発明のプログラム更新処理プログラムをインストールして実行開始した場合の処理について説明する。なお、複写及び消去の処理自体は従来と基本的に同様であり、その説明を省略する。
【００３１】
図４は、本発明に係るプログラム更新装置におけるメモリ書き込み処理の一例を説明するためのフロー図である。図５は、図４のメモリ書き込み処理で使用するプログラムブロック管理リストの一例で、メモリ書き込み処理後のプログラム管理リストの一例を示す図である。また、図６は、図４のメモリ書き込み処理の具体例を説明するための概念図である。
【００３２】
まず、メモリブロックサイズ（Ｍｂ）を取得し（ステップＳ１）、図１の配置１３で示すプログラム全体についてのプログラムブロック管理リストを取得する（ステップＳ２）。このプログラムブロック管理リストは、図１に示すように機能I〜VIのプログラムブロックで構成される配置１３のプログラム全体（つまり、図６のように非圧縮プログラム全体６１を圧縮した状態のプログラム全体６２）に対して、そのプログラムが実現する各種機能毎にプログラムブロック単位で管理するためのリストである。このプログラムブロック管理リストは、図３の構成例で管理リストとして示したように例えば不揮発性メモリ２１ｃに格納しておけばよい。ここで、機能IのデータをＯＳ（Operating System）とし、他の機能II〜VIをそれぞれＯＳに対して追加されたプログラムＡ〜Ｅとしているが、これに限ったものではなく、例えば各機能のデータが関連するプログラムでなくてもよい。また、図１や図６等ではメモリブロック単位の例として２５６Ｂｙｔｅを挙げているが、これに限ったものではない。
【００３３】
より具体的には、このプログラムブロック管理リストは、図５で示す図４の処理後のプログラムブロック管理リスト５１と比べ、先頭、終了アドレス及び使用メモリブロックが更新される前のリストである。ここで、図５で示すプログラムブロック管理リスト５１は、プログラム全体６２のように各プログラムブロックを圧縮したデータ（機能Iａ〜VIａのデータ）を、不揮発性メモリ２１ｃ上の配置６３のようにメモリブロック単位で格納した場合のリストである。このプログラムブロック管理リスト５１には、プログラムブロック管理リスト５１中のプログラムブロックの番号Ｎ毎に、機能名、プログラム名（プログラムブロック名）、不揮発性メモリ２１ｃ上の先頭アドレス、終了アドレス、データ容量（Ｐｂ．Ｎ）、使用メモリブロック番号、最終更新日時、及びその他の情報が格納されている。
【００３４】
ステップＳ２に続き、Ｎを１として（ステップＳ３）、プログラムブロックサイズ（Ｐｂ．Ｎ）を取得し（ステップＳ４）、Ｅ＿Ｍｂ（Ｎ）を算出する（ステップＳ５）。ここで、Ｅ＿Ｍｂ（Ｎ）は、「メモリブロックサイズ」−「プログラムブロックサイズをメモリブロックサイズで除算した剰余」、つまり、Ｍｂ−ＭＯＤ（Ｐｂ．Ｎ，Ｍｂ）として定義される。
【００３５】
次に、Ｅ＿Ｍｂ（Ｎ）が０より大きい場合（つまりＥ＿Ｍｂ（Ｎ）≠０の場合）に、その値を保持し（ステップＳ６）、保持しているＥ＿Ｍｂの中にそのＭＯＤ（Ｐｂ．Ｎ，Ｍｂ）より大きいサイズが存在するか否かを判定する（ステップＳ７）。存在しなかった場合（ステップＳ７でＮＯの場合）、空きメモリブロックに対象のプログラムブロックを格納し（ステップＳ９）、Ｎをインクリメントする（ステップＳ１０）。
【００３６】
一方、存在した場合（ステップＳ７でＹＥＳの場合）、対象のプログラムブロックを空きメモリブロックに格納していき、対象のプログラムブロックの剰余部分ＭＯＤ（Ｐｂ．Ｎ，Ｍｂ）については、保持しているＥ＿Ｍｂのメモリブロック（ステップＳ７でＹＥＳとの判定に至ったＥ＿Ｍｂが格納されているメモリブロック）に格納し（ステップＳ８）、Ｎをインクリメントする（ステップＳ１０）。
【００３７】
ステップＳ１０の後は、Ｎが予め定めたＮ（リストに含まれるプログラムブロックの数）になったか否かを判定し（ステップＳ１１）、ＹＥＳとなるまで、ステップＳ４に戻って次のＮについて同様の処理を続け、ＹＥＳとなった場合にはプログラムブロック管理リストの更新を行う（ステップＳ１２）。
【００３８】
ここでは、上述したように、プログラムブロック管理リストの先頭、終了アドレスや使用メモリブロックが更新され、図５に示すプログラムブロック管理リスト５１となる。また、この時点で後述の更新履歴マトリクスを作成しておいてもよい。そして、ステップＳ８，Ｓ９により、図１の配置１３で示すプログラム全体（つまり図６のプログラム全体６２）が図６の配置６３で示すようなプログラム全体の格納状態になる。
【００３９】
プログラムブロック管理リスト５１には最終更新日時を見ると、例えば少なくとも１回、機能Iのデータと機能VIのデータとが同時に更新されているのが分かる。但し、この処理例は、本発明のプログラム更新処理プログラムをインストールして実行を開始した段階の処理例であり、最終更新日時しか分からない（つまり同時に一度更新しているか否かしか分からない）。この処理例では、このように同時更新の頻度に差がないため、上記のプログラム格納位置検証部での更新履歴情報に応じた各プログラムブロック（この処理例では更新プログラムがない状態であるため全て更新対象以外のプログラムブロック）の格納場所の検証処理を省略している。換言すれば、この処理例では、プログラムブロック管理リスト５１における最終更新日時の情報を上記更新履歴情報と取り扱っていない。
【００４０】
本発明のプログラム更新処理プログラムをインストールして実行を開始した場合の他の処理例として、図４で説明する処理例において次のような変更を加えることもできる。すなわち、ステップＳ７において「大きいサイズが存在し且つ一度そのＥ＿Ｍｂに係るプログラムブロックと同時更新している」か否かを判定するようにしてもよい。つまり、プログラムブロック管理リスト５１における最終更新日時の情報を上記更新履歴情報として取り扱ってもよい。無論、プログラムブロック管理リスト５１において毎回の更新の履歴が存在した場合には、「一度」の代わりに「所定回数以上」同時更新しているかを判断するようにすればよい。なお、同じ更新開始の日時だけを同時更新と判定してもよいし、更新開始又は終了日時が所定時間以内であることで同時更新と判定することもできる。
【００４１】
次に、本発明のプログラム更新プログラムがインストールされ、図４のような処理例又は上記他の処理例などが実行された状態で、プログラムの更新が実行される場合の処理例について説明する。
【００４２】
この処理例の概略をまず説明すると、プログラムが更新される毎に、更新履歴情報の一例としての更新履歴マトリクスを書き換え、その更新履歴マトリクスに基づき、同時更新頻度が高いペア毎（或いはセット毎）になるように格納位置を検証し、その検証結果に基づきメモリブロック単位で書き込む。つまり、上記のプログラム格納位置検証部がそのような格納位置を決定し、メモリ書き込み部がその決定に従い書き込みを実行する。
【００４３】
なお、図３の構成例では、不揮発性メモリ２１ｃに、更新履歴情報や管理リスト（プログラムブロック管理リスト）も格納させているが、これらについても他のプログラム（更新可能性があり且つ本発明の処理対象となる更新対象プログラム）に影響を及ぼさないような格納領域に予め配置しておき、本発明の更新処理は、この格納領域を除いた領域を用いて実行すればよい。
【００４４】
このような処理例の詳細として、主にＣＰＵ２１ａが実行する、上記のプログラム格納位置検証部におけるプログラム格納位置決定処理の一例を説明する。図７は、本発明に係るプログラム更新装置におけるプログラム格納位置決定処理の一例を説明するためのフロー図で、図８〜図１０は、図７に続くフロー図である。また、図１０は、図７のプログラム格納位置決定処理における更新履歴マトリクス取得処理で取得する更新履歴マトリクスの一例を示す図で、図１１は、図１０の更新履歴マトリクスを保持する処理の一例を説明するためのフロー図である。また、図１３〜図１５は、図７〜図１０のプログラム格納位置決定処理により決定された格納位置に対して、メモリ書き込み処理を施した具体例を説明するための概念図である。
【００４５】
図７において、まず、メモリブロックサイズ（Ｍｂ）を取得し（ステップＳ２１）、更新対象（書換対象）プログラムブロック（Ｐｂ）のサイズも取得する（ステップＳ２２）。そして、更新履歴マトリクスを取得する（ステップＳ２３）。更新履歴マトリクスは、図３における不揮発性メモリ２１ｃに格納される更新履歴情報の例であり、各プログラムブロックの更新の関連性を示すようなデータとして保持したものである。なお、更新履歴マトリクスが存在しない場合には、例えばプログラムブロック管理リスト５１から作成すればよい。
【００４６】
図１１で例示する更新履歴マトリクス１１０は、各プログラムブロックの更新の関連性を示すようなデータであり、例えば機能Iと機能VIとは５回以上の頻度で同時に更新されていること、機能IVと機能Vとは２回以上５回未満の頻度で同時に更新されていること、機能IIと機能IIIとは２回未満の頻度で同時に更新されていること、並びに機能IIと機能Vとは同時に更新されたことがないことなどを示している。
【００４７】
このような更新履歴マトリクス１１０は、図１２に示す更新履歴マトリクス保持処理で保持される。すなわち、まずこの更新履歴マトリクス１１０を取得し（ステップＳ５１）、書換対象プログラムブロックの書換回数カウンターを更新し、それを更新履歴マトリクス１１０に反映させる（ステップＳ５２）。なお、図１１では、更新履歴マトリクス１１０として、閾値処理したデータ（◎、○、△、×）を記録しているが、実際には単にこの書換回数カウンターの値を格納して、例えば後述のステップＳ２４等の判定のときに閾値処理をしてもよい。この更新履歴マトリクス保持処理は、例えば後述のステップＳ４１の処理時に行うなどすればよい。
【００４８】
図７の説明に戻り、ステップＳ２３に続き、書換対象プログラムブロック（Ｐｂ）と同時更新履歴（同時更新頻度）の高いプログラムブロック（Ｐｂ′）があるか否かを判定する（ステップＳ２４）。例えば上記の◎のときのみ同時更新履歴が高いと判定すればよい。ステップＳ２４でＮＯの場合には、後述の図１０のステップＳ３７に進み、ステップＳ２４でＹＥＳの場合には、図８のステップＳ２５に進む。
【００４９】
図８においては、まず、書換対象プログラムブロック（Ｐｂ）と同一メモリブロックに他のプログラムブロック（Ｐｂ″）があるか否かを判定する（ステップＳ２５）。存在する場合（ステップＳ２５でＹＥＳの場合）には、先ほどの同時更新履歴（同時更新頻度）の高いプログラムブロック（Ｐｂ′）とプログラムブロック（Ｐｂ″）が同一か否かを判定する（ステップＳ２６）。存在しない場合（ステップＳ２５でＮＯの場合）には、後述の図９のステップＳ２９に進む。
【００５０】
ステップＳ２６でＹＥＳの場合、後述の図１０のステップＳ３５に進み、プログラムブロック（ＰｂとＰｂ′）の書き込み先（空き）を探す。具体的には、ステップＳ３５において、書換対象プログラムブロック（Ｐｂ）と同時更新履歴（同時更新頻度）の高いプログラムブロック（Ｐｂ′）を格納できる空きメモリブロック（ＭＯＤ（Ｐｂ，Ｍｂ）＋ＭＯＤ（Ｐｂ′，Ｍｂ））が存在するか否かを判定する。ここで、ＭＯＤの変数は全てサイズを指すものとする。例えば、ＭＯＤの変数としてのＰｂはプログラムブロック（Ｐｂ）のサイズを指すことになる。なお、図７〜図１０のようなプログラムの更新処理を繰り返すことで、Ｐｂ′とＰｂ″とが同一になる、つまり同時更新履歴の高いプログラムブロック（Ｐｂ′）が書換対称プログラムブロック（Ｐｂ）と同一のメモリブロックに格納された状態になることが多くなっていく。
【００５１】
ステップＳ３５でＹＥＳの場合、書換対象プログラムブロック（Ｐｂ）と同時更新履歴の高いプログラムブロック（Ｐｂ′）を記憶媒体に退避して、ステップＳ３５で探した同一の空きメモリブロックに配置（書込）する（ステップＳ３６）。
【００５２】
ステップＳ３６の処理後、書換対象プログラムブロックの書換が全て完了したか否かを判定し（ステップＳ４０）、未完了の場合（ステップＳ４０でＮＯの場合）には図７のステップＳ２２に戻り、完了の場合（ステップＳ４０でＹＥＳの場合）には、プログラムブロック管理リスト５１を更新し（ステップＳ４１）、処理を終了する。
【００５３】
このように配置する場合、図１３に示すように、配置１３１が配置１３２のようになる。具体的には、機能IVaのデータ書換に伴い、更新履歴マトリクス１１０を参照して同時更新履歴の高い機能を検索し、機能IVaを同時更新履歴の高い機能IIIaと共に一旦記憶媒体に退避して、機能IVaと機能IIIaを格納できる空きメモリ領域（メモリブロック３）を作り、同一メモリブロック３に機能IVaと機能IIIaとを配置させる。図１３の例では、機能IVaのデータが１２６Byteから１２８Byteに増えているが、機能IVa，IIIaのデータの合計はメモリブロック単位を超えていない。
【００５４】
一方で、ステップＳ２６でＮＯの場合には、ステップＳ２７に進み、ＭＯＤ（Ｐｂ″，Ｍｂ）を満足する空きメモリブロックがあるか否かを判定する。ステップＳ２７でＹＥＳの場合、書換対象プログラムブロック（Ｐｂ）と同一メモリブロックに存在する他のプログラムブロック（Ｐｂ″）を記憶媒体に退避して、空きメモリブロックに配置し、図９のステップＳ２９に進む。
【００５５】
一方で、そのような空きメモリブロックが存在しない場合（ステップＳ２７でＮＯの場合）には、他のプログラムブロック（Ｐｂ″）はそのままにしておき、ステップＳ３５に進み、プログラムブロック（ＰｂとＰｂ′）の書き込み先（空き）を探す。つまり、ステップＳ３５では、書換対象プログラムブロック（Ｐｂ）と同時更新履歴（同時更新頻度）の高いプログラムブロック（Ｐｂ′）を格納できる空きメモリブロックを満足する空きメモリブロックが存在するか否かを判定する。
【００５６】
ステップＳ２７でＮＯの場合の配置例は、図１４に示すように、配置１４１が配置１４２のようになる。具体的に説明すると、機能IVaのデータ書換時に更新履歴マトリクスを参照して同時更新履歴の高い機能として機能Vaが検索され、機能IVaと同一メモリブロックに存在する機能IIIaは同時更新履歴が低いと判定されたとする。なお、図１１のリスト１１０の記述内容とは異なる例を挙げている。このように判定された場合、機能IVaのデータ書換に伴い、同一メモリブロックに存在する機能IIIaを退避する領域がないため、機能IVaと機能IIIaを一旦記憶領域に退避し、機能IVaと同時更新履歴の高い機能Vaも記憶媒体に退避して、機能IVaと機能Vaを同一メモリ領域（メモリブロック３）に配置する。この配置はステップＳ３６でなされ、この段階では機能IIIaが記憶領域に退避されたままの状態であり、新たに配置先を探す必要がある。図７〜図１０ではその流れを図示していないが、例えば、メモリブロック４に存在する機能XXaを一旦記憶領域に退避し、新たなメモリ領域（メモリブロック５）を加えてそこに機能XXaを配置させ、一旦記憶領域に退避しておいた機能IIIaを元々機能XXaが格納されていた領域（メモリブロック４）に配置させればよい。なお、代替処理として、配置先を探す段階で新たなメモリ領域を空きメモリブロック５として加え、そこに機能IIIaを配置することもでき、これにより機能XXaの退避や移動が必要なくなる。
【００５７】
図９のステップＳ２９において、同時更新履歴の高いプログラムブロック（Ｐｂ′）と同じメモリブロック内に更に他のプログラムブロック（Ｐｂ″′）が存在するか否かを判定する。ステップＳ２９でＹＥＳの場合には、ステップＳ３０に進み、さらに同時更新履歴の高いプログラムブロック（Ｐｂ′）と同様に他のプログラムブロック（Ｐｂ″′）も書換対象プログラムブロック（Ｐｂ）と同時更新履歴（同時更新頻度）が高いか否かを判定する。
【００５８】
そして、ステップＳ３０でＹＥＳの場合には、ステップＳ３１に進み、書換対象プログラムブロック（Ｐｂ）と同時更新履歴（同時更新頻度）の高いプログラムブロック（Ｐｂ′）と他のプログラムブロック（Ｐｂ″′）を格納できる空きメモリブロック（ＭＯＤ（Ｐｂ，Ｍｂ）＋ＭＯＤ（Ｐｂ′，Ｍｂ）＋ＭＯＤ（Ｐｂ″′，Ｍｂ））が存在するか否かを判定する。ステップＳ３１でＹＥＳの場合には、書換対象プログラムブロック（Ｐｂ）と同時更新履歴（同時更新頻度）の高いプログラムブロック（Ｐｂ′）と他のプログラムブロック（Ｐｂ″′）を記憶媒体に退避して、同一空きメモリブロックに配置（書込）する（ステップＳ３２）。
【００５９】
ステップＳ３０でＹＥＳとなりステップＳ３１でＹＥＳとなった場合の配置例は、図１５に示すように、配置１５１が配置１５２のようになる。具体的に説明すると、機能IVaのデータ書換時に更新履歴マトリクスを参照して同時更新履歴の高い機能として機能IIIa，VIaが検索され、機能IIIa，VIaは同時更新履歴が高いと判定されたとする。なお、図１１のリスト１１０の記述内容とは異なる例を挙げている。このように判定された場合、機能IVaのデータ書換に伴い、機能IVaと同時更新履歴（同時更新頻度）の高いプログラムブロック（機能IIIaと機能VIa）を一旦記憶領域に退避し、機能IVaと機能IIIaと機能VIaを同一メモリ領域（メモリブロック３）に配置させる。
【００６０】
一方、ステップＳ３０でＮＯの場合、他のプログラムブロック（Ｐｂ″′）を格納できる空きメモリブロック（ＭＯＤ（Ｐｂ″′，Ｍｂ））が存在するか否かを判定する（ステップＳ３３）。ステップＳ３３でＹＥＳの場合には、ステップＳ３４に進み、他のプログラムブロック（Ｐｂ″′）を空きメモリブロックに格納する。
【００６１】
ステップＳ２９でＮＯの場合や、ステップＳ３１でＮＯの場合や、ステップＳ３３でＮＯの場合には、ステップＳ３５に進み、書換対象プログラムブロック（Ｐｂ）と同時更新履歴（同時更新頻度）の高いプログラムブロック（Ｐｂ′）を格納できる空きメモリブロックを満足する空きメモリブロックが存在するか否かを判定する。なお、ステップＳ３３でＮＯの場合には、プログラムブロック（Ｐｂ″′）はそのままにしておく。
【００６２】
また、ステップＳ２４でＮＯの場合や、ステップＳ３５でＮＯの場合には、ステップＳ３７に進み、ＭＯＤ（Ｐｂ，Ｍｂ）を満足する空きメモリブロックがあるか否かを判定する。ステップＳ３７でＹＥＳの場合には、書換対象プログラムブロック（Ｐｂ）を記憶媒体に退避して、空きメモリブロックに移動する（ステップＳ３８）。存在しない場合（ステップＳ３７でＮＯの場合）には、空きメモリブロックがないことによるエラー通知して（ステップＳ３９）、処理を終了する。
【００６３】
なお、図７〜図１０の処理において、書換対象プログラムの剰余部分以外についてはステップＳ３２，Ｓ３６，Ｓ３８での剰余部分の書き込み時などに空きメモリブロックに順に格納していけばよい。また、図７〜図１０の例では、説明の簡略化のため、ステップＳ２９，Ｓ３０で他に多くて１つのプログラムブロック（Ｐｂ″′）しかないことを前提とした検証しかしていない例を挙げた。しかし、実際には同時更新履歴の高いプログラムブロックが２つ以上ある場合も想定できるため、このような場合にも対応できるようにしておけばよい。その場合、例えばステップＳ３１では他のプログラムブロック（Ｐｂ″′）と同様の条件の全てのプログラムブロックを満足する空きがあるか否かを判定し、同時更新履歴がより低い順に判定の対象から省いていくなどすればよい。
【００６４】
以上、本発明によれば、プログラム格納位置検証部及び更新履歴保持部により、プログラムの更新毎に、不揮発性メモリ内のプログラムブロック配置を見直すことが可能となり、同時に更新される頻度が多いプログラムブロックは同一メモリブロックに配置するようにし、プログラムの更新を、必要最低限のメモリブロックの消去及び書き込み処理で実現することが可能となる。
【００６５】
また、本発明は、プログラム更新装置の処理手順として説明したように、そのプログラム更新装置が、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを更新するプログラム更新方法としての形態も採り得る。
【００６６】
このプログラム更新方法は、更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、データの書き込み及び読み出しが可能な記憶媒体に複写する複写ステップと、上記不揮発性メモリ内の、上記更新対象とされた旧プログラムブロック及び上記記憶媒体への複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する消去ステップと、新たに上記不揮発性メモリに書き込むプログラムブロックのデータを、上記記憶媒体に複写により記憶されたデータと共に、メモリブロック単位で上記不揮発性メモリに書き込むメモリ書き込みステップと、を有する。そして、このメモリ書き込みステップは、各プログラムブロックの更新履歴を示す情報を保持するステップと、その更新履歴を示す情報に応じて、更新対象以外のプログラムブロックの格納場所を検証するステップと、を有する。その他の応用例や効果については、プログラム更新装置について説明した通りであり、その説明を省略する。
【００６７】
また、本発明は、上記のプログラム更新方法をコンピュータに実行させるためのプログラム更新プログラム（つまり、図３で説明したプログラム更新プログラム）や、そのプログラム更新プログラムを記憶したコンピュータ読み取り可能な記憶媒体としての形態も採り得る。この記憶媒体としては、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ＢＤ（Blu-ray Disc）等の可搬の記録媒体が挙げられる。
【００６８】
以上説明したように、本発明に係るプログラム更新装置は、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを更新するプログラム更新装置であって、データの書き込み及び読み出しが可能な記憶媒体と、更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、前記記憶媒体に複写する複写部と、前記不揮発性メモリ内の、前記更新対象とされた旧プログラムブロック及び前記記憶媒体への複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する消去部と、新たに前記不揮発性メモリに書き込むプログラムブロックのデータを、前記記憶媒体に複写により記憶されたデータと共に、メモリブロック単位で前記不揮発性メモリに書き込むメモリ書き込み部と、を備え、前記メモリ書き込み部は、各プログラムブロックの更新履歴を示す情報を保持する更新履歴保持部と、該更新履歴を示す情報に応じて、更新対象以外のプログラムブロックの格納場所を検証するプログラム格納位置検証部とを有することを特徴としたものである。これにより、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能なフラッシュメモリ等の不揮発性メモリに記憶されたプログラムデータを更新するに際し、次の更新も考慮してプログラムデータを効率の良いメモリブロックに配置することが可能になる。
【００６９】
本発明に係るプログラム更新方法は、複数のメモリブロックで構成され且つメモリブロック単位で一括消去及び書き込みが可能な不揮発性メモリに記憶されたプログラムデータを、プログラム更新装置が更新するプログラム更新方法であって、更新対象とされた旧プログラムブロックと共に同一のメモリブロック内に格納された、更新対象以外のプログラムデータを、データの書き込み及び読み出しが可能な記憶媒体に複写する複写ステップと、前記不揮発性メモリ内の、前記更新対象とされた旧プログラムブロック及び前記記憶媒体への複写対象となったプログラムデータを一部に含むメモリブロックの記憶内容を、消去する消去ステップと、新たに前記不揮発性メモリに書き込むプログラムブロックのデータを、前記記憶媒体に複写により記憶されたデータと共に、メモリブロック単位で前記不揮発性メモリに書き込むメモリ書き込みステップと、を有し、前記メモリ書き込みステップは、各プログラムブロックの更新履歴を示す情報を保持するステップと、該更新履歴を示す情報に応じて、更新対象以外のプログラムブロックの格納場所を検証するステップと、を有することを特徴としたものである。これにより、上記プログラム更新装置と同様の効果を奏する。
【００７０】
本発明に係るプログラム更新プログラムは、上記のプログラム更新方法を、コンピュータに実行させるためのプログラム更新プログラムである。これにより、上記プログラム更新装置と同様の効果を奏する。
本発明に係る記憶媒体は、上記のプログラム更新プログラムを記憶したコンピュータ読み取り可能な記憶媒体である。これにより、上記プログラム更新装置と同様の効果を奏する。
【符号の説明】
【００７１】
２１…ＭＦＰ、２１ａ…ＣＰＵ、２１ｂ…ＲＡＭ、２１ｃ…不揮発性メモリ、２１ｄ…通信ポート、２２…ＰＣ、２２ａ…ＰＣ側のＣＰＵ、２２ｂ…ＰＣ側のＲＡＭ、２２ｄ…ＰＣ側の通信ポート、２３…通信回線。
【図１】
2014115927.tif 000003
【図２】
2014115927.tif 000004
【図３】
2014115927.tif 000005
【図４】
2014115927.tif 000006
【図５】
2014115927.tif 000007
【図６】
2014115927.tif 000008
【図７】
2014115927.tif 000009
【図８】
2014115927.tif 000010
【図９】
2014115927.tif 000011
【図１０】
2014115927.tif 000012
【図１１】
2014115927.tif 000013
【図１２】
2014115927.tif 000014
【図１３】
2014115927.tif 000015
【図１４】
2014115927.tif 000016
【図１５】
2014115927.tif 000017