(57)【要約】【課題】  不揮発性メモリへの書き込み回数を低減させることができるメモリ制御装置、メモリ制御方法、およびプログラムを提供する。【解決手段】  不揮発性メモリの記憶領域が分割されたブロックに対応する情報であって、前記不揮発性メモリからのデータの読み出しが行われるときに読み出し対象のブロックを特定するための情報を取得する。そして、不揮発性メモリにおける１つのブロックへの書き込み対象の所定のデータと、前記取得された当該１つのブロックに対応する情報の両方を、当該１つのブロックに書き込む。【選択図】  図４
2015125598.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリへデータを書き込むメモリ制御装置であって、
前記不揮発性メモリへの書き込み対象の所定のデータを、当該不揮発性メモリの記憶領域が分割されたブロックに書き込む書き込み手段と、
前記書き込み手段によりデータが書き込まれるブロックに対応する情報であって、前記不揮発性メモリからのデータの読み出しが行われるときに読み出し対象のブロックを特定するための情報を取得する取得手段と、を有し、
前記書き込み手段は、前記不揮発性メモリにおける１つのブロックへの書き込み対象の所定のデータと、前記取得手段により取得された当該１つのブロックに対応する情報の両方を、当該１つのブロックに書き込むことを特徴とするメモリ制御装置。
【請求項２】
前記不揮発性メモリにおける前記ブロックに書き込まれている前記情報を参照することによりデータの読み出し対象のブロックを特定し、当該特定されたブロックに書き込まれているデータを読み出す読み出し手段を有することを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記取得手段は、前記書き込み手段による前記不揮発性メモリへの書き込み回数を特定するための情報を取得し、
前記読み出し手段は、前記取得手段により取得され前記書き込み手段により書き込まれた前記情報に基づくブロックからデータを読み出すことを特徴とする請求項２に記載のメモリ制御装置。
【請求項４】
前記読み出し手段は、第１の書き込み回数に対応する情報が書き込まれた第１のブロックが、当該第１の書き込み回数よりも少ない第２の書き込み回数に対応する情報が書き込まれた第２のブロックよりも読み出し対象として優先されるように、前記読み出しを実行することを特徴とする請求項３に記載のメモリ制御装置。
【請求項５】
前記書き込み手段は、前記不揮発性メモリへの書き込み回数が所定の回数を越える場合、前記取得手段により取得された、初期化された回数に対応する情報を書き込み、
前記読み出し手段は、データの読み出し候補の複数のブロックに、前記初期化の前に対応する情報が書き込まれているブロックと、当該初期化の後に対応する情報が書き込まれているブロックがある場合、当該初期化の後に対応する情報が書き込まれているブロックを読み出し対象のブロックとして決定することを特徴とする請求項３に記載のメモリ制御装置。
【請求項６】
前記読み出し手段は、前記ブロックから前記所定のデータと、前記ブロックに書き込まれている前記情報を読み出し、
前記取得手段は、当該読み出された前記情報に基づいて新たな情報を取得し、前記書き込み手段は、新たな書き込み対象のデータと当該新たな情報の両方を、１つのブロックに書き込むことを特徴とする請求項２乃至５のいずれか１項に記載のメモリ制御装置。
【請求項７】
前記書き込み手段は、前記１つのブロックに対する前記所定のデータの書き込みの前と後に、前記情報を当該１つのブロックに書き込み、
前記読み出し手段は、読み出し候補のブロックにおいて前記所定のデータの書き込みの前と後に書き込まれた前記情報が整合した場合、当該候補のブロックからデータを読み出すことを特徴とする請求項２乃至６のいずれか１項に記載のメモリ制御装置。
【請求項８】
前記読み出し手段は、読み出し候補のブロックにおいて前記所定のデータの書き込みの前と後に書き込まれた前記情報が整合しなかった場合、前記不揮発性メモリにおける他のブロックに書き込まれている前記情報に基づき、前記書き込み手段により所定のデータの前と後に書き込まれた前記情報が整合するブロックからデータを読み出すことを特徴とする請求項７に記載のメモリ制御装置。
【請求項９】
前記読み出し手段は、前記メモリ制御装置が起動したときに、前記読み出しを行うことを特徴とする請求項２乃至８のいずれか１項に記載のメモリ制御装置。
【請求項１０】
前記書き込み手段は、前記１つのブロックに前記所定のデータと前記情報を書き込む前に、当該１つのブロックの全ての領域に所定の値を書き込み、当該所定の値が書き込まれた当該１つのブロックに、当該所定のデータと当該情報を書き込むことを特徴とする請求項１乃至９のいずれか１項に記載のメモリ制御装置。
【請求項１１】
前記不揮発性メモリは、フラッシュメモリであることを特徴とする請求項１乃至１０のいずれか１項に記載のメモリ制御装置。
【請求項１２】
前記書き込み手段は、前記メモリ制御装置が備える前記不揮発性メモリに前記所定のデータと前記情報を書き込むことを特徴とする請求項１乃至１１のいずれか１項に記載のメモリ制御装置。
【請求項１３】
印刷媒体に画像を印刷する印刷手段を有し、
前記書き込み手段は、前記所定のデータとして、前記印刷手段による印刷を制御するための制御情報を前記不揮発性メモリに書き込むことを特徴とする請求項１乃至１２のいずれか１項に記載のメモリ制御装置。
【請求項１４】
不揮発性メモリへデータを書き込むメモリ制御方法であって、
前記不揮発性メモリの記憶領域が分割されたブロックに対応する情報であって、前記不揮発性メモリからのデータの読み出しが行われるときに読み出し対象のブロックを特定するための情報を取得し、
前記不揮発性メモリにおける１つのブロックへの書き込み対象の所定のデータと、前記取得された当該１つのブロックに対応する情報の両方を、当該１つのブロックに書き込むことを特徴とするメモリ制御方法。
【請求項１５】
請求項１乃至１３のいずれか１項に記載のメモリ制御装置の各手段としてコンピュータを機能させるための、または請求項１４に記載のメモリ制御方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリへデータを書き込むメモリ制御装置、メモリ制御方法、およびプログラムに関する。
【背景技術】
【０００２】
従来、装置内の不揮発性メモリとしてＥＥＰＲＯＭやフラッシュメモリを備える装置があった。このような不揮発性メモリへのデータの書き込みの途中で電源が遮断された場合、電源が再投入されたときに書き込みが適切に完了しなかったデータが読み出されてしまうことがある。また上記のような不揮発性メモリには書き換えの制限回数が設けられていることがある。そのため、不揮発性メモリへのデータ書き込み、データの読み出しを制御するための情報を当該不揮発性メモリに記憶させる技術がある。
【０００３】
特許文献１には、不揮発性メモリにおけるメモリ領域として複数のブロックを割り当て、書き込み対象のデータをその複数のブロックのそれぞれに書き込むことが記載されている。また各ブロックにデータが書き込まれたときに、その書き込みの履歴をフラグデータとして当該不揮発性メモリ上の別のブロックに書き込むことが記載されている。そして、当該フラグデータを参照することで、データを書き込むブロックの選択、データを読み出すブロックの選択を行うことが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４０３７６０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の特許文献１に記載された技術では、上記のように、データを書き込むためのブロックとは別のブロックに対して、当該ブロックへの書き込みの履歴を示すフラグデータを書き込む。
【０００６】
そのため、不揮発性メモリに所定のデータを書き込む際には、当該所定のデータを書き込むためのブロックに加え、別途、上記のフラグデータを別のブロックに書き込まなければならない。よって、上記所定のデータに加えて上記フラグデータの書き込みのために、少なくとも２つのブロックに対してデータ書き込みを行わなくてはならない。
【０００７】
上記の課題を鑑みて本発明は、不揮発性メモリへの書き込み回数を低減させることができるメモリ制御装置、メモリ制御方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明のメモリ制御装置は、不揮発性メモリへデータを書き込むメモリ制御装置であって、前記不揮発性メモリへの書き込み対象の所定のデータを、当該不揮発性メモリの記憶領域が分割されたブロックに書き込む書き込み手段と、前記書き込み手段によりデータが書き込まれるブロックに対応する情報であって、前記不揮発性メモリからのデータの読み出しが行われるときに読み出し対象のブロックを特定するための情報を取得する取得手段と、を有し、前記書き込み手段は、前記不揮発性メモリにおける１つのブロックへの書き込み対象の所定のデータと、前記取得手段により取得された当該１つのブロックに対応する情報の両方を、当該１つのブロックに書き込むことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、１つのブロックへの書き込み対象の所定のデータと、データの読み出しが行われるときに読み出し対象のブロックを特定するための情報を、当該１つのブロックに書き込む。そのため、不揮発性メモリへの書き込み回数を低減させることができる。
【図面の簡単な説明】
【００１０】
【図１】本実施形態におけるメモリ制御装置の一例である、インクジェットプリンタ３を示す図である。
【図２】インクジェットプリンタ３の内部に組み込まれ、インクジェットプリンタ３を制御するための電子制御回路基板１を説明するための図である。
【図３】ＲＡＭ１０２とフラッシュメモリ１０３の内部のデータマッピングの概略図である。
【図４】制御情報のデータセットを示す図である。
【図５】データセットをフラッシュメモリ１０３へ保存する処理を示すフローチャートである。
【図６】フラッシュメモリ１０３からのデータの読み出し処理を示すフローチャートである。
【図７】データ読み出し対象のブロックを決定する処理を説明するための図である。
【図８】フラッシュメモリ１０３へのデータの書き込みが適切に完了できなかった場合のブロックの状態を示す図である。
【図９】書き込み回数を加算する処理の一例を示すフローチャートである。
【図１０】図９に示した処理によりカウンタ値が設定される場合の、読取対象のブロック決定処理の一例を示すフローチャートである。
【図１１】図９に示した処理によりカウンタ値が設定された場合の、各ブロックに対応するカウンタ値の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本実施形態について説明する。なお、以下の実施形態はあくまで実施の一例を示したものであり、本発明は以下の実施形態に限定されるものではない。
【００１２】
（１）システムの構成
まず本実施形態において不揮発性メモリの制御を行うシステムの構成について説明する。図１は、本実施形態におけるメモリ制御装置の一例である、インクジェットプリンタ３を示す図である。なお、メモリ制御装置はインクジェットプリンタに限らず、例えば印刷のための記録剤としてトナーを用いる電子写真方式の印刷装置でもよいし、プリンタに加え、原稿を読み取るためのスキャナを備えた複合機であってもよい。またプリンタに限らず、ＰＣ（パーソナルコンピュータ）や、スマートフォンやタブレット、携帯電話、デジタルカメラなどの各種の装置であってもよい。
【００１３】
操作ＵＩ部３０１は、ユーザに対する各種の表示を行い、またユーザが操作を行って各種の指示を入力するためのユーザインタフェースである。上記の表示として、例えば印刷対象の画像やインクジェットプリンタ３の機能や状態が表示される。また、ユーザが操作するための操作デバイスとして、タッチパネルが表示画面上に設けられている。ただし、ボタン等の操作デバイスが設けられる場合であってもよい。
【００１４】
用紙積載部３０４は、画像が印刷される用紙を積載する。また排紙トレイ３０３は、印刷後の用紙を保持する。
【００１５】
さらにインクジェットプリンタ３の内部には、用紙積載部３０４から用紙をピックアップし、その用紙を搬送するための搬送機構、また記録ヘッドを装着するための装着部を含むプリントエンジン部３０２が設けられている。そして、例えば操作ＵＩ部３０１や、外部装置から印刷が指示されると、上記プリントエンジン部３０２の搬送機構により搬送された用紙に対して、プリントエンジン部３０２に装着された記録ヘッドからインクが吐出される。これにより当該用紙に画像が印刷され、その用紙が排紙トレイ３０３に排紙される。
【００１６】
またプリントエンジン部３０２は記録ヘッドをキャッピングするためのキャッピング機構を含む。そして、記録ヘッドにおけるインク吐出口でインクが固まり、吐出口が詰まることを防ぐために、印刷が実行されていない待機状態の場合、プリントエンジン部３０２は、上記キャッピング機構により記録ヘッドをキャップする。そして、印刷時にはキャッピングを解除することで印刷を行う。
【００１７】
またプリントエンジン部３０２は、インクジェットプリンタ３に電源が供給されたときに、上記キャッピング機構のキャップ開閉状態に応じて、印刷する前に印刷品位を維持するための回復動作を行う。すなわち、電源供給時にキャップが開いていた場合は、記録ヘッドの表面が乾燥して印刷に適さない状態である可能性があるため、回復動作として、記録ヘッドからインクを吐出させる。
【００１８】
図２は、インクジェットプリンタ３の内部に組み込まれ、インクジェットプリンタ３を制御するための電子制御回路基板１を説明するための図である。
【００１９】
ＣＰＵ１０１は、電子制御回路基板１、またインクジェットプリンタ３の全体を制御するための制御部である。フラッシュメモリ１０３は、不揮発性のメモリであり、インクジェットプリンタの各部を制御する制御プログラムや、各種の設定に関する制御情報を記憶する。ＲＡＭ１０２は、制御プログラムや各種制御情報を一時的に保持する揮発性のメモリである。
【００２０】
ＣＰＵ１０１は、フラッシュメモリ１０３に記憶されている上記の制御プログラムや各種の制御情報をＲＡＭ１０２に読み出し、当該制御情報に従って制御プログラムを実行することで、インクジェットプリンタ３の全体を制御することができる。
【００２１】
入出力ポート１０４は、ＣＰＵ１０１と、後述の操作ＵＩ部制御回路１０５、プリントエンジン部制御回路１０６とを接続するためのポートである。
【００２２】
操作ＵＩ部制御回路１０５は、入出力ポート１０４を介したＣＰＵ１０１の制御に従って、上記の操作ＵＩ部３０１に画像や各種の情報を表示させる。また操作ＵＩ部制御回路１０５は、操作ＵＩ部３０１に対するユーザの操作に応じて各種のユーザ指示を入力する。ＣＰＵ１０１は、入出力ポートを介してユーザ指示を入力することで、当該ユーザ指示に応じた制御を行う。
【００２３】
プリントエンジン部制御回路１０６は、ＣＰＵ１０１による制御に従って、印刷対象の画像をプリントエンジン部３０２に出力し、プリントエンジン部３０２に当該画像を印刷媒体へ印刷させる。
【００２４】
電源回路１０７は、ＡＣ電源等の外部電源２に電源ケーブルを介して接続することができる。電源回路１０７が外部電源２と接続されると外部電源２から電源回路１０７に電力が供給され、その電力が電子制御回路基板１の全体に供給される。そして、上記のように電子制御回路基板１に電力が供給可能な状態においてユーザが不図示の電源ボタンを押下することで、インクジェットプリンタ３を起動することができる。
【００２５】
なお本実施形態では、電源回路１０７から電力が電子制御回路基板１に電力が供給されたときに、フラッシュメモリ１０３に記憶されている制御プログラムや各種の制御情報がＲＡＭ１０２に記憶される。またインクジェットプリンタ３が起動している状態においてユーザが上記不図示の電源ボタンを押下することで、インクジェットプリンタの電源を切ることができる。その際に、ＲＡＭ１０２に記憶されている各種の制御情報がフラッシュメモリ１０３に記憶される。そのため、ユーザが上記電源ボタンを押下してインクジェットプリンタ３の電源を切った後に電源ケーブルを外部電源２から外した場合、起動中にＲＡＭ１０２に書き込まれたデータを不揮発性メモリであるフラッシュメモリ１０３に書き込むことができる。
【００２６】
またインクジェットプリンタ３は、不図示の読取エンジンによる原稿の読み取り、またファクシミリ通信や、ＬＡＮ、インターネット等のネットワークを介したデータの送受信が可能であってもよい。
【００２７】
（２）フラッシュメモリ１０３に格納されるデータについて
次に、ＲＡＭ１０２からフラッシュメモリ１０３に書き込まれる、またフラッシュメモリ１０３からＲＡＭ１０２に読み出されるデータについて説明する。図３は、ＲＡＭ１０２とフラッシュメモリ１０３の内部のデータマッピングの概略図である。
【００２８】
フラッシュメモリ１０３は、制御プログラムを格納するためのプログラム格納領域４０１と、制御情報を格納するための制御情報格納領域４０２を含む。同様にＲＡＭ１０２は、フラッシュメモリ１０３から読み出された制御プログラムが展開されるための、またプログラム実行時のワークメモリとして利用されるプログラム実行領域４０３を含む。またＲＡＭ１０２は、フラッシュメモリ１０３から制御情報や履歴情報を展開するための制御情報展開領域４０４を含む。
【００２９】
フラッシュメモリ１０３における制御情報格納領域４０２には、ＣＰＵ１０１が制御プログラムに従って各種の処理を実行するための制御変数や、インクジェットプリンタ３を制御したときの各種履歴を示す履歴情報が記憶される。
【００３０】
制御変数としては、例えばユーザが設定可能な印刷品位や印刷における濃度の情報、またインクジェットプリンタ３において印刷が行われた回数やインク消費量である。また、上述したキャッピングが実行されているか示す情報や、両面印刷を行うための用紙搬送路に用紙が有るか否かを示す情報、記録ヘッドの交換中であるか否かを示す情報が、上記制御情報として記憶されてもよい。
【００３１】
これらの制御変数や履歴情報は、１つのデータセットとして纏められて記憶される。また上記のような各種の制御変数や履歴情報等が、図３において「データセット１、データセット２、データセット３・・」と区別されているように、その情報の種類に対応付けられて制御情報格納領域４０２に記憶されている。
【００３２】
例えばデータセット１は、印刷用の情報であり、設定可能な印刷部数、印刷品位、印刷濃度等の制御変数や、印刷回数やインク消費量などの履歴情報を含む。またインクジェットプリンタ３がファクシミリ通信を実行可能な装置の場合、データセット２には、例えばファクシミリ通信のための情報として、インクジェットプリンタ３のＦＡＸ番号、電話帳等の制御変数、ユーザが過去に設定した各種の履歴情報が含まれる。さらに、インクジェットプリンタ３がネットワーク通信を実行可能な装置の場合、データセット３には、インクジェットプリンタ３のＩＰアドレス、ＬＡＮに接続するための設定情報等の制御変数、またネットワーク通信を行ったアクセス先等の履歴情報が含まれる。
【００３３】
各データセットのデータ構造については図４を用いて後述する。
【００３４】
またフラッシュメモリ１０３の制御情報用の記憶領域である制御情報格納領域４０２は、複数のブロックに分割されており、各データセットを格納するためのメモリ領域としてブロック単位でメモリ領域が割り当てられている。本実施形態では、１ブロックが４Ｋｂｙｔｅの領域であるとする。そして、データセットのそれぞれが、ブロックのそれぞれに個別に格納される。このようにブロックのデータ容量に制限があるため、データセット１、２、３・・のように情報の種類に応じて制御変数、履歴情報が分類され、各データセットが各ブロックに格納される。
【００３５】
また制御情報格納領域４０２は、各データセット（１、２、３・・）に対して複数のブロックが割り当てられている。例えば図３のデータセット１−１が既に書き込まれている場合にデータセット１−２を新たに書き込む場合、データセット１−２に上書きするのではなく、別のブロックに書き込むことができる。これにより、例えばデータセット１−２の書き込みの途中で電源が遮断された場合など、データセット１−２の書き込みに失敗した場合でも、データセット１−１を参照することで、電源再投入時に、過去に書き込んだ情報を読み出すことができる。
【００３６】
上記の書き込みについて具体的に説明する。例えばＲＡＭ１０２に展開されているデータセット１がフラッシュメモリ１０３に書き込まれる場合、各ブロックを参照することで、各ブロックにデータが既に書き込まれているか、またデータの書き込みが古いブロックが判定される。そして、データが書き込まれていないブロックがあればそのブロックにデータが書き込まれ、またデータが書き込まれていないブロックがなければ、データ書き込みの古いブロックに書き込みが行われる。上記判定は、後述するカウンタに基づいて行われる。
【００３７】
図４は、制御情報のデータセットを示す図である。
【００３８】
１つのデータセットは、各種制御変数や履歴情報などの制御情報および、チェックサムデータを格納する制御情報領域５０１と、データの書き込み回数を記憶したカウンタ値を格納する、２つのカウンタ領域を含む。カウンタ領域（上部）５０２は、制御情報領域５０１よりも上部にマッピングされ、制御情報領域５０１よりも先に書き込みが行われる。もう１つのカウンタ領域は、制御情報領域５０１よりも下部にマッピングされ、制御情報領域５０１への書き込みが完了した後に書き込みが行われる。
【００３９】
上記２つのカウンタ領域には、当該データセットが書き込まれるブロックへの書き込み回数を示すカウント情報が記憶される。本実施形態においてはフラッシュメモリの書き換え上限回数が１０万回であるため、カウンタ領域のサイズは、１０万以上の値を記録可能な４ｂｙｔｅ以上とする。
【００４０】
また、図４に示すデータセットが印刷用の制御情報に対応するものであった場合、制御情報領域５０１には、例えばプリントエンジン部３０２の各アクチュエータのキャリブレーション値や、設定可能な印刷品位や濃度の情報などが制御変数として格納される。またインクジェットプリンタ３における印刷回数やインク消費量などが履歴情報として書き込まれる。
【００４１】
本実施形態では、電源が切られる場合などＲＡＭ１０２に記憶されているデータセットをフラッシュメモリ１０３に書き込む場合、そのデータセットが書き込まれるブロックの書き込み回数がカウント情報として２つのカウンタ領域に書き込まれる。
【００４２】
また、例えば起動時などにフラッシュメモリ１０３に記憶されているデータセットをＲＡＭ１０２に展開する場合、２つのカウンタ領域に書き込まれているカウント情報を参照することで、ＲＡＭ１０２に展開されるデータセットを選択する。
【００４３】
本実施形態では、図４に示したように、カウント情報と制御情報の両方が同じブロックに格納される。よって、例えば制御情報とは別のブロックにカウント情報を書き込む場合に比べ、カウント情報の書き込み、読み出しを高速に行うことができる。
【００４４】
また上記のように、カウント情報のブロックと制御情報のブロックが異なる場合、その２つのブロックを対応付けなければならない。本実施形態では、カウント情報が制御情報と同じブロック内に書き込まれるため、カウント情報を容易に管理することができる。
【００４５】
さらに、カウント情報のブロックと制御情報のブロックが異なる場合、カウント情報のために４ｋｂｙｔｅのブロックを別途設けなければならず、またカウント情報の書き込みのために、ブロックへの書き込み回数が多くなってしまう。本実施形態では、カウント情報が制御情報と同じブロック内に書き込まれるため、制御情報、カウント情報の書き込みのためのメモリ容量、またブロックへの書き込み回数を低減することができる。
【００４６】
（３）フラッシュメモリ１０３への書き込みについて
以下、本実施形態におけるフラッシュメモリ１０３に対するＲＡＭ１０２からの書き込みについて詳細に説明する。そのために、まずＲＡＭ１０２に展開されるデータについて説明する。
【００４７】
図３のプログラム実行領域４０３は、フラッシュメモリ１０３のプログラム格納領域４０１に格納されている制御プログラムが、例えばインクジェットプリンタ３の起動時に展開される領域である。ＣＰＵ１０１は、このように展開された制御プログラムを実行することで各種の制御を行う。
【００４８】
図３の制御情報展開領域４０４は、１つ以上のブロック単位のセクションに分割されており、１つのブロック単位サイズのデータセットにつき１つのセクションが割り当てられている。ここでのブロック単位とは、前述のフラッシュメモリ１０３のブロック単位（４Ｋｂｙｔｅ）とする。またＲＡＭ１０２のデータ容量はフラッシュメモリ１０３のデータ容量よりも小さいため、フラッシュメモリ１０３に書き込まれているデータセットの一部がＲＡＭ１０２に読み出される。
【００４９】
インクジェットプリンタ３に電力が供給され、起動したときに、制御プログラムとともに、制御情報がフラッシュメモリ１０３からＲＡＭ１０２に展開される。そして、インクジェットプリンタ３が稼働している状態では、様々なタイミングで制御変数や履歴情報に変更が発生し、その都度ＣＰＵ１０１は、ＲＡＭ１０２の制御情報展開領域４０４の該当データを更新する。また、パワーオフ時や、ユーザが操作ＵＩ部３０１から印刷設定を変更したときや、印刷完了時などの特定のタイミングにおいて、ＣＰＵ１０１は、ＲＡＭ１０２の制御情報データを、データセットごとにフラッシュメモリ１０３へ保存する。
【００５０】
図５は、データセットをフラッシュメモリ１０３へ保存する処理を示すフローチャートである。なお、このフローチャートの処理は、ＣＰＵ１０１が制御プログラムを実行することにより実現される。
【００５１】
Ｓ１０１でＣＰＵ１０１は、ＲＡＭ１０２に展開されているデータセットのチェックサムを計算して値を更新し、ＲＡＭ１０２に書き込む。次にＳ１０２でＣＰＵ１０１は、データセットのカウンタ値をインクリメントし、ＲＡＭ１０２上のデータセットの２つのカウンタ領域に書き込む。このとき、カウンタ領域（上部）５０２とカウンタ領域（下部）５０３には同じ値を書き込む。なお、このカウンタ値は、当該データセットの書き込みに対応する書き込み回数を示す情報として、また後述するデータの読み出し処理において読み出し対象のブロックを決定するための情報としてＳ１０２において取得される。
【００５２】
次にＳ１０３でＣＰＵ１０１は、フラッシュメモリ１０３の制御情報格納領域４０２における、該当データセットに割り当てられたブロックのうち１つを、書き込み先ブロックとして決定する。その決定方法として、例えば当該書き込み対象のデータセットの種類（１、２、３・・）に割り当てられたブロックが複数ある場合、当該複数ブロックのうち、最も古いデータセットが書き込まれたブロックを書き込み先とする。具体的には、フラッシュメモリ１０３に書き込みを行う度に、書き込み先をローテーションして順番に書き込まれるようにする。他にも、フラッシュメモリ１０３の各ブロックに対応するカウント情報を参照し、最もカウント数が少ないブロックを書き込み先としてもよい。
【００５３】
次に、Ｓ１０４においてＣＰＵ１０１は、フラッシュメモリ１０３の書き込み先ブロックのデータをすべて消去する。具体的には図８を用いて後述するが、書き込み先のブロックに対応する全てビットに対して「１」を順次書き込む。
【００５４】
次に、Ｓ１０５においてＣＰＵ１０１は、データセットのデータを、書き込み先ブロックへ書き込む。
【００５５】
以上のように、フラッシュメモリ１０３へデータを保存するシーケンスでは、１つのデータセットにつき、フラッシュメモリ１０３上の１つのブロックに対する消去処理及び書き込み処理を行う。そして、上記カウント情報を当該１つのブロック内に書き込むため、最新データの保存先ブロックを識別するための識別情報（例えばカウント情報）を、フラッシュメモリ１０３上の他のブロックに書き込む必要がない。そのため、そのような識別情報と制御情報との対応付けを容易にし、また制御情報、識別情報の書き込み、読み出しを高速に行うことができる。
【００５６】
例えば、インクジェットプリンタ３の印刷中などにおいて、フラッシュメモリ１０３への書き込み完了と同期して次の動作を行う場合がある。この場合、本実施形態によれば１ブロックへの書き込みでよいため、制御情報とカウント情報のそれぞれを２ブロック以上に続けて書き込む場合に比べて書き込み所要時間が短い。そのため、例えばインクジェットプリンタ３の突然の電源遮断による書き損じを低減させることができる。
【００５７】
このようなフラッシュメモリ１０３へのデータの書き損じについて、図８を用いて説明する。図８は、フラッシュメモリ１０３へのデータの書き込みが適切に完了できなかった場合のブロックの状態を示す図である。図８の（ａ）〜（ｅ）は、それぞれ、制御情報格納領域４０２における１つのブロックにおけるデータ保存状態のパターンを表す。なお、図８中の「ｘｘｘｘｘｘｘｘ」は書き込み前のカウンタ値、「ａａａａ・・・ａａａａ」は書き込み前の制御情報データ、「ＦＦＦＦ・・・ＦＦＦＦ」はデータ消去状態を表す。また、「ｙｙｙｙｙｙｙｙ」は、書き込み後のカウンタ値、「ｂｂｂｂ・・・ｂｂｂｂ」は書き込み後の制御情報データを表す。ブロックへのデータの書き込みが行われる場合、当該ブロックのデータ保存状態が図８（ａ）から図８（ｅ）の状態に順次遷移する。
【００５８】
図８（ａ）は、データの書き込み開始前の状態である。この状態において電源ケーブルが外部電源２から外された場合、あるいは停電等が起きた場合、ＲＡＭ１０２に記憶されている更新後のデータセットや、インクリメントされたカウント情報はフラッシュメモリ１０３に反映されない。即ち、図５に示したフローチャートにおけるＳ１０４の前までに電源遮断された場合、フラッシュメモリ１０３の当該ブロックは変更されない。
【００５９】
図８（ｂ）は、Ｓ１０４におけるデータ消去の途中のデータ保存状態を示す。具体的には、ブロック内の各ビットを「１」とする。なお、図８（ｂ）の例では、１ｂｙｔｅ単位で表現されており、各ｂｙｔｅが「Ｆ」に設定される。Ｓ１０４の途中で電源遮断された場合、当該ブロックは途中まで消去が行われ、途中からは書き換え前のデータが残った、図８（ｂ）に示す状態となる。
【００６０】
図８（ｃ）は、Ｓ１０４におけるデータ消去処理の完了時点でのデータ保存状態を示す。この時点で電源遮断された場合、当該ブロックは、すべて消去された状態（ブロック内の全てのビットが「１」になった状態）になる。
【００６１】
図８（ｄ）は、Ｓ１０５における、データセットの書き込みと中におけるデータ保存状態を示す。Ｓ１０５の途中で電源遮断がされた場合、当該ブロックは、書き込み対象のデータセットの一部のデータが書き込まれ、ブロック内の残りは消去状態になる。
【００６２】
図８（ｅ）は、Ｓ１０５におけるデータセットの書き込みが完了した後のデータ保存状態を示す。このときに電源遮断が起きたとしても、当該ブロックには最新データが適切に書き込まれている。
【００６３】
本実施形態では、図８（ｅ）に示したように１ブロックへの書き込みが完了した時点で、データセットとカウント情報が書き込まれる。一方、例えばカウント情報を別のブロックに書き込む場合、そのブロックを決定し、さらに図８（ａ）〜（ｅ）に示したような手順を更に行わなくてはならない。即ち、カウント情報の書き込み前に電源が遮断されてしまうリスクが大きくなってしまう。
【００６４】
本実施形態では、１ブロックへのデータセットの書き込みにより制御情報とカウント情報の書き込みが完了するため、上記のリスクを低減することができる。
【００６５】
（４）フラッシュメモリ１０３からのデータ読み出しについて
次に、制御情報データを、フラッシュメモリ１０３からＲＡＭ１０２へ展開する方法について説明する。インクジェットプリンタ３は、電力遮断状態から電力が供給されると、フラッシュメモリ１０３に保存されている制御変数や履歴情報を、ＲＡＭ１０２上に展開する。上記のように、ＲＡＭ１０２にはフラッシュメモリ１０３に格納されている複数のデータセットの一部が読み出される。そのためＣＰＵ１０１は、電力遮断状態から電力が供給された直後に、フラッシュメモリ１０３の制御情報格納領域４０２にある各データセットの割り当てブロックの中で、どのブロックに最新のデータセットの情報が保存されているか決定する。そしてＣＰＵ０１は、そのように決定したブロックからデータセットを読み出す。
【００６６】
図６は、フラッシュメモリ１０３からのデータの読み出し処理を示すフローチャートである。なお、このフローチャートは、ＣＰＵ１０１が制御プログラムを実行することにより実現される。
【００６７】
Ｓ２０１においてＣＰＵ１０１は、フラッシュメモリ１０３における各ブロック内のカウント情報に基づいて、最新のデータセットを含むブロックを読み出し対象のブロックとして決定する。Ｓ２０１の処理の詳細は図７を用いて説明する。
【００６８】
図７は、データ読み出し対象のブロックを決定する処理を説明するための図である。図７（ａ）に示すフローチャートの処理では、フラッシュメモリ１０３において各ブロックに格納されたデータセットに含まれるカウント情報を順番に読み出し、そのカウント情報をもとに制御情報の読み出し対象のブロックを決定する。図７（ｂ）は、各ブロックに対応するカウンタ値の一例を示す図である。図７（ｂ）では、フラッシュメモリ１０３において、同種のデータセットに対して、３つのブロックが割り当てブロックとして割り当てられているとする。即ち、例えば印刷用のデータセットの場合、３つのブロックのそれぞれにローテーションさせながら、最大３つのデータセットが書き込まれているものとする。
【００６９】
図７（ａ）のフローチャートにおけるＳ３０１でＣＰＵ１０１は、当該読み出し候補のブロックのカウンタ値を示す変数「カウンタ値」の初期化を行う。次にＳ３０２において、カウント情報が読み出されるブロック番号（１、２、３）を示す変数ｉを初期化する。
【００７０】
次にＳ３０３においてＣＰＵ１０１は、フラッシュメモリ１０３上のｉ番目の割り当てブロックのカウンタ領域（上部）５０２の値と、カウンタ領域（下部）５０３の値を、上部カウンタ値ｉ、下部カウンタ値ｉとしてＲＡＭ１０２上へ読み出す。
【００７１】
次にＳ３０４においてＣＰＵ１０１は、上部カウンタｉと下部カウンタｉの値が一致しているかを確認する。両者が一致していない場合は、Ｓ３０９に進み、ＣＰＵ１０１は、ｉ番目の割り当てブロックに無効フラグを立ててＳ３１０へ進む。
【００７２】
なお無効フラグとは、フラッシュメモリ１０３の注目しているブロックのデータが、有効値か無効値かを判断するためのフラグである。無効フラグは、データセットがフラッシュメモリ１０３に割り当てられたブロック数の分だけＲＡＭ１０２上に保持される。この無効フラグは、後述する図６のＳ２０２において、フラッシュメモリ１０３からの読み出しの要否を判定するために用いられる。
【００７３】
上記のＳ３０４において上部カウンタｉと下部カウンタｉの値が一致していない場合、図８（ｂ）や図８（ｄ）に示したように、当該ブロックに対する消去処理あるいはデータ書き込み処理の途中で書き込みが終了してしまった場合が考えられる。そのため、Ｓ３０４で「Ｎｏ」と判定された場合はＳ３０９に進み、当該ブロックが読み出し対象とならないように処理が行われる。
【００７４】
Ｓ３０４で上部カウンタｉと下部カウンタｉの値が一致していたと判定された場合は、Ｓ３０５に進み、ＣＰＵ１０１は、上部カウンタ値ｉの値をカウンタ値ｉに設定する。
【００７５】
Ｓ３０６では、カウンタ値ｉが有効値であるかを確認する。ここで、有効値とは、カウンタ領域（上部）５０２とカウンタ領域（下部）５０３のサイズが４ｂｙｔｅである場合は、０ｘ０から０ｘＦＦＦＦＦＦＦＥまでの値である。カウンタ値ｉがそれ以外の値であると、無効値と判断する。
【００７６】
Ｓ３０６で当該カウンタ値ｉが無効と判定された場合、当該カウンタ値ｉに書き損じが生じており、当該ブロックの制御情報も書き損じが生じている可能性があるため、当該ブロックに無効フラグを立てるためにＳ３０９へ進む。
【００７７】
Ｓ３０６で当該カウンタ値ｉが有効と判定するとＳ３０７へ進み、当該読み出し候補のブロックのカウンタ値と、カウンタ値ｉを比較する。
【００７８】
カウンタ値ｉが、当該読み出し候補のブロックのカウンタ値以上だった場合、ＣＰＵ１０１は、ブロックｉが当該読み出し候補のブロックよりも新しい制御情報を記憶していると判定して、Ｓ３０８へ処理を進める。
【００７９】
Ｓ３０８においてＣＰＵ１０１は、割り当てブロックｉを読み出し候補のブロックに設定し、カウンタ値ｉを、当該読み出し候補のブロックのカウンタ値に設定し、Ｓ３１０へ処理を進める。
【００８０】
Ｓ３１０でＣＰＵ１０１は、ｉの値をインクリメントし、Ｓ３１１にて、ｉと割り当てブロック数（本例では３）を比較する。割り当てブロック数の値がｉ以上ならば、まだ読み出し候補のブロックがあるものと判定して、Ｓ３０３に処理を戻し、処理を続行する。一方、Ｓ３１１において、ｉの値の方が割り当てブロック数より大きいと判定された場合は、処理を終了する。
【００８１】
以上の図７で説明した処理（図６のＳ２０１の処理）により、カウンタ値が有効かつ最も大きな値である割り当てブロックが、読み出しブロックとして決定される。なお、上部と下部のカウンタ値として同一のカウンタ値を入力する場合に限らず、例えば、あるカウンタ値に対して上部に対応する情報と下部に対応する情報をそれぞれ付加する場合でもよい。この場合でも、上記のカウンタ値に付加された情報が除かれた情報が上部と下部で一致すれば、両者が整合することを確認することができる。
【００８２】
図７に示す処理が実行されると、ＣＰＵ１０１は、図６のＳ２０２に処理を進める。
【００８３】
Ｓ２０２においてＣＰＵ１０１は、フラッシュメモリ１０３における全ての割り当てブロックに対して無効フラグが立っているか判定する。すべての割り当てブロックに無効フラグが立った場合は、ＣＰＵ１０１はＳ２１０へ処理を進める。そしてＳ２１０では、ＲＡＭ１０２の制御情報展開領域４０４における当該のデータセットの値をデフォルト値で初期化して処理を終了し、フラッシュメモリ１０３から制御情報を読み出さないようにする。この時のデフォルト値は、プログラム内に保持している定数である。また、Ｓ２１０では、データセットの値を初期化するかわりに、装置自体をエラー状態にして処理を終了してもよい。
【００８４】
Ｓ２０２において、無効フラグが立っていない割り当てブロックが存在した場合、即ち読み出しブロックが決定している場合は、ＣＰＵ１０１はＳ２０３に処理を進める。そしてＳ２０３においてＣＰＵ１０１は、ＲＡＭ１０２の制御情報展開領域４０４におけるデータセット記憶用のセクションへ、読み出し対象のブロック内のデータセットを読み出す。
【００８５】
Ｓ２０４でＣＰＵ１０１は、Ｓ２０３で読み出したデータセットのチェックサムを計算し、データセットの制御情報領域５０１に保存されたチェックサムの値と一致しているか確認する。
【００８６】
上記のＳ２０５においてチェックサムが正しいと判定された場合、処理を終了する。
【００８７】
一方、Ｓ２０５において、チェックサムが正しくなかった場合、ＣＰＵ１０１は現在の読み出しブロックのデータが無効であると判断して、Ｓ２０６へ処理を進める。Ｓ２０６においてＣＰＵ１０１は、現在の読み出しブロックに無効フラグを立てる。
【００８８】
そしてＣＰＵ１０１はＳ２０７において、すべての割り当てブロックに無効フラグが立っているか判定し、立っていた場合は、Ｓ２０８に処理を進める。Ｓ２０８でＣＰＵ１０１は、ＲＡＭ１０２の制御情報展開領域４０４における当該のデータセットの値をデフォルト値で初期化して、処理を終了する。なおＳ２０８における処理は、Ｓ２１０と同様の処理を行う。
【００８９】
Ｓ２０７で無効フラグが立っていない割り当てブロックが存在すると判定された場合は、ＣＰＵ１０１はＳ２０９へ処理を進める。そしてＳ２０９において、無効フラグが立っていないブロックのうち、最大のカウンタ値を持つブロックを読み出しブロックとして再設定し、Ｓ２０３へ戻って処理を続行する。
【００９０】
図６に示した処理により、有効かつ最も新しいデータセットがＲＡＭ１０２へ展開される。または、フラッシュメモリ１０３上のデータすべて無効である場合は、ＲＡＭ１０２上のデータセットはデフォルト値で初期化された状態、または、装置自体がエラー状態となる。
【００９１】
図６に示した処理により読み出されるデータについて、図８を用いて説明する。
【００９２】
例えば最新のデータセットがブロックに書き込むときに、図８（ｂ）に示すように、データの消去処理の途中で電源が遮断され、データの書き込みが完了しなかった場合がある。このとき、カウンタ領域（上部）５０２の値とカウンタ領域（下部）５０３の値が一致しないため、図７のＳ３０４で無効の判断が下され、その他の有効かつ最もカウンタ値の大きな割り当てブロックのデータがＲＡＭ１０２へ読みだされる。
【００９３】
図８（ｃ）に示すように、ブロックに対するデータ消去処理の完了時で電源が遮断された場合、カウンタ領域（上部）５０２とカウンタ領域（下部）５０３の値は一致するが、その値は０ｘＦＦＦＦＦＦＦＦという無効値である。そのため、図７のＳ３０６において、無効の判断が下され、その他の有効かつ最もカウンタ値が大きな割り当てブロックのデータがＲＡＭ１０２に読みだされる。
【００９４】
図８（ｄ）に示す状態でフラッシュメモリ１０３にデータが保存されている場合、図８（ｂ）と同様に、カウンタ領域（上部）５０２の値とカウンタ領域（下部）５０３の値が一致しない。そのため、図７のＳ３０４で無効の判断が下され、その他の有効かつ最もカウンタ値の大きな割り当てブロックのデータがＲＡＭ１０２へ読みだされる。
【００９５】
図８（ｅ）の状態は、最新のデータセットの書き込みが完了しているため、図６および図７のシーケンスにより、最新のデータとしてＲＡＭ１０２に読みだされる。
【００９６】
なお、カウンタ値が有効であると判断された場合でも、図６のＳ２０４およびＳ２０５にて制御情報領域５０１のチェックサムの判定を行っている。そのため、例えば、フラッシュメモリの個別のセルに故障が生じたり、書き込み中に電気的ノイズが発生して正しくデータが保存できなかった場合は、無効として判断することができる。
【００９７】
以上の実施形態においては、制御変数や履歴データとともに、カウンタ値を同一ブロック内に書き込む。そして、電源遮断状態から電源供給状態に遷移したときに、ブロックへの書き込み回数を示すカウンタ値を利用して、フラッシュメモリ１０３上における最新のデータが保存されたブロックを決定することができる。
【００９８】
これにより、例えばフラッシュメモリ１０３上の最新の保存データを書き込んだブロックを示す識別情報を、制御情報とは別のブロックに書き込む必要がない。そのため、書き込み処理時間を短縮することができる。
【００９９】
またインクジェットプリンタ３では、重要な制御情報についてはフラッシュメモリへの書き込み完了と同期して動作する仕組みをとっている。例えば、プリントエンジン部３０２の印刷ヘッドのキャップ開閉状態情報は、印刷品位を維持するための重要な情報である。印刷開始時は、ＲＡＭ１０２およびフラッシュメモリ１０３上のキャップ開閉状態情報に、開状態と書き込み、書き込み完了を待ってから、印刷動作を開始する。よって、本実施形態の処理によりフラッシュメモリ１０３への書き込みを高速化することで、印刷が開始されるまでにかかる時間を短縮することができる。
【０１００】
また本実施形態の処理により書き込みを高速化することで、上記カウント情報のような、読み出し対象のブロックを特定するための特定情報を、より確実に書き込むことができる。例えば、そのような特定情報をフラッシュメモリ１０３における実データとは別のブロックに書き込む方法の場合、実データの書き込み完了後、特定情報の書き込み途中に電源遮断が起こる可能性が高まる。すると、フラッシュメモリからのデータ読み出しにおいて、特定情報が適切に書き込まれなかったと判定され、実データの書き込みは適切に行われていたとしても、そのデータを読み出せなくなる場合がある。
【０１０１】
一方、本実施形態では、実データとその実データに対応する上記特定情報を同一ブロックに書き込むため、実データの書き込み後、特定情報の書き込み途中に電源が遮断される可能性を低減し、当該特定情報をより確実に書き込むことができる。これにより、フラッシュメモリからのデータ読み出し時に、最新のデータをより確実に読み出すことができる。
【０１０２】
さらに本実施形態の別の効果として、フラッシュメモリ１０３のサイズ節約が挙げられる。例えば実データと上記特定情報を別々のブロックの書き込む場合、その書き込みにおいて少なくとも２つのブロックが必要になる。一方本実施形態では、制御情報等の実データとカウンタ値のような上記特定情報の両方が１つのブロックに纏めて書き込まれるため、当該書き込みに必要なメモリ容量を削減することができる。
【０１０３】
また、本実施形態では、そのように書き込みに使用されるブロックが、実データ、特定情報を別のブロックに書き込む場合よりも少なくなるため、書き込み回数が、フラッシュメモリの書き込み上限回数を越えてしまう可能性を低減することができる。
【０１０４】
なお、上記のカウント情報はフラッシュメモリ１０３の各ブロックの更新回数を示している。そのため、そのカウント情報を、フラッシュメモリ１０３の書き込みの上限回数を超えているか判定する際に用いることができる。例えば、あるブロックのカウント情報が示す書き込み回数が所定の回数を超えたら、割り当てブロックを変更する制御などに用いることもできる。その他、例えば上記のカウント値を参照することで、フラッシュメモリ１０３がどの程度更新されていたのかを確認することもできる。例えばＣＰＵ１０１が、定期的、または所定のタイミングでフラッシュメモリ１０３の書き込み回数を取得し、その書き込み回数が所定の回数を越えた場合、フラッシュメモリ１０３の交換を促す表示を操作ＵＩ部３０１に表示させることができる。
【０１０５】
また、上記のように、本実施形態におけるカウンタ値をフラッシュメモリ１０３の更新回数の情報として利用することができる。そのため、このカウント値を、フラッシュメモリ１０３の耐久状態に応じた書き込み制御や、インクジェットプリンタ３の利用状況に関するデータとして用いることができる。以下、詳細に説明する。
【０１０６】
（５）カウンタ値を利用したフラッシュメモリへのデータ書き込み、読み出しについて
上記のようにフラッシュメモリには、書き換え耐久回数が設定されている場合がある。（本実施形態におけるフラッシュメモリ１０３は１０万回であるとする。）しかし、フラッシュメモリ１０３を構成する素子の個体差によって書き換え耐久回数を超えても正常に書き込み、読み出し動作が可能な場合もある。
【０１０７】
そこで、フラッシュメモリ１０３が書き換え耐久回数の保証回数を大きく超えて、書き込み回数カウンタ領域が保持できる最大値０ｘＦＦＦＦＦＦＦＦを超えた場合にも、データの書き込みを行うための処理について説明する。
【０１０８】
ＣＰＵ１０１が、ＲＡＭ１０２の制御情報展開領域４０４上のデータセットをフラッシュメモリ１０３へ書き込む際には、図５に示した処理を実行する。そして、図５のＳ１０２のＲＡＭ上のデータセットのカウンタ値を加算する処理においては、図９のフローチャートに示す処理を実行する。
【０１０９】
図９は、書き込み回数を加算する処理の一例を示すフローチャートである。この図９のフローチャートに示す処理も、ＣＰＵ１０１により実現される。
【０１１０】
Ｓ４０１においてＣＰＵ１０１は、現在のカウンタ値が０ｘＦＦＦＦＦＦＦＥであれば、Ｓ４０３において新しいカウンタ値を０ｘ０とする。一方、現在のカウンタ値が０ｘＦＦＦＦＦＦＦＥでなければ、ＣＰＵ１０１はＳ４０２に、現在のカウンタ値をインクリメントした値を新しいカウンタ値として設定する。そしてＳ４０４において、新しいカウンタ値をＲＡＭ１０２上のデータセットのカウンタ領域（上部）５０２とカウンタ領域（下部）５０３に設定する。なお、上述のように本実施形態においてカウンタ領域は４ｂｙｔｅである。すなわち、Ｓ４０１〜Ｓ４０２の処理により、カウンタの値が４ｂｙｔｅサイズの上限値０ｘＦＦＦＦＦＦＦＦに達するまでインクリメントされた場合は、初期値の０に戻るようになる。
【０１１１】
以上の図９に示した処理によれば、例えばカウンタ値が０ｘＦＦＦＦＦＦＦＥのブロックと、最新のデータが書き込まれる、カウンタ値０ｘ００００００００のブロックが混在することになる。
【０１１２】
図１１は、図９に示した処理によりカウンタ値が設定された場合の、各ブロックに対応するカウンタ値の一例を示す図である。図１１では、フラッシュメモリ１０３において、同種のデータセットに対して、３つのブロックが割り当てブロックとして割り当てられているとする。即ち、例えば印刷用のデータセットの場合、３つのブロックのそれぞれにローテーションさせながら、最大３つのデータセットが書き込まれているものとする。
【０１１３】
図１１（ａ）は、図９のＳ４０３において新しいカウンタ値として０（＝０×００００００００）がブロック１に書き込まれた場合の、各ブロックに対応するカウンタ値を示す。また図９（ｂ）は、図９（ａ）の状態において、Ｓ４０２においてカウンタ値１（１×００００００００）が設定され、そのカウンタ値がブロック２に書き込まれた場合である。このように、カウンタ値の上限値である０×ＦＦＦＦＦＦＦＥと、カウンタ値の１や２が混在するが、このとき最新のデータを記憶している読み出し対象のブロックとして、カウンタ値が１や２のブロックが決定されなければならない。そのため、図９に示した処理によりカウンタ値が設定される場合、図６のＳ２０１では、図７のフローチャートの処理ではなく、図１０を用いて説明する処理により、読取対象のブロックを決定する。
【０１１４】
図１０は、図９に示した処理によりカウンタ値が設定される場合の、読取対象のブロック決定処理を示す図である。図１０に示すフローチャートは、ＣＰＵ１０１により実行される。また、図７で説明する処理と同様の処理については、詳細な説明を省略する。なお図１０の例では、割り当てブロックの数は、図１１に示すように「３」とする。
【０１１５】
Ｓ５０１では、読取対象のブロックに対応するカウンタ値の変数「カウンタ値」を「不定」に設定する。この不定値として、例えば０ｘＦＦＦＦＦＦＦＦを設定する。
【０１１６】
Ｓ５０２〜Ｓ５０６までの処理はそれぞれ図７のＳ３０２〜Ｓ３０６までの処理と同様であるため詳細な説明を省略するが、当該カウンタ値ｉのブロックへの書き込みが適切に完了しているか判定される。この判定によりブロックへの書き込みが適切に完了していないと判定された場合、Ｓ５２０において、図７のＳ３０９と同様に、ブロックｉに無効フラグが立つ。
【０１１７】
Ｓ５２１では、読み出し対象のブロックのカウンタ値が不定値であるか判定され、不定値と判定されると、ＣＰＵ１０１はＳ５２２において、割り当てブロックｉを読み出しブロックに設定し、カウンタ値ｉをカウンタ値に設定する。
【０１１８】
上記Ｓ５０１、Ｓ５０２における初期化処理により、変数が初期値「１」のときＳ５２２の処理が実行されるため、Ｓ５２２では、読み出し対象のブロックとして、図１１のブロック１が設定される。
【０１１９】
Ｓ５１１では、変数ｉがインクリメントされ、Ｓ５１２における判定により、変数ｉが割り当てブロックの総数である３以下であるか判定され。変数ｉがその総数以下である場合、Ｓ５０３に戻る。
【０１２０】
Ｓ５２１で読取対象のブロックのカウンタ値が不定値でないと判断した場合は、ＣＰＵ１０１はＳ５０７において、現在の読み出し対象のブロックのカウンタ値と、読取対象のブロックのカウンタ値が（割り当てブロック数―２）以下であるかどうかを判定する。即ち、読み出し対象のブロックのカウンタ値が、１（＝０×０００００００１）もしくは０（＝０×００００００００）であるか判定される。
【０１２１】
またＣＰＵ１０１はＳ５０８において、カウンタ値ｉと、読取対象のブロックのカウンタ値が（割り当てブロック数―２）以下であるかどうかを判定する。即ち、ブロックｉ（２または３）のカウンタ値が、１（＝０×０００００００１）もしくは０（＝０×００００００００）であるか判定される。
【０１２２】
Ｓ５０７、Ｓ５０８の判定結果がともにＹｅｓの場合、当該読み出し対象のブロックと、当該ブロックｉのカウンタ値が、０か１のため、カウンタ値が大きい方が読み出し対象となればよい。そのためＣＰＵ１０１は、Ｓ５０９当該読み出し対象のブロックと、当該ブロックｉのカウンタ値の大小を比較する。そして、カウンタ値ｉが当該読み込み対象のブロックのカウンタ値以上であった場合は、ＣＰＵ１０１はＳ５１０において、割り当てブロックｉを読み出し対象のブロックに設定し、カウンタ値ｉを、当該ブロックのカウンタ値に設定する。
【０１２３】
Ｓ５０７の判定結果がＹｅｓ、Ｓ５０８の判定結果がＮｏの場合、図１１（ａ）に示したように、当該読み出し対象のブロック１のカウンタ値が「０×００００００００」であり、ブロックｉ（＝２）のカウンタ値が「０×ＦＦＦＦＦＦＦＤ」である場合がある。この場合、カウンタ値としてはブロック２の方が大きいが、ブロック１の方により新しいデータが書き込まれている。
【０１２４】
そのため、Ｓ５１３でＣＰＵ１０１は、カウンタ値ｉが（０ｘ１００００００００−割り当てブロック数）未満であるか、即ちカウンタ値ｉが０×ＦＦＦＦＦＦＦＤ未満であるか判定する。Ｓ５１３でＹｅｓの場合、ＣＰＵ１０１はＳ５１４において、当該読み出し対象のブロックよりもカウンタ値が大きなブロックｉを読み出し対象のブロックとする。
【０１２５】
一方、Ｓ５１３でＮｏの場合、カウンタ値ｉが０×ＦＦＦＦＦＦＦＤ、もしくは０×ＦＦＦＦＦＦＦＥであるため、Ｓ５０７において判定された当該読み出し対象のブロック（カウンタ値０もしくは１）が読み出し対象として優先される。そのため、この場合、Ｓ５１４における処理は行わずに、当該読み出し対象のブロック（カウンタ値０もしくは１）が読み出し対象として維持される。
【０１２６】
Ｓ５１５における処理は、Ｓ５０８における処理と同様である。Ｓ５１５でＹｅｓの場合、当該読み出し対象のカウンタ値が０×ＦＦＦＦＦＦＦＤ、もしくは０×ＦＦＦＦＦＦＦＥであり、ブロックｉのカウンタ値が０または１であることがある。そのため、ＣＰＵ１０１はＳ５１６において、カウンタ値ｉが（０ｘ１００００００００−割り当てブロック数）より小さいか判定する。Ｓ５１６においてＹｅｓの場合、カウンタ値のより大きな、当該読み出し対象のブロックが読み出し対象として維持される。
【０１２７】
一方、Ｓ５１６においてＮｏの場合、当該読み出し対象のブロックのカウンタ値が０×ＦＦＦＦＦＦＦＤ、もしくは０×ＦＦＦＦＦＦＦＥであり、ブロックｉのカウンタ値が０または１である。そのため、この場合にはブロックｉ（カウンタ値が０または１）の方が新しいデータが書き込まれているといるため、ＣＰＵ１０１はＳ５１７において、ブロックｉを読み出し対象として設定する。
【０１２８】
またＳ５１５でＮｏの場合とは、当該読み出し対象のブロックのカウンタ値と、ブロックｉのカウンタ値がともに２以上であるため、カウント値の大きな方が読み出し対象となる。そのためＣＰＵ１０１は、Ｓ５１８、Ｓ５１９において、Ｓ５０９、Ｓ５１０と同様の処理を行い、当該読み出し対象のブロックとブロックｉのうち、カウンタ値の大きな方を読み出し対象とする。
【０１２９】
そして、Ｓ５１１、Ｓ５１２における処理により、ブロックの番号ｉが１〜３の場合について、上記の処理が繰り返される。
【０１３０】
上記の図１０の処理により、例えば図１１のように、フラッシュメモリ１０３においてカウンタ値の初期化前のブロックと初期化後のブロックが混在していた場合でも、初期化後のブロックを読み出しブロックとして決定することができる。そのため、そのような場合でも、より新しいデータをフラッシュメモリ１０３から読み出すことができる。
【０１３１】
よって図９に示すように、書き込み回数が上限値を超える場合でも、カウンタ値の初期化を行うことで、継続して書き込みを行うことができる。即ち、例えばフラッシュメモリ１０３が上記上限値を越えて書き換え可能であった場合、当該上限値を越えた後も、ユーザがフラッシュメモリ１０３を交換せずにインクジェットプリンタ３を使用し続けることができる。
【０１３２】
なお、以上の実施形態では、ＲＡＭ１０２において各データセットが１つのみ読み出される例を示したが、例えば２つ等、複数のデータセットが読み出される場合であってもよい。この場合、例えば各ブロックに含まれるカウンタ値が大きいブロックから順に読み出しを行う。これにより、より新しいデータが記憶されているブロックが優先されるようにデータが読み出される。そのため、ＲＡＭ１０２に、より新しいデータを読み出すことができる。
【０１３３】
なお、以上の実施形態はメモリ制御装置として、インクジェットプリンタに組み込まれた電子制御回路基板を例に説明しているがこれに限らない。例えば印刷のための記録剤としてトナーを用いる電子写真方式の印刷装置でもよいし、プリンタに加え、原稿を読み取るためのスキャナを備えた複合機であってもよい。またプリンタに限らず、ＰＣ（パーソナルコンピュータ）や、スマートフォンやタブレット、携帯電話、デジタルカメラなどの各種の装置であってもよい。
【０１３４】
また、本実施形態におけるメモリ制御装置は、当該装置の内部に備える不揮発性メモリに対する書き込み、読み出しを行う場合に限らず、当該装置に接続された外部の不揮発性メモリに対して書き込み、読み出しを行う場合であってもよい。
【０１３５】
さらに以上の実施形態では、不揮発性メモリとしてフラッシュメモリを例に説明したが、これに限らない。例えばＥＥＰＲＯＭ等の種々のメモリに本実施形態を適用することができる。
【０１３６】
なお、本実施形態の機能は以下の構成によっても実現することができる。つまり、本実施形態の処理を行うためのプログラムコードをシステムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）がプログラムコードを実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することとなり、またそのプログラムコードを記憶した記憶媒体も本実施形態の機能を実現することになる。
【０１３７】
また、本実施形態の機能を実現するためのプログラムコードを、１つのコンピュータ（ＣＰＵ、ＭＰＵ）で実行する場合であってもよいし、複数のコンピュータが協働することによって実行する場合であってもよい。さらに、プログラムコードをコンピュータが実行する場合であってもよいし、プログラムコードの機能を実現するための回路等のハードウェアを設けてもよい。またはプログラムコードの一部をハードウェアで実現し、残りの部分をコンピュータが実行する場合であってもよい。
【符号の説明】
【０１３８】
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  フラッシュメモリ
【図１】
2015125598.tif 000003
【図２】
2015125598.tif 000004
【図３】
2015125598.tif 000005
【図４】
2015125598.tif 000006
【図５】
2015125598.tif 000007
【図６】
2015125598.tif 000008
【図７】
2015125598.tif 000009
【図８】
2015125598.tif 000010
【図９】
2015125598.tif 000011
【図１０】
2015125598.tif 000012
【図１１】
2015125598.tif 000013