(57)【要約】【課題】  デバイスとホストとの間の通信におけるエラーを検出するための信号波形の閾値を適切に設定すること。【解決手段】  制御手段と、第一の記憶手段と、着脱可能な第二の記憶手段と通信するための通信手段を備える制御装置は、制御手段が、第二の記憶手段に格納されたデータをロードするために第二の記憶手段と通信手段との間の通信の初期化を行い、初期化のあとに、第二の記憶手段に格納されたデータのロードを開始し、データのロードが完了しない場合は初期化を再実行し、初期化を再実行したあとにデータのロードが完了した場合に、通信のエラーを検出するための閾値を変更する。【選択図】  図１
2020119146.tif 000002
【特許請求の範囲】
【請求項１】
制御手段と、第一の記憶手段と、着脱可能な第二の記憶手段と通信するための通信手段を備える制御装置であって、
前記制御手段は、
前記第二の記憶手段に格納されたデータをロードするために前記第二の記憶手段と前記通信手段との間の通信の初期化を行い、
前記初期化のあとに、前記第二の記憶手段に格納されたデータのロードを開始し、
前記データのロードが完了しない場合は前記初期化を再実行し、前記初期化を再実行したあとに前記データのロードが完了した場合に、前記通信のエラーを検出するための閾値を変更する、
ことを特徴とする制御装置。
【請求項２】
前記閾値は、前記第二の記憶手段が前記通信において受信する信号の異常波形を該第二の記憶手段によって検出するための閾値であることを特徴とする請求項１に記載の制御装置。
【請求項３】
前記制御手段は、前記データのロードが完了する前に前記通信手段を介して前記第二の記憶手段からの前記初期化の再実行を要求する信号を検出した場合に、前記データのロードが完了しなかったと判定することを特徴とする請求項１または２に記載の制御装置。
【請求項４】
前記制御手段は、前記データのロードが完了する前に前記通信手段を介して前記第二の記憶手段に送信した信号に対する応答が所定時間内にない場合に、前記データのロードが完了しなかったと判定することを特徴とする請求項１乃至３の何れか１項に記載の制御装置。
【請求項５】
データのロードでエラーが起きて前記初期化を再実行した後、エラーが起きずにデータのロードが完了した場合に、前記制御手段が前記閾値を変更することを特徴とする請求項１乃至４の何れか１項に記載の制御装置。
【請求項６】
前記通信における通信エラーが起きた履歴に関するエラー履歴情報を管理する管理手段をさらに有し、前記制御手段は前記エラー履歴情報に基づいて閾値を変更するかを判定することを特徴とする請求項１乃至５の何れか１項に記載の制御装置。
【請求項７】
前記エラー履歴情報は、エラーの累積回数と、データのロード履歴とを対応付けられた情報であることを特徴とする請求項６に記載の制御装置。
【請求項８】
前記エラー履歴情報に基づいて通信エラーを通知するための通知手段をさらに備えることを特徴とする請求項７に記載の制御装置。
【請求項９】
前記通知手段は、データのロードにおいて連続して所定回数のエラーが起きた場合に、通信エラーを通知することを特徴とする請求項８に記載の制御装置。
【請求項１０】
前記通知手段は、前記累積回数が所定の回数に達した場合に、通信エラーを通知することを特徴とする請求項８または９に記載の制御装置。
【請求項１１】
前記通知手段は、前記閾値が所定の値に設定された場合に、ユーザに対する通知を行うことを特徴とする請求項８乃至１０の何れか１項に記載の制御装置。
【請求項１２】
前記制御手段は、前記閾値を変更した場合に、変更した前記閾値に対応する設定値情報を前記第一の記憶手段に保存することを特徴とする請求項１乃至１１の何れか１項に記載の制御装置。
【請求項１３】
前記通信手段は、Ｓｅｒｉａｌ  ＡＴＡ、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ、およびＭｕｌｔｉ  Ｍｅｄｉａ  Ｃａｒｄのいずれかのインタフェースを介して前記第二の記憶手段と通信することを特徴とする請求項１乃至１２の何れか１項に記載の制御装置。
【請求項１４】
前記第一の記憶手段は、ＮＯＲ型フラッシュメモリまたはＥＥＰＲＯＭの不揮発性メモリを備えることを特徴とする請求項１乃至１３の何れか１項に記載の制御装置。
【請求項１５】
前記第二の記憶手段は、ＮＡＮＤ型フラッシュメモリおよびメモリコントローラを含む不揮発性メモリを備えることを特徴とする請求項１乃至１４の何れか１項に記載の制御装置。
【請求項１６】
第一の記憶手段と、着脱可能な第二の記憶手段と通信するための通信手段を備える制御装置の制御方法であって、
前記第二の記憶手段に格納されたデータをロードするために前記第二の記憶手段と前記通信手段との間の通信の初期化を行う初期化工程と、
前記初期化工程のあとに、前記第二の記憶手段に格納されたデータのロードを開始するロード工程と、
前記ロード工程が完了しない場合は、前記初期化工程を再実行し、前記初期化を再実行したあとに前記ロード工程が完了した場合は、前記通信のエラーを検出するための閾値を変更する工程と、
を含むことを特徴とする制御方法。
【請求項１７】
請求項１乃至１５の何れか一項に記載の制御装置としてコンピュータを動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリデバイスの制御装置、制御方法およびプログラムに関する。
【背景技術】
【０００２】
デジタル家電と呼ばれる電化製品は年々進化を続け、機能が増加している。そして、これに伴い、電化製品の制御部を動かすためのプログラムのデータサイズも増大してきた。サイズが増大する電化製品のプログラムを格納するためには、大容量かつ低コストであることを理由に、ＮＡＮＤフラッシュメモリが多用されている。
【０００３】
ＮＡＮＤフラッシュメモリは、ＮＡＮＤフラッシュメモリとメモリコントローラとで構成されるメモリモジュールデバイスとして提供されるのが一般的である。メモリモジュールデバイスは、様々なチップセットに対応できるように、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、またはＭＭＣ（Ｍｕｌｔｉ  Ｍｅｄｉａ  Ｃａｒｄ）などの各種インタフェースに適合した通信規格に対応できるように実装される。そのインタフェースは、アクセス速度を確保するために、数百ＭＨｚ〜数ＧＨｚ以上の高速なインタフェースであることが多い。
【０００４】
このような高速インタフェースは、ノイズ等の外乱によってアクセス速度が劣化するため、種々の外乱への対策をとる必要がある。特許文献１では、外乱としてデバイスに供給される電源電圧の変動を考慮し、不揮発性メモリ回路部と通信するロジック回路部を含む通信デバイスに供給される電源電圧が閾値を下回った際にロジック回路部に対してリセット信号を出力する技術を開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第４２３８２６５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
外乱には、電源電圧の変動の他に、デバイスとホストとの間で送受信される信号波形の異常も存在し、高速インタフェースのために、このような信号波形の異常への対策も要求される。例えば、不揮発性メモリ回路部が受信した信号波形の振幅が、不揮発性メモリ回路部に設定された閾値を下回り、通信エラーが生じたと判定された場合に、不揮発性メモリ回路部がホストとの通信を初期化するように設計されている。
【０００７】
しかしながら、この閾値は、メモリの個体差や、不揮発性メモリデバイスと通信するホストの個体差等に起因して、適切な値が異なる場合がある。
【０００８】
本発明は、上記の点に鑑みてなされたものであり、デバイスとホストとの間の通信におけるエラーを検出するための閾値を適切に設定することを目的とする。
【課題を解決するための手段】
【０００９】
本発明によれば、制御手段と、第一の記憶手段と、着脱可能な第二の記憶手段と通信するための通信手段を備える制御装置は、制御手段が、第二の記憶手段に格納されたデータをロードするために第二の記憶手段と通信手段との間の通信の初期化を行い、初期化のあとに、第二の記憶手段に格納されたデータのロードを開始し、データのロードが完了しない場合は初期化を再実行し、初期化を再実行したあとにデータのロードが完了した場合に、通信のエラーを検出するための閾値を変更する。
【発明の効果】
【００１０】
本発明によれば、デバイスとホストとの間の通信におけるエラーを検出するための閾値を適切に設定することができる。
【図面の簡単な説明】
【００１１】
【図１】第１実施形態に係る画像形成装置のハードウェア構成の一例を示すブロック図。
【図２】第１実施形態に係るＳＡＴＡ通信を確立するための処理の一例を示すシーケンス図。
【図３】第１実施形態に係るＳＡＴＡ通信の信号波形の一例を示す図。
【図４】第１実施形態に係るＳＡＴＡ  ＦＬＡＳＨのＲＯＭに格納されるエラー検出のための閾値の設定値一覧の一例を示す図。
【図５】第１実施形態に係るデバイスがＳＡＴＡ通信のエラーを検出し、ＳＡＴＡ通信を再初期化するための処理の一例を示すシーケンス図。
【図６】第１実施形態に係る、エラー検出のための閾値を動的に変更する処理の一例を示すフローチャート。
【図７】第１実施形態に係るＲＯＭ１０７に格納されるエラー回数情報と設定値情報を示す図。
【図８】第１実施形態に係るＵＩ１０８に表示されるエラー画面の一例を示す図。
【図９】第１実施形態に係るホストが異常波形による通信ハングの後にＳＡＴＡ通信を再初期化するための処理の一例を示すシーケンス図。
【図１０】第２実施形態に係る、エラー検出のための閾値を動的に変更する処理の一例を示すフローチャート。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものではなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１３】
＜第１実施形態＞
図１は、第１実施形態に係る画像形成装置１００の構成を示すブロック図である。本実施形態では、不揮発性メモリデバイスの制御装置を備える画像形成装置１００について説明する。画像形成装置１００は、メインＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）１０１、プリンタ１０９、スキャナ１１０、外部インタフェース（Ｉ／Ｆ）１１１、ユーザインタフェース（ＵＩ）１０８、およびＲＯＭ（読み出し専用メモリ）１０７を備える。また、画像形成装置１００は、ＲＡＭ（ランダムアクセスメモリ）１０６およびＳＡＴＡ  ＦＬＡＳＨ１１３を備える。なお、本実施形態において、不揮発性メモリデバイスは、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）  インタフェース（Ｉ／Ｆ）を備えるフラッシュメモリを備えるＳＡＴＡ  ＦＬＡＳＨ１１３を例にとって説明を行う。しかしながら、不揮発性メモリデバイスは、ＳＡＴＡ  ＦＬＡＳＨとは異なるインタフェースまたはメモリを備えてもよい。
【００１４】
メインＳｏＣ１０１は集積回路部品であり、ＣＰＵ１０２、画像処理ハードロジック１０３、およびホストメモリＩ／Ｆ１０４を含む。また、メインＳｏＣ１０１は、後述するＲＡＭ１０６、ＲＯＭ１０７、ＵＩ１０８等の制御インタフェースや、それらを接続するシステムバスも含むが図１には図示していない。
【００１５】
ＣＰＵ１０２は、画像形成装置１００全体を制御するための制御部である。画像処理ハードロジック１０３は、スキャナ１１０から読み込んだ入力画像データに対して、補正、加工、編集等の画像処理を行うほか、プリンタ１０９へ出力する出力画像データに対して、色変換、フィルタ処理、解像度変換等の処理を行う。
【００１６】
ホストメモリＩ／Ｆ１０４は、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｃｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）やＰＨＹ（物理層）１０５を含むメモリインタフェースである。ホストメモリＩ／Ｆ１０４が備えるＰＨＹ１０５は、本実施形態ではＳＡＴＡ通信に従い論理信号を送受信する物理層である。ＣＰＵ１０２がホストメモリＩ／Ｆ１０４を制御することで、ＳＡＴＡ  ＦＬＡＳＨ１１３とＲＡＭ１０６との間のデータ入出力を、ＳＡＴＡ  Ｉ／Ｆ１１２を介して行うことが可能である。
【００１７】
ＲＡＭ１０６は、ＣＰＵ１０２が動作するためのシステムワークメモリであり、ＣＰＵ１０２の演算データや各種プログラムが記憶される。また、ＲＡＭ１０６は、スキャン時やプリント時に画像処理ハードロジック１０３で様々な画像処理を施された画像データを保持するための画像メモリとしても利用される。
【００１８】
ＲＯＭ１０７は、ブートＲＯＭであり、画像形成装置１００の起動時に実行されるプログラムが格納されている。一例では、ＲＯＭ１０７は、ＮＯＲ型フラッシュメモリやＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒy）を備えうる。ＵＩ１０８は、ユーザインタフェースであり、ユーザに情報を出力するとともにユーザからの入力を受け付けるように、液晶ディスプレイなどの出力装置ならびにタッチパネルおよびハードキーなどの入力装置によって構成される。プリンタ１０９は、画像データを用紙上に印字するプリンタエンジンであり、レーザースキャナユニットや感光体ドラム、紙搬送ユニットなどを含んでいる。スキャナ１１０は、用紙上の画像や文字をＣＣＤ（Ｃｈａｒｇｅ  Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅ）センサやＣＩＳ（Ｃｏｎｔａｃｔ  Ｉｍａｇｅ  Ｓｅｎｓｏｒ）センサで読み取り、画像データに変換する。外部Ｉ／Ｆ１１１は、各インタフェースを介して外部装置とデータ通信を行うための電話回線網や有線ＬＡＮ、無線ＬＡＮ、ＵＳＢなどのインタフェースである。
【００１９】
ＳＡＴＡ  Ｉ／Ｆ１１２は、ＳＡＴＡ規格に準拠したインタフェースであり、ホストメモリＩ／Ｆ１０４とデバイスメモリＩ／Ｆ１１４とを接続する。ＳＡＴＡ規格に準拠した通信（ＳＡＴＡ通信）では、ホストとデバイスが２組の差動信号で通信を行う。一方の１組の作動信号は、ホストからデバイスへの信号の送信に用いられ、他方の１組の作動信号は、デバイスからホストへの信号の送信に用いられる。
【００２０】
ＳＡＴＡ  ＦＬＡＳＨ１１３は、ＮＡＮＤフラッシュメモリ１１８、このＮＡＮＤフラッシュメモリ１１８を制御するコントローラ１１６を含んで構成される。
【００２１】
コントローラ１１６は、デバイスメモリＩ／Ｆ１１４、ＲＯＭ１１７を含む。デバイスメモリＩ／Ｆ１１４は、コントローラ１１６の制御によりメインＳｏＣ１０１とコントローラ１１６との間のデータ入出力を行うインタフェースである。デバイスメモリＩ／Ｆ１１４に内蔵されるＰＨＹ１１５は、ＰＨＹ１０５と同様に、ＳＡＴＡ通信に従い論理信号を送受信するための物理層である。コントローラ１１６は、デバイスメモリＩ／Ｆ１１４を介してメインＳｏＣ１０１のＣＰＵ１０２から受信したコマンドを解釈して、そのコマンドに応じた動作を行うメモリ制御モジュールである。
【００２２】
ＲＯＭ１１７は、マニュファクチャによって設定されるＳＡＴＡ  ＦＬＡＳＨ１１３のファームウェアや、ＳＡＴＡ  ＦＬＡＳＨ１１３の制御に必要な設定値などの情報を含んでいる不揮発性の記憶領域である。
【００２３】
ＮＡＮＤフラッシュメモリ１１８は、データを記録する不揮発性のＮＡＮＤ型フラッシュメモリである。データの書き込みは、コントローラ１１６の制御によりＮＡＮＤフラッシュメモリ１１８内のメモリセルの浮遊ゲートに電子を注入することで行われる。ＲＯＭ１１７に保存される内容は、ＮＡＮＤフラッシュメモリ１１８のユーザ使用領域外に保存するよう構成することも可能である。
【００２４】
図２は、本実施形態に係るメインＳｏＣ１０１のホストメモリＩ／Ｆ１０４とＳＡＴＡ  ＦＬＡＳＨ１１３のデバイスメモリＩ／Ｆ１１４が、電源ＯＮをトリガにＳＡＴＡ  Ｉ／Ｆ１１２を介して通信を確立する一連の制御手順を示すフロー図ある。なお、本実施形態では、ホストメモリＩ／Ｆ１０４がＳＡＴＡ規格のホスト側として動作し、デバイスメモリＩ／Ｆ１１４がデバイス側として動作する場合について説明を行う。
【００２５】
まず、Ｓ２０１において、ホストメモリＩ／Ｆ１０４とデバイスメモリＩ／Ｆ１１４とのそれぞれのモジュールに電源が投入される。続いて、Ｓ２０２およびＳ２０３において、ホストメモリＩ／Ｆ１０４およびデバイスメモリＩ／Ｆ１１４それぞれのモジュールのリセットが解除される。リセットが解除されると、ＣＰＵ１０２はＲＯＭ１０７からブートプログラムや設定を読み込み、ＳＡＴＡ  ＦＬＡＳＨ１１３からメインプログラムを読み出す（ロードする）ためにＳＡＴＡ通信のネゴシエーションを行うための動作を開始する。
【００２６】
その後、Ｓ２０４で、ホストメモリＩ／Ｆ１０４はデバイスメモリＩ／Ｆ１１４にＣＯＭＲＥＳＥＴ信号を出力し、ＣＯＭＩＮＩＴ信号待ちの状態に遷移する。ＣＯＭＲＥＳＥＴ信号とは、ホスト側から初期化を実行するための信号である。デバイスメモリＩ／Ｆ１１４はＣＯＭＲＥＳＥＴ信号を検出すると、Ｓ２０５でＣＯＭＩＮＩＴ信号を出力し、ホストからのＣＯＭＷＡＫＥ信号待ちの状態になる。ＣＯＭＩＮＩＴ信号は、デバイス側から出力される初期化を実行するための信号である。なお、ＣＯＭＲＥＳＥＴ信号やＣＯＭＩＮＩＴ信号の出力は、データのロードの途中でも実行することが可能である。
【００２７】
続いて、Ｓ２０６では、ホストがデバイスからのＣＯＭＩＮＩＴ信号を検出し、ＣＯＭＷＡＫＥ信号を出力する。続いて、Ｓ２０７で、デバイスがホストからのＣＯＭＷＡＫＥ信号を検出すると、デバイスもＣＯＭＷＡＫＥ信号を出力する。Ｓ２０８において、ホストはデバイスに特定の符号化キャラクタまたはシーケンスを出力し、デバイスとの転送レートの検出と受信クロックの調整を開始する。本実施形態では、特定の符号化キャラクタまたはシーケンスとはＤ１０．２コードの信号であるものとして説明を行うが、Ｋ２８．５、Ｄ２７．３などのシーケンスであってもよい。ホストがＤ１０．２信号を出力し続けている間、デバイスはＳ２０９に処理を進め、デバイスがサポートしている最も速い送信クロックを、ＡＬＩＧＮ信号としてホストに出す。ＡＬＩＧＮ信号とは、送信クロックなどの調整を行うための信号であり、Ｓ２０９で調整が折り合わない場合は、デバイス側もＤ１０．２コードの信号を次の速度で出力し、ＡＬＩＧＮ信号を出す。
【００２８】
続いて、Ｓ２１０で、デバイスのＡＬＩＧＮ信号を検出したホストが、検出されたクロック速度で調整を行うステップである。ここでホストは、デバイスのＡＬＩＧＮに合わせて受信クロックの周波数および位相調整を行う。調整が完了すると、ホストおよびデバイスはＳ２１１に処理を進め、互いにデータ通信可能な状態（Ｒｅａｄｙ状態）に遷移する。Ｓ２０４のＣＯＭＲＥＳＥＴ信号の出力や、Ｓ２０５のＣＯＭＩＮＩＴ信号の出力から始まる初期化の実行に対し、次のステートＳ２０６からＳ２１１までを初期化シーケンスと称する。Ｓ２１１の後、Ｓ２１２またはＳ２１３で示すように、ホストおよびデバイス間でデータ通信を行う。
【００２９】
続いて、図３に本実施形態に係るＳＡＴＡ通信の信号波形を便宜的に示す。ＳＡＴＡ通信は、ホストからデバイスとデバイスからホストとでそれぞれ２対、合計４本の差動信号で通信される。この模式図は、ホストメモリＩ／Ｆ１０４からデバイスメモリＩ／Ｆ１１４へ送信される信号の波形を示す。本実施形態において、波形のデータはバイナリ「１０１０１０１０」をトグルで切り替えた（トグルした）波形であるものとして説明を行う。
【００３０】
図３（Ａ）は、正常な波形である。図３（Ｂ）は、通信の中で異常な波形が発生した場合の波形の一例を示す。波形３０１は、所定の振幅が出ていない、かつ波形が歪になっている。このような波形の場合、１と判別する電圧値（ここではＲｅｆ電圧＋３００ｍＶとする）に達しないため、バイナリ「１０１０１０１０」をトグルした波形を期待していた所、バイナリ「１０１０００１０」をトグルした波形になってしまい、正常に応答できない。さらに、ホストも応答に期待して、次のデータを出力しない場合、ＳＡＴＡ通信が見かけ上ハングしてしまう。
【００３１】
次に、図３（Ｃ）を参照して、ＳＡＴＡ  ＦＬＡＳＨ１１３のコントローラ１１６により制御される、波形のエラー検出について説明をする。図３（Ｃ）は、図３（Ｂ）の３０１の異常波形の周辺部の拡大図である。ＳＡＴＡ  ＦＬＡＳＨ１１３が検出した信号波形は、内部のコントローラ１１６のＰＨＹ１１５で、データ変換されコントローラ内で判別される。コントローラ１１６には、エラー検出の機能があり、任意の閾値を割る波形を判別する。この機能は、ＳＡＴＡ  ＦＬＡＳＨ１１３のＲＯＭ１１７に格納されるファームウェアにより実行される。
【００３２】
判別に使用するエラー検出閾値設定は、図４の表４０１によって表され、設定値は同様にＲＯＭ１１７に保存される。設定値は、ＳＡＴＡ  Ｉ／Ｆ１１２を介して、ホストから任意に変更することが可能であり、不揮発メモリで保持される。設定値は、ＳＡＴＡ  ＦＬＡＳＨ１１３が起動した際に、ファームウェアが展開され同時に設定値を読み込み動作に反映される。エラー検出の機能について、図３（Ｃ）の３０２は、コントローラ１１６が波形の信号レベルをサンプリングする周期Ｎ（ナノ秒）を表す。この図３（Ｃ）では、区間３０２の両端の時点における信号振幅がコントローラ１１６によってサンプリングされる。本実施形態では、サンプリング周期Ｎは６００ナノ秒とする。
【００３３】
一例として、エラー検出の設定値は、図４の表４０１の設定値０（初期値）として、閾値を１００ｍＶとする。この場合、本異常波形が閾値１００ｍＶを割ってしまう期間はＮナノ秒より短い２００ナノ秒の期間３０３である。期間３０３が、エラー検出のためのサンプリング周期３０２よりも短いため、図３（Ｃ）に示す異常波形は閾値１００ｍＶの設定値だとエラー検出できない場合がある。
【００３４】
別の例として、エラー検出の設定値の例として、図４の表４０１の設定値５、閾値を３００ｍＶとする。この場合、本異常波形が閾値３００ｍＶを割ってしまう期間はＮナノ秒より長い期間３０４である。期間３０４が、エラー検出のためのサンプリング周期３０２よりも長いため、エラー検出できる。本機能によってエラー検出された場合は、デバイスのＳＡＴＡ  ＦＬＡＳＨ１１３からホストへ、ＣＯＭＩＮＩＴ信号が出力され、接続の初期化が再実行される。
【００３５】
次に、図５を参照して接続の初期化が再実行された場合の処理を説明する。図５のＳ５０１において、デバイスメモリＩ／Ｆ１１４（デバイス）は、例えばデータのロード中に図３（Ｂ）の波形のような異常波形を検出してエラーが発生したと判断するエラー検出をする。エラー検出をした場合、デバイスはＳ５０２でホストメモリＩ／Ｆ（ホスト）へＣＯＭＩＮＩＴ信号を出力する。Ｓ５０２で出力されるＣＯＭＩＮＩＴ信号は、図２のＳ２０５と同様のため説明を省略する。ＣＯＭＩＮＩＴ信号を検出したホストは、ＣＯＭＷＡＫＥ信号を出すようステートを遷移する。続いて、Ｓ５０３において、ホストはデバイスにＣＯＭＷＡＫＥ信号を出力する。Ｓ５０３以降のネゴシエーションのシーケンスは、図２と同様のため割愛する。以上説明したように、異常波形が出た場合にデバイスがエラー検出をし、初期化の再実行を要求する信号をホストに出力することで、接続の初期化が再実行される。
【００３６】
なお、本実施形態において、異常波形は出力されないことが望まれるものの、デバイスの作りや処理の都合上で出力されうるものを想定している。本波形の出力レベルや、時間などは、ホスト（ＳｏＣ１０１）とデバイス（ＳＡＴＡ  ＦＬＡＳＨ１１３）とによって異なりうるが、固定された組み合わせであれば安定していることを想定している。
【００３７】
続いて、図６を参照して、デバイスメモリが次に実行すべき処理を判別できなくなってしまう異常波形の出力に対して、エラー検出の閾値を動的に変更する処理の一例を説明する。図６の処理は、画像形成装置１００の起動時に、ＲＯＭ１０７に格納されたプログラムを、メインＳｏＣ１０１のＣＰＵ１０２がＲＡＭ１０６に展開して実行される。本処理では、ＳＡＴＡ通信においてエラーが発生したことをホストが検出すると、エラーに応じてデバイスのＳＡＴＡ  ＦＬＡＳＨ１１３で設定されるエラー検出のための閾値を動的に変更する。このように制御することで、デバイスがエラー検出をしやすくなり、異常波形に反応してＣＯＭＩＮＩＴ信号を用いて接続の再初期化を促すことができる。
【００３８】
まずＳ６０１において、ＣＰＵ１０２はＳＡＴＡ  Ｉ／Ｆ１１２を介して、ＳＡＴＡ  ＦＬＡＳＨ１１３にアクセスを開始する。Ｓ６０１では、図２のＳ２０４で説明したように、ＣＯＭＲＥＳＥＴ信号を出力する。続いて、ＣＰＵ１０２はＳ６０２に処理を進め、図２のＳＡＴＡ通信のネゴシエーションのシーケンスが完了して、データの送受信によってＳＡＴＡ  ＦＬＡＳＨ１１３に格納されたプログラムを含むデータがロードできたか否かを判定する。すなわち、ＣＰＵ１０２は、ＳＡＴＡ通信の初期化とメインプログラムのロード処理の完了との間に、図３で説明したような異常波形が発生し、通信がハングしたか否かを判定する。本実施形態においては、Ｓ６０２において、ＣＰＵ１０２はＳＡＴＡ  ＦＬＡＳＨ１１３内のＮＡＮＤフラッシュメモリ１１８に格納されたプログラムなどのデータを、メインＳｏＣ１０１に接続されたＲＡＭ１０６に展開するロード処理を行う。
【００３９】
一例では、図５で説明したように、デバイスから通信の初期化の再実行を要求する信号を受信した場合に、データのロードができなかったと判断する。別の例では、ホストの最後の通信からデバイスの応答が所定時間内になかった場合にハングしたと判定する。なお、本実施形態にかかるデバイスのエラー検出機能による、デバイスからホストへのＣＯＭＩＮＩＴ信号の出力による初期化については、ホストがＣＯＭＩＮＩＴ信号を検出し次第、再接続の処理が働くため、所定時間内に応答がないことには含まれない。メインプログラムがロード完了してＲＡＭ１０６に展開された場合（Ｓ６０２でＹｅｓ）は、正常に起動できたと判定してＣＰＵ１０２は処理をＳ６０７へ進める。また、図３で説明した異常波形が生じるなどして通信がハングしてしまったと判定した場合（Ｓ６０２でＮｏ）は、ＣＰＵ１０２は処理をＳ６０３へ進める。
【００４０】
Ｓ６０３において、ホストはデバイスからの応答を所定時間以内に受信しなかったため、ＣＰＵ１０２は、ＳＡＴＡ通信における通信エラーが発生したと判定したことを示すデータ（エラー履歴情報）を保存し、Ｓ６０４に処理を進める。記録するデータの一例を図７に示す。Ｓ６０３において、ＣＰＵ１０２はエラー回数情報７０１を不揮発性の記憶領域であるＲＯＭ１０７に格納し、通信エラーの履歴を管理する。本実施形態では、エラー回数情報７０１は、エラー発生の連続性を判定するために、データのロード履歴とエラーの累積回数とを対応付けて管理する。本実施形態では、エラー履歴情報として、今回、前回、および前々回のデータのロードまでのエラーの累積回数であるエラー回数情報７０１を記憶する。なお、ＲＯＭ１０７の容量が許せば、更に残し続けてもよく、限定はされない。また、保存されるエラー回数情報７０１は、エラーの累積回数であるものとするが、今回、前回、および前々回のエラー回数情報７０１と、通信エラーの累積回数とを別に保存してもよい。Ｓ６０２において、ＳＡＴＡ通信の初期化とメインプログラムのロード処理の完了との間にエラー検出をした場合は、エラー回数がインクリメントされて、図７（Ａ）のように格納データを残す。
【００４１】
図６の説明に戻る。続いて、Ｓ６０４においてＣＰＵ１０２はＲＯＭ１０７に保存されたエラー回数情報７０１が所定の数に達したか否かを判定する。詳細はＳ６１２を参照して後述するが、エラー回数情報７０１が所定の数に達した場合（Ｓ６０４でＹｅｓ）、デバイスが今後エラー検出をしやすくなるように、デバイスが実行するエラー検出のための閾値の設定値を一段階あげるように設定値情報を変更する。
【００４２】
ここで、閾値の設定値の限度値について説明を行う。図４を参照して説明したように、本実施形態のハード構成で設定できる閾値の設定値は表４０１で表される。今回は、設定値を上げるステップは設定値０（初期値）から１刻みで設定値５（限度値）までとしている。閾値を上げ過ぎない理由は、閾値を上げ過ぎた場合、別の要因によるエラー検出が発生するリスクが上がるためである。このため、ＳＡＴＡ通信がハングしない閾値があれば、その値を用いてエラー検出を行う。しかしながら、例えば、図３（Ｄ）で表すように振幅が低く信号品質が悪い場合には、エラー検出の設定値を表４０１の設定値６、閾値を３４０ｍＶとする。そのとき、閾値が高いが故に閾値を割ってしまう期間が、サンプリングする周期Ｎナノ秒よりも長い期間３０５となり、エラーとして検出される。本実施形態では、信号は±２００ｍＶであれば有効と判別され、波形は規格内となるが、デバイスがエラー検出し、図５に示すＣＯＭＩＮＩＴ信号の出力から始まるデバイス側の要求による接続の初期化が再実行される。
【００４３】
本来は、不要の処理のため、このような状況を防ぐため、本実施例では限度値を５としている。限度値を５としたとき、エラーに応じて閾値を上げる回数は６回が限度オーバーの数である。そこで、本実施形態のＳ６０４は、エラー回数情報７０１が６回に達しているかを判別する。この段階で６回に達した場合の一例として、そのときのＲＯＭ１０７に格納されているエラー回数情報７０１や設定値情報７０２は、図７（Ｂ）のように表す。このエラー回数情報７０１の所定数については、本実施例では限度値設定に達するまでの回数としたが、初期値を任意にする構成も考えられ、所定値の設定については設計上都合の良い値にすれば良く、同様の考え方に限定しない。所定数に達した場合は、Ｓ６１５に移行して、ユーザに通知するために図１のＵＩ１０８にエラー状況を表示する。ここでは、メインプログラムを展開する前の状態での簡易プログラムでのエラー表示となるため、図８のようなＵＩ１０８の表示例となる。本機能は、エラーを通知できればよく、画面表示に限らずＬＥＤの点灯など、通知を行うための形態は限定しない。
【００４４】
Ｓ６０４において、エラー回数情報７０１が所定数に達していない場合は、ＣＰＵ１０２はＳ６０５へ移行して、連続して起きたエラーかどうかを判別する。判別方法は、前々回から前回で＋１以上、前回から今回でも＋１以上となっているときに連続エラーとする。本状態になった際のＲＯＭ１０７に格納されるデータの例を図７（Ｃ）に示す。この場合もＳ６１５に移行して、ユーザに通知するために図１のＵＩ１０８にエラー状況を表示する。連続エラーでは、ＳＡＴＡ  ＦＬＡＳＨ１１３が物理的に接続されていない場合や、ＳＡＴＡ  ＦＬＡＳＨ１１３が故障している状態であることが想定されるため、ＣＰＵ１０２は処理をＳ６１５に進め、後述するエラー通知を実行して図６の処理を終了する。Ｓ６０５において、連続エラーではないと判断した場合（Ｓ６０５でＮｏ）、ＣＰＵ１０２は処理をＳ６０６に進め、ホストからの再初期化発行ステートへ移行する。ホストからの再初期化発行ステートとは、図２のＳ２０４に示すように、ホストからデバイスにＣＯＭＲＥＳＥＴ信号を出力し、Ｓ２０６以降の初期化シーケンスを実行するようトリガするためのステートである。Ｓ６０２においてエラーが検出されているものの、Ｓ６０４およびＳ６０５の分岐で致命的なエラーを通知するのＳ６１５まに処理を進められていないため、復帰可能なエラーであると判断される。このため、ＣＰＵ１０２からホストメモリＩ／Ｆ１０４を介してＣＯＭＲＥＳＥＴを発行するために、Ｓ６０１の状態に戻る。
【００４５】
次に、Ｓ６０２〜Ｓ６０６までの間に、通信がハングしてしまった場合に実行される処理の一例を、図９を参照して説明する。図９は、図２および図５と同様に、メインＳｏＣ１０１のホストメモリＩ／Ｆ１０４（ホスト）とＳＡＴＡ  ＦＬＡＳＨ１１３のデバイスメモリＩ／Ｆ１１４（デバイス）とがＳＡＴＡ  Ｉ／Ｆ１１２を介して行う通信を表したフロー図である。図９は、ホストがデバイスにデータを送信する際に異常波形が出力されたが、ホストがエラー検出できない場合の動作を示す。この場合、前述したように通信がハングした状態になるので、所定時間が経過した後、ホストからの再初期化を開始する。以降は図２のフローと同様の処理のため、説明を割愛する。
【００４６】
図６の説明に戻る。Ｓ６０２において、ＳＡＴＡ  ＦＬＡＳＨ１１３からメインプログラムがロード完了した場合（Ｓ６０２でＹｅｓ）、ＣＰＵ１０２は処理をＳ６０７に進める。Ｓ６０７において、ＣＰＵ１０２は、正常にＳＡＴＡ通信が実行できたため、エラー回数情報７０１をインクリメントせず、これまで今回のデータとしていた回数を、前回のデータとし、今回のデータには同じ回数値を保存する。本実施形態において、再初期化後にＳ６０７を実行した場合に、ＲＯＭ１０７に格納されるデータの一例を図７（Ｄ）に示す。
【００４７】
次にＳ６０８で、ＣＰＵ１０２は前回と前々回とのエラー回数情報７０１を比較して、エラー回数が増えているかどうかを判別する。ＣＰＵ１０２が前回と前々回とでエラー回数が増えていない場合（Ｓ６０８でＮｏ）、ＣＰＵ１０２は以前から正常に接続されていたと判定として処理をＳ６０９へ進める。Ｓ６０９において、ＣＰＵ１０２はＳＡＴＡ  ＦＬＡＳＨ１１３のコントローラ１１６のＲＯＭ１１７に格納されている、現在のエラー検出の閾値設定の値をリードする。Ｓ６１０は、Ｓ６０９で読み出したＲＯＭ１１７に格納されているエラー検出の設定値と、ＲＯＭ１０７に格納されている設定値情報７０２の値を比較して、同じかどうかを判別する。
【００４８】
本実施形態では、ＳＡＴＡ  ＦＬＡＳＨ１１３は、交換が可能な部品、すなわち画像形成装置１００に着脱可能な部品であるものとして扱う。もし、前回からＳＡＴＡ  ＦＬＡＳＨ１１３自体が交換されている場合は、ＲＯＭ１１７に格納されているエラー検出の設定値とＲＯＭ１０７に格納されている設定値情報とが異なりうる。Ｓ６１０でリードした設定値と設定値情報とが異なる場合（Ｓ６１０でＹｅｓ）、ＣＰＵ１０２はＳＡＴＡ  ＦＬＡＳＨ１１３が交換されたと判別してＳ６１１に処理を進め、エラー回数情報７０１を初期化（全て０に設定）する。そして、設定値情報７０２には、ＳＡＴＡ  ＦＬＡＳＨ１１３のＲＯＭ１１７に保存された設定値情報を、ＲＯＭ１１７に格納されているエラー検出の設定値に上書きして保存して終了する。Ｓ６１０で、Ｓ６０９で読み出したＲＯＭ１１７に格納されている設定値情報と、ＲＯＭ１０７に格納されている設定値情報７０２の値が一致している場合（Ｓ６１０でＮｏ）、ＣＰＵ１０２はデバイスが交換されていないと判断し、図６の処理を終了する。
【００４９】
一方、ＣＰＵ１０２が前回と前々回とでエラー回数が増えていると判定した場合（Ｓ６０８でＹｅｓ）、処理をＳ６１２へ進め、現在の設定値情報７０２をインクリメントする。本実施形態において、Ｓ６０８で図７（Ｄ）のようにエラー回数が増えていると判定された場合（Ｓ６０８でＹｅｓ）、ＣＰＵ１０２はＳ６１２に進め、図７（Ｅ）で示されるように、設定値情報７０２をインクリメントする。
【００５０】
次に、Ｓ６１３で、＋１をした設定値情報が所定の設定値に達しているかどうかを判別する。図４の表４０１の例では、設定値の限度値が５なので、所定の設定値とは６とする。本実施形態においては、エラー回数情報がインクリメントされるＳ６０３の処理のあと、エラー回数情報７０１が所定の設定値に達したか判定するＳ６０４の処理が実行され、所定の設定値に達している場合はＳ６１５の処理が実行される。このため、設定値情報７０２が先に所定の設定値に達することはない。しかしながら、それぞれのパラメータは設計上任意に選択可能なので、設計上考え得る構成としてＳ６１３の本判別の処理を設けておく。すなわち、Ｓ６１３の処理は省略されてもよく、その場合は、ＣＰＵ１０２はＳ６１２の処理の後、Ｓ６１４に処理を進めてもよい。
【００５１】
Ｓ６１３において、設定値情報７０２が所定の設定値に達していた場合（Ｓ６１３でＹｅｓ）、ＣＰＵ１０２は処理をＳ６１５に移行し、他のエラーと同様にユーザに通知するために図１のＵＩ１０８にエラー状況を表示する。設定値情報７０２が所定の設定値に達していない場合は、Ｓ６１４で、ＳＡＴＡ  ＦＬＡＳＨ１１３のコントローラ１１６のエラー検出の閾値設定を変更する。ＣＰＵ１０２は、ＲＯＭ１１７に格納されるエラー検出の閾値設定を、ＲＯＭ１０７に格納されるＳ６１２で＋１をした設定値情報７０２に対応する設定値になるように、ＳＡＴＡ  Ｉ／Ｆ１１２を介してデータ通信をして、書き換え設定する処理を行う。その後、ＣＰＵ１０２はＳ６０９に処理を進める。
【００５２】
以上説明したように、本実施形態では、通信上の不慮の異常な波形に対して、通信がハングしてしまった場合でもホスト側から自動的に再接続を行い、波形のエラー検出をデバイス側で反応しやすくなるようにエラー検出のための閾値を調整する。これによって、接続されているホストとデバイスの組合せで初期化するための最適なエラー検出閾値に動的に設定することが可能となる。また、効果として、ホスト側のタイムアウトによる初期化の再実行を待たずに、デバイス側から接続の初期化を即時再実行することができるので初期化の再実行にかかる時間を軽減できる。
【００５３】
＜第２実施形態＞
第１実施形態では、ＳＡＴＡ  ＦＬＡＳＨ１１３がエラー検出を行う閾値設定を低い値から、通信エラーが発生する毎に徐々に高い設定値にしていくことで、最適なエラー検出閾値に動的に設定する。第２実施形態では、図１と同様のハードウェア構成で高い設定から下げていくことを前提に制御を行う画像形成装置について説明を行う。なお、第１実施形態と同様の構成または処理については説明を省略する。
【００５４】
閾値設定が低いときには、異常波形が閾値を割ってしまう期間が短く、エラー検出サンプリング周期３０２に異常波形が掛からずエラー検出できない可能性が高い。閾値設定が高いときには、低い振幅の組み合わせとなった際など、異常波形ではない波形でエラー検出してしまうというリスクが発生する可能性がある。
しかし、それぞれの状態から動的に調整を行い、最終的に通信がハングしないポイントがあれば、そこを最適な値として留めて置くことが重要となるので、ひとつの方法として、高い設定から下げていく制御方法を提案する。
【００５５】
図１０では、図６で説明したエラー検出の閾値設定値を上げていく方向で調整する制御に対し、エラー検出の閾値に下げていく方向で動的に変更する処理フローを説明する。基本的な制御は実施例１の方法と近いため、差分が部分についての詳細は割愛する。また、本実施例では、前提として、ＲＯＭ１０７に格納される設定値情報７０２は５から始まる。
【００５６】
Ｓ１００１およびＳ１００２は、Ｓ６０１およびＳ６０２の処理と同様であるため説明を省略する。Ｓ１００２において、メインプログラムのロードが完了できなかった場合（Ｓ１００２でＮｏ）、ＣＰＵ１０２は処理をＳ１００３へ進める。Ｓ１００３もＳ６０３と同様に、今回、前回、および前々回のエラー回数情報７０１を保存していく。その後、ＣＰＵ１０２は処理をＳ１００４に進め、Ｓ６０４と同様に、ＲＯＭ１０７に保存されたエラー回数情報７０１が所定の回数に達したか否かを判定する。本実施形態では、ＳＡＴＡ  ＦＬＡＳＨ１１３でのエラー検出の閾値を設定５から下げていくため、閾値を下げる余地は５段階分あるが、一番下まで下げない４段階を限度として判定する。このあたりの判定回数は、任意に設定することが可能である。そこで、本実施形態のＳ１００４では、ＣＰＵ１０２はエラー回数情報７０１が４回に達しているかを判別する。ここで４回に達していた場合は、Ｓ１０１５に移行して、ユーザに通知するために図１のＵＩ１０８にエラー状況を表示する。次いで、Ｓ１００５もＳ６０５同様に、今回、前回、および前々回のエラー回数情報７０１を元に、所定回数、エラーが連続して起きたか否かを判定する。エラーが連続して起きたと判定した場合（Ｓ１００５でＹｅｓ）、ＣＰＵ１０２は処理をＳ１０１５に進め、エラー表示をする。エラーが連続して起きていないと判定した場合（Ｓ１００５でＮｏ）、ＣＰＵ１０２は処理をＳ１００６に進め、ホストからＣＯＭＲＥＳＥＴ信号を出力させるステートへ移行する。
【００５７】
Ｓ１００２において、メインプログラムのロードが完了したと判定した場合（Ｓ１００２でＹｅｓ）、ＣＰＵ１０２は処理をＳ１００７に進める。Ｓ１００７およびＳ１００８の処理は、Ｓ６０７およびＳ６０８と同様であるため説明を省略する。Ｓ１００８において、前回と前々回とを比較してエラー回数情報７０１が増えていないと判定した場合（Ｓ１００８でＮｏ）、ＣＰＵ１０２は処理をＳ１００９へ進める。Ｓ１００９およびＳ１０１０の処理は、Ｓ６０９およびＳ６１０と同様であるため説明を省略する。Ｓ１０１０において、ＣＰＵ１０２が、デバイスから読み出したエラー検出の設定値情報と、ＲＯＭ１０７に格納されている設定値情報７０２の値とが異なると判定した場合（Ｓ１０１０でＹｅｓ）、処理をＳ１０１１に進め、通信の初期化の再実行を行う。ここでは、Ｓ６１１の時のように設定値を０で初期化するのではなく、本実施形態のＳ１０１１では、高い閾値から設定するため、閾値設定値５で初期化を行う。次に、Ｓ１００８において、エラー回数情報７０１が増えているとＣＰＵ１０２が判定した場合（Ｓ１００８でＹｅｓ）、Ｓ１０１２に処理を進め、現在の設定値情報７０２をデクリメントする。本実施形態では、閾値が高すぎるため、通常の信号波形がエラーとして検出されるものとする。この場合、第１実施形態のＳ６１２では設定値情報７０２をインクリメント（＋１）したが、第２実施形態では設定値情報７０２を現在の値（ここでは５）からデクリメント（−１）する。この制御の違いが、第１実施形態と第２実施形態との相違点である。Ｓ１０１３およびＳ１０１４の処理は、Ｓ６１３およびＳ６１４と同様のため、説明を省略する。Ｓ１００４、Ｓ１００５、およびＳ１０１３において、不具合があると判定すると、Ｓ１０１５に処理を進め、Ｓ６１５と同様、ＵＩ１０８にエラー状況を表示する。
【００５８】
以上説明したように、第２実施形態に係る方法は、第１実施形態とは異なる方向からＳＡＴＡ  ＦＬＡＳＨ１１３でエラー検出を行うための閾値を調整する。なお、本実施形態では、設定値を１刻みで変更したが、設定値を変更する幅や程度については、考えうる構成で実施可能であり限定されない。また、それに応じてエラー回数情報７０１の所定数や、閾値設定の限度値なども、設計要件に合わせて変更可能である。
【００５９】
＜その他の実施例＞
第１または第２の実施形態では、ＳＡＴＡ通信におけるエラーをデバイスが検出するための閾値をホストが変更する処理の一例について説明した。しかしながら、ＳＡＴＡ通信におけるエラーをホストが検出するための閾値をホストが変更してもよい。例えば、Ｓ６１４で、ホストがデバイスからの応答を待つ所定時間を、例えばＳ６１４で変更することで、ＳＡＴＡ通信におけるエラーを検出するための閾値を変更してもよい。
【００６０】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【００６１】
上述の各実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００６２】
１００：画像形成装置、１０１：メインＳｏＣ、１０２：ＣＰＵ、１０３：画像処理ハードロジック、１０４：ホストメモリＩ／Ｆ、１０５：ＰＨＹ、１０６：ＲＡＭ、１０７：ＲＯＭ、１０８：ＵＩ、１０９：プリンタ、１１０：スキャナ、１１１：外部Ｉ／Ｆ、１１２：ＳＡＴＡ  Ｉ／Ｆ、１１３：ＳＡＴＡ  ＦＬＡＳＨ、１１４：デバイスメモリＩ／Ｆ、１１５：ＰＨＹ、１１６：コントローラ、１１７：ＲＯＭ、１１８：ＮＡＮＤフラッシュメモリ
【図１】
2020119146.tif 000003
【図２】
2020119146.tif 000004
【図３】
2020119146.tif 000005
【図４】
2020119146.tif 000006
【図５】
2020119146.tif 000007
【図６】
2020119146.tif 000008
【図７】
2020119146.tif 000009
【図８】
2020119146.tif 000010
【図９】
2020119146.tif 000011
【図１０】
2020119146.tif 000012