目次
前回の記事「STM32ネットワークのSMIインターフェース」では、STM32ネットワークコントローラーのSMIインターフェースを紹介しました。SMIインターフェースは、主に外部PHYチップとの通信やPHYレジスタの構成に使用されます。
実際のネットワーク通信のデータストリームは、SMIインターフェイスではなく、MIIインターフェイスまたはRMII通信を介して送信されます。
1.MIIインターフェース
Media Independent Interface(MII)は、10 Mbit / sおよび100Mbit / sのデータ転送速度でMACサブレイヤーとPHYの間の相互接続を定義します。
ピン定義の紹介:
-
MII_TX_CLK:連続クロック信号。この信号は、TXデータ送信の基準タイミングを提供します。公称周波数は、10 Mbit / sの速度で2.5MHz、100 Mbit / sの速度で25MHzです。
-
MII_TXD [3:0]:データ送信信号。この信号は、MACサブレイヤーによって同期的に駆動される4つのデータ信号のグループであり、MII_TX_EN信号が有効な場合に有効な信号(有効なデータ)になります。MII_TXD [0]は最下位ビットであり、MII_TXD [3]は最上位ビットです。MII_TX_ENが無効になっている場合、データの送信はPHYに影響を与えません。
-
MII_TX_EN:イネーブル信号を送信します。この信号は、MACが現在MIIにニブルを送信していることを示します。この信号は、ヘッダーの最初のニブル(MII_TX_CLK)と同期する必要があり、送信するすべてのニブルがMIIに送信されるときに同期する必要があります。
-
MII_RX_CLK:連続クロック信号。この信号は、RXデータ送信の基準タイミングを提供します。公称周波数は、10 Mbit / sの速度で2.5MHz、100 Mbit / sの速度で25MHzです。
-
MII_RXD [3:0]:データ受信信号。この信号は、PHYによって同期的に駆動される4つのデータ信号のグループであり、MII_RX_DV信号が有効な場合に有効な信号(有効なデータ)です。MII_RXD [0]は最下位ビットであり、MII_RXD [3]は最上位ビットです。MII_RX_DVが無効で、MII_RX_ERが有効な場合、特定のMII_RXD [3:0]値を使用して、PHYから特定の情報を送信します。
-
MII_RX_ER:エラー信号を受信します。この信号は、フレームのどこかでエラーが検出されたことをMACサブレイヤーに示すために、1サイクル以上(MII_RX_CLK)維持する必要があります。このエラー状態は、MII_RX_DVで確認する必要があります。
-
MII_RX_DV:データ有効信号を受信します。この信号は、PHYが現在MIIの回復およびデコードされたニブルを受信していることを示します。この信号は、リカバリフレームの最初のニブル(MII_RX_CLK)と同期する必要があり、リカバリフレームの最後のニブルと同期したままです。この信号は、最後のニブルに続く最初のクロックサイクルの前に無効にする必要があります。フレームを正しく受信するために、MII_RX_DV信号は、時間範囲で受信されるフレームをカバーする必要があり、その開始時刻は、SFDフィールドが表示される時刻より遅くてはなりません。
-
MII_CRS:キャリアセンス信号。送信媒体または受信媒体が非アイドル状態の場合、この信号はPHYによって有効になります。送信メディアと受信メディアがアイドル状態の場合、PHYはこの信号を禁止します。PHYは、MII_CS信号が競合条件下で有効なままであることを確認する必要があります。この信号は、TXおよびRXクロックと同期する必要はありません。全二重モードでは、この信号は無意味です。
-
MII_COL:衝突検出信号。メディアで競合を検出した後、PHYはすぐに競合検出信号を有効にする必要があり、競合状態がある限り、競合検出信号は有効なままである必要があります。この信号は、TXおよびRXクロックと同期する必要はありません。全二重モードでは、この信号は無意味です。
-
MDC:MDC信号はSMIインターフェースに属します。詳細については、「STM32ネットワークのSMIインターフェース」を参照してください。
-
MDIO:MDIO信号はSMIインターフェースに属します。詳細については、「STM32ネットワークのSMIインターフェース」を参照してください。
次の図TXインターフェイスの信号コーディング
次の図RXインターフェイスの信号コーディング
MIIインターフェイスのクロックソース
TX_CLKおよびRX_CLKクロック信号を生成するには、図に示すように、25MHzのクロックを外部PHYに提供する必要があります。このクロックを提供するために外部25MHz水晶振動子を使用することに加えて、この信号はSTM32F20xxマイクロコントローラーのMCOピンを介して出力することもできます。この場合、PLL周波数逓倍は、25MHzの外部水晶振動子を介してMCOピンで目的の周波数を取得するように構成する必要があります。
対応するコード
/* Enable GPIOs clocks */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
/* Enable SYSCFG clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Configure MCO (PA8) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */
RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);
2.RMIIインターフェース
縮小されたメディア非依存インターフェイス:RMII(洗練されたメディア非依存インターフェイス)。Quality Independent Interface(RMII)仕様の簡単な紹介により、マイクロコントローラーのイーサネットペリフェラルと外部PHY間のピン数が10/100 Mbit / sに削減されます。
IEEE 802.3u規格によると、MIIには16個のデータピンと制御信号ピンが含まれています。RMII仕様では、ピン数が7つに減っています(ピン数が62.5%減っています)。ピンの意味については、MIIインターフェイスを参照してください。
RMIIインターフェイスは、MACとPHYの間でインスタンス化されたオブジェクトです。これらは、MACのMIIインターフェイスをRMIIインターフェイスに変換するのに役立ちます。RMIIインターフェイスには次の特徴があります
-
10 Mbit / sおよび100Mbit / sの動作速度
-
基準クロックは50MHzでなければなりません
-
同じ基準クロックをMACおよび外部イーサネットPHYの外部に提供する必要があります
-
独立した2ビット幅(ダブルビット)の送信および受信データパスを提供します
ここでは、MIIインターフェイスよりもクロックピンが少なく、非常に重要な点があります。つまり、RMIIインターフェイスのクロックソースは50MHZである必要があります。
RMIIインターフェイスクロックソース
STM32F207xxコントローラーはMCOピンから50MHzのクロック信号を提供できます。もちろん、ユーザーはこのクロックを生成するようにPLLを構成する必要があります。
外部50MHzクロックを使用してPHYを駆動するか、組み込みPLLを使用して50MHz周波数信号を生成してPHYを駆動します。
3.2つのインターフェースの対応するピン
STM32F207VCT6(100ピン)チップ
Ethernet pins configuration
ETH_MDIO -------------------------> PA2 pin 25
ETH_MDC --------------------------> PC1 pin 16
ETH_PPS_OUT ----------------------> PB5 pin 91
ETH_MII_CRS ----------------------> PA0 pin 23
ETH_MII_COL ----------------------> PA3 pin 26
ETH_MII_RX_ER --------------------> PB10 pin 47
ETH_MII_RXD2 ---------------------> PB0 pin 35
ETH_MII_RXD3 ---------------------> PB1 pin 36
ETH_MII_TX_CLK -------------------> PC3 pin 18
ETH_MII_TXD2 ---------------------> PC2 pin 17
ETH_MII_TXD3 ---------------------> PB8 pin 95
ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1 pin 24
ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7 pin 32
ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4 pin 33
ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5 pin 34
ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PB11 pin 48
ETH_MII_TXD0/ETH_RMII_TXD0 -------> PB12 pin 51
ETH_MII_TXD1/ETH_RMII_TXD1 -------> PB13 pin 52
その中で、ETH_PPS_OUTピンはSTの公式デモによってシールドされており、MIIインターフェイスまたはRMIIインターフェイスに属していません。統計は以下に入力されません。
合計15のMIIインターフェイスとSMIインターフェイス、および合計17のピンがあります。(25MHzクロックを含むピンはありません)
RMIIには、合計7つのインターフェイスとSMIインターフェイス、合計9つのピンがあります。
私が自分で数えたMIIインターフェースとRMIIインターフェースに対応する上記のピンに加えて、STの担当者は、リファレンスマニュアルに次のように対応する図も示しています。
4.MIIとRMIIの選択
SYSCFG_PMCレジスタの23コンフィギュレーションビットMII_RMII_SEL(注:これはAFIO_MAPRレジスタであるF107とは異なります)を使用して、MIIまたはRMIIモードを選択します。イーサネットコントローラがリセットモードになるか、クロックが有効になる前に、アプリケーションプログラムはMII / RMIIモードを設定する必要があります。
対応するSTライブラリ関数は
//函数入参可选以下
//SYSCFG_ETH_MediaInterface_MII: MII mode selected
//SYSCFG_ETH_MediaInterface_RMII: RMII mode selected
void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
MII / RMII 内部クロック方式
次の図に示すように、MIIとRMII、および10および100 Mbit / sの動作に必要なクロック方式をサポートします。
上の図の赤いボックス:HCLKは25MHzより大きくなければならないことに注意してください。この問題は前の記事「STM32ネットワークのSMIインターフェイス」で説明されています。ここでも、この条件が満たされない場合、奇妙なことが発生する可能性があります。問題見つけるのは難しいです。
公式マニュアルには別の文章があります
ピンを節約するには、2つの入力クロック信号RMII_REF_CKとMII_RX_CLKを同じGPIOピンで多重化する必要があります。
この記事が掲載されているアルバム、STM32F207ネットワーク開発を表示するにはクリックしてください
公式アカウントに注意を払い、できるだけ早く記事の更新を受け取ります。