(第1実施形態)
以下、第1実施形態を図1〜図12に従って説明する。
まず、所定の規格(例えば、IEEE1394規格)に準拠したネットワークシステム(トポロジ)を図2に従って説明する。IEEE1394バスに接続された各装置(ノード)A〜Dは互いに通信可能に接続されている。具体的には、ノードAにはIEEE1394バスケーブル(バスケーブル)1aを介してノードBが接続され、そのノードBにはバスケーブル1bを介してノードCが接続され、そのノードCにはバスケーブル1cを介してノードDが接続されている。なお、これらノードA〜Dは、例えばパーソナルコンピュータ、ハードディスク装置(HDD)、レコーダ、表示装置、プリンタ、デジタルカメラ等の接続ポイントの総称である。
これらノードA〜Dには、図3に示すように、固有の64ビットのアドレス空間がそれぞれ割り当てられている。各アドレスの上位16ビットは、IEEE1394バス上のノードを示す「ノードID」である。このノードIDの上位10ビットは、バス同士を識別するための「bus_ID(バスID)」であり、ノードIDの下位6ビットは、ノードを識別するための「physical_ID(物理ID)」である。このノードIDの全てのビットが1となるアドレスは予約されているため、1023個のバスと63個のノードを指定することができる。また、アドレス空間の残りの48ビットは、例えば各ノードに与えられたアドレス空間の指定に使用される。そして、各ノードA〜Dは、自ノードや相手ノードの物理ID(狭義のノードID)を認識することで、通信相手を指定したデータ通信を行うことができる。なお、実際には物理IDがノードIDとなるため、以下の説明では、物理IDの値をそのままノードIDの値として説明する場合もある。
また、上記ノードA〜Dは、図1に示すIEEE1394規格に準拠したIEEE1394プロトコルコントローラ(IPC)10をそれぞれ備えている。以下に、このIPC10の内部構成例を説明する。なお、ここでは、ノードBが備えるIPC10を例に挙げて説明し、ノードA,C,Dが備えるIPC10についてはその説明を省略する。
ポート回路20a内の受信回路21は、バスケーブル1aを介して相手ノード(他ノード)Aと接続されている。この受信回路21は、ノードAから受信する電気信号を装置内部で扱う電気信号に変換して物理層制御回路30に出力する。受信回路21は、ノードAから受信するパケットデータ(セルフIDパケットやアイソクロナスパケット等)を物理層制御回路30のデータ再同期部31に出力するレシーバ回路21aと、ノードAから受信するアービトレーション信号を物理層制御回路30のアービトレーション制御部32に出力するレシーバ回路21bとを備えている。
ポート回路20a内の送信回路22は、物理層制御回路30から入力される電気信号を、IEEE1394規格の電気信号に変換して他ノードAに送信する。送信回路22では、出力制御部22aが、物理層制御回路30から入力されるパケットデータ又はアービトレーション制御部32から入力されるアービトレーション制御信号のいずれか一方を選択し、ドライバ回路22bを通じて他ノードAに出力する。
なお、ノードCと接続されるポート回路20bもポート回路20aと同様の構成を備えているため、同一の部材にそれぞれ同一の符号を付して示し、それら各要素についての説明を省略する。
物理層制御回路30は、バスの状態モニタ、バスリセット発生時のバスのコンフィグレーション、スピードシグナリングやアービトレーションなどを行う。なお、バスのコンフィグレーション(バスリセットシーケンス)では、トポロジ中の全ノードのバスに関する情報の初期化と、ルートノードの決定と、各ノードの物理ID(ノードID)の決定と、ノードIDを通知するためのセルフIDパケットの送信とが行われる。また、この物理層制御回路30は、ポート回路20a,20bから入力される電気信号をリンク層が扱う論理信号に変換し、インターフェース回路50を通じてリンク層に出力する。一方、物理層制御回路30は、リンク層からインターフェース回路50を通じて入力される論理信号を電気信号に変換してポート回路20a,20bに出力する。なお、リンク層では、データCRCやヘッダCRCの生成、CRCチェックやパケットの送受信制御が行われる。
本実施形態においては、ポート回路20a,20b、物理層制御回路30及びインターフェース回路50がノードBの物理層に設けられている。
上記物理層制御回路30は、データ再同期部31と、アービトレーション制御部32と、シリアルパラレル(S/P)変換部33と、パラレルシリアル(P/S)変換部34と、選択回路35,36と、セルフIDパケット生成部(パケット生成部)37と、識別番号生成部40とを有している。
データ再同期部31は、アービトレーション制御部32からの制御信号に応答して、各レシーバ回路21aからの受信パケットデータをリンク層が扱う論理信号に変換してS/P変換部33に出力する。また、データ再同期部31は、受信パケットデータをリピート転送するためにリピートデータとして選択回路36に出力する。データ再同期部31は、受信パケットデータの終了を示す終了信号をアービトレーション制御部32に出力する。
S/P変換部33は、データ再同期部31から入力される論理信号(シリアルデータ)をパラレルデータに変換してインターフェース回路50を介してリンク層に出力する。また、S/P変換部33は、セルフIDパケットに対応する論理信号をパラレルデータに変換して識別番号生成部40に出力する。
選択回路35は、アービトレーション制御部32から入力される選択信号に応じて、リンク層から入力されるパケットデータ(アイソクロナスパケット等)と、パケット生成部37から入力されるセルフIDパケットSPとのいずれか一方を選択し、P/S変換部34に出力する。
P/S変換部34は、パケットデータ又はセルフIDパケットSPをシリアルデータに変換して送信パケットデータとして選択回路36に出力する。
選択回路36は、アービトレーション制御部32から入力される選択信号に応じて、P/S変換部34からの送信パケットデータ又はデータ再同期部31からのリピートデータのいずれか一方を選択し、上記出力制御部22aに出力する。
アービトレーション制御部32は、物理層のメインコントローラである。このアービトレーション制御部32には、各レシーバ回路21bからのアービトレーション信号、データ再同期部31からの終了信号や識別番号生成部40からのバスリセット要求信号BRrが入力される。そして、アービトレーション制御部32は、これらの信号に基づいて、リンク層からのアービトレーションのリクエストに対する応答、各ポート回路20a,20bの管理及び制御、バスのリセット及びコンフィグレーションなどを行う。また、アービトレーション制御部32は、自ノードBのセルフIDパケットSPの送信が許可されたことを示す送信許可信号TXと、他ノードからセルフIDパケットSPを受信したことを示す受信信号RXとを、識別番号生成部40に出力する。
パケット生成部37は、図4に示すデータフォーマットを有するセルフIDパケットSPを生成する。具体的には、パケット生成部37は、自ノードBが有するポート回路が11つ以下の場合は、図4(a)に示す先頭パケットSP1と、その先頭パケットSP1に連結された連結パケットSP2とを有するセルフIDパケットSPを生成する。また、パケット生成部37は、自ノードBが有するポート回路が12つ以上の場合は、上記先頭パケットSP1と連結パケットSP2と併せて、図4(b)に示す連結パケットSP3を有するセルフIDパケットSPを生成する。このため、2つのポート回路20a,20bを有するノードBのパケット生成部37は、先頭パケットSP1と連結パケットSP2とを有するセルフIDパケットSPを生成する。ここで、セルフIDパケットSPのデータフォーマットを図4に従って説明する。
各パケットSP1〜SP3の先頭の「10」は、当該パケットがセルフIDパケットSPであることを示す。先頭パケットSP1には、送信元の物理IDを示すphy_ID(physical_ID)、リンク層とトランザクション層がアクティブであるか否かを示すL(link_active)等のフィールドが設けられている。また、先頭パケットSP1には、現在のPHY_Configuration.gap_countの値を示すgap_cnt(gap_count)、転送スピード能力を示すSP(PHY_SPEED)等のフィールドが設けられている。また、先頭パケットSP1には、ブリッジ能力を示すbrdg(bridge)、バス又はアイソクロナス・リソースマネージャ候補を示すc(CONTENDER)、パワークラスを示すpwr(POWER_CLASS)、ポートの接続状態を示すp0〜p2(NPORT)等のフィールドが設けられている。さらに、先頭パケットSP1には、バスリセットを発効したノードであることを示すi(initiated_reset)、「1」の場合にセルフIDパケットSPが続くことを示すm(more_packets)等のフィールドが設けられている。一方、連結パケットSP2には、上記phy_ID、Extended self-ID packet Sequence numberを示すn、「0」に設定されるReservedビットであるrsv、バスリセット前後でノードIDが変更されたか否かを示すsame等のフィールドが設けられている。また、連結パケットSP2には、ポートの接続状態を示すp3〜p10、上記m等のフィールドが設けられている。連結パケットSP3には、phy_IDフィールド、nフィールド、rsvフィールドやポートの接続状態を示すp11〜p15フィールド等が設けられている。
そして、パケット生成部37は、識別番号生成部40で生成される物理ID番号PIDを上記phy_IDフィールドに格納し、識別番号生成部40で生成される同一フラグsameを上記sameフィールドに格納し、先頭パケットSP1のmフィールドに常に「1」を格納してセルフIDパケットSPを生成する。ここで、先頭パケットSP1のmフィールドに常に「1」を格納するのは、自ノードBが有するポート数が3つ以下の場合であっても、連結パケットSP2に格納される同一フラグsameの値を常にセルフIDパケットSP内に格納するためである。このように生成されたセルフIDパケットSPが上記送信回路22等を通じて他ノードにブロードキャスト送信されると、自ノードBのノードIDがphy_IDフィールドに格納された物理ID番号PIDに設定されるとともに、バスリセット前後でノードIDが変更されたか否かが他ノードに通知される。
識別番号生成部40は、自ノードBのノードIDとして設定される物理ID番号PID、つまりセルフIDパケットSPのphy_IDフィールドに格納される物理ID番号PIDを生成する。また、識別番号生成部40は、バスリセット前後で自ノードBのノードIDが変更されたか否かを示す同一フラグsameを生成する。以下に、この識別番号生成部40の内部構成例を説明する。
抽出部41には、他ノードA,C,Dから出力されたセルフIDパケットSPがS/P変換されて供給される。この抽出部41は、制御部42からのイネーブル信号に応じて、上記セルフIDパケットSPのphy_IDフィールドから、他ノードに設定された物理ID(ノードID)を示す第1識別番号ID1を抽出し、その抽出した第1識別番号ID1を制御部42に出力する。
制御部42は、図6に示すフローチャートの処理を実行する。この制御部42は、直前に自ノードBに設定されたノードID、例えばバスリセット発生前の自ノードBのノードIDを示す第2識別番号ID2をレジスタ43に格納し、現在のトポロジ構築におけるセルフIDカウント値Qをレジスタ44に格納する。また、制御部42は、第2識別番号ID2と異なる値、ここでは1つ前に構築されたトポロジ内の装置数(ノード数)を示す第3識別番号ID3をレジスタ45に格納する。さらに、制御部42は、上記同一フラグsameをレジスタ46に格納し、通常フラグnrmlをレジスタ47に格納し、バスリセット要求信号BRrを上記アービトレーション制御部32に出力する。
ここで、同一フラグsameは、上述したように、バスリセット前後で自ノードBのノードIDが変更されたか否かを示すビットである。具体的には、自ノードBのノードID設定時(自身のセルフIDパケットSP送信前)までに、上記第1識別番号ID1(他のノードに設定されたノードID)と第2識別番号ID2(バスリセット前の自ノードBのノードID)とが一致していない場合には、同一フラグsameが「1」に設定される。この同一フラグsame=1は、バスリセット前後で自ノードBのノードIDが変更されないことを示す。逆に、自ノードBのノードID設定時までに、第1識別番号ID1と第2識別番号ID2とが一致した場合には、同一フラグsameが「0」に設定される。
また、通常フラグnrmlは、従来と同様のバスのコンフィグレーションを実行するか否かを示すビットである。具体的には、リセット(power_reset)後、最初のバス初期化時には、従来と同様のコンフィグレーションを実行させるために、通常フラグnrmlが「1」に設定される。また、自ノードBのノードID設定後に、その設定したノードID(第2識別番号ID2)と第1識別番号ID1(他ノードに設定されたノードID)とが一致した場合にも、通常フラグnrmlが「1」に設定される。一方、上述のように通常フラグnrmlが「1」に設定される条件以外の場合には、従来のコンフィグレーションとは異なるシーケンスを実行させるために、通常フラグnrmlが「0」に設定される。
レジスタ43,45に格納された第2及び第3識別番号ID2,ID3とレジスタ44に格納されたセルフIDカウント値Qとは、上記制御部42に出力される。また、セルフIDカウント値Q及び第3識別番号ID3は選択回路48に出力され、第2識別番号ID2は選択回路49に出力される。
レジスタ46に格納された同一フラグsameは、選択回路49と上記パケット生成部37とに出力される。また、レジスタ47に格納された通常フラグnrmlは、選択回路48に出力される。
選択回路48は、通常フラグnrmlの値に応じて、セルフIDカウント値Q及び第3識別番号ID3のいずれか一方を選択的に選択回路49に出力する。具体的には、選択回路48は、通常フラグnrmlが「0」である場合には、第3識別番号ID3を選択回路49に出力し、通常フラグnrmlが「1」である場合には、セルフIDカウント値Qを選択回路49に出力する。
選択回路49は、同一フラグsameの値に応じて、第2識別番号ID2及び選択回路48から入力される値のいずれか一方を選択し、その選択した値を物理ID番号PIDとしてパケット生成部37に出力する。具体的には、選択回路49は、同一フラグsameが「0」である場合には、選択回路48から入力される値(セルフIDカウント値Q又は第3識別番号ID3)を物理ID番号PIDとしてパケット生成部37に出力する。一方、選択回路49は、同一フラグsameが「1」である場合には、第2識別番号ID2を物理ID番号PIDとしてパケット生成部37に出力する。
なお、ノードA〜Dは通信装置の一例、抽出部41及び制御部42は比較部の一例、パケット生成部37及び識別番号生成部40は制御部の一例である。
次に、このように構成されたネットワークシステム(とくに、各ノードA〜Dの識別番号生成部40)の動作を図5〜図12を参照して説明することにより、各構成の機能についてさらに詳述する。
今、図9に示すノードA〜Dの電源が投入されると(power_reset)、各パラメータが初期値に設定される(図6のステップS1)。具体的には、同一フラグsameが「0」、通常フラグnrmlが「1」に設定されるとともに、自ノードのセルフIDパケットSPが未送信であることを示すために送信完了フラグTXEが「0」に設定される。また、セルフIDカウント値Qが「0」、第2識別番号ID2が「3FH」、第3識別番号ID3が「3FH」、トポロジ内のノードの数を示す装置数Devが「0」、バスリセットを発生させるためのバスリセットフラグBRが「0」、バスリセット要求信号BRrが「0」に設定される。なお、周知ではあるが、「H」はその値が16進数であることを示す。
続いて、各ノードA〜DのIPC10によってバスのコンフィグレーション(バス初期化→ツリー識別→自己識別)が開始される(ステップS2)。詳述すると、まず、バス初期化フェーズにおいて、バスリセットが発生される。これにより、すべてのノードにおけるトポロジに関する情報が消去される。このバス初期化の終了後に、一部のパラメータが所定値に設定される(ステップS3)。具体的には、バスリセットフラグBR、バスリセット要求信号BRr、セルフIDカウント値Q及び送信完了フラグTXEが上記初期化と同様に、全て「0」に設定されるとともに、装置数Devが自ノードの数を示す「1」に設定される。
その後、ツリー識別フェーズにおいて図9に示すツリー状のトポロジが形成され、電源投入順序や接続形態などに応じて任意のノードがルートノード(許可装置)に決定される。ここでは、ノードAがルートノードに決定される。続いて、自己識別フェーズにおいて各ノードA〜Dの物理ID(ノードID)が自動的に割り当てられる。このようなリセット(power_reset)後の最初のバスのコンフィグレーションの場合には、従来と同様のシーケンスによって、図9に示すように、ノードD,C,B,Aの順番でノードIDが「0」、「1」、「2」、「3」と割り当てられる。以下に、ルートノードの決定からノードIDの設定までの処理を詳述する。
上記バスリセットが発生した後、各ノードA〜Dをツリー状に接続したものとして扱えるように、各ノードA〜Dのポート回路間において親子関係の設定が行われる。具体的には、バスリセットの発生後、各ノードA〜D毎にそれぞれ決められた時間が経過した後に、他のノードが一つのみ接続されている葉(リーフ)のノードからparent_notifyという信号が出力される。ここでは、最初にノードDのポート回路20aからparent_notify信号が出力される。他のノードが2つ以上接続されている枝(ブランチ)のノード(ここでは、ノードC)は、上記parent_notify信号を受信し、予め決められた時間が経過した後に、上記parent_notify信号を受信したポート回路20bにchild_notify信号を出力する。さらに、上記枝のノードCは、残りのポート回路20aにparent_notify信号を出力する。これにより、ノードDのポート回路20aが「親ポート」に設定され、ノードCのポート回路20bが「子ポート」に設定される。このような処理が繰り返され、ノードCのポート回路20aとノードBのポート回路20bとの間で「親−子」の関係が設定され、続いて、ノードBのポート回路20aとノードAのポート回路20bとの間で「親−子」の関係が設定される。そして、全てのノードのポート回路間で親子関係が設定された後に、全てのポート回路が「子ポート」に設定されたノード(ここでは、ノードA)がルートノードに決定される。なお、図9に示すように、他のノードが接続されていないポート回路は「切(off)」に設定される。
ルートノードが決定されると、そのルートノードAからグラントという信号が任意の一つのポート回路に出力される。具体的には、ルートノードAは、予め割り振られているポートの番号の最小の番号を有するポート回路(ここでは、ポート回路20b)にグラント信号を出力する。このグラント信号はノードの親ポートで受け取って子ポートから出力され、次々に伝搬される。そして、子ポートを持たないノード、つまり葉のノード(ここでは、ノードD)がグラント信号を受信すると、そのノードDのノードIDの設定(セルフIDパケットSPの送信)が開始される。このときのノードD(とくに、識別番号生成部40及びパケット生成部37)の処理を以下に説明する。
図6に示すステップS4において、バスのコンフィグレーション(自己識別フェーズ)が未完了である場合には、制御部42は、アービトレーション制御部32から入力される送信許可信号TXが「1」であるか否かを判定する(ステップS5)。このとき、上述のグラント信号の受信によって送信許可信号TXが「1」になっているため(ステップS5でYES)、送信完了フラグTXEを「1」に設定する(ステップS6)。
続いて、制御部42は、同一フラグsameが初期値の「0」であり(ステップS7でYES)、通常フラグnrmlが初期値の「1」であるため(ステップS8でYES)、現在のセルフIDカウント値Q(=0)を第2識別番号ID2に設定する(ステップS9)。さらに、このとき、識別番号生成部40の選択回路48,49は、セルフIDカウント値Qを物理ID番号PIDとしてパケット生成部37に出力する(ステップS9)。そして、自ノードDのノードIDとなる物理ID番号PID(=0)と同一フラグsame(=0)の情報を含むセルフIDパケットSP(図5(a)参照)がノードDからブロードキャスト送信される。なお、このセルフIDパケットSPでは、上述したように、ポートの数が3つ以下の場合であっても同一フラグsameの情報を含む連結パケットSP2が転送されるように、先頭パケットSP1のmフィールドには「1」がセットされている。
このように、ノードDの物理層制御回路30では、識別番号生成部40で生成されたセルフIDカウント値Qを自ノードDのノードIDとして使用し、このセルフIDカウント値Q(ノードID)をセルフIDパケットSPにて他のノードA〜Cに転送することで、ノードIDの取得と通知を行っている。そして、このようなセルフIDパケットSPの送信により、図9に示すように、ノードDのノードIDが「0」に確定されるとともに、同一フラグsame=0の情報が他ノードA〜Cに通知される。
上記ノードDのセルフIDパケットSPを受信し、自身のノードIDが未設定のノードA〜Cは、受信したセルフIDパケットSP内のphy_IDフィールドから他ノードDに設定されたノードIDを取得するとともに、セルフIDカウント値Qをインクリメントする。このときのノードA〜Cにおける識別番号生成部40(特に、制御部42)の処理を以下に説明する。
図6に示すステップS4において、コンフィグレーション(自己識別フェーズ)が未完了である場合には、制御部42は、アービトレーション制御部32から入力される送信許可信号TXが「1」であるか否かを判定する(ステップS5)。このとき、上述のグラント信号が他ノードDに出力されており送信許可信号TXが「0」になっているため(ステップS5でNO)、図7に示すステップS10に移る。このステップS10では、制御部42は、受信信号RXが「1」であるか否かを判定する、すなわち他ノードからセルフIDパケットSPを受信したか否かを判定する。ここでは、他ノードDからセルフIDパケットSPを受信しているため(ステップS10でYES)、装置数Devをインクリメントする(ステップS11)。これにより、ノードA〜Cにおける装置数Devは「2」になる。
続いて、他ノードDから受信したセルフIDパケットSPが抽出部41に入力され、その抽出部41でセルフIDパケットSPから物理ID(=0)が第1識別番号ID1として抽出される。そして、制御部42は、その第1識別番号ID1(=0)と、自ノードの第2識別番号ID2(ここでは、初期値である「3FH」)とが一致するか否かを判定し、両者が一致しないため(ステップS12でNO)、ステップS13に移る。ここで、上記第2識別番号ID2の初期値(=3FH)は、リセット後の最初のバスのコンフィグレーション時に、上記ステップS12において、第1識別番号ID1と第2識別番号ID2とが一致しないように、その値が設定されている。IEEE1394規格では、1つのバスあたり最大63台までノードの接続が可能であるため、「0」から順番にノードIDが付与された場合には、最大で「62」のノードIDが付与される。つまり、上記第2識別番号ID2の初期値「3FH(10進数の63)」は、1つのバスあたりに最大台数のノードが接続された場合であっても、ノードIDとして設定されることのない値、すなわち第1識別番号ID1として抽出されることのない値に設定されている。
次に、制御部42は、自ノードのセルフIDパケットSPが未送信であるため(ステップS13でYES)、上記第1識別番号ID1(=0)と自ノードの第3識別番号ID3(ここでは、初期値である「3FH」)とが一致するか否かを判定する(ステップS14)。ここでは、両者が一致しないため(ステップS14でNO)、制御部42は、セルフIDカウント値Qをインクリメントする。これにより、ノードA〜CにおけるセルフIDカウント値Qは「1」になる。
このようにしてノードDのノードIDの設定が終了すると、そのノードDの親ポート20aからident_doneという信号が出力される。このident_done信号を受け取ったノードCは、ノードIDが未設定のポート回路に対してグラント信号を発行する。そして、自身の全ての子ポートにident_done信号が検出されたノード(ここでは、ノードC)は、自ノードのノードIDの設定を開始する。このノードIDの設定は、上述したステップS4〜S9(図6参照)の処理によって実行される。このとき、現在のセルフIDカウント値Q(=1)が第2識別番号ID2に設定されるとともに、そのセルフIDカウント値Q(=1)が物理ID番号PIDとしてパケット生成部37に出力される(ステップS9)。そして、この物理ID番号PID(=1)と同一フラグsame(=0)の情報を含むセルフIDパケットSPがノードCからブロードキャスト送信される。これにより、図9に示すように、ノードCのノードIDが「1」に確定される。
このセルフIDパケットSPを受信したノードA〜Cの制御部42は、上述したようにステップS10〜S13の処理を実行する。すなわち、装置数Devをインクリメントし(ステップS11)、受信したセルフIDパケットSPから抽出した第1識別番号ID1(=1)と自ノードの第2識別番号ID2とが不一致であることを確認する(ステップS12でNO)。そして、自身のノードIDが未設定のノードA,Bは、セルフIDカウント値Qをインクリメントして「2」にする(ステップS15)。一方、自身のノードIDが設定済みのノードDは、送信完了フラグTXEが「1」であるため(ステップS13でNO)、セルフIDカウント値Qをインクリメントせずに、図6に示すステップS4に戻る。
その後も同様に、図9に示すように、ノードB→ノードAの順番で、他ノードから受信したセルフIDパケットSPの数に等しいセルフIDカウント値Qによって各ノードのノードIDが決定される。具体的には、ノードBのノードIDが「2」に設定され、ルートノードAのノードIDが最も大きい「3」に設定される。
以上説明したように、リセット後の最初のコンフィグレーションでは、従来と同様のシーケンス(受信したセルフIDパケットSPの数によってノードIDを決定するシーケンス)によって各ノードA〜DのノードIDが自動的に設定される。そして、全てのノードA〜DのノードIDが設定され、且つ全てのノードA〜DからセルフIDパケットSPが送信されると、自己識別フェーズが完了し、バスのコンフィグレーションが完了する(図6のステップS4でYES)。
すると、全てのノードA〜Dの制御部42は、その時の装置数Devを第3識別番号ID3に設定する(ステップS30)。ここでは、全てのノードA〜Dにおける装置数Devがトポロジ内のノードの総数である「4」になるため、全てのノードA〜Dにおいて、第3識別番号ID3が「4」に設定される。続いて、全てのノードA〜DにおいてバスリセットフラグBRが初期値の「0」のままであるため(ステップS31でNO)、同一フラグsameが「1」に設定され、通常フラグnrmlが「0」に設定される(ステップS32)。その後、ステップS2に戻って、全てのノードA〜Dの識別番号生成部40は、次のバスリセットが発生するまで待機する。
また、上述のようにコンフィグレーションが完了すると(図7のステップS40)、各ノードA〜Dの物理層制御回路30では、自ノード以外の全てのノードからsame=1が格納されたセルフIDパケットSPを受信したか否かが判定される(ステップS41)。ここでは、全てのノードA〜Dから出力されるセルフIDパケットSPにsame=0が格納されていたため(ステップS41でNO)、ステップS42に移る。ステップS42では、各ノードA〜Dが、same=1のセルフIDパケットSPを送信していないノードに対して機器情報の取得や機器情報の確認を行う。この場合には、各ノードA〜Dは、自ノード以外の全てのノードのコンフィグレーションROM等を読み出す。なお、コンフィグレーションROMには、メーカ識別用のcompany ID、チップを識別するためのchip_ID、モジュールのメーカを識別するためのvender_IDやシリアルナンバーなどのノード固有の情報や、当該装置が送信装置又は受信装置である等の機能情報が格納されている。このため、これらの情報を読み出すことにより、各ノードA〜Dは、現在バスに接続されているノードがどのような装置であるかを認識することができる。
続いて、各ノードA〜Dは、各プロトコルに従って通信の確立処理(通信内容の確認や帯域の確保など)を実行する(ステップS43)。例えばAV機器であれば、AV/Cプロトコルに従ったチャネル等の設定が実行される。このような処理によって通信が確立されると、各ノードA〜D間でデータ通信が開始される(ステップS44)。
次に、ノイズなどに起因してバスリセットが発生した場合の動作について図10を併せ参照して説明する。
例えばノードB,C間を接続するバスケーブル1bに静電気などのノイズが乗って、ノードB,C間で同期喪失が検出されると、バスリセットが発生され、バスのコンフィグレーションが開始される(図6のステップS2)。詳述すると、上記バスリセットの後に、上述と同様に一部のパラメータが所定値に設定される(ステップS3)。その後、ツリー識別フェーズにおいて図10に示すツリー状のトポロジが形成され、電源投入順序や接続形態などに応じて任意のノードがルートノードに決定される。ここでは、ノードBがルートノードに決定される。すなわち、本動作例では、トポロジの接続形態はバスリセット前(図9)と同じであるが、ルートノードがノードAからノードBに変わっている。そして、その後の自己識別フェーズにおいて各ノードA〜DのノードIDが決定される。このとき、本実施形態のようにトポロジ内の全てのノードA〜Dが図1に示すIPC10を備えている場合には、全てのノードA〜Dに対してバスリセット前と同じノードIDが設定される。すなわち、ノードD,C,B,AのノードIDがそれぞれ、「0」、「1」、「2」、「3」に設定される。以下に、このノードIDの設定処理について詳述する。
図10に示すように、はじめにグラント信号を受信した葉のノード(ここでは、ノードA)からノードIDの設定(セルフIDパケットSPの送信)が実行される。このとき、仮に従来のシーケンスでノードIDの設定が行われると、この時のセルフIDカウント値Q(=0)がノードAのノードIDに設定されることになる。このため、従来のシーケンスでは、バスリセット前のノードID(=3)とバスリセット後のノードID(=0)とが異なる番号に設定されてしまう。すなわち、従来のシーケンスでは、同じノードに設定されるノードIDがバスリセット前後で変更されてしまう。
これに対し、本実施形態のIPC10を備えたノードAでは、以下に説明する処理を実行することにより、バスリセット前後でノードIDが変更されないようにノードIDが設定される。
詳述すると、ノードAの制御部42は、コンフィグレーションが未完了であり(図6のステップS4でNO)、アービトレーション制御部32から入力される送信許可信号TXが「1」であるため(ステップSでYES)、送信完了フラグTXEを「1」に設定する(ステップS6)。
続いて、制御部42は、同一フラグsameが「0」であるか「1」であるかを判定する(ステップS7)。このとき、ノードAでは、自身のセルフIDパケットSPを送信する前までに、第2識別番号ID2(=3)と一致する第1識別番号ID1を受信していないため、同一フラグsameが上記ステップS32で設定された「1」のままである(ステップS7でNO)。このため、識別番号生成部40からは第2識別番号ID2(=3)、つまりバスリセット前の自ノードAのノードIDが物理ID番号PIDとしてパケット生成部37に出力される(ステップS20)。また、このときレジスタ46からは「1」である同一フラグsameがパケット生成部37に出力される。そして、図10に示すように、自ノードAのノードIDとなる物理ID番号PID(=3)と同一フラグsame(=1)の情報を含むセルフIDパケットSP(図5(b)参照)がノードAからブロードキャスト送信される。すなわち、バスリセット前の自ノードAのノードIDと同じ物理ID番号PID(=3)と、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とがセルフIDパケットSPによって他のノードB〜Dに通知される。これにより、ノードAのノードIDがバスリセット前と同じ「3」に確定される。
このセルフIDパケットSPを受信するノードB〜Dは、上述したようにステップS10〜S15(図7参照)の処理を実行する。これにより、ノードB〜Dにおける装置数Devが「2」になり、ノードB〜DにおけるセルフIDカウント値Qが「1」になる。
続いて、次の順番のノードDにおいてノードIDの設定が実行される。このノードDも上記ノードAと同様に、自身のセルフIDパケットSPを送信する前までに、第2識別番号ID2(=0)と一致する第1識別番号ID1を受信していないため、同一フラグsameが「1」のままである(図6のステップS7でNO)。このため、識別番号生成部40からは第2識別番号ID2(=0)、つまりバスリセット前の自ノードDのノードIDが物理ID番号PIDとしてパケット生成部37に出力される(ステップS20)。また、このときレジスタ46からは「1」である同一フラグsameがパケット生成部37に出力される。そして、図10に示すように、バスリセット前の自ノードDのノードIDと同じ物理ID番号PID(=0)と、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とがセルフIDパケットSPによって他のノードA〜Cに通知される。これにより、ノードDのノードIDがバスリセット前と同じ「0」に確定される。
その後、ノードC,Bも同様に、自身のセルフIDパケットSPを送信する前までに、第2識別番号ID2と一致する第1識別番号ID1を受信しないため、第2識別番号ID2が自身のノードIDに設定される。そして、バスリセット前のノードIDと同じ物理ID番号PIDと、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とがセルフIDパケットSPによって他のノードに通知される。これにより、ノードCのノードIDがバスリセット前と同じ「1」に確定され、最後にルートノードBのノードIDがバスリセット前と同じ「2」に確定される。
このようにコンフィグレーションが完了すると(ステップS4でYES)、全てのノードA〜Dの制御部42は、その時の装置数Dev(=4)を第3識別番号ID3に設定し(ステップS30)、同一フラグsameを「1」に再度設定するとともに、通常フラグnrmlを「0」に再度設定する(ステップS32)。これにより、次にバスリセットが発生した場合にも、バスリセット前後でノードIDが変更されないように動作される。
以上説明したように、本実施形態のネットワークシステムでは、ノイズ等によってバスリセットが発生しても、全てのノードA〜DのノードIDがバスリセット前と同じノードIDに自動的に設定される。さらに、全てのノードA〜Dから、バスリセット前後でノードIDが変更されていないこと示す情報(same=1)が他の全てのノードに通知される。このsame=1の情報に基づいて、各ノードA〜Dにおいて、自ノード以外の全てのノードのノードIDがバスリセット前と変更されていないことを判別することができるため、機器情報の取得・認識処理(ステップS42)や通信の確立処理(ステップS43)を省略することができる。このため、全てのノードA〜Dからsame=1のセルフIDパケットSPを受信した場合には(図8のステップS41でYES)、機器情報の取得・認識処理(ステップS42)や通信の確立処理(ステップS43)が省略されて、データ通信が直ちに再開される(ステップS44)。これにより、コンフィグレーション完了後、バスリセット前と同様にデータ通信を即座に再開することができる。
次に、図10に示すネットワークシステムに2つのノードE,Fが追加された場合の動作について図11を併せ参照して説明する。具体的には、図1に示すIPC10を備えるノードEのポート回路20aがノードAのポート回路20aに新たに接続され、さらにIPC10を備えるノードFのポート回路20aがノードEのポート回路20bに新たに接続された場合の動作を説明する。
ノードE,Fの追加によってバスリセットが発生され、バスのコンフィグレーションが開始されると(ステップS2)、一部のパラメータが所定値に設定され(ステップS3)、任意のノード(ここでは、ノードA)がルートノードに決定される。その後、各ノードのノードIDの設定が開始される。このとき、新たに追加されたノードE,Fは、リセット後の最初のコンフィグレーションになるため、セルフIDカウント値Qによって自身のノードIDが設定される。
詳述すると、図11に示すように、はじめにグラント信号を受信した葉のノード(ここでは、追加されたノードF)からセルフIDパケットSPの送信が実行される。この時のノードFでは、同一フラグsameが初期値の「0」であり(図6のステップS7でYES)、通常フラグnrmlが初期値の「1」である(ステップS8でYES)。このため、現在のセルフIDカウント値Q(=0)が第2識別番号ID2に設定されるとともに、セルフIDカウント値Qが物理ID番号PIDとしてパケット生成部37に出力される(ステップS9)。そして、図11に示すように、この物理ID番号PID(=0)と同一フラグsame(=0)の情報を含むセルフIDパケットSPがノードFからブロードキャスト送信される。これにより、ノードFのノードIDが「0」に確定される。
このセルフIDパケットSPを受信したノードDの制御部42は、装置数Devをインクリメントし(ステップS11)、上記セルフIDパケットSPから抽出した第1識別番号ID1(=0)と自身の第2識別番号ID2(=0)が一致するか否かを判定する(ステップS12)。ここでは、両者が一致するため(ステップS12でYES)、制御部42は、同一フラグsameを「0」に設定する(ステップS17)。続いて、制御部42は、送信完了フラグTXEが「0」であり(ステップS18でNO)、上記第1識別番号ID1(=0)と自身の第3識別番号ID3(=4)とが不一致であるため(ステップS14でNO)、セルフIDカウント値QをインクリメントしてステップS4に戻る。一方、他のノードA〜C,Eは、ステップS10〜S15の処理を実行する。これにより、ノードA〜EにおけるセルフIDカウント値Qが「2」になる(ステップS15)。
続いて、次の順番のノードEにおいてノードIDの設定が実行される。このノードEもノードFと同様に追加されたノードであるため、現在のセルフIDカウント値Q(=1)が物理ID番号PIDとしてパケット生成部37に出力される(ステップS9)。そして、図11に示すように、この物理ID番号PID(=1)と同一フラグsame(=0)の情報を含むセルフIDパケットSPがノードEからブロードキャスト送信される。これにより、ノードEのノードIDが「1」に確定される。
このセルフIDパケットSPを受信したノードCの制御部42は、図7に示すステップS10〜S12,S17,S18の処理を実行する。すなわち、ノードCの制御部42は、上記セルフIDパケットSPから抽出した第1識別番号ID1(=1)と自身の第2識別番号ID2(=1)が一致するため(ステップS12でYES)、同一フラグsameを「0」に設定する(ステップS17)。その後、その制御部42は、ステップS14,S15の処理を実行する。一方、ノードIDが未設定のノードA,B,DはステップS10〜S15の処理を実行し、ノードIDが設定済みのノードFはステップS10〜S13の処理を実行する。
続いて、次の順番のノードDにおいてノードIDの設定が実行される。このノードDの制御部42では、自身のセルフIDパケットSPを送信する前に、自身の第2識別番号ID2に一致する第1識別番号ID1が受信され、上記ステップS17で同一フラグsameが「0」に設定され(ステップS7でYES)、通常フラグnrmlが「0」に設定されている(ステップS8でNO)。このため、識別番号生成部40からは第3識別番号ID3(=4)、つまり直前のトポロジにおけるノードの総数である装置数Devが物理ID番号PIDとしてパケット生成部37に出力される(ステップS21)。また、このときレジスタ46からは「0」である同一フラグsameがパケット生成部37に出力される。そして、図11に示すように、バスリセット前のノードIDから変更された物理ID番号PID(=4)と、バスリセット前後でノードIDが変更されたことを示す情報(same=0)とがセルフIDパケットSPによって他のノードA〜C,E,Fに通知される。これにより、ノードDのノードIDが「4」に確定される。ここで、第3識別番号ID3の値は、直前のトポロジにおいて設定されていない値となるように、直前のトポロジにおける装置数Devに設定されている。
このセルフIDパケットSPを受信したノードA〜Cの制御部42は、ステップS10〜S14の処理を実行する。このとき、第1識別番号ID1(=4)と自身の第3識別番号ID3(=4)とが一致するため(ステップS14でYES)、上記制御部42は、第3識別番号ID3の値をインクリメントして「5」にする(ステップS16)。その後、制御部42は、セルフIDカウント値QをインクリメントしてステップS4に戻る。一方、ノードIDが設定済みのノードE,Fの制御部42は、ステップS10〜S13の処理を実行してステップS4に戻る。
続いて、次の順番のノードCにおいてノードIDの設定が実行される。このノードCの制御部42では、上記ステップS17で同一フラグsameが「0」に設定され(ステップS7でYES)、通常フラグnrmlが「0」に設定されている(ステップS8でNO)。このため、識別番号生成部40からは第3識別番号ID3(=5)が物理ID番号PIDとしてパケット生成部37に出力される(ステップS21)。また、このときレジスタ46からは「0」である同一フラグsameがパケット生成部37に出力される。そして、図11に示すように、バスリセット前のノードIDから変更された物理ID番号PID(=5)と、バスリセット前後でノードIDが変更されたことを示す情報(same=0)とがセルフIDパケットSPによって他のノードA,B,D〜Fに通知される。これにより、ノードCのノードIDが「5」に確定される。
なお、このセルフIDパケットSPを受信したノードA,Bの制御部42は、第1識別番号ID1(=5)と自身の第3識別番号ID3(=5)とが一致するため(ステップS14でYES)、第3識別番号ID3の値をインクリメントして「6」にする(ステップS16)。
その後、残りのノードB,Aでは、自身のセルフIDパケットSPを送信する前までに、第2識別番号ID2と一致する第1識別番号ID1を受信しないため、第2識別番号ID2が自身のノードIDに設定される。すなわち、図11に示すように、バスリセット前のノードIDと同じ物理ID番号PID(=ID2)と、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とがセルフIDパケットSPによって他のノードに通知される。これにより、ノードBのノードIDがバスリセット前と同じ「2」に確定され、最後にルートノードAのノードIDがバスリセット前と同じ「3」に確定される。
このようにコンフィグレーションが完了すると(ステップS4でYES)、全てのノードA〜Fの制御部42は、その時の装置数Dev(=6)を第3識別番号ID3に設定する(ステップS30)。続いて、全てのノードA〜FにおいてバスリセットフラグBRが初期値の「0」のままであるため(ステップS31でNO)、全てのノードA〜Fにおける同一フラグsameが「1」に再度設定され、通常フラグnrmlが「0」に再度設定される(ステップS32)。これにより、次にバスリセットが発生した場合に、バスリセット前後でノードIDが変更されないように各ノードA〜Fが動作される。
以上説明したように、図10に示すネットワークシステムにノードE,Fが追加された場合には、ノードA,Bはバスリセット前と同じノードIDに設定され、一部のノードC,DのノードIDがバスリセット前後で変更される。このバスリセット前後でノードIDが変更されたノードC,Dと新たに追加されたノードE,Fとからは、same=0のセルフIDパケットSPが送信される(図8のステップS41でNO)。このため、各ノードA〜Fは、same=0のセルフIDパケットSPを送信したノードC〜Fに対してのみ機器情報の取得や機器情報の確認を行う(ステップS42)。その後、通信の確立処理が完了すると(ステップS43)、データ通信が再開される(ステップS44)。
このように、新たなノードE,Fが追加された場合であっても、その追加されたノードE,Fとバスリセット前後でノードIDが変更されたノードC,Dに対してのみ、機器情報の認識処理を実行すれば良いため、データ通信を再開するまでの遅延を最小限に抑えることができる。すなわち、バスリセット前後におけるノードIDの変更が減少され、バスリセット後の機器情報の認識処理が減少されるため、バスリセット後のデータ通信を迅速に再開させることができる。
次に、図10に示すネットワークシステムにノードGが追加された場合の動作について図12を併せ参照して説明する。具体的には、図1に示すIPC10を備えるノードGのポート回路20aがノードDのポート回路20bに新たに接続された場合の動作を説明する。
ノードGの追加によってバスリセットが発生され、バスのコンフィグレーションが開始されると(図6のステップS2)、一部のパラメータが所定値に設定され(ステップS3)、任意のノード(ここでは、ノードC)がルートノードに決定される。その後、各ノードのノードIDの設定が開始される。
図12に示すように、はじめにグラント信号を受信した葉のノード(ここでは、ノードA)からセルフIDパケットSPの送信が実行される。このノードAでは、他ノードからセルフIDパケットSPを受信していないため、同一フラグsameが「1」のままである(図6のステップS7でNO)。このため、第2識別番号ID2(=3)が物理ID番号PIDとしてパケット生成部37に出力される(ステップS20)。そして、図12に示すように、バスリセット前のノードIDと同じ物理ID番号PID(=3)と、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とを含むセルフIDパケットSPがノードAからブロードキャスト送信される。これにより、ノードAのノードIDがバスリセット前と同じ「3」に確定される。
このセルフIDパケットSPを受信するノードB〜D,Gの制御部42は、ステップS10〜S15の処理を実行する。これにより、ノードB〜D,GにおけるセルフIDカウント値Qが「1」になる。
続いて、次の順番のノードBにおいてノードIDの設定が実行される。このノードBでもノードAと同様に、同一フラグsameが「1」であるため、第2識別番号ID2(=2)が物理ID番号PIDとしてパケット生成部37に出力される。そして、図12に示すように、この物理ID番号PID(=2)と、同一フラグsame(=1)の情報を含むセルフIDパケットSPがノードBからブロードキャスト送信される。これにより、ノードBのノードIDがバスリセット前と同じ「2」に確定される。
このセルフIDパケットSPを受信するノードC,D,Gの制御部42は、ステップS10〜S15の処理を実行する。これにより、ノードC,D,GにおけるセルフIDカウント値Qが「2」になる。
続いて、次の順番のノードG(追加されたノード)においてセルフIDパケットSPの送信が実行される。この時のノードGでは、同一フラグsameが初期値の「0」であり(図6のステップS7でYES)、通常フラグnrmlが初期値の「1」である(ステップS8でYES)。このため、現在のセルフIDカウント値Q(=2)が第2識別番号ID2に設定されるとともに、セルフIDカウント値Qが物理ID番号PIDとしてパケット生成部37に出力される(ステップS9)。そして、図12に示すように、この物理ID番号PID(=2)と同一フラグsame(=0)の情報を含むセルフIDパケットSPがノードGからブロードキャスト送信される。これにより、ノードGのノードIDが「2」に確定される。
このセルフIDパケットSPを受信するノードBの制御部42は、図7に示すステップS10〜S12の処理を実行する。このとき、第1識別番号ID1(=2)と自ノードBの第2識別番号ID2(=2)とが一致するため(ステップS12でYES)、ノードBの制御部42は、同一フラグsameを「0」に設定する(ステップS17)。続いて、ノードIDが設定済みのノードBでは、送信完了フラグTXEが「1」であるため(ステップS18でYES)、バスリセットフラグBRが「1」に設定されるとともに、通常フラグnrmlが「1」に設定される(ステップS19)。
その後、残りのノードD,Cでは、自身のセルフIDパケットSPを送信する前までに、第2識別番号ID2と一致する第1識別番号ID1を受信しないため、第2識別番号ID2が自身のノードIDに設定される。すなわち、図12に示すように、バスリセット前のノードIDと同じ物理ID番号PIDと、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とを含むセルフIDパケットSPがブロードキャスト送信される。これにより、ノードDのノードIDが「0」に確定され、最後にルートノードCのノードIDが「1」に確定される。
このようにして、全てのノードA〜D,GのノードIDが自動的に設定される。しかし、このときノードBとノードGとで同一のノードID(=2)が設定されている。すなわち、ノードA〜D,Gを有するネットワークシステム内では、「2」のノードIDが2つ存在している。このため、このようなネットワークシステムでは、正常なデータ通信を行うことができない。
そこで、本実施形態のIPC10では、同一のノードIDが重複して設定された場合に、コンフィグレーションを再度実行するようにした。具体的には、IPC10(制御部42)では、自身のセルフIDパケットSPを送信した後に、第1識別番号ID1と自身の第3識別番号ID3とが一致した場合に(図7のステップS12→S17→S18→S19)、コンフィグレーションを実行するようにした。すなわち、上述のように全てのノードA〜D,GのノードIDが設定された後(図6のステップS4でYES)、ノードBにおけるバスリセットフラグBRがステップS19で「1」に設定されているため(ステップS31でYES)、バスリセット要求信号BRrが「1」に設定され、第2識別番号ID2が「3FH」に設定される(ステップS33)。このバスリセット要求信号BRrがアービトレーション制御部32に出力されることにより、ノードBからバスリセットが発生されコンフィグレーションが実行される。このコンフィグレーションにおいて、バスリセットを起したノードBでは、従来と同様に、セルフIDカウント値QによってノードIDが設定される。一方、その他のノードA,C,D,Gでは、このコンフィグレーションが開始される前において、バスリセットフラグBRが「0」であるため(ステップS31でNO)、同一フラグsameが「1」に設定され、通常フラグnrmlが「0」に設定される(ステップS32)。このため、これらノードA,D,C,Gでは、バスリセット前後でノードIDが変更されないようにノードIDが設定される。以下、このときのノードIDの設定処理を説明する。
上述のようにコンフィグレーションが開始されると(図6のステップS2)、一部のパラメータが所定値に設定され(ステップS3)、任意のノード(ここでは、ノードC)がルートノードに決定される。その後、各ノードのノードIDの設定が開始される。
図13に示すように、はじめにグラント信号を受信した葉のノード(ここでは、ノードA)からセルフIDパケットSPの送信が実行される。このノードAでは、他ノードからセルフIDパケットSPを受信していないため、同一フラグsameが「1」のままである(図6のステップS7でNO)。このため、第2識別番号ID2(=3)が物理ID番号PIDとしてパケット生成部37に出力される(ステップS20)。そして、図13に示すように、バスリセット前のノードIDと同じ物理ID番号PID(=3)と、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とを含むセルフIDパケットSPがノードAからブロードキャスト送信される。これにより、ノードAのノードIDがバスリセット前と同じ「3」に確定される。
このセルフIDパケットSPを受信するノードB〜D,Gの制御部42は、ステップS10〜S15の処理を実行する。これにより、ノードB〜D,GにおけるセルフIDカウント値Qが「1」になる。
続いて、次の順番のノードBにおいてノードIDの設定が実行される。このノードBでは、同一フラグsameが「0」であり(ステップS7でYES)、通常フラグnrmlが「1」である(ステップS8でYES)。このため、現在のセルフIDカウント値Q(=1)が第2識別番号ID2に設定されるとともに、セルフIDカウント値Qが物理ID番号PIDとしてパケット生成部37に出力される(ステップS9)。そして、図13に示すように、この物理ID番号PID(=1)と、同一フラグsame(=0)の情報を含むセルフIDパケットSPがノードBからブロードキャスト送信される。これにより、ノードBのノードIDが「1」に確定される。
このセルフIDパケットSPを受信するノードCの制御部42は、図7に示すステップS10〜S12,S17,S18の処理を実行する。すなわち、ノードCの制御部42は、上記セルフIDパケットSPから抽出した第1識別番号ID1(=1)と自身の第2識別番号ID2(=1)が一致するため(ステップS12でYES)、同一フラグsameを「0」に設定する(ステップS17)。その後、その制御部42は、ステップS14,S15の処理を実行する。一方、ノードIDが未設定のノードD,GはステップS10〜S15の処理を実行し、ノードIDが設定済みのノードA,BはステップS10〜S13の処理を実行する。
その後、ノードG,Dでは、自身のセルフIDパケットSPを送信する前までに、第2識別番号ID2と一致する第1識別番号ID1を受信しないため、第2識別番号ID2が自身のノードIDに設定される。すなわち、図13に示すように、バスリセット前のノードIDと同じ物理ID番号PIDと、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とを含むセルフIDパケットSPがブロードキャスト送信される。これにより、ノードGのノードIDが「2」に確定され、ノードDのノードIDが「0」に確定される。
最後に、ルートノードCにおいてノードIDの設定が実行される。このノードCの制御部42では、上記ステップS17で同一フラグsameが「0」に設定され(ステップS7でYES)、通常フラグnrmlが「0」に設定されている(ステップS8でNO)。このため、識別番号生成部40からは第3識別番号ID3(=5)が物理ID番号PIDとしてパケット生成部37に出力される(ステップS21)。また、このときレジスタ46からは「0」である同一フラグsameがパケット生成部37に出力される。そして、図13に示すように、バスリセット前のノードIDから変更された物理ID番号PID(=5)と、バスリセット前後でノードIDが変更されたことを示す情報(same=0)とがセルフIDパケットSPによって他のノードA,B,D,Gに通知される。これにより、ルートノードCのノードIDが「5」に確定される。
このように、コンフィグレーションが再度実行されると、各ノードA〜D,GのノードIDが重複しないように設定されるため、ノードIDの重複が解消される。なお、仮にコンフィグレーション前とルートノードが変更された場合であっても同様に、各ノードA〜D,GのノードIDが重複しないように設定されるため、ノードIDの重複が解消される。これにより、正常なデータ通信が可能となる。
以上説明した本実施形態によれば、以下の効果を奏することができる。
(1)他ノードから受信したセルフIDパケットSP内のノードID、つまり第1識別番号ID1と自身の直前のノードIDである第2識別番号ID2とが一致しなければ、第2識別番号ID2を自身のノードIDとして設定するようにした。さらに、その自身のノードIDとして設定する第2識別番号ID2と、ノードIDが未変更であることを示す情報(same=1)とを他のノードに通知するようにした。これにより、例えばノイズ等によってバスリセットが発生する場合であっても、そのバスリセット前と同じノードIDを自身のノードIDとして設定することができる。さらに、same=1のセルフIDパケットSPを受信した他のノードでは、送信元のノードのノードIDが変更されていないことを判別することができる。このため、各ノード間で機器情報の取得・確認処理を省略することができ、バスリセット後にデータ通信を即座に再開することができる。
さらに、このとき、想定されるノイズ期間に相当する容量のバッファを各ノードに用意することによって、バスリセット前に転送中のデータ通信(例えば映像や音声データ)をバスリセット前後で途切れることなく継続することができる。これにより、ノイズ耐性をより向上させることができる。
(2)また、自身のセルフIDパケットSPを送信する前までに、第1識別番号ID1と第2識別番号ID2とが一致した場合には、その時の第2識別番号ID2とは異なる第3識別番号ID3を自身のノードIDとして設定するようにした。このため、例えばネットワークシステムにノードが追加された場合に、自身のノードID設定前に、自身の第2識別番号ID2と同一のノードIDが他のノードに設定されたとしても、そのノードIDとは別のノードIDを自身に設定することができる。これにより、重複したノードIDが設定されることを好適に抑制することができる。さらに、この場合には、ノードIDの変更されたノードと追加されたノードとに対してのみ機器情報の取得・確認処理を実行すればよいため、バスリセット後からデータ通信の再開までの遅延を最小限に抑えることができる。
(3)さらに、自身のセルフIDパケットSPを送信した後に、第1識別番号ID1と第2識別番号ID2とが一致した場合には、バスリセットフラグBRを「1」に設定することにより(ステップS19)、コンフィグレーションを実行するようにした。さらに、そのコンフィグレーションでは、従来と同様に、セルフIDカウント値QによってノードIDを設定するようにした。これにより、仮に一つのネットワークシステム内で同一のノードIDが重複して設定された場合であっても、バスが初期化され、ノードIDが再設定されるため、そのノードIDの重複を解消することができる。
(4)第1識別番号ID1と第2識別番号ID2とが一致しない場合に、バスリセット前後でノードIDを変更しないようにしたが、各ノード(又は任意のノード)のノードIDを固定しているわけではない。このため、各ノードのノードIDは、各ノードの物理層(ポート回路20a,20b及び物理層制御回路30)によって自動的に割り当てられる。したがって、ノードIDの管理などをユーザが行う必要がなく、プラグアンドプレイ機能を備えたネットワークシステムを実現することができる。
(5)また、各ノードの物理層のみによってノードIDの設定を行うことができる。すなわち、各ノードのリンク層やアプリケーション層はノードIDの設定に関与しない。このため、アプリケーション層が動作しない装置では、物理層のみを動作させればノードIDの設定を行うことができるため、低消費電力化することができる。
(6)ノードIDが変更されていないことを示す情報(same=1)を他のノードに通知するようにしたため、各ノードは、その情報を取得することにより、ノードIDの変化の有無を判別することができる。このため、ノードIDの変化の有無を判別するために、全てのノードの機器情報とノードIDとを対応付けたテーブルなどを用意したり、マネージャとなるノードが全てのノードのノードIDの情報を管理したりする必要がない。したがって、ノードIDの変化の有無を判別するために、大きな容量の記憶装置を持つ必要がない。
(7)ノードIDの変更の有無を示す情報、つまり同一フラグsameを、セルフIDパケットSPを利用して転送するようにした。これにより、既存の規格に存在しない全く新しいパケットを追加することなく、同一フラグsameを他のノードに通知することができる。
(8)第1識別番号ID1と第3識別番号ID3とが一致した場合に、第3識別番号ID3の値をインクリメントするようにした。これにより、複数のノードにおいてノードIDが変更される場合であっても、ノードIDが重複して設定されることを好適に抑制することができる。
(第2実施形態)
以下、第2実施形態について、図14〜16に従って説明する。この実施形態のネットワークシステムでは、図1に示すIPC10を備えるノードと既存のIPC10aを備えるノードとがトポロジを構築する点が上記第1実施形態と異なっている。以下、第1実施形態との相違点を中心に説明する。
まず、所定の規格(例えば、IEEE1394規格)に準拠したネットワークシステムを図15に従って説明する。ノードA1にはバスケーブル1aを介してノードBが接続され、そのノードBにはバスケーブル1bを介してノードCが接続され、そのノードCにはバスケーブル1cを介してノードDが接続されている。
ノードB〜Dは、上記第1実施形態と同様に、図1に示すIPC10を備えている。一方、ノードA1は、既存(従来)のIEEE1394プロトコルコントローラ(IPC)10aを備えている。以下に、このIPC10aの内部構成例を説明する。
図14に示すように、IPC10aは、セルフIDパケット生成部(パケット生成部)37a及び識別番号生成部60が異なること以外は上記IPC10と同様の構成であるため、その他の構成は説明を省略する。
物理層制御回路30aの識別番号生成部60は、制御部61と、レジスタ62とを備えている。制御部61には、アービトレーション制御部32から送信許可信号TXと受信信号RXとが入力される。この制御部61は、他ノードからセルフIDパケットSPを受信したことを示す受信信号RXを受信するたびにセルフIDカウント値Qをインクリメントし、そのセルフIDカウント値Qをレジスタ62に格納する。また、制御部61は、自身のセルフIDパケットSPの送信が許可されたことを示す送信許可信号TXを受信すると、レジスタ62に記憶されているセルフIDカウント値Qを物理ID番号PIDとしてパケット生成部37aに出力させる。
パケット生成部37aは、図16に示すデータフォーマットを有するセルフIDパケットSPaを生成する。具体的には、パケット生成部37aは、自ノードA1が有するポート回路が3つ以下の場合には、先頭パケットSPa1のみを有するセルフIDパケットSPaを生成する。また、パケット生成部37aは、自ノードA1が有するポート回路が4つ以上の場合には、上記先頭パケットSPa1と併せて、ポート回路の数に応じて連結パケットSPa2,SPa3とを有するセルフIDパケットSPaを生成する。さらに、パケット生成部37aは、識別番号生成部60で生成される物理ID番号PIDをphy_IDフィールドに格納してセルフIDパケットSPaを生成する。なお、このセルフIDパケットSPaには、sameフィールドは存在せず、対応する領域には「0」のreservedビットの格納されたrsvフィールドが設けられている。
次に、このように既存のIPC10aを備えるノードA1が混在するネットワークシステムの動作を図6〜8及び図17を参照して説明する。
今、図17(a)に示すノードA1,B〜Dの電源が投入されると(power_reset)、バスのコンフィグレーション(バス初期化→ツリー識別→自己識別)が開始される(図6のステップS2)。詳述すると、まず、バス初期化フェーズにおいてバスリセットが発生され、ツリー識別フェーズにおいて図17(a)に示すツリー状のトポロジが形成され、電源投入順序や接続形態などに応じて任意のノードがルートノードに決定される。ここでは、ノードA1がルートノードに決定される。その後、自己識別フェーズにおいて各ノードA1,B〜DのノードIDが自動的に割り当てられる。このとき、リセット(power_reset)後の最初のバスのコンフィグレーションであるため、ノードB〜Dにおいても従来と同様のシーケンスによってノードIDが設定される。このため、図17(a)に示すように、ノードD,C,B,A1の順番でノードIDが「0」、「1」、「2」、「3」と設定される。
次に、ノイズなどに起因してバスリセットが発生した場合の動作を説明する。
例えばノードB,C間を接続するバスケーブル1bに静電気などのノイズが乗って、ノードB,C間で同期喪失が検出されると、バスリセットが発生され、バスのコンフィグレーションが開始される。詳述すると、上記バスリセット後のツリー識別フェーズにおいて図17(b)に示すツリー状のトポロジが形成され、電源投入順序や接続形態などに応じて任意のノード(ここでは、ノードB)がルートノードに決定される。すなわち、本動作例では、トポロジの接続形態はバスリセット前(図17(a)参照)と同じであるが、ルートノードがノードA1からノードBに変わっている。そして、その後の自己識別フェーズにおいて各ノードA1,B〜DのノードIDが自動的に割り当てられる。以下に、このノードIDの設定処理について詳述する。
図17(b)に示すように、はじめにグラント信号を受信した葉のノードA1からノードIDの設定(セルフIDパケットSPaの送信)が実行される。このとき、ノードA1では、現在のセルフIDカウント値Q(=0)が物理ID番号PIDとしてパケット生成部37aに出力される。そして、この物理ID番号PID(=0)を含むセルフIDパケットSPaがノードA1からブロードキャスト送信される。これにより、ノードA1のノードIDが「0」に確定される。
このセルフIDパケットSPaを受信したノードDの制御部42は、装置数Devをインクリメントし(図7のステップS11)、上記セルフIDパケットSPaから抽出した第1識別番号ID1(=0)と自身の第2識別番号ID2(=0)が一致するか否かを判定する(ステップS12)。ここでは、両者が一致するため(ステップS12でYES)、制御部42は、同一フラグsameを「0」に設定する(ステップS17)。続いて、制御部42は、送信完了フラグTXEが「0」であり(ステップS18でNO)、第3識別番号ID3(=4)と第1識別番号ID1(=1)とが不一致であるため(ステップS14でNO)、セルフIDカウント値QをインクリメントしてステップS4に戻る。一方、他のノードB,Cは、ステップS10〜S15の処理を実行する。これにより、ノードB〜DにおけるセルフIDカウント値Qが「2」になる(ステップS15)。
続いて、次の順番のノードDにおいてノードIDの設定が実行される。このノードDの制御部42では、上記ステップS17で同一フラグsameが「0」に設定され(ステップS7でYES)、通常フラグnrmlが「0」に設定されている(ステップS8でNO)。このため、識別番号生成部40からは第3識別番号ID3(=4)が物理ID番号PIDとしてパケット生成部37に出力される(ステップS21)。また、このときレジスタ46からは「0」である同一フラグsameがパケット生成部37に出力される。そして、図17(b)に示すように、バスリセット前のノードIDと異なる物理ID番号PID(=4)と、バスリセット前後でノードIDが変更されたことを示す情報(same=0)とがセルフIDパケットSPによって他のノードA1,B,Cに通知される。これにより、ノードDのノードIDが「4」に確定される。
その後、残りのノードC,Bでは、自身のセルフIDパケットSPを送信する前までに、第2識別番号ID2と一致する第1識別番号ID1を受信しないため、第2識別番号ID2が自身のノードIDに設定される。すなわち、図17(b)に示すように、バスリセット前のノードIDと同じノードIDと、バスリセット前後でノードIDが変更されていないことを示す情報(same=1)とがセルフIDパケットSPによって他のノードに通知される。これにより、ノードBのノードIDがバスリセット前と同じ「2」に確定され、最後にルートノードAのノードIDがバスリセット前と同じ「3」に確定される。
以上説明したように、ノードB,CのノードIDはバスリセット前と同じノードIDに設定され、一部のノードDと既存のIPC10aを備えるノードA1のノードIDがバスリセット前後で変更される。このバスリセット前後でノードIDが変更されたノードDからはsame=0のセルフIDパケットSPが送信され、ノードA1からはsameフィールドを有さないセルフIDパケットSPaが送信される(図8のステップS41でNO)。このため、各ノードA1,B〜Dは、上記ノードA1,Dに対してのみ機器情報の取得や機器情報の確認を行う(ステップS42)。その後、通信の確立処理が完了すると(ステップS43)、データ通信が再開される(ステップS44)。
このように、既存のノードA1とトポロジを構築する場合であっても、その既存のノードA1とバスリセット前後でノードIDが変更されたノードDに対してのみ、機器情報の認識処理を実行すれば良いため、データ通信を再開するまでの遅延を最小限に抑えることができる。
以上説明した実施形態から、図1に示すIPC10を備えることにより、第1実施形態の(1)〜(8)の効果に加えて以下の効果を奏することができると言える。
(9)自身のセルフIDパケットSPを送信する前までに、第1識別番号ID1と第2識別番号ID2とが一致した場合には、その時の第2識別番号ID2とは異なる第3識別番号ID3を自身のノードIDとして設定するようにした。このため、例えばネットワークシステム内に既存のノードA1が混在する場合に、そのノードA1が自身の第2識別番号ID2と同一のノードIDを設定した場合であっても、そのノードIDとは別のノードIDを自身に設定することができる。これにより、ネットワーク内に既存のノードA1が混在する場合であっても、重複したノードIDが設定されることを好適に抑制することができ、各ノードのノードIDを支障なく自動的に割り当てることができる。さらに、この場合には、ノードIDの変更されたノードと既存のノードとに対してのみ機器情報の取得・確認処理を実行すればよいため、バスリセット後からデータ通信の再開までの遅延を最小限に抑えることができる。
(10)パケット生成部37で生成されるセルフIDパケットSPは、既存のセルフIDパケットSPaのrsvフィールドの一部をsameフィールドに置換しているが、そのデータフォーマットは既存のセルフIDパケットSPaのそれと略同一である。このため、そのセルフIDパケットSPを受信するノードが既存のIPC10aしか備えていなくとも、そのノードとの間で支障なくセルフIDパケットSPの転送を行うことができる。
(他の実施形態)
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
・上記各実施形態では、直前のトポロジにおけるノードの総数を示す装置数Devを第3識別番号ID3に設定したが、他のノードに設定されたノードIDと重複しない値であれば特に制限されない。例えばノードIDの最大値(=62)を第3識別番号ID3に設定するようにしてもよい。この場合には、ステップS16の処理は、第3識別番号ID3の値をデクリメントする処理に変更する。また、この場合には、ステップS11(図7参照)の処理を省略してもよい。
・上記各実施形態におけるステップS14,S16(図7参照)の処理を省略してもよい。
・上記各実施形態では、自身のセルフIDパケットSPを送信する前までに、第1識別番号ID1と自身の第2識別番号ID2とが一致した場合に、第2識別番号ID2とは異なる第3識別番号ID3を自身のノードIDに設定するようにした。これに限らず、例えば自身のセルフIDパケットSPを送信する前までに、第1識別番号ID1と自身の第2識別番号ID2とが一致した場合に、リセット時と同様のコンフィグレーションを実行するようにしてもよい。
・上記各実施形態における識別番号生成部40の内部構成は図1の回路に限定されない。
・上記各実施形態における同一フラグsameの情報を、セルフIDパケットSPとは別のパケットによって他のノードに通知するようにしてもよい。
・上記各実施形態では、1つのIPC10に2つのポート回路20a,20bを設けるようにしたが、ポート回路を3つ以上設けるようにしてもよい。
・上記各実施形態におけるネットワーク内のノード数に特に制限はない。
・上記実施形態では、ノードA〜GをIEEE1394規格に準拠した装置に具体化したが、これに限らず、例えばIDB−1394規格やUSB規格に準拠した装置に具体化してもよい。