(57)【要約】      （修正有）【課題】メモリへの実際の書き込みデータサイズがわからない場合であっても、合計の書き込みデータサイズが上限を超えないように通知をすることが可能な情報処理装置を提供する。【解決手段】情報処理装置は、データを記憶する記憶手段と、記憶手段へのデータの書き込む書き込み制御手段と、書き込み制御手段により書き込みが指示されたデータサイズに基づいて、記憶手段に書き込まれたと推定されるデータサイズを取得する取得手段と、取得手段により取得された前記データサイズの累計に基づいて通知する通知手段と、を有する。【選択図】図４
2020071855.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶手段と、
前記記憶手段にデータの書き込みを指示する書き込み制御手段と、
前記書き込み制御手段により書き込みが指示されたデータサイズに基づいて、前記記憶手段に実際に書き込まれると推定されるデータサイズを算出する算出手段と、
前記算出手段により算出されたデータサイズの累計に基づいて通知をする通知手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記書き込み制御手段により書き込みが指示されるデータサイズに対応する前記記憶手段に書き込まれると推定されるデータサイズを求めるための数値を選択する選択手段をさらに有し、
前記算出手段は、前記選択手段により選択された前記数値に基づいて、前記記憶手段に書き込まれたと推定されるデータサイズを求めることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記数値は、前記書き込み制御手段により書き込みが指示されたデータサイズに基づいて異なる値をとることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記選択手段は、前記記憶手段の種類に基づいて、前記数値を選択することを特徴とする請求項２に記載の情報処理装置。
【請求項５】
前記記憶手段の種類は、前記記憶手段のプロダクトネームであることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記記憶手段は、前記書き込み制御手段により書き込みが指示されるデータサイズと、前記記憶手段に書き込まれると推定されるデータサイズを求めるための数値とを対応づけて記憶することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記算出手段により算出されたデータサイズの累計を閾値と比較する第１比較手段をさらに有し、
前記通知手段は前記比較手段による比較の結果に基づいて、前記通知を行うことを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記算出手段は、前記書き込み制御手段の指示に基づいて前記記憶手段にデータが書き込まれる度に、当該記憶手段に書き込まれたと推定されるデータサイズを算出することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記書き込みが指示されたデータサイズの累計を算出する累計算出手段と、
前記書き込みが指示されたデータサイズの累計を閾値と比較する第２比較手段と、を更に有し、
前記第２比較手段による比較の結果に基づいて、前記累計算出手段は、前記累計算出手段により算出されたデータサイズの累計を算出することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項１０】
時間をカウントするカウント手段と、
前記カウント手段によってカウントされた時間が閾値を超えると、割り込み信号を受け付ける受信手段と、
前記書き込みが指示されたデータサイズの累計を算出する累計算出手段を更に有し、
前記受信手段による割込み信号の受信に基づいて、前記累計算出手段は、前記累計算出手段により算出されたデータサイズの累計を算出することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項１１】
前記情報処理装置を第１電力状態から前記第１電力状態よりも低い電力状態である第２電力状態に遷移させる移行手段と、
前記書き込みが指示されたデータサイズの累計を算出する累計算出手段を更に有し、
前記第１電力状態から前記第２電力状態への遷移に基づいて、前記累計算出手段は、前記累計算出手段により算出されたデータサイズの累計を算出することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項１２】
前記情報処理装置の電力をオフするシャットダウン処理を受け付ける受け付け手段と、
前記書き込みが指示されたデータサイズの累計を算出する累計算出手段を更に有し、
前記シャットダウン処理に基づいて、前記累計算出手段は、前記累計算出手段により算出されたデータサイズの累計を算出することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項１３】
前記通知手段は、前記記憶手段の交換が必要であることの通知であることを特徴とする請求項１乃至１２のいずれか１項に記載の情報処理装置。
【請求項１４】
前記通知手段は、前記記憶手段の交換を促すメッセージの表示された画面を表示手段に表示することで前記通知を行うことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項１５】
前記記憶手段は不揮発性のＮＡＮＤフラッシュメモリであることを特徴とする請求項１乃至１４のいずれか１項に記載の情報処理装置。
【請求項１６】
画像データを処理する画像処理手段をさらに有し、
前記記憶手段は前記画像処理手段により処理された画像データを記憶することを特徴とする請求項１乃至１５のいずれか１項に記載の情報処理装置。
【請求項１７】
前記画像処理手段により生成された前記画像データに基づいて、シートに画像を形成する画像形成手段をさらに有することを特徴とする請求項１６に記載の情報処理装置。
【請求項１８】
データを記憶する不揮発性の記憶手段と、
前記記憶手段へのデータの書き込みを指示する書き込み制御手段と、を有する情報処理装置の制御方法において、
前記書き込み制御手段により書き込みが指示されたデータサイズに基づいて、前記記憶手段に書き込まれたと推定されるデータサイズを算出する算出工程と、
前記算出工程において算出された前記データサイズの累計に基づいて通知をおこなう通知工程と、を有することを特徴とする情報処理装置の制御工程。
【請求項１９】
請求項１８に記載の情報処理装置の制御工程をコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置および情報処理装置の制御方法、ならびにプログラムに関する。
【背景技術】
【０００２】
近年、補助記憶装置としてｅＭＭＣ（ｅｍｂｅｄｄｅｄ  Ｍｕｌｔｉ  Ｍｅｄｉａ  Ｃａｒｄ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）といったＮＡＮＤフラッシュメモリを備える情報処理装置がある。
【０００３】
ＮＡＮＤフラッシュメモリにおいては、新しいデータを書き込むときの状態によってホストシステムから書き込まれるデータサイズと、実際にＮＡＮＤフラッシュメモリに書き込まれるデータサイズ（以下、実書き込みデータサイズ）が異なる場合がある。ＮＡＮＤフラッシュメモリのデータの書き込みはページ単位（例えば４ＫＢｙｔｅ）で実行される。一方で、ＮＡＮＤフラッシュメモリのデータの消去は複数のページから成るブロック単位（例えば６４ＫＢｙｔｅ）で実行される。すでにデータの書き込まれているページに新しいデータを書き込む場合、ＮＡＮＤフラッシュメモリは当該ページを含むブロック全体を消去し、消去したデータとともに新しく書き込みたいデータを書き込む。そのためホストシステムが書き込みを指示したデータサイズに対して、ＮＡＮＤフラッシュメモリへの実際の書き込みデータサイズが多くなる。ホストシステムにより書き込みが指示されたデータサイズに対する、ＮＡＮＤフラッシュメモリの実際の書き込みデータサイズの比をＷＡＦ（Ｗｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎ  Ｆａｃｔｏｒ）という。
【０００４】
たとえば、ホストシステムから２ＫＢｙｔｅのデータを書き込む場合、当該データが書き込まれるブロックに６２ＫＢｙｔｅのデータが書き込まれていることがある。このとき、すでに書き込まれている６２ＫＢｙｔｅのデータが削除され、６２ＫＢｙｔｅのデータに２ＫＢｙｔｅのデータを加えた６４ＫＢｙｔｅのデータがＮＡＮＤフラッシュメモリに書き込まれる。上記の場合、ＷＡＦは３１になる。
【０００５】
ＮＡＮＤフラッシュメモリとして組み込みメモリであるｅＭＭＣはＮＡＮＤフラッシュメモリへの実際の書き込みデータサイズを記憶していない。そのため、ホストシステムがＮＡＮＤフラッシュメモリに実際に書き込まれたデータサイズを取得することができず、ホストシステムはｅＭＭＣのＮＡＮＤフラッシュメモリへどれだけデータを書き込んだかどうかを知ることができない。
【０００６】
上記のような課題に対して、例えば特許文献１では、一定時間内にホストデバイスが書き込みを指示したデータサイズにＷＡＦを乗算することで、一定時間内の書き込み量を推定する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−１９８３７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、ｅＭＭＣのようなＮＡＮＤフラッシュメモリでは書き込みデータサイズの総量に上限があり、その上限を超えてデータを書き込んだ場合にはそのデータが保証されない。ＮＡＮＤフラッシュメモリに記憶されたデータを保証するためには、ＮＡＮＤフラッシュメモリへの総書き込み量が予め決められた上限を超えないようにしなくてはならない。
【０００９】
しかしながら、上述したように、ｅＭＭＣは実際の書き込みデータサイズを記憶していないため、ホストシステムがｅＭＭＣのＮＡＮＤフラッシュメモリへの書き込みデータサイズの累計を求めることができない。そのため、ユーザが気付かないうちに、ｅＭＭＣのＮＡＮＤフラッシュメモリへの書き込みデータサイズがデータ保証される上限を超えてしまう可能性がある。
【００１０】
本発明は上記課題を解決するためになされたものであり、ＮＡＮＤフラッシュメモリへの実際の書き込みデータサイズがわからない場合であっても、合計の書き込みデータサイズがデータ保証される上限を超えないように通知をすることを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明の情報処理装置は、データを記憶する記憶手段と、前記記憶手段にデータの書き込みを指示する書き込み制御手段と、前記書き込み制御手段により書き込みが指示されたデータサイズに基づいて、前記記憶手段に実際に書き込まれると推定されるデータサイズを取得する取得手段と、前記取得手段により取得された前記データサイズの累計に基づいて通知をする通知手段と、を有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、メモリへの実際の書き込みデータサイズがわからない場合であっても、合計の書き込みデータサイズが上限を超えないようにユーザに注意を促すことが可能になる。
【図面の簡単な説明】
【００１３】
【図１】実施例１および実施例２における画像形成装置１００の構成の一例を示す図である。
【図２】実施例１および実施例２におけるＷＡＦ管理テーブルの構成の一例を示す図である。
【図３】実施例１および実施例２におけるＷＡＦ管理テーブル選択処理のフローチャートである。
【図４】実施例１におけるｅＭＭＣ書き込み処理のフローチャートを示す図である。
【図５】実施例１および実施例２におけるディスクリプタテーブル５００の構成の一例を示す図である。
【図６】実施例１および実施例２における実書き込みデータサイズ加算処理のフローチャートを示す図である。
【図７】実施例１および実施例２における寿命判定処理７００のフローチャートである。
【図８】実施例２におけるｅＭＭＣ書き込み処理８００のフローチャートである。
【図９】実施例２における実書き込みデータサイズ減算処理９００のフローチャートである。
【図１０】実施例３および実施例４における画像形成装置の構成の一例を示す図である。
【図１１】実施例３におけるｅＭＭＣ書き込み処理のフローチャートを示す図である。
【図１２】実施例３および実施例４における書き込みデータサイズカウントアップ処理のフローチャートである。
【図１３】実施例１および実施例２における実書き込みデータサイズ加算処理のフローチャートである。
【図１４】実施例３および実施例４におけるタイマ割込み処理、電力状態移行処理、シャット断処理のフローチャートである。
【図１５】実施例４におけるｅＭＭＣ書き込み処理のフローチャートである。
【図１６】実施例４における書き込みデータサイズカウントダウン処理のフローチャートである。
【発明を実施するための形態】
【００１４】
（実施例１）
以下、本発明を実施するための形態について図面を用いて説明する。なお、本実施形態において、情報処理装置の一例として画像形成装置を用いて説明をする。画像形成装置以外のコンピュータやタブレット端末等の情報処理装置が以下の処理を実行するとしても構わない。
【００１５】
図１は、実施例１における画像形成装置１００の構成である。
【００１６】
メインＳｏＣ１０１（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）は集積回路部品であり、後述するＣＰＵ１０２、画像処理ハードロジック１０３、メモリＩ／Ｆ１０４を含んでいる。また、メインＳｏＣ１０１は、後述するＲＡＭ１０６、ＲＯＭ１０７、ＵＩ１０８等の制御インターフェースや、それらを接続するシステムバスも含んでいるが、本発明に直接関与しないため図１には図示していない。
【００１７】
ＣＰＵ１０２は、画像形成装置１００全体を制御するための中央処理装置である。
【００１８】
画像処理ハードロジック１０３は、スキャナ１１０から読み込んだ入力画像データに対して、補正、加工、編集等の画像処理を行う。さらに、画像処理ハードロジック１０３は、メインＳｏＣ１０１がプリンタ１０９へ出力する出力画像データに対する、色変換、フィルタ処理、解像度変換等の処理を行う。
【００１９】
ホストメモリＩ／Ｆ１０４は、ＤＭＡＣ１０５（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｃｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）を含むメモリインターフェースである。ＣＰＵ１０２がＤＭＡＣ１０５を制御することで、ｅＭＭＣ１１２とＲＡＭ１０６との間のデータ入出力を行うことが可能である。
【００２０】
ＲＡＭ１０６は、ＣＰＵ１０２が動作するためのシステムワークメモリであり、ＣＰＵ１０２の演算データや各種プログラムが記憶される。また、ＲＡＭ１０６は、スキャン時やプリント時に画像処理ハードロジック１０３で様々な画像処理を施された画像データを保持する画像メモリとしても利用される。
【００２１】
ＲＯＭ１０７は、ブートＲＯＭであり、画像形成装置１００のブートプログラムが格納されている。
【００２２】
ＵＩ１０８は、ユーザインターフェースであり、画面を表示する液晶ディスプレイとユーザから入力を受け付けるタッチパネルおよびハードキーなどで構成される。
【００２３】
プリンタ１０９は、画像データを用紙上に印字するプリンタエンジンであり、レーザースキャナユニットや感光体ドラム、紙搬送ユニットなどを含んでいる。
【００２４】
スキャナ１１０は、用紙上の画像や文字をＣＣＤセンサやＣＩＳセンサで読み取り、画像データに変換するユニットである。
【００２５】
外部Ｉ／Ｆ１１１は、電話回線網や有線ＬＡＮ、無線ＬＡＮ、ＵＳＢなどのインターフェースであり、各インターフェースを介して画像形成装置１００と外部装置とがデータ通信を行う。
【００２６】
ｅＭＭＣ１１２は、メモリＩ／Ｆ１１３、コントローラ１１４、ＮＡＮＤフラッシュメモリ１１６を含んで構成される。
【００２７】
メモリＩ／Ｆ１１３は、コントローラ１１４の制御によりメインＳｏＣ１０１とコントローラ１１４との間のデータ入出力を行うインターフェースである。
【００２８】
コントローラ１１４は、メモリＩ／Ｆ１１３を介してメインＳｏＣ１０１から受信したコマンドを解釈して、そのコマンドに応じた動作を行うメモリ制御モジュールである。さらにコントローラ１１４は、ＣＩＤレジスタ１１５を含んでいる。ＣＩＤレジスタ１１５は、ＪＥＤＥＣにより定められた標準規格で規定されたレジスタであり、Ｃａｒｄ  ＩＤｅｎｔｉｆｉｃａｔｉｏｎ  ｎｕｍｂｅｒレジスタの略称である。ＣＩＤレジスタ１１５はデバイスメーカーを示すマニュファクチャＩＤや、デバイスを特定するプロダクトネームなどの情報を含んでいる。
【００２９】
ＮＡＮＤフラッシュメモリ１１６は、データを記録する不揮発性のＮＡＮＤフラッシュメモリである。ＮＡＮＤフラッシュメモリ１１６へのデータの書き込みは、コントローラ１１４の制御によりＮＡＮＤフラッシュメモリ１１６内のメモリセルの浮遊ゲートに電子を注入することで行われる。ＮＡＮＤフラッシュメモリ１１６には、画像処理ハードロジック１０３により処理が完了した画像データ等が書き込まれる。ＮＡＮＤフラッシュメモリ１１６において、データ書き込みはページ単位で行われる。さらに、ＮＡＮＤフラッシュメモリ１１６においてデータ削除は複数のページからなるブロック単位で行われる。コントローラ１１４はページの途中からデータを書き込む場合に、当該ページを含むブロックのデータを一度、他のメモリに退避させる。そして、コントローラ１１４はブロックごとデータを削除してから、もともと当該ブロックに書き込まれていたデータと新しく書き込まれるデータとを合わせたデータが新たにＮＡＮＤフラッシュメモリ１１６に書き込む。上記のような処理を行うため、ＮＡＮＤフラッシュメモリにおいては、ＣＰＵ１０２がＤＭＡＣ１０５を介して書き込みを指示したデータサイズとコントローラ１１４がＮＡＮＤフラッシュメモリ１１６に実際に書き込むデータサイズが異なる。
【００３０】
図２は、実施例１において、メインＳｏＣ１０１がＮＡＮＤフラッシュメモリ１１６にデータを書き込む際、ＮＡＮＤフラッシュメモリ１１６に実際に書き込まれるデータ量を推定するためのＷＡＦを管理するためのＷＡＦ管理テーブルである。
【００３１】
図２に記載のＷＡＦ管理テーブルは、ｅＭＭＣ１１２に格納される。ＷＡＦ管理テーブルには、メインＳｏＣ１０１が指示することのできる書き込みデータサイズごとに、推定されるＷＡＦの数値が記憶されている。本実施例においてメインＳｏＣ１０１は、ＷＡＦ管理テーブルに記憶されたＷＡＦを用いることでＮＡＮＤフラッシュメモリ１１６に対する実際の書き込みデータサイズを推定する。なお、ＷＡＦ管理テーブルは複数種類のｅＭＭＣに対してデータサイズごとのＷＡＦを記憶している。異なる種類のｅＭＭＣ１１２を用いる場合であっても、新たなＷＡＦ管理テーブルを生成することなく、図２に示すＷＡＦ管理テーブルを用いてＷＡＦの数値を取得するためである。なお、ＷＡＦ管理テーブルが記憶される種類のｅＭＭＣに対するＷＡＦ管理テーブルが格納されていれば十分である。その場合は、マニュファクチャＩＤ２０１やプロダクトネーム２０２を有さず、ホスト書き込みデータサイズに対するＷＡＦのみ記憶されていてもよい。
【００３２】
ＷＡＦはメインＳｏＣ１０１から書きこみが指示されたデータサイズや、現在ＮＡＮＤフラッシュメモリ１１６に記憶されているデータ量等の状態によって変化する。そのため、ＷＡＦ管理テーブルに記憶されているＷＡＦは、メインＳｏＣ１０１から書き込みが指示されたデータサイズに基づいて、実際ＮＡＮＤフラッシュメモリに書き込まれると推定されるデータサイズを求めるための数値である。また、ＷＡＦ管理テーブルに記憶されるＷＡＦは当該ｅＭＭＣを生産するメーカーによって規定される値等であってもよい。
【００３３】
ＷＡＦは一般的に書き込みサイズが小さければ小さいほど、大きな値となる。そのため、図２に示すＷＡＦ管理テーブルでは、メインＳｏＣ１０１が書き込みを指定するデータサイズが小さいほどＷＡＦが大きく設定されている。
【００３４】
また、ＷＡＦはＮＡＮＤフラッシュメモリ１１６がデータの消去を行うときの単位であるブロックの大きさにも依存する。ブロックの大きさは、デバイスメーカーの違いや、同じメーカーでもデバイスによって異なる。そのため、図２に示すＷＡＦ管理テーブルは、デバイスメーカーを示すマニュファクチャＩＤや、デバイスを示すプロダクトネームごとに、ＷＡＦを記憶する。
【００３５】
“Ｎｏ”２００は、ＷＡＦ管理テーブルにおける行の通し番号であり、要素の管理に用いられる。
【００３６】
“マニュファクチャＩＤ”２０１は、ｅＭＭＣ１１２を製造したデバイスメーカーを特定するためのＩＤであり、標準規格で規定されたｅＭＭＣのＣＩＤレジスタのマニュファクチャＩＤである。
【００３７】
“プロダクトネーム”２０２は、デバイスを特定するためのＩＤであり、標準規格で規定されたｅＭＭＣのＣＩＤレジスタのプロダクトネームである。
【００３８】
“ホスト書き込みデータサイズ”２０３は、メインＳｏＣ１０１がｅＭＭＣ１１２に対して書き込みを指示するデータサイズである。ＷＡＦ管理テーブルは、メインＳｏＣ１０１が書き込みを指示する可能性のある全ての書き込みデータサイズが記載されている。本実施例において、ホストシステムであるメインＳｏＣ１０１は、４ＫＢｙｔｅ、８ＫＢｙｔｅ、１６ＫＢｙｔｅ、３２ＫＢｙｔｅ、６４ＫＢｙｔｅの５種類のデータサイズの書き込みを行うとする。
【００３９】
“ＷＡＦ”２０４は、メインＳｏＣ１０１がＮＡＮＤフラッシュメモリに書き込むデータサイズごとに推定されるＷＡＦの数値である。“ＷＡＦ”２０４に記載される数値は、動作シミュレーションやスペックシートの値から算出された値である。
【００４０】
図３は、実施例１において、画像形成装置１００の起動時に実行されるＷＡＦ管理テーブルの展開に関する処理を示すフローチャートである。図３に記載の処理は、画像形成装置１００の電源をオンした後のシステム起動シーケンスの中でＣＰＵ１０２によって実施される。図３に示す処理を実行するためのプログラムは、ＲＯＭ１０７に格納されており、ＣＰＵ１０２が当該プログラムをＲＡＭ１０６に展開し、実行することで処理が実現される。
【００４１】
ＣＰＵ１０２はｅＭＭＣ１１２の初期化処理を実行する（Ｓ３０１）。Ｓ３０１においてＣＰＵ１０２が実行する処理の内容は、規格で規定された処理である。たとえば、Ｓ３０１においてＣＰＵ１０２はｅＭＭＣ１１２のレジスタ初期化や、メインＳｏＣ１０１とｅＭＭＣ１１２間のアクセス速度の設定処理を行う。
【００４２】
ｅＭＭＣ１１２の処理化が完了した後、ＣＰＵ１０２はＣＩＤレジスタの値を読み出す（Ｓ３０２）。前述したようにＣＩＤレジスタ１１５は、標準規格で規定されたレジスタであり、デバイスメーカーを示すマニュファクチャＩＤや、デバイスを特定するプロダクトネームなどの情報を含んでいる。Ｓ３０２において、ＣＰＵ１０２はＣＩＤレジスタ１１５から、マニュファクチャＩＤとプロダクトネームを読み出す。ここで読み出されたマニュファクチャＩＤやプロダクトネームはＣＰＵ１０２がｅＭＭＣ１１２にデータを書き込むときに推定されるＷＡＦを算出するために用いられる。Ｓ３０２で読み出されたマニュファクチャＩＤやプロダクトネームを使用することで、画像形成装置に内蔵されているｅＭＭＣ１１２の種類に対応したＷＡＦを使用することができる。
【００４３】
ＣＰＵ１０２はＳ３０２で読み出したマニュファクチャＩＤとプロダクトネームから、ｅＭＭＣ１１２に格納されたＷＡＦ管理テーブルの該当部分のみをＲＡＭ１０６に展開する（Ｓ３０３）。例えば、Ｓ３０２で読み出したマニュファクチャＩＤが０ｘＥＥ、プロダクトネームが０ｘ５６７８９１２３４ＤＥＦである場合、ＣＰＵ１０２は図２のＷＡＦ管理テーブルのＮｏ００６〜０１０の行をＲＡＭ１０６に展開する。ＷＡＦ管理テーブルの展開後、ＣＰＵ１０２は図３に記載の処理を終了する。
【００４４】
図４は、実施例１におけるｅＭＭＣ書き込み処理のフローチャートである。ｅＭＭＣ書き込み処理は、メインＳｏＣ１０１がｅＭＭＣ１１２に対してデータを書き込むための処理であり、ＣＰＵ１０２、ＤＭＡＣ１０５、コントローラ１１４が連携して実施される。ＣＰＵ１０２による処理を示すフローチャートはＲＯＭ１０７に格納されており、ＣＰＵ１０２が当該プログラムをＲＡＭ１０６に展開して実行する。
【００４５】
ＣＰＵ１０２はＤＭＡＣ１０５を制御するためのディスクリプタテーブル５００をＲＡＭ１０６上に生成する（Ｓ４０１）。ディスクリプタテーブル５００の詳細は後述する。Ｓ４０１において、ＣＰＵ１０２はディスクリプタテーブルを生成するためのデータ領域をＲＡＭ１０６上に確保する。
【００４６】
図５は、実施例１におけるディスクリプタテーブル５００の構成である。
【００４７】
前述したようにディスクリプタテーブル５００は、ＣＰＵ１０２によって生成され、ＲＡＭ１０６に格納される。ディスクリプタテーブル５００が格納された領域の先頭アドレスはＣＰＵ１０２によって、ＤＭＡＣ１０５のレジスタに設定される。ＤＭＡＣ１０５は設定された先頭アドレスに基づいてディスクリプタテーブル５００にアクセスし、ディスクリプタテーブル５００の内容に従って動作する。
【００４８】
Ｃｏｍｍａｎｄ  Ｎｕｍｂｅｒ５０１は、ＤＭＡＣ１０５がコントローラ１１４に対して発行すべきコマンド番号である。本コマンド番号はＪＥＤＥＣにより定められた標準規格で規定されたコマンド番号と同義である。ＤＭＡＣ１０５はＣｏｍｍａｎｄ  Ｎｕｍｂｅｒ５０１に格納された番号を参照し、処理を決定する。
【００４９】
Ｃｏｍｍａｎｄ  Ａｒｇｕｍｅｎｔ５０２は、ＤＭＡＣ１０５がコントローラ１１４に対して発行すべきコマンド引数である。コマンド引数は標準規格で規定された内容であり、たとえば、ＤＭＡＣ１０５が発行するコマンドがライトコマンドの場合には、ライト先のアドレス等が含まれる。
【００５０】
Ｂｌｏｃｋ  Ｌｅｎｇｔｈ５０３は、ＤＭＡＣ１０５とコントローラ１１４との間で、転送を行うデータの単位ブロック長である。
【００５１】
Ｂｌｏｃｋ  Ｃｏｕｎｔ５０４は、ＤＭＡＣ１０５とコントローラ１１４との間で、転送を行うブロック数である。
【００５２】
Ｈｏｓｔ  Ａｄｄｒｅｓｓ５０５は、ＲＡＭ１０６上のアドレスであり、ＤＭＡＣ１０５とコントローラ１１４との間で転送を行うデータの先頭アドレスを示している。すなわち、ＲＡＭ１０６に格納されたデータをｅＭＭＣ１１２に書き込むＷｒｉｔｅ処理を行う場合、Ｈｏｓｔ  Ａｄｄｒｅｓｓ５０５は転送されるデータが格納されているＲＡＭ１０６のアドレスである。一方で、ｅＭＭＣ１１２に格納されたデータを読み出すＲｅａｄ処理を行う場合、Ｈｏｓｔ  Ａｄｄｒｅｓｓ５０５は、ｅＭＭＣ１１２から読み出したデータの転送先アドレスとなる。
【００５３】
ディスクリプタテーブルの内容のうち、Ｂｌｏｃｋ  Ｌｅｎｇｔｈ５０３の値とＢｌｏｃｋ  Ｃｏｕｎｔ５０４の値とを乗じた値が、当該転送によるホスト書き込みデータサイズになる。例えば、Ｂｌｏｃｋ  Ｌｅｎｇｔｈ５０３が５１２Ｂｙｔｅ、Ｂｌｏｃｋ  Ｃｏｕｎｔ５０４が８だった場合、当該転送によるホスト書き込みデータサイズは４ＫＢｙｔｅになる。上記の計算により、ＣＰＵ１０２はメインＳｏＣ１０１がｅＭＭＣ１１２に書き込みを指示するデータサイズを求めることができる。ここで、メインＳｏＣ１０１がＤＭＡＣ１０５を介してｅＭＭＣ１１２に書き込みを指示するデータサイズは、ｅＭＭＣ１１２のコントローラ１１４が実際にＮＡＮＤフラッシュメモリ１１６に書き込むデータサイズとは異なる。
【００５４】
ＣＰＵ１０２は、Ｓ４０１でＲＡＭ１０６上に格納されたディスクリプタテーブル５００の先頭アドレスをＤＭＡＣ１０５に設定する（Ｓ４０２）。ＤＭＡＣ１０５はＳ４０２で設定されたアドレスにアクセスすることでディスクリプタテーブル５００の内容を取得することができるようになり、当該ディスクリプタデータブル５００に設定された内容に応じて動作することができるようになる。
【００５５】
ＣＰＵ１０２はＤＭＡＣ１０５のイネーブルレジスタをオンに設定する（Ｓ４０３）。ＣＰＵ１０２がＤＭＡＣ１０５のイネーブルレジスタをオンに設定することで、ＤＭＡＣ１０５がＳ４０２で設定されたアドレスにアクセスし、ＤＭＡ転送をスタートさせる。
【００５６】
ＤＭＡＣ１０５はコントローラ１１４に対して、ディスクリプタテーブル５００の内容に基づいて、書き込みデータサイズの設定コマンドを発行する（Ｓ４０４）。Ｓ４０４においてＣＰＵ１０２は、ディスクリプタテーブル５００に記憶された単位ブロック長およびブロック数を取得して、コマンドを発行する。ＣＰＵ１０２は、ｅＭＭＣ１１２のコントローラ１１４にブロック長を設定したコマンドＣＭＤ１６と、コントローラ１１４に書き込むデータブロックの数を設定するコマンドＣＭＤ２３を発行する。
【００５７】
ｅＭＭＣ１１２内のコントローラ１１４は、ＤＭＡＣ１０５からブロック長を設定するためのコマンドと書き込みデータブロック数を示すコマンドを受信する。そして、コントローラ１１４はそれぞれのコマンドに対応する処理を実行し、処理の結果をＤＭＡＣ１０５に対して発行する（Ｓ４０５）。このレスポンスの形式は標準規格で規定されており、コントローラ１１４は受信したコマンドに対する処理が正常に完了したか否かを示す応答をＤＭＡＣ１０５に通知する。
【００５８】
ＤＭＡＣ１０５はコントローラ１１４からＳ４０４で送信したコマンドに対応する処理が正常に完了したことを示す通知を受け付けるまで待機する。そして、Ｓ４０４で発行したコマンドに対応する処理が正常に完了したことを示す通知を受信したＤＭＡＣ１０５はコントローラ１１４に対して、ディスクリプタテーブル５００の内容に基づいて、書き込みコマンドを発行する（Ｓ４０６）。Ｓ４０４においてＤＭＡＣ１０５は、ディスクリプタテーブル５００に基づいて、ＣＭＤ２４（ＷＲＩＴＥ＿ＢＬＯＣＫ）やＣＭＤ２５（ＷＲＩＴＥ＿ＭＵＬＴＩＬＥ＿ＢＬＯＣＫ）を発行する。ここでは、Ｓ４０４で発行したコマンドに対してＳ４０５で当該処理が正常に完了したことを示すレスポンスが発行された場合を説明した。Ｓ４０４の後、コントローラ１１４からＳ４０４で発行したコマンドに対応する処理が正常に完了していないことを示すレスポンスが発行された場合に、再度Ｓ４０４に記載の処理を実行する。
【００５９】
コントローラ１１４はＳ４０６でＤＭＡＣ１０５が発行したコマンドに対応する処理を実行する。コントローラ１１４は当該処理を実行した後、処理が正常に完了したか否かを示す情報をＤＭＡＣ１０５に対してレスポンスとして通知する（Ｓ４０７）。このレスポンスの形式は標準規格で規定された形式である。Ｓ４０７により受信したコマンドに対するコントローラ１１４のステータスがＤＭＡＣ１０５に通知される。
【００６０】
ＤＭＡＣ１０５はコントローラ１１４からＳ４０６で発行されたコマンドに対応するレスポンスを受信するまで処理を進まずに待つ。ＤＭＡＣ１０５はコントローラ１１４から、Ｓ４０６で発行したコマンドに対応する処理が正常に完了したことを示すレスポンスを受信して、コントローラ１１４にｅＭＭＣ１１２に書き込むデータを転送する（Ｓ４０８）。
【００６１】
Ｓ４０８において、ＤＭＡＣ１０５は、ディスクリプタテーブル５００の内容に基づいて、ＲＡＭ１０６からデータを読み出し、ｅＭＭＣ１１２にデータを転送する（Ｓ４０８）。Ｓ４０８において、ＤＭＡＣ１０５は、ディスクリプタテーブル５００内のＨｏｓｔ  Ａｄｄｒｅｓｓ５０５に基づき、ＲＡＭ１０６上のデータにアクセスする。そしてＤＭＡＣ１０５は、ＲＡＭ１０６から読み出したデータをコントローラ１１４に転送する。なお、本実施例では、Ｓ４０６で発行されたコマンドに対応する処理が正常に完了し、当該処理が正常に完了したこと示すレスポンスをＤＭＡＣ１０５が受信した場合を説明した。Ｓ４０７において、Ｓ４０６で発行したコマンドに対応する処理が正常に完了しなかったことを示すレスポンスが発行された場合、ＤＭＡＣ１０５は、Ｓ４０８に記載の処理を行うことなくＳ４０６に処理を戻すとしてもよい。
【００６２】
ｅＭＭＣ１１２のＮＡＮＤフラッシュメモリ１１６に書き込むデータをＤＭＡＣ１０５から取得したコントローラ１１４は当該データをＮＡＮＤフラッシュメモリ１１６に書き込む。ＮＡＮＤフラッシュメモリ１１６への書き込みが正常に完了した場合、コントローラ１１４はＤＭＡＣ１０５に対して書き込みが正常に完了したことを示すレスポンスを発行する（Ｓ４０９）。このレスポンスの形式は標準規格で規定されており、受信したデータのステータスがＤＭＡＣ１０５に通知される。Ｓ４０９でＳＭＡＣ１０５に通知されるステータスには、Ｓ４０８で転送されたデータに対する誤り検知の結果等が含まれている。
【００６３】
ＤＭＡＣ１０５は、コントローラ１１４からのレスポンスを受信して、ＣＰＵ１０２に対して割り込みを発行する（Ｓ４１０）。ＳＭＡＣ１０５はＳ４０９において、コントローラ１１４から出力された誤り検知結果に基づいて、Ｓ４０８で転送を開始したデータの書き込みが正常に終了したか否かを判定する。ＮＡＮＤフラッシュメモリへのデータの書き込みが正常に終了した場合、ＤＭＡＣ１０５はＣＰＵ１０２に対してデータ転送が正常に完了したことを示す割り込み信号を出力する。一方で、ＮＡＮＤフラッシュメモリへのデータの書き込みが正常に終了しなかった場合、ＤＭＡＣ１０５はＣＰＵ１０２に対してデータ転送が正常に完了しなかったことを示す割り込み信号を出力する。
【００６４】
ＣＰＵ１０２はＤＭＡＣ１０５からの割り込み信号を受信する。そして、ＤＭＡＣ１０５から受信した割り込み信号が、データ転送が正常に完了したことを示す割り込み信号であるか否かを判定する（Ｓ４１１）。Ｓ４１１において、ＣＰＵ１０２が受信した割り込み信号がｅＭＭＣ１１２へのデータ転送が正常に完了したことを示す割り込みだと判定された場合、ＣＰＵ１０２はＳ４１２に記載の処理を実行する。一方で、Ｓ４１１で受信した割り込み信号が、データ転送が正常に完了しなかったことを示す異常割り込み信号であると判定された場合、ＣＰＵ１０２はＳ４１３に後述する処理を実行する。
【００６５】
Ｓ４１２において、ＣＰＵ１０２はコントローラ１１４がＮＡＮＤフラッシュメモリ１１６に実際に書き込まれたデータのデータサイズを推定し、これまでにＮＡＮＤフラッシュメモリ１１６に書き込まれたデータサイズとの合計を求める処理を実行する。Ｓ４１２の詳細は後述する。
【００６６】
ＣＰＵ１０２がＳ４１０で異常割り込みを受け取った場合に実行され、再転送などのリカバリ動作を実行したり、異常状態をＵＩ１０８に表示したりする（Ｓ４１３）。Ｓ４１３は本発明に直接関与しないため、詳細は省略する。なお、ＮＡＮＤフラッシュメモリ１１６へのデータの書き込みが失敗した場合は、実際の書き込みデータサイズを求める処理は行わない。
【００６７】
図６は、図４のＳ４１２においてＣＰＵ１０２が実行する実書き込みデータサイズ加算処理のフローチャートである。実書き込みデータサイズ加算処理は、実際にｅＭＭＣ１１２に書き込まれるデータサイズを計算し、ｅＭＭＣ１１２への総書き込みデータサイズを求める処理である。図６に示す処理を実行するためのプログラムはＲＯＭ１０７に格納されており、ＣＰＵ１０２が当該プログラムをＲＡＭ１０６に展開し実行することで処理が実現される。
【００６８】
ＣＰＵ１０２はディスクリプタテーブル５００に基づいて書き込みが指示されるデータサイズ（Ｄｓｉｚｅ１）に基づいて、ＷＡＦを推定する（Ｓ６０１）。Ｓ６０１において、Ｄｓｉｚａ１は、ディスクリプタテーブル５００のＢｌｏｃｋ  Ｌｅｎｇｔｈ５０３とＢｌｏｃｋ  Ｃｏｕｎｔ５０４の積である。ＣＰＵ１０２は、ＲＡＭ１０６に展開したＷＡＦ管理テーブルに基づいてＤｓｉｚｅ１に対応するＷＡＦを選択する。例えば、Ｓ３０３で、図２におけるＮｏ００１〜Ｎｏ００５のＷＡＦ管理テーブルが展開されていたとして、Ｄｓｉｚｅ１が８ＫＢｙｔｅであった場合、ＷＡＦ２．０が選択される。
【００６９】
ＣＰＵ１０２は、Ｄｓｉｚｅ１にＳ６０１で選択されたＷＡＦを乗算し、ｅＭＭＣ１１２がＮＡＮＤフラッシュメモリ１１６に実際書き込むデータサイズであるＤｓｉｚｅ２を算出する（Ｓ６０２）。例えば、Ｄｓｉｚｅ１が８ＫＢｙｔｅ、ＷＡＦが２．０だった場合、Ｄｓｉｚｅ２は１６ＫＢｙｔｅになる。
【００７０】
ＣＰＵ１０２は、Ｓ６０２で求められたＤｓｉｚｅ２を累積書き込みデータサイズ（Ｄｔｏｔａｌ）に加算する（Ｓ６０３）。例えば、Ｓ６０２において求めたＤｓｉｚｅ２が１６ＫＢｙｔｅであり、それまでのＤｔｏｔａｌが１００ＫＢｙｔｅであった場合、Ｓ６０３で新たに求められるＤｔｏｔａｌは１１６ＫＢｙｔｅになる。ＤｔｏｔａｌはｅＭＭＣ１１２に書き込まれており、起動時にＲＡＭ１０６に書きだされる。画像形成装置１００の動作中は、ｅＭＭＣ１１２に書き込みがされる度に、ＲＡＭ１０６に格納されたＤｔｏｔａｌの値を更新する。ＲＡＭ１０６に格納されたＤｔｏｔａｌは画像形成装置１００の電源がオフされるときに、ｅＭＭＣ１１２に記憶されたＤｔｏｔａｌがＲＡＭ１０６に格納された値で更新される。
【００７１】
図７は、累積書き込みデータＤｔｏｔａｌを用いて、ｅＭＭＣ１１２の累積書き込みデータサイズが上限に近くなった場合に、ｅＭＭＣ１１２の取り付けられたメインコントローラの交換を促すための処理フローである。図７のフローチャートに記載の処理を実行するためのプログラムはＲＯＭ１０７に格納されており、当該プログラムをＲＡＭ１０６に展開しＣＰＵ１０２が実行することで処理が実現される。図７に記載のフローチャートは、画像形成装置１００の電源をオンした後のシステム起動シーケンスの中に行われるものとする。ただし、画像形成装置１００の電源がオンされた後、例えばユーザによって設定されたタイミング等定期的に図７に記載の処理を実行することとしてもよい。
【００７２】
ＣＰＵ１０２は、ＲＡＭ１０６からＤｔｏｔａｌを読み出し、Ｄｔｏｔａｌが第２基準値（Ｄｔｈ２）以下か否かを判断する（Ｓ７０１）。Ｄｔｈ２は、たとえば、ｅＭＭＣ１１２の書き込み寿命としてデータシート等に記載されるデータサイズの９０％であるとする。例えば、書き込み寿命になる実書き込みデータサイズが１００ＧＢｙｔｅである場合、Ｄｔｈ２は９０ＧＢｙｔｅである。
【００７３】
ＤｔｏｔａｌがＤｔｈ２以下である場合、ＣＰＵ１０２はＳ７０３に処理を進める。一方で、ＤｔｏｔａｌがＤｔｈ２以上である場合、ＣＰＵ１０２はＳ７０２に処理を進める。
【００７４】
ＣＰＵ１０２はｅＭＭＣ１１２の交換が必要であることをユーザに通知する（Ｓ７０２）。ｅＭＭＣ１１２への総書き込みデータサイズがｅＭＭＣ１１２の書き込みデータの上限に近い場合、これ以上データを書き込むとｅＭＭＣ１１２でのデータ保証が出来なくなってしまう。そこで、ｅＭＭＣ１１２への総書き込みデータサイズとして推定されるデータサイズがＤｔｈ２を超えた場合には、Ｓ７０２においてｅＭＭＣ１１２を有するコントローラ基板の交換をするためにサービスマンへ連絡を促すような通知を行う。サービスマンへの連絡を促す画面のほかに、外部Ｉ／Ｆ１１１を利用して自動的にサービスセンターへ部品交換出動連絡を発信する等をしてもよい。このように、ｅＭＭＣ１１２への総書き込みデータサイズとして推定されたデータサイズが書き込み寿命に近くなったときにはユーザに対して新しいメモリを使用するよう警告する。このようにすることで、気が付かないうちにｅＭＭＣ１１２への総書き込みデータサイズが書き込み寿命とされる総書き込みデータサイズを超えてしまい、ｅＭＭＣ１１２に書き込んだデータを保証することが出来なくなってしまうことを抑制する。
【００７５】
ｅＭＭＣ１１２への総書き込みデータサイズＤｔｏｔａｌがＤｔｈ２以下である場合、ＣＰＵ１０２はＤｔｏｔａｌが第１基準値（Ｄｔｈ１）以下か否かを判断する（Ｓ７０３）。本実施例におけるＤｔｈ１はＤｔｈ２よりも小さな値である。たとえば、Ｄｔｈ１はｅＭＭＣ１１２の書き込み寿命になる書き込みデータサイズの７０％に設定される。
【００７６】
ＤｔｏｔａｌがＤｔｈ１以下ではない場合、ＣＰＵ１０２はＳ７０４に記載の処理を実行する。
【００７７】
ＣＰＵ１０２はＵＩ１０８にｅＭＭＣ１１２の書き込み寿命が近づいていることをユーザに通知する画面を表示する（Ｓ７０４）。ここで、ＵＩ１０８に表示されるメッセージは、Ｓ７０２で表示されるメッセージと異なるメッセージであり、ｅＭＭＣ１１２の交換の時期が近付いていることを示すようなメッセージであればよい。Ｄｔｈ２よりも小さなＤｔｈ１を設けることで、ｅＭＭＣ１１２の書き込み寿命が近づき、メモリの交換が必要な時期が近づいていることをユーザに知らせることができる。なお、本実施例では、二つの閾値を用いてｅＭＭＣ１１２の書き込み寿命が近づいていることを段階的にユーザに通知したが、Ｓ７０３、Ｓ７０４の処理を行わず、交換が必要な状態でのみユーザに通知を行うとしてもよい。
【００７８】
以上本実施例によれば、メインＳｏＣ１０１からｅＭＭＣ１１２に書き込む際のデータサイズに応じて適切なＷＡＦを選択し、実際にＮＡＮＤフラッシュメモリに書き込まれるデータのデータサイズを計算することが可能になる。算出されたデータサイズを累計し、ｅＭＭＣ１１２の書き込み寿命となるデータサイズと比較することで、実際の書き込みデータサイズを正確に知ることのできないメモリであっても、メモリの寿命が近いことを知ることができるようになる。
【００７９】
（実施例２）
実施例１では、ｅＭＭＣ１１２への書き込み処理が正常に完了した後に、実書き込みデータサイズ加算処理Ｓ４１２を実施していた。実施例２では、ｅＭＭＣ１１２へのデータの書き込みが完了する前に、ｅＭＭＣ１１２のＮＡＮＤフラッシュメモリに書き込まれる実際の書き込みデータサイズを推定し、総書き込みデータサイズ加算処理を算出する。実施例２では、ｅＭＭＣ１１２へのデータの書き込みが完了する前に、ｅＭＭＣ１１２への実際の書き込みデータサイズを予測し、総書き込みデータサイズを算出しておく。このようにすることでｅＭＭＣ１１２への書き込み処理が完了した後に必要な処理を減らし、書き込み完了までに必要な時間を短くすることができる。
【００８０】
図１、図２、図３、図５、図６、図７に記載の箇所は実施例１と同様であるため、ここでは説明を省略する。
【００８１】
図８は、実施例２におけるｅＭＭＣへの書き込み処理８００を示すフローチャートである。ｅＭＭＣ書き込み処理８００は、メインＳｏＣ１０１がｅＭＭＣ１１２に対してデータを書き込むための処理であり、ＣＰＵ１０２、ＤＭＡＣ１０５、コントローラ１１４が連携して実施される。なお、ＣＰＵ１０２が実行する処理を示すプログラムはＲＯＭ１０７に格納されており、当該プログラムをＲＡＭ１０６に展開して実行することにより図８に記載の処理が実現される。なお、図４と同様の処理には同様の番号を付与し、実施例１と異なる箇所のみ説明をする。
【００８２】
Ｓ８０１において、ＣＰＵ１０２はＳ４０１で生成されたディスクリプタテーブル５００の内容に基づいて、ｅＭＭＣ１１２への実際の書き込みデータサイズを計算し、総書き込みサイズを算出する。Ｓ８０１においてＣＰＵ１０２は、図６に示した実書き込みデータサイズ加算処理と同様の処理を実行する。
【００８３】
Ｓ４１１において、ＣＰＵ１０２がＤＭＡＣ１０５から受信した割り込み信号がデータの書き込みが正常に完了したことを示す割り込み信号でなかった場合、ＣＰＵ１０２はＳ８０１で算出した実際の書き込みデータサイズを減算する処理を実行する（Ｓ８０２）。Ｓ８０２において、ＣＰＵ１０２が実行する処理の詳細は図９にて後述する。
【００８４】
実施例２では、上述のようにｅＭＭＣ１１２へのデータの書き込みが正常に行われたか否かに関わらず、Ｓ８０１においてｅＭＭＣ１１２への実際の書き込みデータサイズを推定し、総書き込みデータサイズを予測する。このようにすることで、ｅＭＭＣ１１２へのデータの書き込み後に実際の書き込みデータサイズを推定する処理を行うことなくデータの書き込み処理を完了することができる。
【００８５】
図９は、図８のＳ８０２においてＣＰＵ１０２が実行する実書き込みデータサイズ減算処理９００のフローチャートである。図９に示すフローチャートに記載のプログラムはＲＯＭ１０７に記憶されており、ＣＰＵ１０２がＲＡＭ１０６に展開された当該プログラムを実行することで処理が実現される。
【００８６】
ＣＰＵ１０２は、ディスクリプタテーブル５００に基づき、ＣＰＵ１０２がｅＭＭＣ１１２に書き込みを指示したデータサイズを算出する（Ｓ９０１）。ＣＰＵ１０２はディスクリプタテーブル５００から、Ｂｌｏｃｋ  Ｌｅｎｇｔｈ５０３とＢｌｏｃｋ  Ｃｏｕｎｔ５０４とを読み出し、乗算しＣＰＵ１０２がｅＭＭＣ１１２への書き込みを指示したデータサイズを算出する。
【００８７】
次に、ＣＰＵ１０２はＳ９０１で算出したデータサイズと、ＲＡＭ１０６に展開したＷＡＦ管理テーブルからＳ９０１で算出したデータサイズに対応するＷＡＦを選択する（Ｓ９０２）。
【００８８】
ＣＰＵ１０２は、Ｓ９０１で算出したデータサイズとＳ９０２で選択したＷＡＦからｅＭＭＣ１１２への実際の書き込みが予定されていたデータサイズを推定する（Ｓ９０３）。Ｓ９０３において、ＣＰＵ１０２はＳ９０１で算出されたデータサイズとＳ９０２で選択されたＷＡＦを乗算する。
【００８９】
最後に、ＣＰＵ１０２はＲＡＭ１０６に記憶されている総書き込みデータサイズからＳ９０３で求めた推定された書き込みデータサイズを減算する（Ｓ９０４）。
【００９０】
上記の処理をすることで、ｅＭＭＣ１１２への書き込みが正常に完了しなかった場合に、実際の書き込み状況に合わせてｅＭＭＣ１１２の総書き込みデータサイズを補正することができる。
【００９１】
なお、図９では、ディスクリプタテーブル５００を用いて、Ｓ８０１で実書き込みデータサイズに加算されたデータサイズを算出しなおした。Ｓ８０１において、ＣＰＵ１０２が加算されるデータサイズをＲＡＭ１０６に格納するとし、Ｓ８１３において、ＣＰＵ１０２がＲＡＭ１０６からＳ８０１で加算したデータサイズを取得し、総書き込みデータサイズから減算するとしてもよい。
【００９２】
実施例２においても、図８に記載の処理が完了した後は、任意のタイミングで図７に記載の処理を実行する。図７に記載の処理を実行することで、実際の書き込みデータサイズを知ることのできないｅＭＭＣ１１２であっても、総書き込みデータサイズを予測し、ｅＭＭＣ１１２への書き込みデータサイズが上限に近付いていることを通知することができる。
【００９３】
実施例２によれば、メインＳｏＣ１０１からｅＭＭＣ１１２に書き込む際のデータサイズに応じて適切なＷＡＦを選択し、実書き込みデータサイズを計算することが可能になる。また、ＣＰＵ１０２がＤＭＡ転送の完了を待たずに、実書き込みデータサイズの計算を実施できる。そのため、ｅＭＭＣ１１２へのデータ書き込みが完了した後にＣＰＵ１０２が実際の書き込みデータサイズを推定し、総書き込みデータサイズに追加する処理をしなくてもよくなり、ｅＭＭＣ１１２へのデータ書き込み後に必要な時間が短くなる。
【００９４】
（実施例３）
実施例１および実施例２では、書き込み処理を行う毎に、実書き込みデータサイズ加算処理を行っていたが、実施例３では、書き込み処理とは異なるタイミングで実書き込みデータサイズ加算処理を行う。具体的なタイミングについては実施例の中で説明する。
【００９５】
図２、図３、図５、図７に記載の箇所は実施例１と同様であるため、ここでは説明を省略する。
【００９６】
図１０は、実施例３における画像形成装置１０００の構成である。図１と同様の構成については、同様の符号を付して説明を省略する。
【００９７】
タイマ１１７は、カウント値が閾値に達すると、ＣＰＵ１０２に対して割込み信号を送信するモジュールである。カウント周期と閾値はＣＰＵ１０２から任意に設定可能である。
【００９８】
メインスイッチ１１８は、ユーザが操作するものであり、ユーザが任意に画像系装置１００の電源をオンもしくはオフするために用いるスイッチである。ＣＰＵ１０２はメインスイッチ１１８と接続されており、メインスイッチ１１８がオンもしくはオフされたことを割込み信号で受け取ることができる。
【００９９】
図１１は、実施例３におけるｅＭＭＣ書き込み処理のフローチャートである。ｅＭＭＣ書き込み処理は、メインＳｏＣ１０１がｅＭＭＣ１１２に対してデータを書き込むための処理であり、ＣＰＵ１０２、ＤＭＡＣ１０５、コントローラ１１４が連携して実施される。図３と同様の構成については、同様の符号を付して説明を省略する。なお、図１１は、図３とＳ４１１以降の処理が異なる。
【０１００】
ステップＳ４１１において、ＣＰＵ１０２はＤＭＡＣ１０５からの割り込み信号を受信する。そして、ＤＭＡＣ１０５から受信した割り込み信号が、データ転送が正常に完了したことを示す割り込み信号であるか否かを判定する。Ｓ４１１において、ＣＰＵ１０２が受信した割り込み信号がｅＭＭＣ１１２へのデータ転送が正常に完了したことを示す割り込みだと判定された場合、ＣＰＵ１０２はＳ１１１２に記載の処理を実行する。一方で、Ｓ４１１で受信した割り込み信号が、データ転送が正常に完了しなかったことを示す異常割り込み信号であると判定された場合、ＣＰＵ１０２はＳ４１３に後述する処理を実行する。
【０１０１】
Ｓ１１１２では、Ｓ４０３〜Ｓ４１０のＤＭＡ転送において、ＤＭＡＣ１０５からコントローラ１１４に転送された書き込みデータサイズ（すなわち、ホスト書き込みデータサイズ）に基づいて、ＣＰＵ１０２がカウントアップ処理を実行する。カウントはホスト書き込みデータサイズごとにＷＡＦが異なることを想定し、データサイズ別にカウンターを用意しカウントアップを行う。ステップＳ１１１２の詳細は図１２で説明する。
【０１０２】
Ｓ４１３は、ＣＰＵ１０２がＳ４１０で異常割り込みを受け取った場合に実行され、再転送などのリカバリ動作を実行したり、異常状態をＵＩ１０８に表示したりする。Ｓ４１３は本発明に直接関与しないため、詳細は省略する。
【０１０３】
Ｓ１１１４では、ＣＰＵ１０２がＳ１１１２の処理に用いるカウンターの値が、あらかじめ定めた閾値を超えたか否かを判断する。閾値を超えた場合には、Ｓ１１１５が実行される。ここでの閾値とは、どのような状況においてもカウンターがオーバーフローしないように十分に余裕をもって定められる値となる。閾値を超えていない場合には、書き込み処理１１００を終了する。
【０１０４】
Ｓ１１１５では、ＣＰＵ１０２がカウンターの値に基づいて、累積書き込みデータサイズを計算する。Ｓ１１１５の詳細は図１３で説明する。
【０１０５】
ここで説明したように、ｅＭＭＣ書き込み処理４００では、Ｓ１１１２での書き込みデータサイズカウントアップ処理や、Ｓ１１１４でのカウント値と閾値の比較処理が行われる。これらの処理は、図７で説明する実書き込みデータサイズ加算処理７００と比べ、単純なカウントアップ処理と、ビット演算（比較）処理にとどまるため、ＣＰＵ負荷としては極めて軽いものとなる。
【０１０６】
次に図１２を用いて、ステップＳ１１１２を詳細に説明する。図１２は、実施例３における書き込みデータサイズカウントアップ処理１２００のフローチャートである。書き込みデータサイズカウントアップ処理１２００は、ｅＭＭＣ書き込み処理４００のＳ１１１２において、ＣＰＵ１０２によって実行される処理であり、ホスト書き込みデータサイズ（Ｄｓｉｚｅ１）に基づいて、カウントアップを実行する処理である。
【０１０７】
Ｓ１２０１では、ＣＰＵ１０２がホスト書き込みデータサイズ（Ｄｓｉｚｅ１）に基づいて、インクリメントすべきカウンターを判断する。ホスト書き込みデータサイズ（Ｄｓｉｚｅ１）は図５で説明したディスクリプタテーブル５００の内容にて判断可能である。
【０１０８】
Ｓ１２０２は、Ｓ１２０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が４ｋＢであると判断された場合に実行される。Ｓ１２０２では、ＣＰＵ１０２が４ｋＢ＿Ｃｏｕｎｔｅｒ（４ｋＢｙｔｅ用のカウンター）をインクリメントする。
【０１０９】
Ｓ１２０３は、Ｓ１２０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が８ｋＢであると判断された場合に実行される。Ｓ１２０３では、ＣＰＵ１０２が８ｋＢ＿Ｃｏｕｎｔｅｒ（８ｋＢｙｔｅ用のカウンター）をインクリメントする。
【０１１０】
Ｓ１２０４は、Ｓ１２０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が１６ｋＢであると判断された場合に実行される。Ｓ１２０４では、ＣＰＵ１０２が１６ｋＢ＿Ｃｏｕｎｔｅｒ（１６ｋＢｙｔｅ用のカウンター）をインクリメントする。
【０１１１】
Ｓ１２０５は、Ｓ１２０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が３２ｋＢであると判断された場合に実行される。Ｓ１２０５では、ＣＰＵ１０２が３２ｋＢ＿Ｃｏｕｎｔｅｒ（３２ｋＢｙｔｅ用のカウンター）をインクリメントする。
【０１１２】
Ｓ１２０６は、Ｓ１２０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が６４ｋＢであると判断された場合に実行される。Ｓ１２０６では、ＣＰＵ１０２が６４ｋＢ＿Ｃｏｕｎｔｅｒ（６４ｋＢｙｔｅ用のカウンター）をインクリメントする。
【０１１３】
Ｓ１２０２〜Ｓ１２０６を終えると、カウントアップ処理が終了する。
【０１１４】
なお、本実施例では４ｋＢｙｔｅ用〜６４ｋＢｙｔｅ用のカウンターを用意する例を説明したが、システム構成に応じて、これら以外のデータサイズのカウンターを用意しカウントしてもよい。
【０１１５】
次に図１３を用いてＳ１１１５を詳細に説明する。図１３は、実施例３における実書き込みデータサイズ加算処理１３００のフローチャートである。実書き込みデータサイズ加算処理１３００は、ｅＭＭＣ書き込み処理４００のＳ４１５において、ＣＰＵ１０２によって実行される処理であり、累積書き込みデータサイズ（Ｄｔｏｔａｌ）を算出する処理である。
【０１１６】
なお、実書き込みデータサイズ加算処理１３００の実施タイミングとして、Ｓ１１１５以外に、システムのシャットダウン時、スリープ（節電状態）移行時、一定時間ごと（タイマ割込み発生時）といったタイミングにおいて実施してもよい。詳細は図１４で説明する。
【０１１７】
Ｓ１３０１では、ＣＰＵ１０２が、データサイズごとに「カウンターの値」と「ＷＡＦ」と「データサイズ」を乗算し、データサイズごとの実書き込みデータサイズを算出する。例えば、当該ｅＭＭＣの４ｋＢのＷＡＦに該当する値が、図２に示すうちの８．０という値であり、４ｋＢ＿Ｃｏｕｎｔｅｒの値が５００というカウンター値であった場合を考える。この場合の実書き込みデータサイズは、５００に８と４を乗じた１６０００ｋＢｙｔｅとなる。こうした計算をデータサイズごとに行う。
【０１１８】
Ｓ１３０２では、ＣＰＵ１０２が、Ｓ１３０１で実施したデータサイズごとの計算結果を累積書き込みデータサイズ（Ｄｔｏｔａｌ）に加算する。例えば、Ｓ１３０１の計算結果が７２０００ｋＢｙｔｅ、それまでのＤｔｏｔａｌが１０００００ｋＢｙｔｅの場合、Ｓ１３０２で新たに求められるＤｔｏｔａｌは１７２０００ｋＢｙｔｅになる。
【０１１９】
Ｓ１３０３では、ＣＰＵ１０２が、データサイズごとのカウンターをすべてリセット（カウント結果を０に初期化）する。Ｓ１３０３を終えると、実書き込みデータサイズ加算処理１３００を終了する。
【０１２０】
次に図１４を用いて、図１１のＳ１１１４、Ｓ１１１５と異なるタイミングで実書き込みデータサイズ処理を実行する際の実行タイミングを説明する。ここでは、例として３つのタイミングを説明する。なお、図１１において、Ｓ１１１４、Ｓ１１５を実行した上で、図１４の各タイミングで実書き込みデータサイズ処理を実行してもよい。または、図１１において、Ｓ１１１４、Ｓ１１１５を実行しないで、図１４の各タイミングで実書き込みデータサイズ処理を実行してもよい。
【０１２１】
図１４は、本実施例における実書き込みデータサイズ加算処理１３００の実施タイミングを表すフローチャート（Ａ）〜（Ｃ）である。
【０１２２】
図１４の（Ａ）は、タイマ割込み処理の中で、実書き込みデータサイズ加算処理１４００を実施するためのフローチャートである。タイマは一般的なマイコンやＳＯＣが備えるものであり、設定された時間が経過（カウント値が満了）するとＣＰＵに対して、割込みを発行するモジュールである。本実施例では、ＳｏＣ１０１が備えるタイマ１１７を用いる。
【０１２３】
Ｓ１４０１では、ＣＰＵ１０２がタイマ１１７からの割込み信号を待つ。ＣＰＵ１０２がタイマ１１７からの割込み信号を検知すると、ＣＰＵ１０２はＳ１４０２を実行する。Ｓ１４０２は、図７で説明した実書き込みデータサイズ加算処理１３００であるため、ここでは説明を省略する。Ｓ１４０２を終えるとタイム割り込み処理を終了する。
【０１２４】
図１４の（Ｂ）は、電力状態移行処理の中で、実書き込みデータサイズ加算処理１３００を実施するためのフローチャートである。
【０１２５】
Ｓ１４１１では、ＣＰＵ１０２がシステム全体として電力状態移行条件を満たしているかを判断する。通常状態（スタンバイ状態、アイドル状態とも呼ばれる）から、通常状態よりも消費電力が低い節電状態（スリープ状態、休止状態）へ移行する際は、移行条件を満たしている必要がある。例えば、プリントジョブやスキャンジョブを実施している最中に節電状態に移行すると、ジョブが中断してしまう。そのため、これらのジョブ中は節電状態には移行しない（すなわち、電力状態移行条件を満たしていない）、とＣＰＵ１０２は判断する。電力状態移行条件の詳細については、本実施例には直接関与しないため、詳細な説明は省略する。
【０１２６】
ＣＰＵ１０２がシステム全体として電力状態移行条件を満たしていると判断した場合、Ｓ１４１２が実行される。Ｓ１４１２は、図１３で説明した実書き込みデータサイズ加算処理１３００であるため、ここでは説明を省略する。
【０１２７】
Ｓ１４１３では、ＣＰＵ１０２がシステムを節電状態に移行させる。具体的には、例えば、プリンタ１０９やスキャナ１１０の電源をＯＦＦにする制御を実施する。Ｓ１４１３を終えると電力状態移行処理を終了する。
【０１２８】
図１４の（Ｃ）は、シャットダウン処理の中で、実書き込みデータサイズ加算処理１３００を実施するためのフローチャートである。
【０１２９】
Ｓ１４２１では、ＣＰＵ１０２がメインスイッチ１１８からのオフ割込み信号を待つ。ＣＰＵ１０２がメインスイッチ１１８からのオフ割込み信号を検知すると、ＣＰＵ１０２はＳ１４２２を実行する。
【０１３０】
Ｓ１４２２は、図７で説明した実書き込みデータサイズ加算処理１３００であるため、ここでは説明を省略する。
【０１３１】
Ｓ１４２３では、ＣＰＵ１０２がシステムをシャットダウン状態に移行させる。具体的には、例えば、ＲＡＭ１０６に展開されたシステムデータのうち必要なものをＲＯＭ１０７に書き出す処理を行う。Ｓ１４２３を終えるとシャットダウン処理を終了する。
【０１３２】
以上本実施例によれば、メインＳｏＣ１０１からｅＭＭＣ１１２に書き込む際のデータサイズに応じて適切なＷＡＦを選択し、実書き込みデータサイズを計算することが可能になる。その結果、従来よりも正確にホストシステムが実書き込みデータサイズを推定することが可能になる。
【０１３３】
さらに本実施例によれば、ｅＭＭＣへの書き込み処理発生タイミングでは書き込みサイズのカウントアップ処理のみを行い、実書き込みデータの計算は前記カウント値を用いて、別のタイミングで実施するようにしている。その結果、ＣＰＵ負荷が局所的に集中することを軽減することが可能になる。
【０１３４】
（実施例４）
実施例４では、ｅＭＭＣ書き込み処理１１００において、書き込みデータサイズカウントアップ処理Ｓ１１１２を、ＤＭＡ転送の完了割り込み受信（Ｓ４１０）後に実施していた。実施例２では、ＤＭＡ転送の完了割り込み受信に先だって、書き込みデータサイズカウントアップ処理を実施するフローを示す。
【０１３５】
なお、実施例１における図２、図３、図５、図７および実施例３における図１０、図１２、図１３、図１４、は実施例４においても同様であるため、ここでは説明を省略する。
【０１３６】
図１５は、実施例４におけるｅＭＭＣ書き込み処理１０００のフローチャートである。ｅＭＭＣ書き込み処理１０００は、メインＳｏＣ１０１がｅＭＭＣ１１２に対してデータを書き込むための処理であり、ＣＰＵ１０２、ＤＭＡＣ１０５、コントローラ１１４が連携して実施される。図１１と同様の構成については、同様の符号を付して説明を省略する。なお、図１５は、図１１とＳ１５１１、Ｓ１５１３の処理が異なる。
【０１３７】
Ｓ４０３では、ＣＰＵ１０２がＤＭＡＣ１０５のイネーブルレジスタをオンにすることで、ＤＭＡＣ１０５によるＤＭＡ転送をスタートさせる。Ｓ４０３を終えるとＳ１５１１に遷移する。
【０１３８】
Ｓ１５１１では、Ｓ４０１で生成されたディスクリプタテーブル５００の内容に基づいて、ＣＰＵ１０２がカウントアップ処理を実行する。Ｓ１５１１は、図１１のＳ１１１２に対応し、図１２で説明した書き込みデータサイズカウントアップ処理１２００と同様である。
【０１３９】
Ｓ４１２では、ＣＰＵ１０２がＳ１０１０で受けた割り込みの種別を判断する。異常割り込みだったと判断されれば、Ｓ１５１３が実行される。異常割り込みでなければ、Ｓ１１１４に遷移する。
【０１４０】
Ｓ１５１３では、ＣＰＵ１０２がＳ１５１１であらかじめカウントアップしておいたデータサイズに対して、カウントダウンする処理を行う。Ｓ１５１３の詳細は図１６を用いて後述する。
【０１４１】
Ｓ４１４は、再転送などのリカバリ動作を実行したり、異常状態をＵＩ１０８に表示したりする。Ｓ４１３は本発明に直接関与しないため、詳細は省略する。その後は、図１１と同様であるため説明を省略する。
【０１４２】
なお、本実施例においても、実施例３の図１４で説明したように実書き込みデータサイズ加算処理１３００の実施タイミングを異なるタイミングとしてもよい。具体的には、Ｓ１１１５以外に、システムのシャットダウン時、スリープ（節電状態）移行時、一定時間ごと（タイマ割込み発生時）といったタイミングで実施してもよい。
【０１４３】
図１６は、実施例４における書き込みデータサイズカウントダウン処理１６００のフローチャートである。書き込みデータサイズカウントダウン処理１６００は、ｅＭＭＣ書き込み処理１５００のＳ１５１３において、ＣＰＵ１０２によって実行される処理である。
【０１４４】
Ｓ１６０１では、ＣＰＵ１０２がホスト書き込みデータサイズ（Ｄｓｉｚｅ１）に基づいて、デクリメントすべきカウンターを判断する。ホスト書き込みデータサイズ（Ｄｓｉｚｅ１）は図５で説明したディスクリプタテーブル５００の内容にて判断可能である。
【０１４５】
Ｓ１６０２は、Ｓ１６０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が４ｋＢであると判断された場合に実行される。Ｓ１６０２では、ＣＰＵ１０２が４ｋＢ＿Ｃｏｕｎｔｅｒ（４ｋＢｙｔｅ用のカウンター）をデクリメントする。
【０１４６】
Ｓ１６０３は、Ｓ１６０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が８ｋＢであると判断された場合に実行される。Ｓ１６０３では、ＣＰＵ１０２が８ｋＢ＿Ｃｏｕｎｔｅｒ（８ｋＢｙｔｅ用のカウンター）をデクリメントする。
【０１４７】
Ｓ１６０４は、Ｓ１６０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が１６ｋＢであると判断された場合に実行される。Ｓ１１０４では、ＣＰＵ１０２が１６ｋＢ＿Ｃｏｕｎｔｅｒ（１６ｋＢｙｔｅ用のカウンター）をデクリメントする。
【０１４８】
Ｓ１６０５は、Ｓ１１０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が３２ｋＢであると判断された場合に実行される。Ｓ１６０５では、ＣＰＵ１０２が３２ｋＢ＿Ｃｏｕｎｔｅｒ（３２ｋＢｙｔｅ用のカウンター）をデクリメントする。
【０１４９】
Ｓ１６０６は、Ｓ１６０１でホスト書き込みデータサイズ（Ｄｓｉｚｅ１）が６４ｋＢであると判断された場合に実行される。Ｓ１１０６では、ＣＰＵ１０２が６４ｋＢ＿Ｃｏｕｎｔｅｒ（６４ｋＢｙｔｅ用のカウンター）をデクリメントする。
【０１５０】
なお、本実施例では４ｋＢｙｔｅ用〜６４ｋＢｙｔｅ用のカウンターを用意する例を説明したが、システム構成に応じて、これら以外のデータサイズのカウンターを用意しカウントしてもよい。
【０１５１】
以上本実施例によれば、メインＳｏＣ１０１からｅＭＭＣ１１２に書き込む際のデータサイズに応じて適切なＷＡＦを選択し、実書き込みデータサイズを計算することが可能になる。また、ＣＰＵ１０２がＤＭＡ転送の完了を待たずに、実書き込みデータサイズの計算を実施できる。その結果、従来よりも正確にホストシステムが実書き込みデータサイズを推定することが可能になるとともに、ＣＰＵ１０２の実書き込みデータサイズ計算による処理時間のオーバーヘッドを小さくできる。
【０１５２】
さらに本実施例によれば、ｅＭＭＣへの書き込み処理発生タイミングでは書き込みサイズのカウントアップ処理もしくはカウントダウン処理のみを行い、実書き込みデータの計算は前記カウント値を用いて、別のタイミングで実施するようにしている。その結果、ＣＰＵ負荷が局所的に集中することを軽減することが可能になる。
【０１５３】
（その他の実施形態）
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム又は装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムコードを読み出して実行する処理である。この場合、そのコンピュータプログラム、及び該コンピュータプログラムを記憶した記憶媒体は本発明を構成することになる。
【図１】
2020071855.tif 000003
【図２】
2020071855.tif 000004
【図３】
2020071855.tif 000005
【図４】
2020071855.tif 000006
【図５】
2020071855.tif 000007
【図６】
2020071855.tif 000008
【図７】
2020071855.tif 000009
【図８】
2020071855.tif 000010
【図９】
2020071855.tif 000011
【図１０】
2020071855.tif 000012
【図１１】
2020071855.tif 000013
【図１２】
2020071855.tif 000014
【図１３】
2020071855.tif 000015
【図１４】
2020071855.tif 000016
【図１５】
2020071855.tif 000017
【図１６】
2020071855.tif 000018