イーサネットPHYのオートネゴシエーションとデバッグの経験に関する深い理解

最近、あるphyチップを調整して、メンタリティが爆発しましたが、とにかく良い結果が出ました。

オートネゴシエーションの基本原則

オートネゴシエーションモードでは、ポートは、他のエンドデバイスの接続速度とデュプレックスモード、つまり、回線の両端が持つことができる最速の速度とデュプレックスモードに応じて、その速度を最高のパブリックレベルに自動的に調整します。

オートネゴシエーション機能により、ネットワークデバイスは、サポートする動作モードに関する情報をネットワーク上のピアに送信し、ピアが送信する可能性のある対応する情報を受け入れることができます。これにより、デュプレックスおよび10M / 100Mレートのオートネゴシエーションの問題が解決されます。 。オートネゴシエーション機能は、物理層チップ設計によって完全に実装されているため、専用のデータパケットを使用したり、高レベルのプロトコルオーバーヘッドをもたらしたりすることはありません。

自動ネゴシエーション機能の基本的なメカニズムは次のとおりです。各ネットワークデバイスは、電源がオンになったとき、管理コマンドが発行されたとき、またはユーザーが介入したときにFLP(Fast Connect Pulse)を送信し、ネゴシエーション情報はこれらのFLPにカプセル化されます。シーケンス。FLTにはクロック/デジタルシーケンスが含まれており、そこからこれらのデータを抽出することにより、ピアデバイスでサポートされている動作モードやハンドシェイクメカニズムのネゴシエーションに使用されるその他の情報を取得できます。デバイスがFLPに効果的に応答できず、NLP(Normal Connection Pulse)のみを返す場合、そのデバイスは10BASE-T互換デバイスと見なされます。高速リンクパルスFLPと通常のリンクパルスNLPはどちらも、シールドなしツイストペアケーブルでのみ使用され、光ファイバーメディアには適用できません。

オートネゴシエーションの内容には、主にデュプレックスモード、動作速度、フロー制御などが含まれます。ネゴシエーションが通過すると、リンクの両端のデバイスがこのような動作モードでロックされます。

電気ポートと光ポートのオートネゴシエーションの主な違いは、OSI内での位置です。電気ポートの場合、ネゴシエーションはリンク信号送信の前に行われます。光ポートの場合、自動ネゴシエーションメカニズムはPCSと同じ層にあります。つまり、ネゴシエーションを実行する前に、光ポートネゴシエーションは最初にリンク同期を確立する必要があります。

交渉プロセス

両端がオートネゴシエーションをサポートしている場合、両方が相手のFLPを受信し、FLP内の情報をデコードします。相手の接続能力を取得します。そして、オートネゴシエーションの反対側の能力レジスタ(オートネゴシエーションリンクパートナー能力レジスタ、PHY標準レジスタアドレス5)に、反対側のオートネゴシエーション能力の値を記録します。同時に、ステータスレジスタ(PHY標準レジスタアドレス1)のオートネゴシエーション完了ビット(bit5)を1に設定します。オートネゴシエーションが完了していない場合、このビットは常に0です。

次に、それぞれが自分と相手の最大接続容量に応じて最適な接続方法リンクを選択します。たとえば、両方のパーティが10Mと100Mの両方をサポートしている場合、レートは100Mに従って接続されます。両方のパーティが全二重と半二重の両方をサポートしている場合、接続は全二重です。

特定の接続が確立されると、FLPは送信を停止します。リンクが中断されるか、自動ネゴシエーションの再起動コマンドが取得されるまで、FLPは再送信されません。

ピアが自動ネゴシエーションをサポートできない場合でも接続を確保するために、並列検出と呼ばれるメカニズムが導入されています。一方の端で自動ネゴシエーションがオンになり、もう一方の端で自動ネゴシエーションがオフになる場合、接続の確立は並列検出機能に依存します。

並列検出メカニズムは次のとおりです。オートネゴシエーション機能を備えたデバイスポートで、FLPを受信できない場合、10Mリンクの特性信号または100Mリンクの特性信号があるかどうかを検出します。

デバイスが10Mデバイスであり、自動ネゴシエーションをサポートしていない場合、NLPと呼ばれる通常のリンクパルス(通常のリンクパルス)をリンクに送信します。NLPは、デバイスが所定の位置にあり、他の追加情報が含まれていないことを意味するだけです。NLPパルスを図に示します。

100Mデバイスであり、オートネゴシエーションをサポートしていない場合、データがない場合は常にリンク上で4B / 5Bコード化されたアイドルシンボルを送信します。

並列検出メカニズムがNLPを検出した場合、相手が10Mレートをサポートしていることを認識し、4B / 5Bコード化アイドルシンボルを検出した場合、相手が100Mレートをサポートしていることを認識します。ただし、相手が全二重およびフロー制御フレームをサポートしているかどうかは利用できません。したがって、この場合、相手側は半二重のみをサポートし、全二重をサポートせず、フロー制御フレームをサポートしないと見なされます。

上記の原則に基づいて、ピアが自動ネゴシエーションを開かない場合、自動ネゴシエーションを開くパーティは半二重モードのみをネゴシエートできます。

802.3プロトコルでは、並列検出によって接続が確立された後、PHYステータスレジスタ(PHY標準レジスタアドレス1)の自動ネゴシエーション完了ビット(ビット5)を1に設定する必要があると規定されていますが、実際の自動ネゴシエーション操作はリンクでは使用されません。同時に、セルフネゴシエーション完了ビットが1の場合、ローカルオートネゴシエーション機能レジスタ(PHY標準レジスタアドレス4)とピアオートネゴシエーション機能レジスタ(PHY標準レジスタアドレス5)が意味を持つことが規定されています。 。したがって、レジスタ5のデータを更新する必要があります。確立された接続が10Mの場合、レジスタ5の10M機能ビット(ビット5)は1に設定され、他のビットは0に設定されます。これは、反対側が10M半二重のみをサポートできることを示します。確立された接続が100Mの場合、レジスタ5の100M機能ビット(ビット7)は1に設定され、他のビットは0に設定されます。これは、反対側が100M半二重のみをサポートできることを示します。

ギガビット光ポートのオートネゴシエーション

ギガビット光ポートは、必須モードと自動ネゴシエーションの2つのモードで機能します。802.3仕様では、ギガビット光ポートは1000Mのレートのみをサポートし、全二重(Full)と半二重(Half)の2つの二重モードをサポートします。

オートネゴシエーションと必須の最も基本的な違いは、物理リンクが再確立されたときに送信されるコードストリームが異なることです。オートネゴシエーションモードは、構成コードストリームである/ C /コードを送信しますが、必須モードは送信します。 / I / code、つまりアイドルコードストリームを送信します。

ギガビット光ポートのオートネゴシエーションプロセス:

1.両端がオートネゴシエーションモードに設定されている

両者は/ C /コードストリームを相互に送信します。3つの同一の/ C /コードを継続的に受信し、受信したコードストリームがローカルエンドの動作モードと一致する場合、Ack応答で/ C /コードを返します。相手側Ackメッセージを受信した後、相手側は両者が通信できると考え、ポートをUP状態に設定します。

2.一方の端が自動ネゴシエーションに設定され、もう一方の端が必須に設定されている

オートネゴシエーションエンドは/ C / streamを送信し、強制エンドは/ I / streamを送信し、強制エンドはローカルエンドのネゴシエーション情報を相手側に提供することも、相手側にAck応答を返すこともできません。オートネゴシエーションの終了はDOWNです。ただし、強制側自体は/ C /コードを認識でき、反対側はそれ自体と一致するポートであると見なすため、ローカルポートを直接UP状態に設定します。

3.両端が必須モードに設定されている

両者は/ I / codeストリームを相互に送信し、一方の端は/ I / codeストリームを受信し、もう一方の端はそれ自体と一致するポートであると考え、ローカルポートを直接UPに設定します。

高速リンクパルス(FLP)および通常リンクパルス(NLP)

オートネゴシエーションの実装は、FLPを介して実現されます。NLPは、周期が約16ms、パルス幅が100ns(10base-T)および10ns(100base-TX)のパルスです。FLPはNLPに似ており、オートネゴシエーション用の16ビットリンクコードワードを送信するために使用される連続17-33パルスです。コード幅は125usです。125usコード幅の中央には、1としてパルスがあります。 、およびパルスは0ではありません。リンクコードワードはイーサネット通信ノードの有効なデータではありませんが、PHYインターフェイスモジュールによってのみ認識されます。

セルフネゴシエーションの基本ページ情報

リンクが初期化されると、オートネゴシエーションプロトコルは16ビットメッセージを反対側に送信します。これはいわゆるパルス信号であり、反対側から同様のメッセージを受信します。この16ビットメッセージは私たちが異なる基本ページを呼び出すデバイスは、基本ページの単語位置情報を実行するときに、どの状況に属するかを識別できます。

Bit0〜4:802.3規格のオートネゴシエーションデータフレームを「10000」に設定したことを示します。

ビット5〜12:ノード(ポート)の情報パフォーマンスドメインを示します。

ビット5〜9:ポートの接続可能なタイプを次のように優先度に従って高から低に定義します(SETBITは有効です)。

ビット8:100base-TX全二重;ビット9:100base-T4;ビット7:100base-TX半二重;ビット6:10base-T全二重;ビット5:10base-T半二重;

ビット10:フロー制御情報を示します:0:フロー制御が無効です。1:フロー制御が有効です。これは、ポートでの後続の通信のためのPAUSEフレームがあるかどうかを判別します。

bit11:全二重接続中の非対称一時停止メカニズムをサポートします。

bit12:拡張された次のページ情報ページ。ギガビットポートにのみ使用されます。

ビット13:リモート障害表示。

bit14:ハンドシェイク信号Ack、3つの連続した同一のFLPが受信されると、このビットは1に設定されます。

bit15:次のページの基本的なページ情報があるかどうかを示します。次のページの情報は、自動ネゴシエーションプロセス中に接続されたノードに関する追加情報を送信するために使用されます。

PAUSEフレーム(フロー制御)

なぜフロー制御が必要なのですか?現在のネットワークには10Mと100MのEtherがあるため、10mのEtherと100mのEtherが共存すると、この回線速度の不一致が発生する可能性があります。このとき、スイッチの1つのポートを通過するトラフィックが大きすぎると、処理能力がを使用すると、ポートの輻輳が発生します。輻輳が発生すると、パケット損失、再送信、遅延などが発生します。フロー制御の役割は、輻輳が発生した場合のフレーム損失を防ぐことです。
ここでのフロー制御は、最も一般的に使用される方法であるPAUSEフレームです。
  半二重モードでは、衝突をシミュレートし、情報ソースの送信速度を遅くする背圧技術によってフロー制御が実現されます。
  全二重モードでのフロー制御は、通常、IEEE802.3X標準に準拠しています。64バイトのPAUSEフレームを使用して制御し、予約済みのマルチキャストアドレス01-80-C2-00-00-01を使用して送信ステーションに送信します。フレームを受信すると、送信ステーションは送信を一時停止または停止します。このアドレスのデータはブリッジやスイッチによって転送されないため、PAUSEフレームは追加情報を生成しません。
  PAUSE機能の適用シナリオ:
  ->一対の端末(単純な2点ネットワーク)
  ->スイッチと端末
   ->スイッチとスイッチ間のリンク
  PAUSE機能は、主に一時的なトラフィックの過負荷によるバッファを防ぐために増加しますオーバーフローイーサネットフレームの破棄を引き起こします。
  PAUSE機能では、次の問題を解決できません。-
  >安定したネットワーク輻輳
  ->エンドツーエンドのフロー制御
  ->単純な「ストップスタート」よりも複雑なメカニズム

イーサネットポートの電気ポートの動作モードの簡単な紹介

1.1。イーサネットポートの両端の動作モード(10M半二重、10M全二重、100M半二重、100M全二重、自動ネゴシエーション)を一貫して設定する必要があります。

2.2。一方の端が固定モード(10Mまたは100Mに関係なく)で、もう一方の端が自動ネゴシエーションモードの場合、ネゴシエーションが成功しても、自動ネゴシエーションの端は半二重モードでのみ機能します。

3.3。一方の端が全二重モードで動作していて、もう一方の端が半二重モードで動作している場合(自動ネゴシエーションからの半二重を含む、同じことが処理されます)、Pingは正常であり、トラフィックは少なく、トラフィックは約15%に達します。15%を超えると、競合やパッケージの誤りが発生し、最終的には作業パフォーマンスに影響します。

4.4。両端の動作モードはオートネゴシエーションであり、最終的なネゴシエーション結果は「両端でサポートされている動作モードの中で最も優先度の高いもの」です。

5.5。エンドAの自動ネゴシエーションの場合、エンドBは100M全二重に設定され、Aが100M半二重にネゴシエートした後、強制的にBを10M全二重に変更すると、エンドAはすぐに10M半二重にネゴシエートします。 -ネゴシエーション、B側が10M全二重に設定され、Aが10M半二重にネゴシエートし、Bを100M全二重に変更するように強制すると、ネゴシエーションは失敗し、接続は失敗します。このとき、ネットワークケーブルを抜き差しすると、100M半二重で再ネゴシエートされます。

提案する

イーサネットポートの両端の動作モードは、一貫性を保つように設定する必要があります。そうしないと、流量が遅くなるという問題が発生します。ほとんどのデバイスのイーサネットポートのデフォルトの出荷時設定は自動ネゴシエーションです。両端がオートネゴシエーションでネゴシエーションが成功してもネットワークが接続されていない場合は、ネットワークケーブルが100Mに対応しているか確認してください。両端が自動ネゴシエーションの場合、ネゴシエーションは成功し、全二重で実行されます。リンクダウンなしで、一方の端を「すぐに」固定の「10M / 100M全二重」に設定すると、両端は引き続き全二重で機能します。ただし、将来、ネットワークケーブルが接続または切断されたときなどの理由でリンクが再接続された場合、「一方の端が全二重、もう一方の端が半二重」という不安定な接続が再ネゴシエートされます。したがって、この状況は回避する必要があります。

感触

phyチップは基本的に速度と関係があります。ボードが1000Mbpsまたは10Gbpsのネットワーク速度に到達できるが、データを送信する場合、公称ネットワーク速度に到達せず、深刻なパケット損失が発生します。コードロジックはそうではありません問題は基本的にphyの問題です。

再度phyを調整したところ、ネットワークケーブルを抜き差しすることで公称ネットワーク速度に戻れる状況が発生したため、phy設定の一部が行われていない可能性があることを考慮し、マニュアルを確認したところ、 phyはハードリセットとソフトリセットが必要です。


その後、別のボードに切り替えたところ、当時のボードのハードウェア回路設計に問題がある可能性が高いことがわかりました。同じコードでも別のボードでは問題ありません。
追記:当時はAR8035チップが使用されていました。TIフォーラムでは、PHYチップのトレース長は2インチを超えてはならないと述べていました。そうしないと、速度が速すぎると不可解なパケット損失が発生します。定規を使って測定しました。直線。距離は約6cmで、実際のトレース長はこれより長くなる場合があります。ハハハ

おすすめ

転載: blog.csdn.net/weixin_44076906/article/details/108283575