(57)【要約】【課題】記録ヘッドをもちいた記録動作を行う記録装置において、記録装置内のマスクＲＯＭのプログラムを更新するためには、マスクＲＯＭを交換していた。【解決手段】書き換え可能なメモリに、更新（修正）プログラムと、更新プログラムのアドレスを変換するプログラムを格納し、これらのプログラムを実行させることで、マスクＲＯＭのプログラムを更新することなく、更新プログラムを実行させる。【選択図】　　　図１
2004090232.tif 000002
【特許請求の範囲】
【請求項１】
記録ヘッドを用いた記録動作の制御を行う制御手段と、前記制御手段が実行するプログラムを予め格納された書き換え不能な記憶手段と、前記プログラムのアドレステーブルを格納する第２記憶手段と、前記プログラムの代わりに実行する修正プログラムを格納する第３記憶手段とを備えた記録装置であって、
前記修正プログラムと前記アドレステーブル変換プログラムとを格納する第４記憶手段と、
前記アドレステーブル変換プログラムを実行させることで前記アドレステーブルを変更するテーブル変換手段と、
前記記録装置の起動時に、前記テーブル変換手段の実行と、前記第４記憶手段に格納された修正プログラムの前記第３記憶手段への格納を行った後、前記制御手段は前記修正プログラムを実行することを特徴とする記録装置。
【請求項２】
前記記録装置は、さらに前記修正プログラムと前記アドレステーブル変換プログラムとを前記第４記憶手段に格納するプログラム格納手段を備えたことを特徴とする請求項１に記載の記録装置。
【請求項３】
前記プログラム格納手段は、前記格納処理を完了した際、格納完了情報を前記第４記憶手段に格納することを特徴とする請求項２に記載の記録装置。
【請求項４】
前記プログラム格納手段は、格納すべきデータか否かを解析するデータ解析手段と、前記入力手段の入力時のエラーを検出する通信エラー検出手段とを有することを特徴とする請求項２に記載の記録装置。
【請求項５】
前記格納完了情報は前記第４記憶手段の先頭アドレスに格納されることを特徴とする請求項３に記載の記録装置。
【請求項６】
前記修正プログラムはバイナリー形式であることを特徴とする請求項１に記載の記録装置。
【請求項７】
記録ヘッドを用いた記録動作の制御を行う制御手段と、前記制御手段が実行するプログラムを予め格納された書き換え不能な記憶手段と、前記プログラムのアドレステーブルを格納する第２記憶手段と、前記プログラムの代わりに実行する修正プログラムを格納する第３記憶手段と、前記修正プログラムと前記アドレステーブル変換プログラムとを格納する第４記憶手段とを備えた記録装置の制御方法であって、
前記アドレステーブル変換プログラムを実行させることで前記アドレステーブルを変更するテーブル変換工程と、
前記第４記憶手段に格納された修正プログラムの前記第３記憶手段への格納工程と、
前記記録装置の起動時に、前記テーブル変換工程と、前記格納工程を実行させる制御工程とを有することを特徴とする記録装置の制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば記録装置のような電子機器において、制御するためのデータをダウンロードすることにより更新可能とする電子機器と、そのダウンロードするデータの構造と、格納方法に関する。
【０００２】
【背景の技術】
従来の記録装置など電子機器は書き換え不能なマスクＲＯＭ内にプログラムを格納し、そのプログラムを実行することにより記録装置を動作させていた。このような構成では記録装置単体でのプログラムの更新は不可能で、搭載されているマスクＲＯＭを交換することで、プログラムの更新を行っていた。
【０００３】
また、最近の記録装置ではこの記録装置を動作させるプログラムを書き換え可能な不揮発性の素子に格納し、書き換え可能な不揮発性の素子（メモリ素子）からプログラムを実行している。このような記録装置では予め決められたメモリサイズ単位やブロック単位で書き換えが出来る素子が存在している。
【０００４】
【発明が解決しようとしている課題】
しかしながら、マスクＲＯＭの変更のためには、マスクＲＯＭを作成するための時間、コストを要する。また、書き換え可能な不揮発性メモリ素子を使用する場合にも、プログラムすべてを格納できるメモリ容量を確保するためには、製品コストが上昇する。
【０００５】
さらに、この書き換え可能な不揮発性メモリに格納されたプログラムを実行する場合、不揮発性メモリへのアクセスの遅延もある。
【０００６】
本発明は上記課題に鑑みてなされたものであり、その目的は、従来よりも性能を劣化させることなく、安価で、容易にプログラムの更新が可能な電子機器、記録装置を提供することである。
【０００７】
【課題を解決するための手段】
上記課題を解決するために、本発明の記録装置は、記録ヘッドを用いた記録動作の制御を行う制御手段と、制御手段が実行するプログラムを予め格納された書き換え不能な記憶手段と、プログラムのアドレステーブルを格納する第２記憶手段と、プログラムの代わりに実行する修正プログラムを格納する第３記憶手段とを備えた記録装置であって、修正プログラムとアドレステーブル変換プログラムとを格納する第４記憶手段と、アドレステーブル変換プログラムを実行させることでアドレステーブルを変更するテーブル変換手段と、記録装置の起動時に、テーブル変換手段の実行と、第４記憶手段に格納された修正プログラムを第３記憶手段への格納を行った後、制御手段は修正プログラムを実行する。
【０００８】
また、本発明の記録装置の制御方法は、記録ヘッドを用いた記録動作の制御を行う制御手段と、前記制御手段が実行するプログラムを予め格納された書き換え不能な記憶手段と、前記プログラムのアドレステーブルを格納する第２記憶手段と、前記プログラムの代わりに実行する修正プログラムを格納する第３記憶手段と、前記修正プログラムと前記アドレステーブル変換プログラムとを格納する第４記憶手段とを備えた記録装置の制御方法であって、前記アドレステーブル変換プログラムを実行させることで前記アドレステーブルを変更するテーブル変換工程と、前記第４記憶手段に格納された修正プログラムの前記第３記憶手段への格納工程と、前記記録装置の起動時に、前記テーブル変換工程と、前記格納工程を実行させる制御工程とを有する。
【０００９】
【発明の実施の形態】
以下に、本発明に係る実施の形態について添付図面を参照して詳細に説明する。
【００１０】
［実施例］
図１は電子機器であり、例えばインクジェット方式の記録装置（プリンタ）である。ＣＰＵ１０１はプリンタの画像データの作成、記録制御のためのモータ駆動、記録ヘッド（印字ヘッド）の吐出制御、上位装置（ホスト装置）から転送されたコマンドの解析、パネル１１２からの入力による各種設定などを行う。
【００１１】
本実施例ではその他にプログラム更新時のプログラムデータの解析、フラッシュＲＯＭ１１０に対する書き込み、また、システムの起動時においては、１１０フラッシュＲＯＭから読み出したプログラムを訂正用ＲＡＭ１１１に書き込み、その後、ＲＡＭ１０３に格納されている関数とグローバル変数のアドレステーブルを更新する。
【００１２】
ＲＯＭ１０２は、プリンタを駆動するための制御プログラム、各種固定値データ（モータの駆動テーブル等）、フォントデータ等が格納されている。ＲＯＭ１０２のプログラムはＣＰＵ１０１によって読み出され実行される。各種固定値データはそのまま初期値として使用されるものと、ＲＡＭ１０３に展開されＣＰＵにより加工され使用される。本実施例では、ＲＯＭは書き換え不能なマスクＲＯＭが使用されていて、読み出し専用として動作している。
【００１３】
なお、関数を実行するための関数テーブル（説明のため関数テーブルＡと表わす）は、起動時にＲＡＭ１０３に格納（展開）され、そのアドレス値が関数の呼び出しに使用される。（このアドレス値を参照して、各アドレスに対応した関数を使用することができる）グローバル変数も同様にアドレスがテーブル化され、そのアドレスは起動時にＲＡＭ１０３に呼び出され、テーブルのアドレスを使用してアクセスされる。
【００１４】
ＲＡＭ１０３はイメージデータの場合、ＣＰＵ１０１によって読み込まれたイメージデータを指定された記録位置（印字位置）と対応するＲＡＭ１０３上に展開され画像データ（印字データ）として使用する。更にＲＡＭ１０３はプログラム実行に必要なワークメモリ、インターフェース（Ｉ／Ｆ）１０４から入力データの一時格納場所としての受信バッファとしても使用している。
【００１５】
また、本実施例では上述したように、関数とグローバル変数のアドレスをテーブル化したものを格納している。更に、ダウンロードモード時におけるデータの一時保管などにも使用している。
【００１６】
Ｉ／Ｆ１０４は不図示のホスト装置と接続され、画像データ（印字データ）、プリント指示コマンド、ダウンロードのプログラムデータ等のデータを受信するためのものである。
【００１７】
本実施例のＩ／Ｆ１０４はＵＳＢの規格に準拠した電気的仕様となっており、ホスト装置からのデータだけでなく、プリンタの状態をホストに転送するため、双方向の通信が可能となっている。
【００１８】
ＥＥＰＲＯＭ１０５はプリンタの設定状態を保管しておくだけでなく、その他、記録（印刷）枚数、インク残量なども格納されている。プリンタの状態としては、対応用紙、自動電源ＯＮ／ＯＦＦなどの機能項目、として格納されている。
【００１９】
モータコントローラ１０６は本実施例のプリンタにおいては、主走査方向に印字ヘッドを走査させて印字を行うプリンタ、印字ヘッドを１回、又は複数回走査させて印字を行うために使用する。モータコントローラ１０６への制御はＣＰＵ１０１が行い記録（印字）はモータの等速域と加減速領域を使用して行われる。モータコントローラ１０６のもう一つの制御は被記録媒体（例えば記録用紙）を搬送方向へ移動させるための搬送モータ（ＬＦモータ）である搬送モータコントローラ（ラインフィードモータコントローラ）である。
【００２０】
このモーターは記録ヘッドを走査させるキャリッジモーター（記録ヘッド走査用モーター）とは独立で動作可能であり、通常の記録動作においては、記録ヘッド走査用モーターが１回または複数回走査後、ラインフィードモータコントローラが記録用紙を所定量搬送する制御を行う。
【００２１】
図８は、プリンタの斜視図である。２０５は記録ヘッドであり、キャリッジ２０４上に搭載されてシャフト２０３に沿って長手方向に往復運動可能となっている。記録ヘッドより吐出されたインクは、記録ヘッドと微小な間隔をおいて、プラテン２０１に記録面を規制された被記録材２０２に到達し、その上に画像を形成する。
【００２２】
記録ヘッドには、フレキシブルケーブル２１９を介して画像データに応じて吐出信号が供給される。なお、２１４はキャリッジ２０４をシャフト２０３に沿って走査させるためのキャリッジモーターである。２１３はモーター２１４の駆動力をキャリッジ２０４に伝達するワイヤである。また、２１８はプラテンローラー２０１に結合して被記録材２０２を搬送させるための搬送モーターである。
【００２３】
なお、記録ヘッドの解像度は６００ＤＰＩである。この記録ヘッドは、インクジェット方式でブラック用は３２０本、カラー用は１２８本の記録素子が配列されている。記録素子は駆動部とノズルから構成されており、駆動部は、ヒーターによりインクに熱を与えることが可能になっている。この熱によりインクは膜沸騰し、この膜沸騰による気泡の成長または収縮によって生じる圧力変化によって、ノズルからインクが吐出される。
【００２４】
図１の説明に戻ると、バスライン１０９はデータを転送するためのデータ及びアドレスバスである。ＣＰＵ１０１が１０９バスラインを使用し、１０２から１１１までの各ユニットを制御する。
【００２５】
１１０はフラッシュＲＯＭでありデータの入出力がシリアル形式、メモリ容量は１６Ｋバイトの安価なメモリである。ＲＯＭ１０２に格納されているプログラムの代わりに別のプログラムを実行させるために、その代わりのプログラムをフラッシュＲＯＭ１１０に格納する。
【００２６】
このフラッシュＲＯＭ１１０の書き込み、読み出しはＣＰＵ１０１が行う。書き込みは印字装置がダウンロードモードの場合に行われ、読み出しはプログラム起動時（例えば、プリンタの電源オン時）に、ＣＰＵ１０１によりフラッシュＲＯＭ１１０の内容を確認し、所定のキーワードが格納されている場合に行われる。本実施例では、このキーワードは“ＢＪＰＲ”である。
【００２７】
１１１は訂正用ＲＡＭである。この訂正用ＲＡＭ１１１はフラッシュＲＯＭ１１０と共にＲＯＭ１０２に格納されたプログラムの代わりになるプログラムを用意するために使われる。使い方はフラッシュＲＯＭ１１０から読み出したプログラムを訂正用ＲＡＭ１１１に書き込み、実行される。この訂正用ＲＡＭ１１１は、格納されたプログラムの実行速度が高速になるような高速アクセスが可能なＳＲＡＭである。
【００２８】
フラッシュＲＯＭ１１０に格納されたプログラムを訂正用ＲＡＭ１１１に書き込むときには、キーワードは読み出さずプログラムのみを訂正用ＲＡＭ１１１に書き込む。また同時にテーブル変換用プログラムも、訂正用ＲＡＭ１１１に書き込まれる。
【００２９】
その後、テーブル変換用プログラムを実行することにより、関数テーブルＡの一部に格納されているアドレスが変換後の訂正用ＲＡＭ１１１のアドレスを格納するようになる。
【００３０】
この動作により、従来ＲＯＭ１０２に格納されていた関数が呼ばれていたものが１１１訂正ＲＡＭ１１１に格納されている関数が呼ばれるようになる。
【００３１】
本実施例におけるメモリ空間の割り付けは、例えば、０ｘ００００〜０ｘ５ＦＦＦＦをＲＯＭ１０２に割り当て、０ｘ６００００以降を訂正用ＲＡＭ１１１に割り当てている。
【００３２】
図２、７を用いては本実施例でのプログラムをダウンロードする時の処理を説明する。
【００３３】
図７において、ダウンロードモードへの移行は、プリンタの電源立ち上げ時にパワーキー、リセットキー、ドアキーの全てのキーを押すことにより行われる。この全てのキーが押されていれば（Ｓ３１）、このダウンロードモードへの移行し、ＵＳＢインターフェースにより、受信待ち状態となる（Ｓ３２）。ダウンロードデータの受信があれば、ダウンロードの処理が行われる（Ｓ３３）。受信が開始されれば予め決められた時間にデータの受信があるか否か判断し（Ｓ３４）、予め決められた時間内にデータがなければ通常状態に復帰する（終了する）。本実施例では、データの受信完了までの時間として２０秒を設定している。
【００３４】
図２では、ダウンロードモードではプログラムデータの受信状態でヘッダー解析が行われる（Ｓ１１）。受信されたデータを解析し、ヘッダー情報から送られてきたデータがダウンロードデータであるか否かの判断を行う。
【００３５】
ダウンロードデータの場合はＳ１２に移行し、ヘッダー情報に付加されているレングスデータを読み込み、レングスに基づいて残りのデータを全て受信する。受信が完了するまでは処理時間のカウントを行う。
【００３６】
レングス分のデータを全て受信すると、ヘッダー情報に付加されているＳＵＭ値と実際に受信したデータのＳＵＭ値を比較し、適切にデータを受信したかチェックする（Ｓ１３）。ＳＵＭ値がヘッダー情報と転送されたデータで同じ場合にはＳ１４に進み、書き込みに使用するフラッシュＲＯＭの内容を消去（削除）する。使用する条件により、フラッシュＲＯＭの全体消去、あるいは部分消去することが選択可能であるが、本実施例では全体容量が１６Ｋバイトと少量なため、全体消去を行っている。
【００３７】
次に、ＳＵＭ値のチェックが完了したプログラムデータをフラッシュＲＯＭに格納する（Ｓ１５）。この場合、ヘッダー部を取り除いて、指定されたアドレスに格納する。その後、書き込んだプログラムの容量（データ数）と書き込みが完了したことを示すキーワード（格納完了情報）を決められたアドレスに格納して（Ｓ１６）処理を終了しシステムをリセットする。
【００３８】
図３では図２で示したようにプログラムをダウンロードした後のプリンタの起動処理を示している。この起動時には、フラッシュＲＯＭのキーワード格納アドレスのデータを読み込み、書込み完了（格納完了）を示すキーワード（情報）が格納されているか判断する（Ｓ２１）。指定されているキーワードが格納されている場合にＳ２２に進み、フラッシュＲＯＭに格納されているプログラムの容量（データの長さ）を読み込み、その後そのプログラムの容量（プログラムサイズ）に基づいて、プログラムをフラッシュＲＯＭから読み出す（Ｓ２３）。その後、読み出したプログラムを訂正用ＲＡＭに書き込む（Ｓ２４）。
【００３９】
その後、訂正用ＲＡＭに書き込まれたプログラムの中で関数とグローバル変数のアドレステーブルを更新するプログラムを起動する（Ｓ２５）。これらの処理により、従来使用されていたＲＯＭ１０２に格納された関数の代わりに、訂正ＲＡＭ上の関数が使用できるようになる。
【００４０】
図４は実際にプログラムがどのように変更されるかを図示したものである。
４０１は書き換え不能なＲＯＭ空間である。関数Ｆｕｎｃ１が関数ｆｕｎｃＡを呼び出す場合、４０２のｆｕｎｃ［］［］と言うテーブルを参照し、そのテーブルの一番目の要素である関数ｆｕｎｃＡを見つけそのアドレスを参照し関数を呼び出す。この方法は関数だけでなく変数のテーブルを参照することで、グローバル変数においても同様に実行できる。
【００４１】
ここまでは、変更前のプログラム（ＲＯＭ１０２に格納された）の動作である。仮に、プログラムに変更が必要になった場合は、以下のように、ダウンロードするプログラムを用意する。
【００４２】
まず、プログラム中の変更する関数と同じタイプの関数を定義する。関数の内容を修正後、訂正用のＲＡＭにおいて実行可能になるようにアドレスの指定を変更しコンパイル、リンク作業を行う。
【００４３】
次に、関数の修正と、修正対象の関数のアドレスと修正のための代わりの関数のアドレスとを入れ替える（修正対象の関数のアドレスを代わりの関数のアドレスに変更する）ため、その関数のアドレス変換をプログラム化した４０３のようなプログラムを作成し、コンパイル、リンクを行います。
【００４４】
このようなプログラムを実行することにより、ＲＡＭ１０３に格納されているｆｕｎｃ［］［］の一番目の要素がｆｕｎｃＡのアドレスからｆｕｎｃＢのアドレスへの変更されます。これにより、ｆｕｎｃＢが呼び出されることが可能となり、ｆｕｎｃＡの代わりにｆｕｎｃＢが実行される。
【００４５】
なお、書き換え不能なＲＯＭ１０２にある関数は修正前と同様にｆｕｎｃ［］［］と言うアドレステーブルから一番目の要素のアドレスを参照します。しかしながら、４０３でアドレスが変更されているため、今度はｆｕｎｃＡのアドレスではなく、ｆｕｎｃＢのアドレスを参照し、そのｆｕｎｃＢを呼び出します。このｆｕｎｃＢは修正されているプログラムである為、プログラム全体としては修正された形で動作する。
【００４６】
以上のようにプログラムの修正を、１つの関数あるいは１つのグローバル変数を修正単位とすることができ、従来よりも少ないメモリ容量でプログラムの変更が可能となる。
【００４７】
図５は上位装置から転送されるデータの構造である。本実施例ではヘッダー部５０１で使用するダウンロードデータを識別する。このヘッダー部の内容は“０ｘ１Ｂ，０ｘ００，０ｘ１８，０ｘ００”である。
【００４８】
最初のデータである０ｘ１Ｂはエスケープシーケンスとして認識され、データの区切り、あるいは先頭として認識される。その後の３バイトのデータが認識コードとなり、ダウンロードデータを意味するコードになっている。５０２はサム値データであり１６ビットで表現される。この値は５０４のプログラムデータのサム値である。５０３はプログラムデータ全体の容量（データの長さ）を１６ビットで格納している。５０４は実際にフラッシュＲＯＭに格納されるデータでデータ形式がバイナリ構造となっており、訂正用ＲＡＭ１１１にて使用されないエリアは全て０ｘＦＦで埋められている。
【００４９】
図６はフラッシュＲＯＭと訂正用ＲＡＭのマップである。アドレスの先頭には書き込み終了を表すキーワードが４バイト分の領域に格納されている。その後２バイト分の領域に、プログラムの容量（長さ）が格納されている。この容量はアドレス０ｘ１０番地から始まるアドレス変換プログラムからアドレス０ｘ４００番地以降に格納される変更用関数プログラムの最終アドレスまでの長さとなっている。
【００５０】
アドレス変換プログラムの最終アドレスの次のアドレスから変更用関数プログラムの先頭の手前（アドレス０ｘ３ＦＦ）まではデータ値０ｘＦＦが埋め込まれており、このエリアも全てプログラム容量に含まれる。
【００５１】
その後、前述したように０ｘ１０番地からはアドレス変換プログラムが格納され、０ｘ４００番地以降は変更用関数プログラムが格納されている。このマップはフラッシュＲＯＭと訂正用ＲＡＭのマップで全く同じ構成で、記録装置の電源オン時に全てコピーされる。その後、アドレス変換プログラムを実行することにより、変更用関数プログラムが有効となり、プログラムが修正される。
【００５２】
［その他の実施例］
なお、以上の実施例においては、変更用プログラムデータ転送時に送信エラー検出用にチェックサムを用いたが、ＣＲＣ−１６などのデータ通信エラー検出機能を使っても構わない。
【００５３】
また、変更用プログラムデータの構成では、メモリに格納する際、アドレス変換プログラムと変更用関数プログラムとを２つの領域に分けているが、変更用プログラムを作成する際に隣接するアドレスに配置することによりアドレス変換プログラムと変更用関数プログラムの間に生じる未使用領域を無くすことも可能である。
【００５４】
更に、変更用プログラムデータの構成では、変更用プログラムのイメージデータはデータ構造としてバイナリーデータの構造をとったが、インテルＨＥＸやモトローラＳフォーマットなどのＲＯＭ化に用いられるデータ構造をとった場合の方が、１６バイト単位でデータチェック機構が使えるため、より、信頼性が向上する。
【００５５】
【発明の効果】
以上、説明したように、本発明によれば、書き換え不能なＲＯＭに格納されているプログラムの代わりのプログラムを、低コストで修正することができる。
【００５６】
特に、プログラムの修正の最小単位として、関数ごとに、あるいは、変数ごとに修正できるため、少ないメモリ容量でプログラムの変更が可能となる。
【００５７】
また、この代わりのプログラムの実行速度を、フラッシュＲＯＭに格納されたプログラムを実行するよりも、より速く行うことができる。
【図面の簡単な説明】
【図１】実施例におけるプリンタのブロック図
【図２】実施例のフラッシュＲＯＭへの書込み処理の制御フロー
【図３】実施例のプリンタの起動時の制御フロー
【図４】実施例の関数変更部の説明
【図５】実施例の転送データ構造
【図６】実施例のフラッシュＲＯＭのデータ配置図
【図７】実施例のダウンロード処理の制御フロー
【図８】実施例におけるプリンタの斜視図
【図１】
2004090232.tif 000003
【図２】
2004090232.tif 000004
【図３】
2004090232.tif 000005
【図４】
2004090232.tif 000006
【図５】
2004090232.tif 000007
【図６】
2004090232.tif 000008
【図７】
2004090232.tif 000009
【図８】
2004090232.tif 000010