以下、本発明の情報処理装置、情報処理方法及び情報処理プログラムに係る実施形態を図面に基づいて説明する。以下には、情報処理装置に係る実施形態としてMFPを例示する。実施形態として示すMFPは、スキャナ入力をもとにプロッタで印刷出力を行うコピー機能のほか、無線で外部機器とパケット通信を行い、外部機器より送信されてくる、例えば印刷コマンドデータを受信し、受信したデータをもとにプロッタで印刷出力を行うプリンタ機能を持つ。ただ、実施形態としては、例示するMFPに限らず、無線で外部機器からパケット通信により入力されるデータを処理し、出力する情報処理装置であればどのような装置でも実施の対象となる。
図1は、本発明に係る情報処理装置の実施形態としてのMFPのシステム構成を概略的に示すブロック図である。図1の例に示されたMFPは、複写機能をベースにしているので、入力デバイスとして原稿画像を入力するスキャナ133と、出力デバイスとして印刷出力をするプロッタ135を持ち、これらをASIC(Application Specific Integrated Circuit:特定用途向け集積回路)で構成するエンジンコントローラ130により制御する。また、エンジンコントローラ130は、メインコントローラ110側とPCI(Peripheral Component Interconnect)−Express等の汎用高速バスによって繋がっている。
メインシステム100は、内部にメインCPU(Central Processing Unit)121を備える。そして、メインCPU121が、ASICで構成するメインコントローラ110及び後述のサブシステム200を含めコントローラ全般の制御を行う。メインCPU121制御下の各デバイスは、メインCPU121と接続されたMCH(Memory Controller Hub)117とPCI−Express(以下、PCIeとも表す)等の汎用高速バスによって繋がっている。
メインコントローラ110は、S−ATAを介し、多量の画像データの蓄積やジョブ履歴等を記憶するローカルストレージ113と接続される。また、メインコントローラ110は、複数の信号線を同時に使いデータを転送するためのIEEE1284等のレガシーPCIを介し、オプション115の各デバイスと接続される。
また、ワークメモリとして処理の過程で画像データ、制御データ等を格納するRAM(Random Access Memory)やプログラム、制御データ等を格納するROM(Read Only Memory)等のメモリよりなるメインメモリ123が、MCH117を介してメインCPU121に接続されている。なお、後述する図4のメインCPU121の処理を実行するためのプログラムは、メインメモリ123のROMに保存される。プログラムをこのような記録媒体に記録しておくことで、メインCPU121は、実行時にこの記録媒体に記録したプログラムをRAMに読み込み、プログラムを駆動することによって、図4のフローに示す処理を実行することができる。
この実施形態のシステムは、サブシステム200を備える。そして、このサブシステム200内には、無線通信用のシステムが構成されている。このサブシステム200及びメインシステム100は、ICH(I/O Controller Hub)127を介してエンジン側の汎用高速バスとは別のPCI−Express等の汎用高速バスで繋がっている。そして、ディスクストレージやUSB(Universal Serial Bus)及び後記で詳述する無線LAN(Local Area Network)等を用いる周辺装置が、サブシステムの構成要素として接続される。
この実施形態のサブシステム200は、無線通信部230と、サブコントローラ210及びサブシステム全体(ここではサブコントローラ210と無線通信部230)を制御するサブCPU211と、を有する。この無線通信部230は、RF(Radio Frequency)部237やPHY(physical layer)コントローラ235、及びMAC(Media Access Control)コントローラ233等を備える。
本実施の形態にかかる無線通信部230は、外部機から無線LANを通じて、予め定められた通信単位のパケット(以下、パケット通信信号とも称す)を受信する。このパケット通信信号における1通信単位のパケット数は、バースト長として予め定められている。この実施形態ではバースト長を、8バーストとする。つまり、パケットの欠落等が生じない限り、無線通信部230は、一回のパケット通信信号の受信で、8パケット受信する。
なお、図1には示していないが、サブシステム200には、メインシステム100におけると同様に、プログラム、制御データ等を格納するROM或いはHDD(いずれも図示せず)等の記録媒体がサブCPU211の制御下に接続されており、後述する図4のサブCPU211の処理を実行するためのプログラムがここに保存される。プログラムをこのような記録媒体に記録しておくことで、サブCPU211は実行時にこの記録媒体に記録したプログラムをRAM(図示せず)に読み込み、プログラムを駆動することによって、図4のフローに示す処理を実行することができる。
サブコントローラ210は、無線通信データを格納するための複数のメモリと、データ送受信用DMAC(Direct Memory Access Control)と、メインCPU121とサブCPU211の双方がアクセスできる情報共有RAM(RAM(3)214)と、メインCPU121、サブCPU211及び無線通信部230がそれぞれバスマスタとなるために各マスタを調停するバスアービタと、を有する。なお、サブコントローラ210内の構成は、後に図2を参照し詳述する。
このように、サブCPU211により制御されるサブコントローラ210を構成する主な理由は、無線通信のリアルタイム性を保つためで、いつ始まるか分からない無線通信の制御を行うために、アクセス時間が短くて済む無線通信部230の近くにサブCPU211を置くことにより、所期の動作を確保することができる。本実施形態の構成では、サブコントローラ210内のDMACをメインCPU121が制御し、無線通信部230をサブCPU211が制御する、といった形で制御を分担している。
図2は、サブシステム200のサブコントローラ210内のシステム構成を概略的に示すブロック図である。図2に示すように、サブシステム200は、サブコントローラ210と、サブCPU211と、無線通信部230と、を備え、サブコントローラ210とサブCPU211との間、及びサブコントローラ210と無線通信部230との間が、汎用Busで接続されている。
サブコントローラ210は、RAM(1)212と、RAM(2)213と、RAM(3)214と、TxDMAC215と、RxDMAC216と、アービタ(1)217と、アービタ(2)218と、アービタ(3)219と、バスマスタ220と、PCI−Expressインターフェース(以下、I/Fとも表す)221と、を備える。
図2に示すサブコントローラ210は、受信用のDMACとしてRxDMAC216と、送信用のDMACとしてTxDMAC215を内蔵する。これらのDMACは、メインシステム100とはPCI−Express等の汎用高速バスで接続され、また、サブCPU211とはAMBA(登録商標)等の汎用内部バスで接続されている。このため、PCI−Express I/F221を用いて接続することができる。
また、本実施の形態にかかるシステムでは、メインCPU121、サブCPU211及び無線通信部230がバスマスタとなる。このため、各マスタのアクセス要求を調停するバスアービタ、即ちバスアービタ(1)217、バスアービタ(2)218及びバスアービタ(3)219が適切な箇所に接続されている。
また、サブコントローラ210内には、RAM(1)212と、各パケットの制御情報を含むヘッダデータ(以下、「パケット情報」という)を格納するためのヘッダバッファと呼ばれるRAM(2)213が独立して備えられている。
RAM(1)212はトグルバッファとし、各パケット内の有効データであるペイロードデータを格納するためのペイロードバッファとなる。具体的には、RAM(1)212は、2通信単位分のペイロードデータの格納を可能とする記憶領域を備えている。なお、詳細については後述する。
RAM(2)213は、ヘッダデータとして、受け取ったパケットサイズ、パケットナンバー及び正常に受信したか否かを示すフラグを保持する。このヘッダデータの格納は、無線通信部230により行われる。そして、サブCPU211が、当該RAM(2)213を参照することで、受信に成功/失敗したパケットを確認できる。
さらに、サブコントローラ210は、メインCPU121及びサブCPU211の双方がアクセスできるように、後述するパケットデータのメインシステム100とサブシステム200間の転送制御に必要な共有情報を格納するためのRAM(3)214も備えられている。つまり、メインCPU121は、RAM(3)214に格納された情報を参照することができる。RAM(3)214には、メインCPU121と共有する情報である、パケット情報が書き込まれる。メインCPU121は、RAM(3)214を参照し、パケット情報(パケットサイズ)等を判断できる。
図2のアービタ(1)217は、レジスタ241を備える。レジスタ241は、パケット転送順に、RAM(1)212に格納された各パケットのアドレスと、パケットサイズと、最終パケットであるか否かを判別する最終パケットデータ判別フラグと、を保持する。これにより、RxDMAC216からパケットの転送要求があった場合に、アービタ(1)217が、当該レジスタ241を参照して、(無線通信部230が受信に失敗しなかった場合の)パケット本来の転送順序に従って、パケットの読み出しを行うことができる。そして、アービタ(1)217が、本来の転送順通りに読み出した(並び替えた)パケットを、RxDMAC216に受け渡す。そして、RxDMAC216が、並び替えたパケットを、メインシステム100に転送制御する。
図3は、アービタ(1)217に内蔵されているレジスタ241の構成を概念的に示す図である。図3に示すように、レジスタ241は、メインシステム100に転送する1通信単位分(8パケット)のパケット情報を格納することができる。レジスタ241が、8パケット分のパケット情報を格納できるのは、サブシステム200側から、メインシステム100側にパケットを転送する際に、一回に最大8パケットの転送を行うためである。
上述したように、アービタ(1)217のレジスタ241は、送りたい順番に1番目から8番目のパケットまでの情報を格納可能とする。情報の格納は、サブCPU211の設定部251により行われる。レジスタの最終パケットデータ判別フラグは、メインシステム100側に転送する最後のパケットを表すフラグとする。これにより、最後に転送するパケットを認識できる。
図2に戻り、無線通信部230は、外部機から無線LANを通じてパケット受信要求を受け取り、送信許可の手続きを経て外部から送られてくる通信単位毎(8パケット)のパケットを受信する。
1通信単位で受信した所定数(本実施の形態では8)のパケットは、各々無線通信部230内の図示しないデータチェック部でチェックサム等により、パケットデータの妥当性が判断される。データチェック部が、正常受信時にあるべきデータとの不一致が生じたと判断すると、そのパケットは無線通信部230内で破棄する。他方、無線通信部230は、正常に受信したパケットを、MAC233を介してサブコントローラ210内のRAM(1)212へ順次格納する。同時に、無線通信部230は、該当するパケットのヘッダデータ(パケット情報)を、サブコントローラ210内のヘッダバッファとしてのRAM(2)213へ格納する。
そして、無線通信部230は、1通信単位の最後のパケット分の受信が終わり、正常に受信したパケットの格納が完了すると、パケット格納完了の割り込み要求を、サブCPU211に対して行う。
また、無線通信部230は、パケットを受信した時に各構成の制御を行う。例えば、無線通信部230がパケットを受信した場合、サブCPU211に対して割り込みを行う。また、無線通信部230は、受信したパケットのヘッダ情報等を、RAM(2)213に書き込む。これにより、サブCPU211は、無線通信部230から割込を受け付けた時に、RAM(2)213を参照することで、受信に失敗したパケット等を認識できる。
次に、サブCPU211について説明する。サブCPU211は、サブシステム200側で実行されたプログラムとの協働により、設定部251と、再送要求部252との各機能部を実現する。
再送要求部252は、無線通信部230がパケット通信信号に含まれるパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を、次のパケット通信信号に含めるように、無線通信部230に対して再送要求を行う。
設定部251は、RAM(2)213に格納されたパケット情報を参照し、アービタ217(1)のレジスタ241に対して、転送するパケットの転送順に、パケットアドレス、パケットサイズ及び最終パケットデータ判別フラグを設定する。つまり、RAM(2)213には、パケットのヘッダ情報や、受信に成功/失敗したパケットの情報が含まれているため、設定部251が、RAM(2)213に格納された情報を参照することで、受信に成功/失敗したパケットを特定できる。そして、設定部251は、受信に成功したパケットのみを、転送するように設定できる。設定部251が、転送順にパケットの情報をレジスタ241に設定するので、アービタ(1)217がレジスタに設定された順にパケットの情報を読み出すことで、転送順に各パケットを読み出すことになる。
次に、再送要求部252が再送要求を行った場合に設定部251が行う設定について説明する。この場合、RAM(1)212には、無線通信部230が再送要求の前に受信したパケット通信信号に含まれるパケットと、再送要求の後に無線通信部230が受信した、再送パケットを含むパケット通信信号に含まれるパケットと、が記憶される。この後、設定部251が、RAM(1)212に記憶されたパケット毎に、無線通信部230が受信に失敗しなかった場合のパケットの受信順序(本来の受信順序)を、メインシステム100に転送する順序として、レジスタ241に対して、各パケットの情報を設定する。これにより、無線通信部230が受信に失敗した場合でも、受信に失敗しなかった場合の転送順序に従ってパケットをメインシステム100に転送できる。
さらに、再送要求を行ったにも係わらず、再送パケットの受信に失敗した場合は、当該パケットの代わりに、パケットサイズが同一のダミーパケットを転送することとする。この場合、設定部251は、さらに、受信に失敗した再送パケットの再送前に、受信に失敗した当該再送パケットと同一内容のパケットの、受信に失敗しなかった場合の受信順序を、当該再送パケットの代わりとなるダミーパケットの転送順序として設定する。なお、具体的な処理に付いては後述する。
RxDMAC216は、アービタ(1)217の起動ビットを参照し、転送可能と判断した場合に、アービタ(1)217にパケットの転送要求を行う。この場合、アービタ(1)217が、当該レジスタ241を参照して、設定部251により設定された転送順序に従って、パケットを読み出す。そして、アービタ(1)217は、本来の転送順に並び替えたパケットを、RxDMAC216に受け渡す。そして、RxDMAC216は、メインメモリに、受け渡された順に(つまりは、本来の転送順序に従って)パケットを転送する。
なお、本実施の形態では、サブシステム200側でメインシステム100側に転送する一通信単位のパケットが揃った段階で、サブCPU211が、メインシステム100側に、転送可能という割込要求を行う。つまり、サブシステム200の無線通信部230が取りこぼし無く正常に8パケット受信した場合、転送を行う1通信単位分のパケットがRAM(1)に格納されたものとして、サブCPU211が、メインシステム100に対して、転送可能という割込要求を行う。これに対し、サブシステム200の無線通信部230の受信でパケットの取りこぼし等が発生した場合、次のパケット受信で取りこぼし分のパケットを受信し、受信した2通信単位分のパケットがRAM(1)212に格納された段階で、サブCPU211が、メインシステム100に対して、転送可能という割込要求を行う。なお、詳細な処理手順については後述する。
そして、転送可能という割込要求を受け付けた場合、メインCPU121が、RxDMAC216(受信DMAC)を起動し、RxDMAC216(受信DMAC)がアービタ(1)217に対して、パケットの転送要求を出し続ける。その後、アービタ(1)217は、レジスタ241を参照し、本来の順序に並び替えたパケットを、最終パケットデータ判別フラグがエンドになるまで転送し続ける。
図1及び図2に示したシステムは、無線通信部230によって無線LANの機能を実現する。この実施形態における無線LANは、UWB(Ultra Wide Band)を用いることができ、パケット通信によってデータの送受信を行う。
パケット通信では、所定数のパケットをまとめて1通信単位として扱うので、受信する通信単位の各パケットには、データの並びに従って順番にパケットNO.が付けられ、受信側では、受信したパケットをパケットNO.の順番でメモリに格納することにより、正常なデータとして処理することができる。
しかしながら、従来は、通信単位の一部のパケットが正常に受信できなかった場合には、該当するパケットは後の通信単位で再送されてくるので、パケットの順番が狂ってしまい、再送されたパケットをそのままの順番でメモリに格納しても、正常なデータとして処理できなかった。
この問題を解消するには、メモリに格納するパケットの順番を並び替えることが必要であるが、このために採用した従来の方法は、上記[背景技術]で述べたように、処理が煩雑になりメインシステムのCPUへの負担も大きくなる。
そこで、この実施の形態は、上記したサブコントローラ210を構成したことでメインCPU121の負荷を軽減することが可能となった。これにより所期の目的を達成する。次に、本実施の形態で、無線通信部230によって受信したパケットデータに対し、サブコントローラ210を介して行う転送動作によって、正常な順番に並び替えたパケットデータをメインシステム100のメインメモリ123に格納するまでの処理手順について説明する。
「サブコントローラを介して行うパケットデータの転送動作」
本実施の形態にかかる転送動作は、無線通信部230によるパケットの受信時に、サブシステム200とメインシステム100が連動して行う動作で、各システムを制御するサブCPU211及びメインCPU121が当該動作を実行するためのプログラムを動作させることにより実施することができる。
図4は、受信したパケットデータをメインシステムのメモリへ格納する転送動作を実行する際の、処理フローを示す図である。図4の処理フローに従い以下にパケットデータの転送動作を説明する。図4に示す処理手順は、適切にパケットを受信した場合、パケットの取りこぼしが発生した場合、再送パケットの取りこぼしが発生した場合をも含む処理フローである。
図4の処理手順前に、無線通信部230によるパケットの受信処理が予め行われているものとする。そして、無線通信部230が、1通信単位の最後のパケット分の受信が終わり、受信したパケットの格納が完了し、パケット格納完了の割り込み要求を、サブCPU211に対して行われた状態から、図4の処理手順を開始されたものとする。また、RAM(1)212にパケットを格納する際に取りこぼしが発生し、パケットの再送要求で次の一通信単位のパケットの受信でRAM(1)212の両面にパケットが格納された後、本来の転送順に従って1通信単位分のパケットを転送した後のRAM(1)212の一面を開放された状態から図4の処理手順を開始しても良い。さらに、再々送されたパケットを転送した後で、RAM(1)212の両面にパケットが格納された状態から、図4の処理手順を開始しても良い。なお、パケットの再々送の具体的な手順は、図4の処理中に説明する。なお、RAM(1)212の面については後述する。
そして、サブCPU211は、無線通信部230からパケット格納完了の割り込み要求を検出したか否か判断する(ステップS301)。検出していないと判断した場合(ステップS301:No)、検出するまで待機する。
一方、サブCPU211は、無線通信部230からパケット格納完了の割り込み要求を検出すると(ステップS301:Yes)、適宜割り込み処理を行う(ステップS302)。そして、ステップS302の割込処理で、サブCPU211に対する割り込みが行われた場合、サブCPU211は、割り込み種類を判別する。
ここで、通信単位ごとに行うパケット転送の1回目において、受信パケットの一部が正常に受信できなかった場合、無線通信部230は、当該割り込みを用いて、サブCPU211に対し、パケットの一部が正常に受信できなかった旨を、受信エラー割り込みとして通知する。
次に、サブCPU211は、次の処理ステップとして、無線通信部230からRAM(1)212に格納されたパケットのヘッダ情報(パケット情報)を、RAM(2)213から読み出す(ステップS303)。読み出されるヘッダ情報は、先に無線通信部230が正常に受信したパケットに関する情報として格納されたパケット情報である。
また、サブCPU211は、RAM(2)213から読み出したパケット情報を、共有情報としてRAM(3)214に書き込む(ステップS304)。これにより、メインCPU121、サブCPU211の双方がパケット情報にアクセスできる。
ここで、無線通信部230で正常に受信できなかったパケットが生じ、該当するパケットの再送処理が必要となった場合について説明する。図5は、無線通信部230で正常に受信できなかったパケットが生じた場合のRAM(1)212における格納状態を示す概念図である。
なお、図5に示す例は、RAM(1)212に対して、再送パケットを含む2通信単位分のパケットが格納された構成を示したものである。図5では、説明を簡略化するために、トグルバッファであるRAM(1)212のメモリ領域の上半分をA面、下半分をB面と表現している。また、A面、B面は、それぞれ1通信単位のパケット転送分、つまり8パケット分のデータを格納できるメモリ領域を確保しているものとする。
図5に示す例では、1回目のパケット転送でパケットNo.1、2及び5が正常に受信できず(図5中にハッチングで示したパケット)、これらのパケットを取りこぼした場合を表している。
1回目のパケット転送で上記3つのパケットを取りこぼすと、無線通信部230は、RAM(1)212のA面上に、No.0、3、4、6及び7の順に、正常に受信したパケットを格納する。
2回目のパケット転送で、サブCPU211の再送要求部252より再送要求のあったNo.1、2及び5で示されるパケットがまず転送され、その後、正常に受信されたパケットに続くパケットであるNo.8以降が新規分として転送されてくる。2回目のパケット転送分のパケットを全て正常に受信できたとすると、無線通信部230は、RAM(1)212のB面上に、No.1、2、5及び8〜12の順に格納する。
図5に示すケースでは、RAM(1)212に格納されたパケットは、RAM(1)212上でNo.0、3、4、6、7、1、2、5及び8〜12の順になっている。サブシステム200側が、この格納順のままメインシステム100側のメインメモリ123に転送し、格納しても、パケットの順番が狂ってしまっているので、メインシステム100が正常なデータとして処理することができない。
この問題を解消するには、メモリに格納するパケットの順番を並び替えることが必要になる。従来では、次の2方法によっていた。
図6は、そのうち一つの方法である、従来例1のパケット並び替え手法を示した図である。図6に示す方法は、再送によって順番が狂ってしまっているRAM(1)212上のパケットを、格納順のまま、並び替えなしにPCI−Expressバスを通してDMA転送でメインシステム100のメインメモリ123に一旦格納する。この後、メインCPU121がメインメモリ123内のパケットの順番を入れ替える方法である。
しかしながら、この方法によると、メインCPU121の負荷が大きくなるという問題が生じる。
図7は、他の一つの方法である、従来例2のパケット並び替え手法を示した図である。図7に示す方法は、再送によって順番が狂ってしまっているRAM(1)212に格納されたパケットのうち、パケット番号が連続するパケットのみまとめて転送を行う方法である。同図に示す例では、「パケットNo.0」「パケットNo.3,4」「パケットNo.6,7」「パケットNo.1,2」「パケットNo.5」「パケットNo.8〜12」それぞれをまとめた転送単位とし、PCI−Expressバスを通して、DMA転送でメインシステム100のメインメモリ123に転送している。この方法によると、まとめた転送単位の転送順を選ぶことでメインメモリ123では適正データ順になるので、メインCPU121の負荷を若干低減できるが、この場合も複数回の転送が必要となるため転送効率が悪く、さらに転送完了ごとに割り込みが発生するため、処理が煩雑になるという問題が生じてしまう。
図8は、本実施の形態にかかるパケットの並び替え手法を示した図である。図8に示した本実施形態では、サブコントローラ210の設定部251が、無線通信部230によって受信した各パケットデータに対する転送条件として、転送先であるメインシステム100のメインメモリ123上で、本来の転送順序になるような条件を設定する。これにより、アービタ(1)217が当該順序に従って読み出したRAM(1)212上のパケットがメインメモリ123に転送される。これにより、メインメモリ123に格納されたときに正常な順番に並び替えられているように意図する転送動作を可能にしている。
次に、図8を参照し、サブコントローラ210(図2)の構成に即して、次にこの転送動作を具体的に説明する。
まず、図8の左のRAM(1)212に示すように、各パケットがRAM(1)212に順番どおりに格納されていないものとする。この場合、サブCPU211の設定部251が、データ転送元のアービタ(1)217におけるレジスタ241に対して、本来の転送順序に従って、パケットアドレス等を設定する。これによりアービタ(1)217は本来の転送順序に従って、各パケットの読み出しを行う。そして、アービタ(1)217は、受信DMAC(RxDMAC)216の転送要求に連動するので、上記各パケットを、DMA転送でPCI−Expressバスを通してメインシステム100のメインメモリ123に格納する際には、順番どおりになるように(同図の中央及び右の状態)、転送動作を行わせることができる。
次に、図5に示すようにRAM(1)212に各パケットの情報が格納されている場合にRAM(1)のレジスタ241に書き込まれるパケット情報を、図3を用いて説明する。
RxDMAC216は、アービタ(1)212を介して、メインメモリ123に対して、No.0からNo.7の順にパケットを送る例とする。なお、RAM(1)212には、図5に示した状態で受信パケットが保持されている場合を例にする。この場合、設定部251は、以下に示す手順で、レジスタ241に情報を書き込む。
RxDMAC216が1番目にパケットNo.0を転送するので、設定部251は、図3の1番目のパケット転送用アドレスレジスタPacket[0]のStart Adr[0]に、図5のRAM(1)212におけるA面上にあるPacket_0の先頭アドレス(RAM(1)のアドレス)を書き込み、1番目のパケット転送用データサイズレジスタであるData Size[0]にPacket_0の有効データであるパケットのデータサイズのみ(内部間転送ではヘッダ情報は不要のため)を書き込む。
RxDMAC216が2番目にパケットNo.1を転送するので、設定部251は、上記1番目と同様に、図5のRAM(1)212におけるB面上にあるPacket_1の先頭アドレスをStartAdr[1]に、又Packet_1のパケットのデータサイズをDataSize[1]に書き込む。
以下、設定部251は、同様に8番目のレジスタまで転送するパケットの情報を書き込んでいく。
設定部251が、このようにして各レジスタに設定を行うことにより、アービタ(1)217は、レジスタ241からパケットNo.順にパケット情報(転送元アドレス、データサイズ)を読み出し、読み出した転送元アドレスが指し示すRAM(1)212上の受信パケットを読み出す。
これにより、パケットNo.順に受信パケットを読み出すことができる。本実施の形態にかかるサブシステム200が、この構成を採ることで、受信パケットがRAM(1)212にパケットNo.順に格納されていなくても、アービタ(1)217がパケットNo.順に並び替えて、受信DMAC(RxDMAC)216へデータを渡すことができる。
図4の処理フローに戻り、無線通信部230によって受信パケットがRAM(1)212に保持されると共に、ヘッダ情報がRAM(3)214に保持されたステップS304の後の動作について説明する。受信パケットがRAM(1)212に保持されたステップS304の状態は、1回のパケット転送により正常に受信された場合と、再送されたパケットにより2回のパケッド転送分がある場合を含み、いずれの場合も、1通信単位のパケットがメインメモリ123へ転送可能となった状態である。
次に、サブCPU211は、RAM(2)213を参照して、メインシステム100に本来の順番に従って次に転送するためのパケットが全て、RAM(1)212に格納されているか否か判定する(ステップS305)。次に転送するためのパケットとは、本来の転送順序に従った1通信単位分のパケット(8パケット)又は再々送されたパケットとする。なお、一単位分のパケット(8パケット)がある状態とは、RAM(1)212で、受信時にパケットの取りこぼし無く片面で一通信単位のパケットが揃った場合、又はパケットの取りこぼしが発生し、パケットの再送が行われた結果、両面で一通信単位のパケットが揃った場合のそれぞれが含まれるものとする。
次に転送するための一通信単位のパケットが揃ったと判定された場合(ステップS305:Yes)には、ステップS306に処理が進む。まずは、次に転送するためのパケットが揃った場合について先に説明する。なお、取りこぼしが発生し、次に転送するためのパケットが揃わずに再送要求を行う場合については、後述する。
サブCPU211が8パケット揃ったと判定した場合(ステップS305:Yes)、サブCPU211は、メインCPU121に受信パケットデータを引き取ってもらうため、サブコントローラ210内の図示しない割り込みコントローラを用いて、メインCPU121へこの旨を通知するメッセージ割り込み要求を生成する(ステップS306)。生成された割込要求は、メインCPU121に送信される。これにより、メインCPU121による転送要求が開始される。
サブCPU211の設定部251は、RAM(2)213を参照して、アービタ(1)217内蔵のレジスタ241の設定(上記図3に関する説明、参照)をパケット番号順に行う(ステップS307)。なお、RAM(2)213には、事前に無線通信部230から受け取っているデータ制御情報、即ち、無線通信部230が正常に受信したパケットのデータをRAM(1)212に転送する際の制御情報が格納されているものとする。
設定部251が、アービタ(1)217内蔵のレジスタにそれぞれ転送元アドレス、データサイズ及び最終パケットデータ判別フラグを設定した後、サブCPU211はアービタ(1)217の図示しない転送開始トリガを立て、アービタ(1)217を起動する(ステップS308)。この後、メインCPU121による転送要求が、RxDMAC216に対して行われる。これにより、RxDMAC216が、アービタ(1)217を呼び出して、転送を行う。そこで、次にメインCPU121側の処理について説明する。
まず、メインCPU121は、ステップS306でサブCPU211が生成した割り込み要求を検出したか否か判定する(ステップS351)。検出していないと判定した場合(ステップS351:No)、検出するまで待機する。
メインCPU121は、割り込み要求を検出した場合(ステップS351:Yes)、そのメッセージに示される要求内容に従い割り込み処理を行う(ステップS352)。割込処理として、メインCPU121は、サブコントローラ210内のRAM(3)214に格納されているデータ制御情報を読み出す。RAM(3)214には、ステップS304の処理で、受信パケットに関する制御情報が書き込まれているので、この情報が読み出される。
次に、メインCPU121は、読み出した制御情報に基づいて、受信DMAC(RxDMAC)216内蔵のレジスタに転送制御に必要な設定を行う(ステップS353)。この設定は、アービタ(1)217を介して、RAM(1)212に保持された受信パケットをメインメモリ123に転送するためで、RAM(3)214の制御情報から得られる、メインメモリ123に格納する各パケットのデータサイズ等を設定に用いる。
受信DMAC(RxDMAC)216内蔵のレジスタへの設定を完了した後、メインCPU121は受信DMAC(RxDMAC)216を起動させる(ステップS354)。
メインCPU121が受信DMAC(RxDMAC)216を起動させると、アービタ(1)217は、ステップS307でアービタ(1)217内蔵のレジスタ241に設定された順にパケットを受信DMAC(RxDMAC)216へ転送し、受信DMAC(RxDMAC)216は、送られてきた順にデータをメインメモリ123に格納する。
一方、サブCPU211側の処理では、先にアービタ(1)217の転送が完了するので、図示しない割り込みコントローラを用いてサブCPU211に対しアービタ(1)217の転送完了割り込みが発生する。サブCPU211は、発生した転送完了割り込みの検出を行う(ステップS309)。検出しなかった場合(ステップS309:No)、転送完了の割り込みを検出するまで行う。
サブCPU211は、転送完了割り込みを検出すると(ステップS309:Yes)、適宜、この割り込み処理を行う(ステップS310)。その後、サブCPU211は、メインCPU121からのメインメモリ123への受信パケットデータ格納完了(転送完了)割り込みの検出を行う(ステップS313)。受信パケットデータ格納完了(転送完了)割り込みを検出しなかった場合(ステップS313:No)、メインCPU121から当該割り込みが行われるまで待機する。
メインCPU121側に戻り、メインCPU121側では、メインメモリ123への受信パケットデータの格納が完了すると、受信DMAC(RxDMAC)216が転送完了割り込みを発生させる。そこで、メインCPU121が、当該割り込みを検出する(ステップS355)。なお、メインCPU121は、当該割り込みがない場合(ステップS355:No)、当該割り込みが行われるまで待機する。
メインCPU121は、この転送完了割り込みを検出すると(ステップS355:Yes)、適宜、この割り込み処理を行う(ステップS356)。
この割り込み処理を行った後、メインCPU121は、サブコントローラ210内のRAM(3)214へ受信DMAC(RxDMAC)216の転送が完了したことを示した情報を書き込み(ステップS357)、サブCPU211へ転送完了を通知するメッセージ割り込み要求を生成する(ステップS358)。
サブCPU211側に戻り、サブCPU211では、転送完了を通知するメッセージ割り込み要求を待っている状態で、メインCPU121から送られてきたこのメッセージ割り込み要求を検出する(ステップS313)。
サブCPU211は、このメッセージ割り込みを検出すると(ステップS313:Yes)、再々送パケットが必要か否か判定する(ステップS314)。再々送パケット要求し、再々送パケットが必要な場合(ステップS314:Yes)については後述する。再々送パケットが必要な場合とは、メインCPU121に対して、パケットを転送する際に、ダミー(無効)パケットを含めて転送を行った場合となる。つまり、ダミーパケットを転送したため、ダミーではない再々送パケットが必要となる。
サブCPU211が、再々送パケットが必要ではないと判定した場合(ステップS314:No)、適宜、このメッセージ割り込み処理を行い(ステップS316)、処理を終了する。
このように、受信DMAC(RxDMAC)216によって複数のパケットをメインメモリ123へ転送する際に、一連の転送が終わってから転送完了を通知するメッセージ割り込みを発行することで、不要な割り込み処理を減らし効率的に処理を行うことができる。
次に、サブCPU211は、RAM(2)213を参照して、メインシステム100に本来の順番に従って次に転送するためのパケットが、RAM(1)212に格納されていないと判定した場合(ステップS305:No)について説明する。この場合、サブCPU211は、RAM(1)212の片面が開放されているか否か判定する(ステップS311)。次に転送するためのパケットが揃っておらず、片面開放されている状況の例としては、無線通信部230が、最初の一通信単位を受信した際に、パケットの取りこぼしが生じている場合などがある。次に転送するためのパケットが揃っておらず、片面開放されていない(両面共にふさがっている)状況の例としては、無線通信部230が、一通信単位を受信した後、再送パケットを含む次の通信単位を受信したにもかかわらず、再送パケットの取りこぼしが生じている場合などがある。
まずは、片面が開放されていると判定した場合(ステップS311:Yes)について説明する。この場合、サブCPU211の再送要求部252が、パケット送信元へ受信できなかったパケットの番号を指定して再送要求を発行する(ステップS312)。
その後、ステップS301〜S304の処理に従い、パケットの転送完了の検出から、受信したパケットに関する情報の格納までの処理を行う。これにより、再送要求した後に、再送パケットを含む1通信単位分のパケットの受信処理が行われることになる。そして、RAM(1)212には、2面分パケットが格納される。
その後、サブCPU211が、RAM(2)213を参照して、メインシステム100に本来の順番に従って次に転送するためのパケットが、RAM(1)212に格納されているか否か判定する。再送されたパケットを受信したことで、次に転送するためのパケットが揃ったと判定した場合(ステップS305:Yes)、上述したようにステップS306〜S310、S313、S314、S316の処理手順で、パケットをメインメモリ123に転送して、終了する。
図9は、再送要求で、次に転送するためのパケットが揃った場合のRAM(1)212の構成を示した図である。図9に示すように、Packet_1、Packet_2、Packet_5を取りこぼした後、再送要求部252が行った再送要求によりPacket_1、Packet_2、Packet_5と、Packet_8以降のパケットが送られてきたので、サブシステム200側でPacket_0〜Packet_7までメインメモリ123に転送できる。その後は、A面が開放された後、無線通信部230は、再送要求部252による再送要求で、取りこぼされたPacket11の再送を含む1通信単位分のパケットを受信することになる。これにより、Packet_8〜Packet_15までの8パケットを一括してメインメモリ123に転送できる。
図4に戻り、サブCPU211が、再送されたパケットを受信したにもかかわらず、次に転送するためのパケットが揃っていないと判定した場合(ステップS305:No)、RAM(1)212の一面が開放されているか否か判定する(ステップS311)。再送要求によりRAM(1)212の両面共に埋まったため、再送要求の後は、開放されていないと判定する(ステップS311:No)。この場合、ステップS307でダミー(無効)パケットを含むパケットの送信設定を行うこと以外は、上述した処理と同様に、ステップS306〜S310、S313の処理手順で処理を行う。
このように、本実施の形態では、無線通信部230から取得した再送パケットの情報を元に取りこぼしが発生したパケットと同じデータサイズのデータをダミー(無効)パケットデータとして用意する。そして、取りこぼしたパケットの代わりとしてダミーパケットデータを間に挟む形でメインメモリ123へ、本来の順番に従った8パケット分を転送し、RAM(1)212の一面を開放し、空き領域を作る。転送を行う際に、ダミーパケットデータを間に挟むことで擬似的に順番通りに8パケットを一括転送が可能となるため転送効率を落とすことが無くなる。
このようにして、サブCPU211からのメッセージ割り込みを介して、各パケット情報がメインCPU121側に転送される。ただし、そのままではメインCPU121が全てのパケット格納が完了したと誤って判断してしまうので、転送前に転送するパケットの中にダミーパケットデータが含まれていることを通知する必要がある。そこでメインCPU121とサブCPU211とが転送情報を共有するRAM(3)214に取りこぼしのパケットが含まれていること、及び取りこぼしたパケットのNo.をメッセージとして格納しておく。これにより、ダミーパケットがあることをメインCPU121への通知が可能となる。メインCPU121は格納されているメッセージを読み出すことで、メインメモリ123上のどこに、どのサイズ分のダミーデータが格納されているかを知ることが出来る。
その後、再々送パケットが必要か否か判断する(ステップS314)。必要と判断した場合(ステップS314:Yes)、送信先に対して、パケットの再々送を要求する(ステップS315)。その後は、ステップS301から処理を行う。そして、再々送パケットを受信できた場合は、ステップS305で次に転送するためのパケットが揃ったものとして処理を進めることで、全ての処理が終了する。
図10は、再送要求した場合でもPacket_5を取りこぼした場合のRAM(1)212の構成を示した図である。図10に示すように、Packet_1、Packet_2、Packet_5を取りこぼした後、再送要求部252が再送要求を行ったが、Packet_5を取りこぼし、Packet_1、Packet_2、及びPacket_8(Paket_11取りこぼし)以降のパケットが送られてきたので、サブシステム200側でPacket_5の代わりとなるダミーパケットを挟んでメインメモリ123に転送する。当該転送によりRAM(1)212のA面が開放された後、再送要求部252による再送要求で、無線通信部230が、取りこぼした再々送パケットPacket_5及び再送パケットPacket11を含む通信単位分を受信することになる。これにより、RxDMAC216が、メインメモリ123に再々送パケットPaket_5を転送した後、Packet_8〜Packet_15までの8パケットを一括してメインメモリ123に転送できる。
上述した処理の後、無線通信部230へRAM(1)212に格納していたパケットのメインメモリ123への転送が完了したことを通知する。無線通信部230は、この通知を受け取った後に、パケット送信元へ受信可能状態であることを通知する。
以上でパケット受信の一連の処理は完了する。また、RAM(1)212上に、次に転送するためのパケットが格納されている場合には、再度、ステップS301から処理を行う。次に転送するためのパケットがまだ格納されていない場合には、次のパケット転送が行われるまで待機状態となる。
本実施の形態では、上記のように正常に受信できなかったパケットに対する再送要求の処理を、無線通信部230に近いサブコントローラ210がサブCPU211の制御下で行う。このため、メインシステム100の処理として行う場合よりもシステム全体の処理の効率化を図ることができるとともに、メインCPU121の負荷を低減できる。
再送要求を発行後、通信単位ごとに行うパケット転送の2回目の転送で、再送を要求したパケットを含む一通信単位のパケットが送信されてくるので、再送されたパケットに対して無線通信部230は再度受信処理を行い、正常に受信されたパケットをRAM(1)212へ格納する。これにより、1通信単位分をまとめて、メインシステム100側に転送できる。
「パケットデータの並行転送動作」
ところで、RAM(1)212のメモリ領域として、基本的に1通信単位分のパケットデータを保持する領域があれば、上記したパケットの並び替えによる転送動作が可能となる。
しかしながら、RAM(1)212のメモリ領域を1通信単位分にすると、再送要求が発生した場合、1通信単位を再送分だけに使うことになり転送効率が低下する。そこで、上記で図5を参照して説明したように、再送される受信データの処理を考慮した場合、少なくとも2通信単位分のパケットを格納するA面、B面のメモリ領域を確保することが必要となる。
このように、2通信単位分のメモリ領域を確保して転送動作を行う場合、以下の処理手順によって受信、転送動作を実施することにより、2通信単位分のメモリ領域を確保するだけで、毎回再送が発生した場合でも外部からの転送要求に応答し並行転送動作ができる。なお、以下の手順が有効に機能する前提として、RAM(1)212からメインメモリ123へのパケット転送速度は、外部からのパケットを受信するときの通信速度以上であることが条件となる。
並行転送動作の処理手順として、まず、外部からパケット通信データを受信してから、メインメモリ123へ受信したパケットデータを格納するまでの手順があるが、この手順は、上記した実施形態の処理手順(図4)と同じである。
サブCPU211は、メインCPU121から転送完了割り込みを検出すると、無線通信部230に次のパケット通信データの受信が可能であることを通知する。この通知は、メインメモリ123へのパケットを格納し、転送が完了した時点で、少なくとも1通信単位分のメモリ領域(図5の例におけるA面に当たる領域)は開放されることになるので、サブCPU211はRAM(1)212の空き領域の情報を無線通信部230へ通知する。
無線通信部230は、1通信単位分のメモリ領域が確保されていることを確認した上で、送信元に対して受信可能であることを通知する。
以上の処理手順を実施することにより、RAM(1)212に格納されたパケットをメインメモリ123へ転送している最中であっても、外部からの転送要求を待たせることはなくなる。
「アービタ(1)内蔵レジスタの設定」
上記「サブコントローラを介して行うパケットデータの転送動作」で基本的な転送動作について説明したように、このシステムでは、サブコントローラ210に設けたアービタ(1)217内蔵のレジスタの設定によって、RAM(1)212のメモリ領域に順番が狂って保持されたパケットを並び替えて、メインメモリ123に格納することができる。
また、このパケットの転送制御では、アービタ(1)217内蔵のレジスタとしてバースト長(通信単位)、即ち、図3に示した例では8パケット分を備えており、このようにすることで、メインメモリ123への転送単位をバースト長(通信単位)として、RAM(1)212に保持されたパケットのメインメモリ123への転送制御を行い、受信からデータを格納するまでのパケットの一連の処理を効率化している。
ただ、アービタ(1)217内蔵のレジスタとして、転送単位をバースト長の8パケット分備える図3に記載した構成をとっても、メインメモリ123へ格納するパケットは、必ずしもレジスタ分を用意できるとは限らない。RAM(1)212のメモリ領域に保持したパケットが、図5に示した状態となった場合、1回目の転送はレジスタ設定分の8パケット分のパケットの転送を行うが、続けて残りの転送を行う場合、メモリ領域(B)面におけるパケットNo.8〜12までの実質5パケット分の転送だけでよいのに、無効な3パケット分のデータも送る必要が出てくる。
そこで、この実施形態では、アービタ(1)217内蔵のレジスタ241には、どのパケットが最後のパケットであるかを示す機能を付加するための最終パケットデータ判別フラグを追加した。当該フラグは、図3に示すようにレジスタの所定の場所をフラグデータの書き込み場所として設定し、ここにフラグデータを書き込むことで、最後のパケットであることが検出できるようにする。
これにより、アービタ(1)217が、メインシステム100側にパケットを転送する際に、フラグデータで検出される最終パケットまでを転送制御する。よって無効なパケットの転送がなされることを抑止できる。
このフラグを用いることで、不要なパケットを転送する必要を無くし、つまり8パケット以下の1〜7パケットのサイズでも必要パケット数分までで転送を終了でき、パケットの連続転送ができる。また、この転送制御によって、メインCPU121の負荷を軽減することができる。
ところで、サブコントローラ210に設けたアービタ(1)217内蔵のレジスタの設定は、上記「サブコントローラを介して行うパケットデータの転送動作」で図4の処理フロー(ステップS307)を参照して説明したように、サブCPU211が行う。この設定を行うために、サブCPU211は、無線通信部230が正常な受信パケットをRAM(1)212に転送する際の制御情報を無線通信部230から取得し管理する。無線通信部230から取得する制御情報は、パケット受信時に各パケットが正常に受信されたか否かのチェックを受け、正常に受信したパケットをRAM(1)212に転送する際の制御情報である。
サブCPU211が取得する上記制御情報の中には、アービタ(1)217内蔵のレジスタの設定に用いるための各パケットのパケット番号(No.)、データサイズ及びRAM(1)212におけるアドレスが含まれる。また、上記レジスタの設定にあたって、サブCPU211は、管理している各パケットの制御情報におけるパケット番号をもとに、どのパケットに最終パケットデータ判別フラグを書き込むかを判断し、該当するパケットにフラグデータを設定する。
上記のように、サブコントローラ210内のサプCPU211が、RAM(1)212の正常に受信されたパケットの制御情報を無線通信部230から取得し、アービタ(1)217内蔵のレジスタの設定に用いることで、効率がよく且つ確実な転送が行える。
次に、RAM(1)212に格納されたパケットの転送について説明する。図11は、従来どおりにRAM(1)212に格納されたパケットの転送手順を示した概念図である。図11に示す例では、並び替えのみ本実施の形態の手法を用いて、Packet_5を取りこぼした場合の処理に、従来の処理手法を用いた例とする。この場合、サブシステム200側は、Packet_5を挟んで、2回に分けてパケットを転送する。これによりPacket5の空き領域が、メインメモリ123上に確保される。しかしながら、この手順では、2回に分けて転送するために転送効率が高くない。
そこで、本実施の形態では、ダミーパケットを挟んで転送することにした。図12は、ダミーパケット含めて転送した場合の例を示した図である。この場合、アービタ(1)217で並び替えた上、ダミーパケットを挟んで転送した後、並び替え等を行わずにメインメモリ123に格納される。その後、メインメモリ123は、Packet5が転送されてきた後、ダミーパケットによるダミーデータを有効データに書き換えられる。これにより、効率的な転送を行うと共に、適切なデータをメインメモリ123に格納することができる。
次に、RAM(1)212におけるダミーパケットを転送した後の記憶領域の遷移について説明する。図13は、RAM(1)212における上述した記憶領域の遷移を示した図である。図13左のRAM(1)212の記憶領域は、図12のRAM(1)212の記憶領域を表している。そして、RAM(1)212に格納された、ダミーパケットを含むPacket_0〜Packet7までのパケットを転送した後、図13中央のようにRAM(1)のA面を開放する。なお、B面のPacket_1〜Packet_2は、転送済みとなる。そして、再送要求部252による再送要求部によって、図12で取りこぼしたPacket_5と、Packet_14以降のパケットが、RAM(1)212のA面に格納される。これによりPacket_5の再々送が行われる。
図14が、RAM(1)212に格納されたパケットから、パケットの再々送を示した概念図である。図14に示すようなRAM(1)212において、サブシステム200側のRxDMAC216が、再々送パケットであるPacket_5を転送した後、Packet_8から1通信単位分のパケットを転送する。転送されたパケットは、並び替え等が行われることなく、PCIeバスを介し、メインメモリ123に格納される。これにより、再々送パケットを適切に格納することができる。
以上で説明した本実施形態に係る受信パケットデータの転送方法の各工程を実行するための手順等を記録したプログラムは周知のコンピュータ読み取り可能な記録媒体例えばCDROM等に記録しておくことができる。
本実施の形態では、サブシステム200でアービタ(1)217が設定部251による設定に従ってパケットを読み出すため、パケット並び替え等を行う必要がなくなるため、メインシステム側の負荷を軽減できる。また、取りこぼしが発生した際、パケットの再送が行われた場合でも、上述した制御を行うことで、メインシステム側の負荷を軽減できる。また、再送要求の後でもとりこぼした場合に、ダミーパケットを含む1通信単位分のパケットを転送することで、複数回に分けて転送する必要がなくなり、通信効率が向上する。