RGMII接口詳解

在以太網傳輸中,MAC層控制鏈路層發送和接收幀的數量,而物理層則負責將一個幀轉換為適合於在物理介質上傳輸的表示。

一、RGMII與GMII的區別

RGMII(Reduced Gigabit Media Independent Interface)是Gigabit Media Independent Interface(GMII)的一個縮減版,包含MII(Media Independent Interface)的減少版。相比於GMII,RGMII使用比GMII更少的引腳(12根CAT5電纜中僅需要4根),從而為Gigabit Ethernet的應用節省了板級布線的成本。RGMII可以替代GMII,以使交換機和路由器在物理層接口上實現更高的集成度,以便在交換機和路由器上節省價格和面積。

二、RGMII與GMII和MII的區別

MII,即媒體獨立接口(Media Independent Interface),是一個用於物理層(PHY)和MAC層之間的標準接口。它有四條同步時鐘信號,兩條數據交換信號(TXD和RXD)和四條控制信號(RXERR、COL、CRS和RXDV)。

GMII(Gigabit Media Independent Interface)是MII的一種擴展,為在千兆速率下的以太網提供了額外的信號

RGMII是GMII的一種縮減版,以適配電信號傳輸在板上的接口中。RGMI採用四條同步時鐘信號,與MII類似,但是使用RMII只需要兩根差分引腳,而不需要兩根雙向控制引腳。RGMII是一種在Gigabit Ethernet中用於連接MAC到PHY的標準接口,具有與GMII接口類似的功能和時序。由於RGMI所需的引腳數量較少,因此對收發器芯片的成本和設計難度都有所降低。

三、RGMII的時鐘和數據信號時序

RGMII始終使用MII信號的雙倍速時鐘,即50MHz。RGMII使用八個接口信號:tx_clk、txd[3:0]、tx_ctl、rx_clk、rxd[3:0],以及rx_ctl。各個信號的含義如下:

  • tx_clk:傳輸GPIO時鐘,由MAC提供。
  • txd[3:0]:四條傳輸數據線,從MAC到PHY。
  • tx_ctl:傳輸控制線,從MAC到PHY。
  • rx_clk:接收GPIO時鐘,由PHY提供。
  • rxd[3:0]:四條接收數據線,從PHY到MAC。
  • rx_ctl:接收控制線,由PHY提供。
   ┌──────────────────────┐
   │                      │
   │               A      │ Phy
   │                      │
   │       ▲              │
   │  tx_clk│───>|───▲───│ 
   │       ▼        │  │  
   │      txd[3:0]    │  │  
   │      tx_ctl            │  
   │                      │ MAC
   │       ▲       │  │  
   │  rx_clk│───|<───▼───│ 
   │       ▼              │  
   │      rxd[3:0]    │ 
   │      rx_ctl            │
   └──────────────────────┘

四、RGMII的使用實例

下面的示例代碼將RGMII接口與PHY和MAC連接在一起以支持以太網通信。

   /* Set up GPIO clocks */
   volatile unsigned int * CM_WKUP_GPIO1_CLKCTRL = (unsigned int *)0x44E004C4;
   *CM_WKUP_GPIO1_CLKCTRL = 0x02;
   while((*CM_WKUP_GPIO1_CLKCTRL & 0x03) != 0x02);

   /* Set up GPIO pins for RGMII */
   volatile unsigned int * CONTROL_PADCONF_MDI = (unsigned int *)0x44E107C4;
   *CONTROL_PADCONF_MDI = (0x08 << 16) | 0x100; // RGMII1_TX_EN
   volatile unsigned int * CONTROL_PADCONF_MDIO = (unsigned int *)0x44E107C8;
   *CONTROL_PADCONF_MDIO = (0x08 << 16) | 0x100; // RGMII1_TXD0
   volatile unsigned int * CONTROL_PADCONF_RGMII_RX_BYPASS = (unsigned int *)0x44E107CC;
   *CONTROL_PADCONF_RGMII_RX_BYPASS = (0x08 << 16) | 0x100; // RGMII1_TXD1
   volatile unsigned int * CONTROL_PADCONF_RGMII_RX_CTL = (unsigned int *)0x44E107D0;
   *CONTROL_PADCONF_RGMII_RX_CTL = (0x08 << 16) | 0x100; // RGMII1_RXD0
   volatile unsigned int * CONTROL_PADCONF_RGMII_RXD0 = (unsigned int *)0x44E107D4;
   *CONTROL_PADCONF_RGMII_RXD0 = (0x08 << 16) | 0x100; // RGMII1_RXD1
   volatile unsigned int * CONTROL_PADCONF_RGMII_RXD1 = (unsigned int *)0x44E107D8;
   *CONTROL_PADCONF_RGMII_RXD1 = (0x08 << 16) | 0x100; // RGMII1_RXD2
   volatile unsigned int * CONTROL_PADCONF_RGMII_RXD2 = (unsigned int *)0x44E107DC;
   *CONTROL_PADCONF_RGMII_RXD2 = (0x08 << 16) | 0x100; // RGMII1_RXD3
   volatile unsigned int * CONTROL_PADCONF_RGMII_RXD3 = (unsigned int *)0x44E107E0;
   *CONTROL_PADCONF_RGMII_RXD3 = (0x08 << 16) | 0x100; // RGMII1_RX_CLK

   /* Set up EGMII registers */
   volatile unsigned int * GMAC_CTRL = (unsigned int *)0x4A100050;
   *GMAC_CTRL &= ~(1 << 11); // Disable RX and TX
   volatile unsigned int * GMAC_STATUS = (unsigned int *)0x4A100054;
   volatile unsigned int * GMAC_SYM_CTRL = (unsigned int *)0x4A10001C;
   // Set up the GMAC and RGMII to match the board's configuration
   *GMAC_SYM_CTRL = (0x2 << 2) | 0x07;
   // Enable GMAC
   *GMAC_CTRL |= (1 << 11);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/159536.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-20 00:14
下一篇 2024-11-20 00:14

相關推薦

  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • Python接口自動化測試

    本文將從如下多個方面對Python編寫接口自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 接口自動化測試是軟件測試中的一種自動化測試方式。通…

    編程 2025-04-27
  • Jadoor門鎖開發接口接入指南

    本文將從多個方面詳細介紹如何將門鎖接入Jadoor平台的開發接口,方便開發者們快速實現門鎖遠程控制、開鎖記錄查看等功能。 一、Jadoor門鎖開發接口簡介 Jadoor是一款用於密…

    編程 2025-04-27
  • 後端接口設計開發經驗分享

    在受到前端某些限制或特殊需求時,後端接口的設計和開發顯得尤為重要。下面從以下幾個方面進行講述。 一、命名規範 合理的命名規範可以大大提高接口的可讀性和可維護性。以下是一些命名規範的…

    編程 2025-04-27
  • 期貨數據接口 Python:打通數字資產交易數據的關鍵

    本文將從以下幾個方面討論期貨數據接口 Python: 一、數據接口簡介 期貨數據接口是指為期貨從業人員提供用於獲取歷史、實時及未來交易數據的工具。Python是一種常用的編程語言,…

    編程 2025-04-27
  • 如何快速發布http接口

    想要快速發布http接口,可以從以下幾個方面入手。 一、選擇合適的框架 選擇合適的框架對於快速發布http接口非常重要。目前比較受歡迎的框架有Flask、Django、Tornad…

    編程 2025-04-27
  • Javaweb 接口返回數據的定義與實現

    本文將介紹 javaweb 如何定義接口返回數據,並提供相應的代碼示例。 一、接口返回數據的定義 在 javaweb 開發中,我們經常需要通過接口返回數據。接口返回的數據格式通常是…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25

發表回復

登錄後才能評論