(57)【特許請求の範囲】
【請求項１】
上位装置からパケット形式で送られてくるデータを格納するとともに、前記上位装置に送るパケット形式のデータを格納するバッファと、前記上位装置からパケット形式で送られてくるトークンの種類を判別するとともに、前記バッファ内のデータの有無を判別して、これらの判別結果に基づいて上位装置との間のデータ転送を制御する第１の制御手段と、前記バッファ内のデータの有無を判別して、その結果に基づきバッファからの受信データの取得およびバッファへの送信データの格納を制御する第２の制御手段とを備え、前記バッファは、前記トークンによって指定される各エンドポイントに対して共通に用いられる単一のバッファであるデータ転送制御装置において、
前記バッファが上位装置からデータを受信できる状態にあるか否か、および上位装置へデータを送信できる状態にあるか否かを、受信可能、受信不可、送信可能、送信不可の各ステータスにより表すバッファステータスレジスタを備え、
前記第１の制御手段は、
トークンの種類がＩＮパケットである場合、バッファステータスレジスタのステータスが受信不可かつ送信可能であれば、バッファに格納されているデータを上位装置へ送出し、その後、ステータスを受信可能かつ送信不可に更新し、バッファステータスレジスタのステータスが受信不可かつ送信可能でなければ、データを上位装置へ送出せず、
トークンの種類がＳｅｔｕｐパケット又はＯＵＴパケットである場合、バッファステータスレジスタのステータスが受信可能かつ送信不可であれば、上位装置からデータを受け取ってバッファに格納し、その後、ステータスを受信不可かつ送信不可に更新し、バッファステータスレジスタのステータスが受信可能かつ送信不可でなければ、上位装置からデータを受け取らず、
前記第２の制御手段は、
受信データ処理において、バッファステータスレジスタのステータスが受信不可かつ送信不可であれば、バッファから受信データを取得し、その後、ステータスを受信可能かつ送信不可に更新し、バッファステータスレジスタのステータスが受信不可かつ送信不可でなければ、バッファから受信データを取得せず、
送信データ処理において、バッファステータスレジスタのステータスが受信可能かつ送信不可であれば、送信データをバッファに格納し、その後、ステータスを受信不可かつ送信可能に更新し、バッファステータスレジスタのステータスが受信可能かつ送信不可でなければ、送信データをバッファに格納しない
ことを特徴とするデータ転送制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、たとえばプリンタと上位コンピュータとの間のデータ転送を制御するデータ転送制御装置に関するものである。
【０００２】
【従来の技術】
プリンタ等の周辺機器とコンピュータとを接続する場合、ＵＳＢ（Universal Serial Bus）システムが採用されることが多くなっている。ＵＳＢは、各種周辺機器に共通のインターフェイス仕様であって、同じコネクタで最大１２７台の機器をディジーチェーン方式で接続することができ、また、コンピュータの電源を入れたたまま機器を接続できるプラグアンドプレイという機能を備えている。
【０００３】
このようなＵＳＢシステムにおいては、コンピュータと周辺機器との間でパケット形式によるデータの転送が行われる。図７は、ＵＳＢシステムを用いた従来のデータ転送制御装置の一例を示すブロック図である。図において、２１は上位装置を構成するコンピュータ（以下、ＰＣと記す）、２２はプリンタ等の周辺機器に内蔵されたＵＳＢブロック、２３は同じく周辺機器に内蔵されたメモリである。
【０００４】
ＵＳＢブロック２２において、２４はＰＣ２１との間でのデータ転送を制御するＵＳＢ制御部、２５はＰＣ２１から受信したデータおよびＰＣ２１へ送信するデータを一時的に格納するバッファである。バッファ２５は、各エンドポイント（以下、ＥＰと記す）に対応して、２５ａ〜２５ｃの複数のバッファから構成されている。ＥＰ２は受信用、ＥＰ１は送信用、ＥＰ０は送受信用に設定されたエンドポイントであり、バッファ２５ａはＥＰ２に対応するデータが格納される６４バイトの受信バッファ、バッファ２５ｂはＥＰ１に対応するデータが格納される１６バイトの送信バッファ、バッファ２５ｃはＥＰ０に対応するデータが格納される１６バイトの送受信バッファである。
【０００５】
ＰＣ２１からは、データに先行してパケット形式のトークンが送出される。トークンは、周辺機器ごとに割当てられたアドレス番号を含んでおり、各周辺機器は、自己のアドレス番号を含んだトークンが来たときに、これを取り込む。トークンは、アドレス番号のほかにデータの処理種別やＥＰ番号などを含んでおり、ＵＳＢ制御部２４はこのトークンのＥＰ番号を読み取って、各ＥＰ番号に対応するバッファ２５ａ〜２５ｃに対してアクセスを行い、ＰＣ２１から送られてくるデータの書込み、またはＰＣ２１へ送信するデータの読み出しを行なう。バッファ２５が受信したデータはメモリ２３に格納され、また、ＰＣ２１への送信データはメモリ２３からバッファ２５へ転送される。
【０００６】
【発明が解決しようとする課題】
上記従来の装置においては、各ＥＰごとにバッファ２５ａ〜２５ｃを設けており、このように複数のバッファを備えたデータ転送制御装置は、たとえば特公平６−３９３７号公報、特公平６−３９３８号公報にも記載されている。しかしながら、ＥＰごとにバッファを設けると、各ＥＰに必要な容量のバッファ領域を複数個用意しなければならず、ＥＰの数が増えるに従ってバッファ２５の容量が大きくなる。このため、ＵＳＢブロック２２をＩＣ化するにあたってゲートの数が増大し、チップが大型化するという問題がある。
【０００７】
本発明は、上記のような問題点を解決するものであって、ＥＰごとにバッファ領域を設ける必要がなく、ゲート数を削減してチップを小型にできるデータ転送制御装置を提供することを課題としている。
【０００８】
【課題を解決するための手段】
上記課題を解決するために、本発明は、上位装置からパケット形式で送られてくるデータを格納するとともに、上位装置に送るパケット形式のデータを格納するバッファと、上位装置からパケット形式で送られてくるトークンの種類を判別するとともに、バッファ内のデータの有無を判別して、これらの判別結果に基づいて上位装置との間のデータ転送を制御する第１の制御手段と、バッファ内のデータの有無を判別して、その結果に基づきバッファからの受信データの取得およびバッファへの送信データの格納を制御する第２の制御手段とを備え、バッファは、トークンによって指定される各エンドポイントに対して共通に用いられる単一のバッファであるデータ転送制御装置において、バッファが上位装置からデータを受信できる状態にあるか否か、および上位装置へデータを送信できる状態にあるか否かを、受信可能、受信不可、送信可能、送信不可の各ステータスにより表すバッファステータスレジスタを備える。
【０００９】
そして、第１の制御手段は、トークンの種類がＩＮパケットである場合、バッファステータスレジスタのステータスが受信不可かつ送信可能であれば、バッファに格納されているデータを上位装置へ送出し、その後、ステータスを受信可能かつ送信不可に更新する。バッファステータスレジスタのステータスが受信不可かつ送信可能でなければ、データを上位装置へ送出しない。また、トークンの種類がＳｅｔｕｐパケット又はＯＵＴパケットである場合、バッファステータスレジスタのステータスが受信可能かつ送信不可であれば、上位装置からデータを受け取ってバッファに格納し、その後、ステータスを受信不可かつ送信不可に更新する。バッファステータスレジスタのステータスが受信可能かつ送信不可でなければ、上位装置からデータを受け取らない。
【００１０】
一方、第２の制御手段は、受信データ処理において、バッファステータスレジスタのステータスが受信不可かつ送信不可であれば、バッファから受信データを取得し、その後、ステータスを受信可能かつ送信不可に更新する。バッファステータスレジスタのステータスが受信不可かつ送信不可でなければ、バッファから受信データを取得しない。また、送信データ処理において、バッファステータスレジスタのステータスが受信可能かつ送信不可であれば、送信データをバッファに格納し、その後、ステータスを受信不可かつ送信可能に更新する。バッファステータスレジスタのステータスが受信可能かつ送信不可でなければ、送信データをバッファに格納しない。
【００１１】
このように、第１の制御手段が、バッファステータスレジスタを参照して上位装置からのデータの受信および上位装置へのデータの送信を制御し、第２の制御手段が、バッファステータスレジスタを参照してバッファからのデータの取得およびバッファへのデータの格納を制御することで、複数のエンドポイントでバッファを共有することができるため、エンドポイントの数が増えてもバッファの容量は増大せず、ゲート数を削減することができる。
【００１２】
【発明の実施の形態】
以下、本発明の実施形態につき、図を参照しながら説明する。図１は本発明に係るデータ転送制御装置の電気的構成を示すブロック図である。図において、１は上位装置を構成するコンピュータ（以下、ＰＣと記す）、２は周辺機器の一例であるプリンタ、３はプリンタ２に内蔵されたＵＳＢブロック、４はプリンタ２のメモリ、５はプリンタ２のＣＰＵである。
【００１３】
ＵＳＢブロック３において、８はＰＣ１との間でのデータ転送を制御するＵＳＢ制御部で、本発明における第１の制御手段の一形態をなし、ここでは論理ゲートで構成されている。９はＰＣ１から受信したデータおよびＰＣ１へ送信するデータを一時的に格納するバッファである。バッファ９は、各エンドポイントＥＰ２、ＥＰ１、ＥＰ０に対して、共通に用いられる単一のバッファから構成されている。バッファ９の容量はたとえば６４バイトであり、このバッファ領域に、ＰＣ１から送信されてきたデータ、あるいはＰＣ１へ送信するデータの１パケット分が格納される。ＵＳＢブロック３はＩＣ化されており、メモリ４等とともにＡＳＩＣ（Application Specific IC）の中の１ブロックを構成している。
【００１４】
また、ＵＳＢ制御部８にはレジスタ１０が設けられている。このレジスタ１０は、後述するように、バッファ９内のデータ有無を表すバッファステータスレジスタと、ＰＣ１から送られてきたトークンの内容を示すトークンステータスレジスタとを含む。
【００１５】
ＣＰＵ５は、本発明における第２の制御手段の一形態をなすものであり、プリンタ２の各部の制御を行なうものである。ＣＰＵ５には、インクキャリア搬送用のキャリアモータおよび用紙搬送用のフィードモータを制御するモータ制御部６や、印字ヘッドによる印字動作を制御する印字制御部７などが接続されている。
【００１６】
図２は、ＰＣ１から送られてくるパケットの一例を示す図であり、（ａ）はトークン３０を、（ｂ）はトークン３０に続いて送られてくる印字データなどのデータ３４を示している。トークン３０は、トークンの種類を表すＰＩＤコード３１、接続機器を表すアドレス番号３２、およびＥＰを表すＥＰ番号３３を含み、これらがパケットとして構成されている。ＰＩＤコード３１には、Ｓｅｔｕｐパケット、ＩＮパケット、ＯＵＴパケットの３種類がある。また、アドレス番号３２は、接続される周辺機器ごとにＰＣ１によって番号が割り当てられている。一方、データ３４もパケットからなり、たとえば６４バイトのデータ長を有している。
【００１７】
図３は、レジスタ１０におけるバッファステータスレジスタを示す図である。バッファステータスレジスタ４０は、バッファ９がＰＣ１からデータを受信できる状態にあるか否か、およびＰＣ１へデータを送信できる状態にあるか否かを示すレジスタで、２ビットの領域からなる。ＲＲＤＹ（Receive Ready Bit）４１はＰＣ１からデータを受信できる状態にあるか否かのステータスを表し、ＲＲＤＹ＝１であれば、現在バッファ９は空で受信可能な状態にあることを表し、ＲＲＤＹ＝０であれば、バッファ９にデータがあって受信ができない状態にあることを表す。また、ＴＲＤＹ（Transmit Ready Bit）４２はＰＣ１へデータを送信できる状態にあるか否かのステータスを表し、ＴＲＤＹ＝１であれば、現在バッファ９には送信すべきデータがあって送信可能な状態にあることを表し、TＲＤＹ＝０であれば、バッファ９には送信すべきデータがなく送信可能な状態にないことを表す。
【００１８】
図４は、レジスタ１０におけるトークンステータスレジスタを示す図である。トークンステータスレジスタ４３は、トークン３０から読み取ったトークンの種類およびＥＰ番号を示すレジスタで、７ビットの領域からなる。ビット４〜６がトークンの種類を表し、ビット０〜３がＥＰ番号を表している。トークンの種類は、前述のようにトークン３０のＰＩＤコード３１において指定されており、ビット６が「１」であればＳｅｔｕｐパケット、ビット５が「１」であればＯＵＴパケット、ビット４が「１」であればＩＮパケットを、それぞれ表している。また、ＥＰ番号はトークン３０のＥＰ番号３３において指定されており、ビット０が「１」であればＥＰ０、ビット１が「１」であればＥＰ１、ビット２が「１」であればＥＰ２、ビット３が「１」であればＥＰ３を、それぞれ表している。
【００１９】
なお、トークン３０のアドレス番号３２において指定されたアドレスは、レジスタ１０の図示しないアドレスレジスタにセットされる。そして、ＰＣ１にプリンタ２のほかに各種周辺機器が接続されている場合には、ＰＣ１から送られてくるデータのうち、プリンタ２に割り当てられたアドレスのデータだけがプリンタ２に取り込まれることになる。
【００２０】
図５および図６は、以上の構成からなるデータ転送制御装置の動作を示すフローチャートであり、図５は第１の制御手段であるＵＳＢ制御部８が処理する手順、図６は第２の制御手段であるＣＰＵ５が処理する手順を示している。
【００２１】
まず、ＵＳＢ制御部８の動作について図５を参照しながら説明する。ＵＳＢ制御部８は、ＰＣ１からトークン３０を受信すると（ステップＳ１）、ＰＩＤコード３１を読み取ってトークンの種類を分析する（ステップＳ２）。そして、トークンがＳｅｔｕｐパケットであれば（ステップＳ３ＹＥＳ）、次にバッファステータスレジスタ４０を参照して、ＲＲＤＹ＝１かつＴＲＤＹ＝０か否かを判定する（ステップＳ４）。ＲＲＤＹ＝１でＴＲＤＹ＝０の場合は（ステップＳ４ＹＥＳ）、バッファ９にデータがなく受信可能な状態であるから、ＰＣ１からセットアップデータを受取り（ステップＳ５）、これをバッファ９に格納する。なお、ＵＳＢ制御部８はトークン３０のＥＰ番号３３も読取り、これをトークンステータスレジスタ４３にセットする。
【００２２】
次に、ＵＳＢ制御部８はデータを受取ったことにより、バッファステータスレジスタ４０を更新し、ステータスをＲＲＤＹ＝０、ＴＲＤＹ＝０とする（ステップＳ６）。これによって、バッファ９が空き状態でなくなったことが表示される。また、ステップＳ４において、バッファステータスレジスタ４０を参照した結果、ＲＲＤＹ＝１かつＴＲＤＹ＝０でない場合は（ステップＳ４ＮＯ）、バッファ９には受信データと送信データのいずれかが入っていて受信が不可能であるから、ＰＣ１に対して拒否応答であるＮＡＫ（Negative Acknowledge）を返す（ステップＳ７）。
【００２３】
ステップＳ３において、トークンがＳｅｔｕｐパケットでなく（ステップＳ３ＮＯ）ＩＮパケットであれば（ステップＳ８ＹＥＳ）、次にバッファステータスレジスタ４０を参照して、ＲＲＤＹ＝０かつＴＲＤＹ＝１か否かを判定する（ステップＳ９）。ＲＲＤＹ＝０でＴＲＤＹ＝１の場合は（ステップＳ９ＹＥＳ）、バッファ９に送信すべきデータが入っている状態であるから、ＰＣ１に対してデータを送出し（ステップＳ１０）、その後、ステータスをＲＲＤＹ＝１、ＴＲＤＹ＝０にしてバッファステータスレジスタ４０を更新する（ステップＳ１１）。これによって、バッファ９が空き状態になったことが表示される。
【００２４】
一方、ステップＳ９において、ＲＲＤＹ＝０かつＴＲＤＹ＝１でない場合は（ステップＳ９ＮＯ）、バッファ９には受信データが入っているかもしくは全くデータがない状態であるから、ＰＣ１に対してデータを送出することなく、０バイトの空のパケットを送る（ステップＳ１２）。
【００２５】
ステップＳ３において、トークンがＳｅｔｕｐパケットでなく（ステップＳ３ＮＯ）ＩＮパケットでもない場合は（ステップＳ８ＮＯ）、ＯＵＴパケットと判断し（ステップＳ１３）、次にバッファステータスレジスタ４０を参照して、ＲＲＤＹ＝１かつＴＲＤＹ＝０か否かを判定する（ステップＳ１４）。ＲＲＤＹ＝１でＴＲＤＹ＝０の場合は（ステップＳ１４ＹＥＳ）、バッファ９にデータがなく受信可能な状態であるから、ＰＣ１から印字データ等のデータ３４を受取り（ステップＳ１５）、これをバッファ９に格納した後、バッファステータスレジスタ４０を更新し、ステータスをＲＲＤＹ＝０、ＴＲＤＹ＝０とする（ステップＳ１６）。これによって、バッファ９が空き状態でなくなったことが表示される。
【００２６】
一方、ステップＳ１４において、ＲＲＤＹ＝１かつＴＲＤＹ＝０でない場合は（ステップＳ１４ＮＯ）、バッファ９には受信データと送信データのいずれかが入っていて受信が不可能であるから、ＰＣ１に対してＮＡＫを返す（ステップＳ１７）。
【００２７】
次に、図６を参照してＣＰＵ５の行なう処理につき説明する。図６（ａ）は受信データをバッファから取り出す場合の処理、図６（ａ）は送信データをバッファへ格納する場合の処理を表している。
【００２８】
まず、受信データの処理について説明する。ＣＰＵ５はバッファステータスレジスタ４０を参照してステータス情報を読込み（ステップＳ２１）、ＲＲＤＹ＝０かつＴＲＤＹ＝０か否かを判定する（ステップＳ２２）。図５のステップＳ５、Ｓ６およびステップＳ１５、Ｓ１６で説明したように、ＰＣ１からのデータが受信されてバッファ９に格納されると、バッファステータスレジスタ４０のステータスは、ＲＲＤＹ＝０、ＴＲＤＹ＝０となるから、ステップＳ２２での判断はＹＥＳとなり、バッファ９から受信データを取得する（ステップＳ２３）。そして、データを取得したことによりバッファ９は空状態となるから、バッファステータスレジスタ４０を更新してステータスをＲＲＤＹ＝１、ＴＲＤＹ＝０とする。これによって、ＵＳＢ制御部８側では、図５のステップＳ４およびＳ１４での判定がＹＥＳとなり、次のパケットの受信が可能となる。なお、バッファ９から取得されたデータは、メモリ４に格納されるか、あるいはモータ制御部６や印字制御部７などの各部に直接供給される。
【００２９】
一方、ステップＳ２２においてＲＲＤＹ＝０、ＴＲＤＹ＝０でない場合は（ステップＳ２２ＮＯ）、バッファ９が空であるか送信データが入っているかのいずれかであるから、バッファ９からの受信データ取得を行なわずに終了する。
【００３０】
次に、送信データの処理について説明する。ＣＰＵ５はバッファステータスレジスタ４０を参照してステータス情報を読込み（ステップＳ３１）、ＲＲＤＹ＝１かつＴＲＤＹ＝０か否かを判定する（ステップＳ３２）。図５のステップＳ１０およびＳ１１で説明したように、バッファ９のデータがＰＣ１へ送信されると、バッファステータスレジスタ４０のステータスは、ＲＲＤＹ＝１、ＴＲＤＹ＝０となってバッファ９は空状態となるから、ステップＳ３２での判断はＹＥＳとなり、送信データをバッファ９に格納する（ステップＳ３３）。この送信データはメモリ４からバッファ９に転送される。そして、バッファ９は送信データが格納されたことにより空状態ではなくなるから、バッファステータスレジスタ４０を更新してＲＲＤＹ＝０、ＴＲＤＹ＝１とする。これによって、ＵＳＢ制御部８側では、図５のステップＳ９での判定がＹＥＳとなり、次のパケットの送信が可能となる。
【００３１】
一方、ステップＳ３２においてＲＲＤＹ＝１、ＴＲＤＹ＝０でない場合は（ステップＳ３２ＮＯ）、バッファ９には受信データまたは送信データのいずれかが入っている状態であるから、バッファ９への送信データの格納を行なわずに終了する。
【００３２】
以上のようにして、バッファステータスレジスタ４によりバッファの状態を表示することで、ＵＳＢ制御部８はレジスタ４の内容に応じてバッファ９とＰＣ１間のデータの送受信を制御し、またＣＰＵ５はレジスタ４の内容に応じてバッファ９のデータ入出を制御することができ、これによって、１つのバッファ９を設けるだけで各ＥＰに対応したすべてのデータの転送制御を行なうことができる。このため、ＥＰの数がたとえば１６個のように多くなっても、バッファ９の容量が大きくなることはなく、ＵＳＢブロック３をＩＣ化した場合のゲートの数が削減される。
【００３３】
なお、上記実施形態においては、ＰＣに接続される周辺機器としてプリンタを例に挙げたが、本発明はプリンタ以外のスキャナーやモデム等の周辺機器に対しても適用できることはいうまでもない。
【００３４】
【発明の効果】
本発明によれば、複数のエンドポイントに対して１つのバッファを共有することができ、エンドポイントごとにバッファを設ける必要がなくなるため、エンドポイントの数が増えてもバッファの容量は増大せず、ゲート数を削減してチップを小型にすることができる。
【図面の簡単な説明】
【図１】本発明に係るデータ転送制御装置のブロック図である。
【図２】ＰＣから送られてくるパケットの一例を示す図である。
【図３】バッファステータスレジスタを示す図である。
【図４】トークンステータスレジスタを示す図である。
【図５】ＵＳＢ制御部の動作を示すフローチャートである。
【図６】ＣＰＵの動作を示すフローチャートである。
【図７】従来のデータ転送制御装置の一例を示すブロック図である。
【符号の説明】
１ コンピュータ（ＰＣ）
２ プリンタ
３ ＵＳＢブロック
４ メモリ
５ ＣＰＵ
８ ＵＳＢ制御部
９ バッファ
１０ レジスタ
３０ トークン
３４ データ
４０ バッファステータスレジスタ
４３ トークンステータスレジスタ
【図１】
0004329188.tif 000002
【図２】
0004329188.tif 000003
【図３】
0004329188.tif 000004
【図４】
0004329188.tif 000005
【図５】
0004329188.tif 000006
【図６】
0004329188.tif 000007
【図７】
0004329188.tif 000008