(57)【要約】【課題】１回のダウンロード作業においてブートセクタおよび／または一般セクタを書き換えることを可能にしたフラッシュメモリ書き換え制御システム、フラッシュメモリ書き換え制御方法、フラッシュメモリ書き換え制御方法の各工程を実行させるプログラムおよび情報記録媒体を提供する。【解決手段】ブートセクタに格納するべきデータを一時的に格納するＴＭＰ領域を設けておき、書き換え用の更新データおよび格納指示データを取得し、ワーク領域に格納する（図１１の▲１▼）。更新データがブートセクタに格納される場合は、更新データと格納指示データに基づいて、新ブートデータをＴＭＰ領域に生成する（図１１の▲５▼）。旧ブートデータと新ブートデータとを比較し（図１１の▲６▼）、データが異なっている場合は、ブートセクタを消去し、ＴＭＰ領域の新ブートデータをブートセクタに書き込む（図１１の▲７▼）。【選択図】　図１１
2004013536.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリの書き換え用の更新データおよび前記更新データを格納するための前記フラッシュメモリの領域を指定する格納指示データをＲＡＭ上に取得し、更新データを格納すべき更新対象セクタを特定する更新データ取得部と、
前記更新データ取得部によって取得した前記更新データおよび前記格納指示データに基づいて、前記フラッシュメモリのブートセクタ以外の前記更新対象セクタである一般セクタに格納するための新セクタ格納データを生成し、前記更新対象セクタを消去し、前記更新対象セクタに新セクタ格納データを書き込む一般セクタ書き換え部と、
前記更新データ取得部によって取得した前記更新データおよび前記格納指示データに基づいて、前記ブートセクタに格納するための新ブートデータをブートデータ保存領域に格納する一時データ格納部と、
前記ブートセクタを消去した後、前記一時データ格納部によって格納された前記ブートデータ保存領域の前記新ブートデータを前記ブートセクタに書き込むブートセクタ書き換え部とを備え、
１回のダウンロード処理により前記ブートセクタおよび／または前記一般セクタを書き換えることを可能にしたフラッシュメモリ書き換え制御システム。
【請求項２】
前記一時データ格納部によって格納された前記ブートデータ保存領域の前記新ブートデータと、前記ブートセクタに既に格納されている旧ブートデータとを比較し、前記新ブートデータと旧ブートデータとが異なる場合にのみ前記ブートセクタ書き換え部を実行させるブートデータ比較部を、更に備えた請求項１に記載のフラッシュメモリ書き換え制御システム。
【請求項３】
前記フラッシュメモリの書き換えモード終了処理を制御するための情報である書き換えモード終了制御情報の配置アドレスを固定値とすることを特徴とする、請求項１または２に記載のフラッシュメモリ書き換え制御システム。
【請求項４】
前記ブートデータ保存領域が、少なくとも前記新ブートデータを格納可能な前記フラッシュメモリの所定のセクタであることを特徴とする、請求項１から３のいずれか１項に記載のフラッシュメモリ書き換え制御システム。
【請求項５】
前記ブートデータ保存領域が、少なくとも前記新ブートデータを格納可能な前記ＲＡＭの所定の領域であることを特徴とする、請求項１から３のいずれか１項に記載のフラッシュメモリ書き換え制御システム。
【請求項６】
下記の工程を備えた、１回のダウンロード処理により前記ブートセクタおよび／または前記一般セクタを書き換えることを可能にしたフラッシュメモリ書き換え制御方法。
（ａ）フラッシュメモリの書き換え用の更新データおよび前記更新データを格納すべき前記フラッシュメモリの領域を指定する格納指示データをＲＡＭ上に取得し、更新データを格納するための更新対象セクタを特定する更新データ取得工程と、
（ｂ）前記更新データ取得工程によって取得した前記更新データおよび前記格納指示データに基づいて、前記フラッシュメモリのブートセクタ以外の前記更新対象セクタである一般セクタに格納するための新セクタ格納データを生成し、前記更新対象セクタを消去し、前記更新対象セクタに新セクタ格納データを書き込む一般セクタ書き換え工程と、
（ｃ）前記更新データ取得工程によって取得した前記更新データおよび前記格納指示データに基づいて、前記ブートセクタに格納するための新ブートデータをブートデータ保存領域に格納する一時データ格納工程と、
（ｄ）前記ブートセクタを消去した後、前記一時データ格納工程によって格納された前記ブートデータ保存領域の前記新ブートデータを前記ブートセクタに書き込むブートセクタ書き換え工程。
【請求項７】
前記一時データ格納工程（ｃ）と前記ブートセクタ書き換え工程（ｄ）との間に、（ｅ）前記一時データ格納工程によって格納された前記ブートデータ保存領域の前記新ブートデータと、前記ブートセクタに既に格納されている旧ブートデータとを比較し、前記新ブートデータと旧ブートデータとが異なる場合にのみ前記ブートセクタ書き換え工程を実行させるブートデータ比較工程を、更に備えた請求項６に記載のフラッシュメモリ書き換え制御方法。
【請求項８】
前記フラッシュメモリの書き換えモード終了処理を制御するための情報である書き換えモード終了制御情報の配置アドレスを固定値とすることを特徴とする、請求項６または７に記載のフラッシュメモリ書き換え制御方法。
【請求項９】
前記ブートデータ保存領域が、少なくとも前記新ブートデータを格納可能な前記フラッシュメモリの所定のセクタであることを特徴とする、請求項６から８のいずれか１項に記載のフラッシュメモリ書き換え制御方法。
【請求項１０】
前記ブートデータ保存領域が、少なくとも前記新ブートデータを格納可能な前記ＲＡＭの所定の領域であることを特徴とする、請求項６から８のいずれか１項に記載のフラッシュメモリ書き換え制御方法。
【請求項１１】
請求項６から１０のいずれか１項に記載のフラッシュメモリ書き換え制御方法の各工程を実行させるプログラム。
【請求項１２】
請求項６から１０のいずれか１項に記載のフラッシュメモリ書き換え制御方法の各工程を実行させるプログラムを記録したコンピュータに読み取り可能な情報記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュメモリ書き換え制御システム、フラッシュメモリ書き換え制御方法、フラッシュメモリ書き換え制御方法の各工程を実行させるプログラムおよび情報記録媒体に関する。特に、１回のダウンロード処理においてブートセクタおよび／または一般セクタのデータを書き換えることを可能にしたフラッシュメモリ書き換え制御システム、フラッシュメモリ書き換え制御方法、フラッシュメモリ書き換え制御方法の各工程を実行させるプログラムおよび情報記録媒体に関する。
【０００２】
【従来の技術】
プリンタ、スキャナ等の機器においては、ファームウェアがブートセクタとメインプログラムセクタとに分離されて、フラッシュメモリに格納されている。例えば、プリンタの場合、プリンタの通常モードを制御するプログラムであるメインプログラムがメインプログラムセクタに格納されている。また、プリンタの起動処理を実行する起動プログラムや、プリンタの書き換えモードを制御してフラッシュメモリを書き換える書き換えモードプログラムなどはブートセクタに格納されている。ここで、セクタとは、フラッシュメモリにおいて一括して消去可能な領域である。
【０００３】
フラッシュメモリの書き換えは、セクタ単位で行われる。その手順とは、先ず対象のセクタを消去し、次に新しいデータを１ワードずつ書き込むことにより、１セクタの書き換えが完了する。この作業には数秒間を要し、もし途中で不慮の電源断が起きれば、セクタの一部は消去されたままとなる。つまり、フラッシュメモリの書き換えは、既存の格納データを消失してしまう危険性を伴っていると言える。
【０００４】
新しい機能の追加や、特定顧客向けのカスタマイズなどのために機器のファームウェアはバージョンアップされるので、フラッシュメモリの書き換えは比較的頻繁に行われる。しかし、起動プログラムは、もしそれが消失すれば機器は起動不能になってしまう。書き換えモードプログラムも同様に、もしそれが消失するとフラッシュメモリを書き換えることができないので、フラッシュメモリの内容を正しい内容に復旧することすらできなくなってしまう。このような特性を考慮して、メインプログラムセクタには通常モードを制御するメインプログラムを格納し、ブートセクタには起動プログラムや書き換えモードプログラムを格納する。また、メインプログラムセクタは書き換え可能とし、ブートセクタは通常は書き換えできないようにプロテクトするのが、一般的なセクタ割り当て方法である。
【０００５】
ファームウェアのバージョンアップは、大抵の場合は１回のダウンロードで完了する。これは、機能追加やカスタマイズにより変更されるのが、大抵の場合はメインプログラムだけであるからである。この場合は、ブートセクタに格納されている書き換えモードプログラムを実行して、メインプログラムセクタの内容を書き換える。
【０００６】
しかしながら、全く新規の機能を追加する場合は、ブートセクタに格納されている起動プログラムをも変更する必要が生じる場合があり、従来は次のようにしていた。すなわち、ブートセクタだけを書き換える特殊なメインプログラム（ブートリライトプログラムという）を作成する。そして先ず、ブートリライトプログラムをダウンロードし、次にブートリライトプログラムによってブートセクタを書き換え、最後に本来のメインプログラムに戻す、というように３回のダウンロードを実行して書き換える方法である。
【０００７】
図１２は、従来の書き換え処理によるデータ遷移を説明する図である。１回目のダウンロードでは、ブートセクタに格納されている書き換えモードプログラムが実行され、メインプログラムセクタの内容をブートリライトプログラムに書き換える（図１２の▲１▼）。２回目のダウンロードでは、ブートリライトプログラムが実行され、ブートセクタの内容を新ブートデータに書き換える（図１２の▲２▼）。ここで、ブートデータとは、ブートセクタに格納されているプログラムやデータの総称である。３回目のダウンロードでは、再びブートセクタに格納されている書き換えモードプログラムが実行され、メインプログラムセクタの内容を新メインプログラムデータに書き換える（図１２の▲３▼）。
【０００８】
【発明が解決しようとする課題】
上述したように、機器のファームウェアをバージョンアップする際、ブートセクタを書き換える場合と、メインプログラムセクタのようなブートセクタ以外のセクタ（一般セクタという）を書き換える場合とで作業手順が異なるという問題点があった。このため作業者は、現在のファームウェアバージョンを調べ、新しいバージョンにアップするにはブートセクタの書き換えが必要なのか否かを予め確認し、２通りの作業手順のいずれかを選択するという煩雑な作業をしなければならなかった。また、ブートセクタを書き換える場合は、ダウンロード作業を３回実行しなければ完了せず、時間的な効率が悪いという問題点もあった。
【０００９】
従って、本発明は、以上のような問題点を解決するためになされたもので、１回のダウンロード作業によってブートセクタおよび／または一般セクタを書き換えることを可能にしたフラッシュメモリ書き換え制御システム、フラッシュメモリ書き換え制御方法、フラッシュメモリ書き換え制御方法の各工程を実行させるプログラムおよび情報記録媒体を提供することを目的とする。
【００１０】
【課題を解決するための手段】
本発明の、フラッシュメモリ書き換え制御システムの１つの態様は、フラッシュメモリの書き換え用の更新データおよび更新データを格納するためのフラッシュメモリの領域を指定する格納指示データをＲＡＭ上に取得し、更新データを格納すべき更新対象セクタを特定する更新データ取得部と、更新データ取得部によって取得した更新データおよび格納指示データに基づいて、フラッシュメモリのブートセクタ以外の更新対象セクタである一般セクタに格納するための新セクタ格納データを生成し、更新対象セクタを消去し、更新対象セクタに新セクタ格納データを書き込む一般セクタ書き換え部と、更新データ取得部によって取得した更新データおよび格納指示データに基づいて、ブートセクタに格納するための新ブートデータをブートデータ保存領域に格納する一時データ格納部と、ブートセクタを消去した後、一時データ格納部によって格納されたブートデータ保存領域の新ブートデータをブートセクタに書き込むブートセクタ書き換え部とを備え、１回のダウンロード処理によりブートセクタおよび／または一般セクタを書き換えることを可能にしたフラッシュメモリ書き換え制御システムである。
【００１１】
本発明の、フラッシュメモリ書き換え制御システムの別の態様は、一時データ格納部によって格納されたブートデータ保存領域の新ブートデータと、ブートセクタに既に格納されている旧ブートデータとを比較し、新ブートデータと旧ブートデータとが異なる場合にのみブートセクタ書き換え部を実行させるブートデータ比較部を、更に備えたフラッシュメモリ書き換え制御システムである。
【００１２】
本発明の、フラッシュメモリ書き換え制御システムの別の態様は、フラッシュメモリの書き換えモード終了処理を制御するための情報である書き換えモード終了制御情報の配置アドレスを固定値とすることを特徴とするフラッシュメモリ書き換え制御システムである。
【００１３】
本発明の、フラッシュメモリ書き換え制御システムの別の態様は、上述のブートデータ保存領域が、少なくとも新ブートデータを格納可能なフラッシュメモリの所定のセクタであることを特徴とするフラッシュメモリ書き換え制御システムである。
【００１４】
本発明の、フラッシュメモリ書き換え制御システムの別の態様は、上述のブートデータ保存領域が、少なくとも新ブートデータを格納可能なＲＡＭの所定の領域であることを特徴とするフラッシュメモリ書き換え制御システムである。
【００１５】
本発明の、フラッシュメモリ書き換え制御方法の１つの態様は、（ａ）フラッシュメモリの書き換え用の更新データおよび更新データを格納するためのフラッシュメモリの領域を指定する格納指示データをＲＡＭ上に取得し、更新データを格納すべき更新対象セクタを特定する更新データ取得工程と、（ｂ）更新データ取得工程によって取得した更新データおよび格納指示データに基づいて、フラッシュメモリのブートセクタ以外の更新対象セクタである一般セクタに格納するための新セクタ格納データを生成し、更新対象セクタを消去し、更新対象セクタに新セクタ格納データを書き込む一般セクタ書き換え工程と、（ｃ）更新データ取得工程によって取得した更新データおよび格納指示データに基づいて、ブートセクタに格納するための新ブートデータをブートデータ保存領域に格納する一時データ格納工程と、（ｄ）ブートセクタを消去した後、一時データ格納工程によって格納されたブートデータ保存領域の新ブートデータをブートセクタに書き込むブートセクタ書き換え工程とを備え、１回のダウンロード処理によりブートセクタおよび／または一般セクタを書き換えることを可能にしたフラッシュメモリ書き換え制御方法である。
【００１６】
本発明の、フラッシュメモリ書き換え制御方法の別の態様は、上述の一時データ格納工程（ｃ）とブートセクタ書き換え工程（ｄ）との間に、（ｅ）一時データ格納工程によって格納されたブートデータ保存領域の新ブートデータと、ブートセクタに既に格納されている旧ブートデータとを比較し、新ブートデータと旧ブートデータとが異なる場合にのみブートセクタ書き換え工程を実行させるブートデータ比較工程を、更に備えたフラッシュメモリ書き換え制御方法である。
【００１７】
本発明の、フラッシュメモリ書き換え制御方法の別の態様は、フラッシュメモリの書き換えモード終了処理を制御するための情報である書き換えモード終了制御情報の配置アドレスを固定値とすることを特徴とするフラッシュメモリ書き換え制御方法である。
【００１８】
本発明の、フラッシュメモリ書き換え制御方法の別の態様は、上述のブートデータ保存領域が、少なくとも新ブートデータを格納可能なフラッシュメモリの所定のセクタであることを特徴とするフラッシュメモリ書き換え制御方法である。
【００１９】
本発明の、フラッシュメモリ書き換え制御方法の別の態様は、上述のブートデータ保存領域が、少なくとも新ブートデータを格納可能なＲＡＭの所定の領域であることを特徴とするフラッシュメモリ書き換え制御方法である。
【００２０】
本発明の、プログラムの１つの態様は、上述のフラッシュメモリ書き換え制御方法の各工程を実行させるプログラムである。
【００２１】
本発明の、情報記録媒体の１つの態様は、上述のフラッシュメモリ書き換え制御方法の各工程を実行させるプログラムを記録したコンピュータに読み取り可能な情報記録媒体である。
【００２２】
【発明の実施の形態】
この発明の一実施態様を、図面を参照しながら説明する。なお、以下に説明する実施態様は説明のためのものであり、本発明の範囲を制限するものではない。従って、当業者であればこれらの各要素もしくは全要素をこれと均等なものによって置換した実施態様を採用することが可能であるが、これらの実施態様も本発明の範囲に含まれる。
【００２３】
図１は、フラッシュメモリ書き換え制御システムのハードウェアの構成を示す図である。
フラッシュメモリ書き換え制御システム１００は、一括して消去可能な領域であるセクタに分割された書き換えが可能であるフラッシュメモリ１０１、読み書きが可能であるＲＡＭ１０２、および、フラッシュメモリ書き換え制御システム１００を有する制御装置の制御を実行するＣＰＵ１０３を備えている。
【００２４】
フラッシュメモリ１０１は、制御装置の通常モードの制御を実行するメインプログラムや、フォントデータ等を記憶し、更に、制御装置の起動処理を制御する起動プログラムや、フラッシュメモリ１０１の記憶内容を書き換える書き換えモードプログラム等を記憶している。以下、起動プログラムが格納されるセクタをブートセクタ、メインプログラムが格納されるセクタをメインプログラムセクタという。また、ブートセクタに格納されているプログラムやデータをブートデータ、メインプログラムセクタに格納されているプログラムやデータをメインプログラムデータという。
【００２５】
図２は、新しいブートデータを一時的に格納する領域（以下、「ブートデータ保存領域」という）をＲＡＭ上に設けた場合の、フラッシュメモリ書き換え制御システムにおけるフラッシュメモリおよびＲＡＭの構成を示す図であり、図３は、ブートデータ保存領域をフラッシュメモリ上に設けた場合の、フラッシュメモリ書き換え制御システムにおけるフラッシュメモリおよびＲＡＭの構成を示す図である。
【００２６】
ブートデータ保存領域をＲＡＭ上に設けた場合、図２に示すように、フラッシュメモリ１０１は、一括して消去可能な領域であるセクタとして、ブートデータを記憶するブートセクタ２０１およびメインプログラムデータを記憶するメインプログラムセクタ２０２を備えている。また、フォントデータ等はフラッシュメモリ１０１のその他の領域２０４に記憶されている。
【００２７】
ブートデータには、リセット割り込み、受信割り込み等に対応する割り込みハンドラのアドレスをテーブル化した割り込みベクタテーブル、制御装置の起動処理を制御する起動プログラム、書き換えモードにおいてフラッシュメモリ１０１の各セクタのデータを書き換える処理を制御する書き換えモードプログラム、書き換えモードプログラムの一処理としてセクタに記憶されているデータを消去するセクタ消去プログラム、書き換えモードプログラムの一処理として一般セクタを書き換える一般セクタ更新プログラム、書き換えモードプログラムの一処理としてブートセクタ２０１を書き換えるブートセクタ更新プログラム、および、書き換えモードにおける終了処理として最後に実行される書き換えモード終了プログラムを備えている。
【００２８】
また、書き換えモード終了プログラムは、配置アドレスが固定化されており、書き換え前のブートデータ（以下、「旧ブートデータ」という）であっても、書き換え後のブートデータ（以下、「新ブートデータ」という）であっても、同じアドレスから開始される。
【００２９】
ＲＡＭ１０２は、受信した書き換え用の更新データを記憶するためのワーク領域２２１、ブートデータの各プログラム（図では、セクタ消去プログラム、一般セクタ更新プログラムおよびブートセクタ更新プログラム）を複写するためのプログラム領域２２２、新ブートデータを一時的に記憶するためのブートデータ保存領域であるＴＭＰ領域２２３、および、ブートセクタ２０１以外のセクタを書き換える際にデータを編集するための編集領域２２４を備えている。ここで、ＴＭＰ領域２２３は、新ブートデータを記憶可能な容量を備えていればよい。
【００３０】
ブートデータ保存領域をフラッシュメモリ上に設けた場合は、図３に示すように、フラッシュメモリ１０１は、ブートセクタ２０１、メインプログラムセクタ２０２、その他の領域２０４、および、新ブートデータを一時的に記憶するブートデータ保存領域であるＴＭＰセクタ２０３を備えている。尚、ＴＭＰセクタ２０３は、少なくともブートセクタ２０１と同等の記憶容量を持つセクタである。ＲＡＭ１０２は、ワーク領域２２１、プログラム領域２２２および編集領域２２４を備えている。
【００３１】
図４は、フラッシュメモリ書き換え制御システムのソフトウェアの機能ブロックの構成を示す図である。
フラッシュメモリ書き換え制御システム１００は、更新データ取得部４０１、一般セクタ書き換え部４０２、一時データ格納部４０３、ブートデータ比較部４０４、ブートセクタ書き換え部４０５および書き換えモード終了部４０６を備えている。
【００３２】
更新データ取得部４０１は、ＲＡＭ１０２のプログラム領域２２２にセクタ消去プログラム、一般セクタ更新プログラムおよびブートセクタ更新プログラムを複写する。また、フラッシュメモリ１０１の書き換え用の更新データおよび更新データを格納すべきフラッシュメモリ１０１の領域を指定する格納指示データ（例えば、先頭アドレス、格納データ長等）を取得し、ＲＡＭ１０２のワーク領域２２１に格納（記憶）し、格納指示データに基づいて、更新対象セクタを特定する。ここで、更新対象セクタとは、取得した更新データを格納すべきフラッシュメモリ１０１のセクタである。
【００３３】
一般セクタ書き換え部４０２は、更新データ取得部４０１によって特定した更新対象セクタがブートセクタ２０１以外のセクタである場合に、更新対象セクタに既に格納されている全てのデータ（以下、「旧セクタ格納データ」という）を取得し、ＲＡＭ１０２の編集領域２２４に格納する。また、更新データ取得部４０１によって取得した更新データおよび格納指示データに基づいて旧セクタ格納データを編集して、更新後の更新対象セクタに格納すべき全てのデータ（以下、「新セクタ格納データ」という）を生成する。更に、更新対象セクタを消去し、更新対象セクタに新セクタ格納データを１ワードずつ書き込む。
【００３４】
一時データ格納部４０３は、更新データ取得部４０１によって特定した更新対象セクタがブートセクタ２０１である場合に、ブートデータ保存領域であるＴＭＰ領域２２３またはＴＭＰセクタ２０３に、取得した更新データを格納する。ここで、ブートデータの一部分のみを変更することはできないので、更新データとして全ての新ブートデータを取得し、ブートデータ保存領域に新ブートデータを格納する。また、ブートデータ保存領域がＴＭＰセクタ２０３である場合は、ＴＭＰセクタ２０３のデータが消去されていることを確認し、新ブートデータをＴＭＰセクタ２０３に格納する。即ち、ＴＭＰセクタ２０３のデータが消去されていない場合は、ＴＭＰセクタ２０３のデータを消去した後、新ブートデータをＴＭＰセクタ２０３に格納する。
【００３５】
ブートデータ比較部４０４は、ブートデータ保存領域であるＴＭＰ領域２２３またはＴＭＰセクタ２０３に格納されている新ブートデータとブートセクタ２０１に格納されている旧ブートデータとを比較し、異なるデータであるか否かを判定する。即ち、ブートセクタ２０１の書き換えが必要であるか否かを判定する。
【００３６】
ブートセクタ書き換え部４０５は、ブートデータ比較部４０４によって、新ブートデータと旧ブートデータとが異なる場合には、ブートセクタ２０１を消去し、ブートセクタ２０１に新ブートデータを格納する。一方、ブートデータ比較部４０４によって、新ブートデータと旧ブートデータとが同一である場合には、ブートセクタ２０１を旧ブートデータのままとする。
【００３７】
書き換えモード終了部４０６は、書き換えモードにおける処理結果をホスト装置へ送信したり、制御装置の操作パネル、表示部等の出力部へ送信したりする。また、処理結果に基づいた書き換えモードにおける所定の終了処理を実行する。ここで、書き換えモード終了部の実体は、ブートセクタ２０１に格納されている書き換えモード終了プログラムである。
【００３８】
図５は、フラッシュメモリ書き換え制御システムのモード遷移を示す図である。以下、プリンタを例に挙げて説明する。
まず、プリンタの電源が投入されると、ＣＰＵは、起動処理を実行する（Ｓ５０１）。次に、操作パネル、コマンド等により入力された制御モードを取り出し（Ｓ５０２）、入力された制御モードが書き換えモードであるか否かを判定する（Ｓ５０３）。
【００３９】
書き換えモードである場合（Ｓ５０３；Ｙｅｓ）は、フラッシュメモリの書き換えモード処理に移行する（Ｓ５０４）。書き換えモードではない場合（Ｓ５０３；Ｎｏ）は、プリンタの通常モード処理を実行する（Ｓ５０５）。
【００４０】
次に、図６、図７、図８および図９を参照してフラッシュメモリの書き換えモード処理を説明する。図６および図７は、フラッシュメモリの書き換えモード処理の手順を示す図である。
まず、ブートセクタ２０１の旧ブートデータからＲＡＭ１０２のプログラム領域２２２にセクタ消去プログラム、一般セクタ更新プログラムおよびブートセクタ更新プログラムを複写する（Ｓ６０１）。
【００４１】
次に、ブートデータ保存領域を初期化する（Ｓ６０２）。ここで、ブートデータ保存領域が、フラッシュメモリ１０１のＴＭＰセクタ２０３である場合は、ＲＡＭ１０２のプログラム領域２２２に複写したセクタ消去プログラムによりＴＭＰセクタ２０３を一括消去する。また、ブートデータ保存領域がＲＡＭ１０２のＴＭＰ領域２２３である場合は、ＴＭＰ領域２２３に初期データを格納する。
【００４２】
次に、書き換え用の更新データおよび格納指示データを取得し（Ｓ６０３）、取得した更新データの更新対象セクタを判定する（Ｓ６０４）。ここで、取得した更新データおよび格納指示データは、ＲＡＭ１０２のワーク領域２２１に格納される。
【００４３】
更新対象セクタがブートセクタである場合（Ｓ６０４；「ブートセクタ」）は、取得した更新データをブートデータ保存領域に格納し（Ｓ６０５）、次のステップＳ６１０に移行する。ここで、ブートデータ保存領域がフラッシュメモリ１０１のＴＭＰセクタ２０３である場合は、ワーク領域２２１に格納した格納指示データおよび更新データに基づいて、ＲＡＭ１０２のプログラム領域２２２の一般セクタ更新プログラムにより、ＴＭＰセクタ２０３の所定の領域に更新データを格納する。また、ブートデータ保存領域がＲＡＭ１０２のＴＭＰ領域２２３である場合は、ワーク領域２２１に格納した格納指示データおよび更新データに基づいて、ＴＭＰ領域２２３の所定の領域に、更新データを格納する。
【００４４】
更新対象セクタが一般セクタである場合（Ｓ６０４；「一般セクタ」）は、更新対象セクタが既に編集中であるか否かを判定する（Ｓ６０６）。更新対象セクタが既に編集中である場合（Ｓ６０６；Ｙｅｓ）は、ワーク領域２２１に格納した格納指示データおよび更新データに基づいて、編集領域２２４の所定の領域に、更新データを格納し（Ｓ６０７）、次のステップＳ６１０に移行する。
【００４５】
一方、更新対象セクタが編集中ではない場合（Ｓ６０６；Ｎｏ）は、ＲＡＭ１０２のプログラム領域２２２の一般セクタ更新プログラムにより、編集領域２２４に格納されている新セクタ格納データを前回の更新対象セクタに格納し（Ｓ６０８）、今回の更新対象セクタにある旧セクタ格納データを編集領域２２４に取り出し（Ｓ６０９）、次のステップＳ６０７に移行する。
【００４６】
次に、全ての更新データを取得したか否かを判定し（Ｓ６１０）、全ての更新データを取得していない場合（Ｓ６１０；Ｎｏ）は、ステップＳ６０３に戻り、ステップＳ６０３からＳ６１０までを繰り返す。一方、全ての更新データを取得した場合（Ｓ６１０；Ｙｅｓ）は、編集領域２２４に有効データが存在するか否かを判定する（Ｓ６１１）。即ち、更新対象セクタにまだ書き戻していない、編集途上のデータがあるか否かを判定する。
【００４７】
編集領域２２４に有効データが存在しない場合（Ｓ６１１；Ｎｏ）は、次のステップＳ６１３に移行する。一方、編集領域２２４に有効データが存在する場合（Ｓ６１１；Ｙｅｓ）は、ＲＡＭ１０２のプログラム領域２２２の一般セクタ更新プログラムにより、編集領域２２４に格納されている新セクタ格納データを更新対象セクタに格納する（Ｓ６１２）。
【００４８】
次に、ブートデータ保存領域に有効データが存在するか否かを判定する（Ｓ６１３）。即ち、ブートデータ保存領域に新ブートデータが格納されているか否かを判定する。ブートデータ保存領域に有効データが存在しない場合（Ｓ６１３；Ｎｏ）は、次のステップＳ６１６に移行する。一方、ブートデータ保存領域に有効データが存在する場合（Ｓ６１３；Ｙｅｓ）は、ブートデータ保存領域に格納されている新ブートデータとブートセクタ２０１の旧ブートデータとを比較し、新ブートデータが旧ブートデータと異なるか否かを判定する（Ｓ６１４）。
【００４９】
新ブートデータが旧ブートデータと同一の場合（Ｓ６１４；Ｎｏ）は、次のステップＳ６１６に移行する。最後に、ブートセクタ２０１の所定のアドレスへとジャンプすることにより、これ以降のモード終了に伴う各種の処理を書き換えモード終了プログラムに任せる（Ｓ６１６）。
【００５０】
新ブートデータが旧ブートデータと異なる場合（Ｓ６１４；Ｙｅｓ）は、ＲＡＭ１０２のプログラム領域２２２のブートセクタ更新プログラムにより、ブートデータ保存領域の新ブートデータをブートセクタ２０１に格納する（Ｓ６１５）。なお、ブートセクタ更新プログラムから呼び出し元に戻ってくることはない。
【００５１】
書き換えモード終了プログラムは、Ｓ６１５および後述のＳ９０５からジャンプしてくることにより実行される。ここでは、書き換えモードにおける処理結果をホスト装置へ送信したり、制御装置の操作パネル、表示部等の出力部へ送信したり、また、処理結果に基づいた書き換えモードにおける所定の終了処理を実行する（Ｓ６１７）。
【００５２】
図８は、一般セクタの書き換え処理の手順を示す図である。
まず、更新対象セクタをＲＡＭ１０２のプログラム領域２２２のセクタ消去プログラムにより一括消去する（Ｓ８０１）。次に、ＲＡＭ１０２の編集領域２２４に格納されている更新対象セクタの新セクタ格納データを、書き込み可能なデータサイズ分（例えば、１ワード）取り出し（Ｓ８０２）、取り出したデータを更新対象セクタに書き込む（Ｓ８０３）。
【００５３】
最後に、新セクタ格納データを更新対象セクタに全て書き込んだか否かを判定し（Ｓ８０４）、新セクタ格納データを更新対象セクタに全て書き込んでいない場合（Ｓ８０４；Ｎｏ）は、ステップＳ８０２に戻り、ステップＳ８０２からＳ８０４までを繰り返す。一方、新セクタ格納データを更新対象セクタに全て書き込んだ場合（Ｓ８０４；Ｙｅｓ）は、一般セクタの書き換え処理を終了する。
【００５４】
図９は、ブートセクタの書き換え処理の手順を示す図である。
まずブートセクタを、ＲＡＭ１０２のプログラム領域２２２のセクタ消去プログラムにより一括消去する（Ｓ９０１）。次に、ブートセクタ保存領域に格納されている新ブートデータを、書き込み可能なデータサイズ分（例えば、１ワード）取り出し（Ｓ９０２）、取り出したデータをブートセクタに書き込む（Ｓ９０３）。
【００５５】
続いて、新ブートデータをブートセクタに全て書き込んだか否かを判定し（Ｓ９０４）、新ブートデータをブートセクタに全て書き込んでいない場合（Ｓ９０４；Ｎｏ）は、ステップＳ９０２に戻り、ステップＳ９０２からＳ９０４までを繰り返す。一方、新ブートデータをブートセクタに全て書き込んだ場合（Ｓ９０４；Ｙｅｓ）は、次のステップＳ９０５に移行する。
【００５６】
最後に、ブートセクタ２０１の所定のアドレスへとジャンプすることにより、これ以降のモード終了に伴う各種の処理を書き換えモード終了プログラムに任せる（Ｓ９０５）。
【００５７】
図１０は、ＴＭＰセクタを使用した書き換え処理によるデータ遷移を説明する図である。ここで、更新データとしてメインプログラムデータとブートデータがダウンロードされる場合を例に挙げて説明する。
書き換え用の更新データおよび更新データを格納すべきフラッシュメモリ１０１の領域を指定する格納指示データを取得し、ＲＡＭ１０２のワーク領域２２１に格納する（図１０の▲１▼）。
【００５８】
更新データがメインプログラムセクタ２０２に格納される場合は、メインプログラムセクタ２０２の旧セクタ格納データをＲＡＭ１０２の編集領域２２４に取り出し（図１０の▲２▼）、更新データおよび格納指示データに基づいて編集し、新セクタ格納データを生成する（図１０の▲３▼）。メインプログラムセクタ２０２を消去し、ＲＡＭ１０２の編集領域２２４の新セクタ格納データをメインプログラムセクタ２０２に書き込む（図１０の▲４▼）。
【００５９】
更新データがブートセクタ２０１に格納される場合は、格納指示データに基づいて、更新データをＴＭＰセクタ２０３に書き込む（図１０の▲５▼）。ブートセクタ２０１の旧ブートデータとＴＭＰセクタ２０３の新ブートデータとを比較し（図１０の▲６▼）、ブートセクタ２０１の旧ブートデータとＴＭＰセクタ２０３の新ブートデータとが異なっている場合は、ブートセクタ２０１を消去し、ＴＭＰセクタ２０３の新ブートデータをブートセクタ２０１に書き込み（図１０の▲７▼）、ＴＭＰセクタ２０３を消去する（図１０の▲８▼）。ブートセクタ２０１の旧ブートデータとＴＭＰセクタ２０３の新ブートデータとが同一の場合は、ＴＭＰセクタ２０３を消去する（図１０の▲９▼）。
【００６０】
図１１は、ＴＭＰ領域を使用した書き換え処理によるデータ遷移を説明する図である。ここで、更新データとしてメインプログラムデータとブートデータがダウンロードされる場合を例に挙げて説明する。
書き換え用の更新データおよび更新データを格納すべきフラッシュメモリ１０１の領域を指定する格納指示データを取得し、ＲＡＭ１０２のワーク領域２２１に格納する（図１１の▲１▼）。
【００６１】
更新データがメインプログラムセクタ２０２に格納される場合は、メインプログラムセクタ２０２の旧セクタ格納データをＲＡＭ１０２の編集領域２２４に取り出し（図１１の▲２▼）、更新データおよび格納指示データに基づいて編集し、新セクタ格納データを生成する（図１１の▲３▼）。メインプログラムセクタ２０２を消去し、ＲＡＭ１０２の編集領域２２４の新セクタ格納データをメインプログラムセクタ２０２に書き込む（図１１の▲４▼）。
【００６２】
更新データがブートセクタ２０１に格納される場合は、格納指示データに基づいて、更新データをＴＭＰ領域２２３に格納する（図１１の▲５▼）。ブートセクタ２０１の旧ブートデータとＴＭＰ領域２２３の新ブートデータとを比較し（図１１の▲６▼）、ブートセクタ２０１の旧ブートデータとＴＭＰ領域２２３の新ブートデータとが異なっている場合は、ブートセクタ２０１を消去し、ＴＭＰ領域２２３の新ブートデータをブートセクタ２０１に書き込む（図１１の▲７▼）。ブートセクタ２０１の旧ブートデータとＴＭＰ領域２２３の新ブートデータとが同一の場合は、そのままの状態とする。
【００６３】
本発明のプログラムは、上述のフラッシュメモリ書き換え制御方法の各工程を実行させるプログラムである。
本発明の情報記録媒体は、上述のフラッシュメモリ書き換え制御方法の各工程を実行させるプログラムを記録したものである。また、本発明の情報記録媒体は、コンパクト・ディスク、フレキシブル・ディスク、ハード・ディスク、光磁気ディスク、ディジタル・バーサタイル・ディスク、磁気テープ、もしくはメモリ・カードであっても良い。
【００６４】
【発明の効果】
以上説明したように、本発明によれば、以下の効果を奏する。
ブートセクタの書き換え用のデータである新ブートデータをブートデータ保存領域に一時保存しておき、一般セクタの書き換えが終わった後にブートセクタを書き換えるので、ブートデータとメインプログラムデータをまとめて１回ダウンロードするだけで機器のファームウェアのバージョンアップが可能となる。即ち作業者は、以前のファームウェアバージョンを調べて作業手順を選択するという煩雑な作業から解放され、いつでも１回のダウンロード作業にてファームウェアのバージョンアップを完遂することができる。更に、１回のダウンロード作業のみであることから書き換え作業に要する時間を削減することができる。
【００６５】
また、ブートデータ保存領域に格納されている新ブートデータとブートセクタに格納されている旧ブートデータとを比較し、新ブートデータと旧ブートデータとが異なるときにのみブートセクタを書き換えることにより、不慮の電源断等によりシステムが起動不能となるリスクを軽減することができる。
【００６６】
また、新ブートデータを格納するブートデータ保存領域として、ＲＡＭ上にＴＭＰ領域を備えることにより、フラッシュメモリの記憶容量が小さいシステムにおいても、１回のダウンロード作業にてブートセクタおよび／または一般セクタを書き換えることが可能である。
【００６７】
また、新ブートデータを格納するブートデータ保存領域として、フラッシュメモリ上にＴＭＰセクタを備えることにより、ＲＡＭの記憶容量が小さいシステムにおいても、１回のダウンロード作業にてブートセクタおよび／または一般セクタを書き換えることが可能である。
【００６８】
また、書き換えモード終了プログラムの配置アドレスを固定化することにより、ブートセクタ更新プログラムの末尾で行うべき終了処理をフラッシュメモリ上で実行できるようになり、したがって、実行時はＲＡＭ上に置かれるブートセクタ更新プログラムが軽量化され、ＲＡＭの記憶容量がより小さいシステムにおいても、１回のダウンロード作業にてブートセクタおよび／または一般セクタを書き換えることが可能である。
【図面の簡単な説明】
【図１】フラッシュメモリ書き換え制御システムのハードウェアの構成を示す図である。
【図２】新ブートデータを格納する領域をＲＡＭ上に設けた場合のフラッシュメモリ書き換え制御システムにおけるフラッシュメモリおよびＲＡＭの構成を示す図である。
【図３】新ブートデータを格納する領域をフラッシュメモリ上に設けた場合のフラッシュメモリ書き換え制御システムにおけるフラッシュメモリおよびＲＡＭの構成を示す図である。
【図４】フラッシュメモリ書き換え制御システムのソフトウェアの機能ブロックの構成を示す図である。
【図５】フラッシュメモリ書き換え制御システムのモード遷移を示す図である。
【図６】フラッシュメモリの書き換えモード処理の手順を示す図である。
【図７】フラッシュメモリの書き換えモード処理の手順を示す図である（図６の続き）。
【図８】一般セクタの書き換え処理の手順を示す図である。
【図９】ブートセクタの書き換え処理の手順を示す図である。
【図１０】ＴＭＰセクタを使用した書き換え処理によるデータ遷移を説明する図である。
【図１１】ＴＭＰ領域を使用した書き換え処理によるデータ遷移を説明する図である。
【図１２】従来の書き換え処理によるデータ遷移を説明する図である。
【符号の説明】
１００　　フラッシュメモリ書き換え制御システム
１０１　　フラッシュメモリ
１０２　　ＲＡＭ
１０３　　ＣＰＵ
２０１　　ブートセクタ
２０２　　メインプログラムセクタ
２０３　　ＴＭＰセクタ
２０４　　その他の領域
２２１　　ワーク領域
２２２　　プログラム領域
２２３　　ＴＭＰ領域
２２４　　編集領域
【図１】
2004013536.tif 000003
【図２】
2004013536.tif 000004
【図３】
2004013536.tif 000005
【図４】
2004013536.tif 000006
【図５】
2004013536.tif 000007
【図６】
2004013536.tif 000008
【図７】
2004013536.tif 000009
【図８】
2004013536.tif 000010
【図９】
2004013536.tif 000011
【図１０】
2004013536.tif 000012
【図１１】
2004013536.tif 000013
【図１２】
2004013536.tif 000014