ethrmiirxd1是什麼
⑴ STM32F407乙太網總卡在軟體復位 while (ETH_GetSoftwareResetStatus() == SET);卡在while里是怎麼回事
定義RMII_MODE
注釋掉MII_MODE
⑵ 如何使用STM32CubeMX配置ETH
具體配置過程:
1、打開STM32CubeMX,並選擇好相應的晶元。
文中的晶元為STM32F207VCT6,選擇後:
2、配置RCC時鍾、ETH、PA8以及使能LWIP;
由於此處的開發板硬體上為RMII方式,因此選擇ETH-RMII,若有同志的開發板為MII方式,請參考MII的配置方法,此處只針對RMII;
RCC選擇外部時鍾源,另外勾選MCO1,軟體會自動將PA8配置為MCO1模式,該引腳對於RMII方式很重要,用於為PHY晶元提供50MHz時鍾;
使能LWIP;
3、時鍾樹的相關配置,必須保證MCO1輸出為50Mhz,如果這個頻率不對會導致PHY晶元無法工作;
這里因為晶元為207VCT6,為了使MCO1輸出為50Mhz,做了PLL倍頻參數的一些調整,總體如下:(同志們配置時可根據自己的晶元靈活配置,但需保證MCO1的輸出為50Mhz)
4、ETH、LWIP、RCC相關參數設置;
至此,比較重要的都在前面了,但是還有一點仍需要注意,即PA8引腳輸出速度,幾次不成功都是因為這個引腳沒注意。
後續的參數設置可以根據同志們自己的需求分別設置,這里給出設置供參考;
ETH參數保持默認,但中斷勾選一下;
LWIP參數設置如下:(因為這里是配置UDP伺服器,IP選擇靜態分配)
5、生成工程,做最後的函數修改;
給生成的工程添加UDP伺服器的初始化以及埠綁定等相關函數;
這里直接將之前的官方常式中的UDP伺服器文件加進來,如下:
之後將。
c文件添加到用戶程序,主函數添加Udp的。
h頭文件;
如下:(udp文件的具體內容在後面給出)
6、主函數還需要添加一下幾個函數,在這里不對函數作用及實現原理講解,僅做添加說明。
⑶ 如何使用STM32CubeMX配置ETH
具體配置過程:
1、打開STM32CubeMX,並選擇好相應的晶元。文中的晶元為STM32F207VCT6,選擇後如下圖:
2、配置RCC時鍾、ETH、PA8以及使能LWIP;
由於此處我們的開發板硬體上為RMII方式,因此選擇ETH-RMII,若有同志的開發板為MII方式,請參考MII的配置方法,此處只針對RMII;
RCC選擇外部時鍾源,另外勾選MCO1,軟體會自動將PA8配置為MCO1模式,該引腳對於RMII方式很重要,用於為PHY晶元提供50MHz時鍾。
⑷ 如何使用STM32CubeMX配置ETH
具體配置過程:
1、打開STM32CubeMX,並選擇好相應的晶元。文中的晶元為STM32F207VCT6,選擇後如下圖:
2、配置RCC時鍾、ETH、PA8以及使能LWIP;
由於此處我們的開發板硬體上為RMII方式,因此選擇ETH-RMII,若有同志的開發板為MII方式,請參考MII的配置方法,此處只針對RMII;
RCC選擇外部時鍾源,另外勾選MCO1,軟體會自動將PA8配置為MCO1模式,該引腳對於RMII方式很重要,用於為PHY晶元提供50MHz時鍾;
使能LWIP;
3、時鍾樹的相關配置,必須保證MCO1輸出為50Mhz,如果這個頻率不對會導致PHY晶元無法工作;
我這里因為晶元為207VCT6,為了使MCO1輸出為50Mhz,做了PLL倍頻參數的一些調整,總體如下:(同志們配置時可根據自己的晶元靈活配置,但需保證MCO1的輸出為50Mhz)
4、ETH、LWIP、RCC相關參數設置;
至此,比較重要的都在前面了,但是還有一點仍需要注意,即PA8引腳輸出速度,幾次不成功都是因為這個引腳沒注意。
後續的參數設置可以根據同志們自己的需求分別設置,這里給出我的設置供參考;
ETH參數保持默認,但中斷勾選一下;
LWIP參數設置如下:(因為我這里是配置UDP伺服器,IP選擇靜態分配)
5、生成工程,做最後的函數修改;
給生成的工程添加UDP伺服器的初始化以及埠綁定等相關函數;
我這里直接將之前的官方常式中的UDP伺服器文件加進來,如下:
之後將.c文件添加到用戶程序,主函數添加Udp的.h頭文件;如下:(udp文件的具體內容在後面給出)
6、主函數還需要添加一下幾個函數,在這里不對函數作用及實現原理講解,僅做添加說明。
附:udp_echoserver相關文件內容(該文件為官方的示常式序,版權歸官方,此處做轉載)
udp_echoserver.c的內容如下:
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "lwip/pbuf.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include <string.h>
#include <stdio.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define UDP_SERVER_PORT 7 /* define the UDP local connection port */
#define UDP_CLIENT_PORT 7 /* define the UDP remote connection port */
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
/* Private functions ---------------------------------------------------------*/
/**
* @brief Initialize the server application.
* @param None
* @retval None
*/
void udp_echoserver_init(void)
{
struct udp_pcb *upcb;
err_t err;
/* Create a new UDP control block */
upcb = udp_new();
if (upcb)
{
/* Bind the upcb to the UDP_PORT port */
/* Using IP_ADDR_ANY allow the upcb to be used by any local interface */
err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);
if(err == ERR_OK)
{
/* Set a receive callback for the upcb */
udp_recv(upcb, udp_echoserver_receive_callback, NULL);
}
}
}
/**
* @brief This function is called when an UDP datagrm has been received on the port UDP_PORT.
* @param arg user supplied argument (udp_pcb.recv_arg)
* @param pcb the udp_pcb which received data
* @param p the packet buffer that was received
* @param addr the remote IP address from which the packet was received
* @param port the remote port from which the packet was received
* @retval None
*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{
/* Connect to the remote client */
udp_connect(upcb, addr, UDP_CLIENT_PORT);
/* Tell the client that we have accepted it */
udp_send(upcb, p);
/* free the UDP connection, so we can accept new clients */
udp_disconnect(upcb);
/* Free the p buffer */
pbuf_free(p);
}
udp_echoserver.h的內容如下:
#ifndef __ECHO_H__
#define __ECHO_H__
void udp_echoserver_init(void);
#endif /* __MINIMAL_ECHO_H */
7、至此,所有的工作完成,編譯工程,下載至開發板。由於udp_echoserver中綁定的埠號為7,這里我們通過測試工具測試網路的功能,
⑸ mii與rmii哪個好
沒有好不好之說,定義不一樣
MII (Media Independent Interface(介質無關介面);或稱為媒體獨立介面,它是IEEE-802.3定義的乙太網行業標准。它包括一個數據介面,以及一個MAC和PHY之間的管理介面。
數據介麵包括分別用於發送器和接收器的兩條獨立信道。每條信道都有自己的數據、時鍾和控制信號。MII數據介面總共需要16個信號。
管理介面是個雙信號介面:一個是時鍾信號,另一個是數據信號。通過管理介面,上層能監視和控制PHY。MII (Management interface)只有兩條信號線。
MII標准介面用於連快Fast Ethernet MAC-block與PHY。"介質無關"表明在不對MAC硬體重新設計或替換的情況下,任何類型的PHY設備都可以正常工作。
在其他速率下工作的與 MII等效的介面有:AUI(10M乙太網)、GMII(Gigabit乙太網)和XAUI(10-Gigabit乙太網)。
MII總 線
在IEEE802.3中規定的MII匯流排是一種用於將不同類型的PHY與相同網路控制器(MAC)相連接的通用匯流排。網路控制器可以用同樣的硬體介面與任何PHY進行連接。
MII相關介面介紹
乙太網媒體介面有:MII RMII SMII GMII
所有的這些介面都從MII而來,MII是(Medium Independent Interface)的意思,是指不用考慮媒體是銅軸、光纖、電纜等,因為這些媒體處理的相關工作都有PHY或者叫做MAC的晶元完成。
MII支持10兆和100兆的操作,一個介面由14根線組成,它的支持還是比較靈活的,但是有一個缺點是因為它一個埠用的信號線太多,如果一個8埠的交換機要用到112根線,16埠就要用到224根線,到32埠的話就要用到448根線,一般按照這個介面做交換機,是不太現實的,所以現代的交換機的製作都會用到其它的一些從MII簡化出來的標准,比如RMII、SMII、GMII等。
RMII是簡化的MII介面,在數據的收發上它比MII介面少了一倍的信號線,所以它一般要求是50兆的匯流排時鍾。RMII一般用在多埠的交換機,它不是每個埠安排收、發兩個時鍾,而是所有的數據埠公用一個時鍾用於所有埠的收發,這里就節省了不少的埠數目。RMII的一個埠要求7個數據線,比MII少了一倍,所以交換機能夠接入多一倍數據的埠。和MII一樣,RMII支持10兆和100兆的匯流排介面速度。
SMII是由思科提出的一種媒體介面,它有比RMII更少的信號線數目,S表示串列的意思。因為它只用一根信號線傳送發送數據,一根信號線傳輸接受數據,所以在時鍾上為了滿足100的需求,它的時鍾頻率很高,達到了125兆,為什麼用125兆,是因為數據線裡面會傳送一些控制信息。SMII一個埠僅用4根信號線完成100信號的傳輸,比起RMII差不多又少了一倍的信號線。SMII在工業界的支持力度是很高的。同理,所有埠的數據收發都公用同一個外部的125M時鍾。
GMII是千兆網的MII介面,這個也有相應的RGMII介面,表示簡化了的GMII介面。
MII工作原理
「媒體獨立」表明在不對MAC硬體重新設計或替換的情況下,任何類型的PHY設備都可以正常工作。包括分別用於發送器和接收器的兩條獨立信道。每條信道都有自己的數據、時鍾和控制信號。
MII數據介面總共需要16個信號,包括TX_ER,TXD,TX_EN,TX_CLK,COL,RXD,RX_EX,RX_CLK,CRS,RX_DV等。
MII以4位半位元組方式傳送數據雙向傳輸,時鍾速率25MHz。其工作速率可達100Mb/s。
MII管理介面是個雙信號介面,一個是時鍾信號,另一個是數據信號。
通過管理介面,上層能監視和控制PHY,其管理是使用SMI(Serial Management Interface)匯流排通過讀寫PHY的寄存器來完成的。
PHY裡面的部分寄存器是IEEE定義的,這樣PHY把自己的目前的狀態反映到寄存器裡面,MAC通過SMI匯流排不斷的讀取PHY的狀態寄存器以得知目前PHY的狀態,例如連接速度,雙工的能力等。
當然也可以通過SMI設置PHY的寄存器達到控制的目的,例如流控的打開關閉,自協商模式還是強制模式等。
不論是物理連接的MII匯流排和SMI匯流排還是PHY的狀態寄存器和控制寄存器都是有IEEE的規范的,因此不同公司的MAC和PHY一樣可以協調工作。當然為了配合不同公司的PHY的自己特有的一些功能,驅動需要做相應的修改。
PHY是物理介面收發器,它實現物理層。包括MII/GMII(介質獨立介面)子層、PCS(物理編碼子層)、PMA(物理介質附加)子層、PMD(物理介質相關)子層、MDI子層。100BaseTX採用4B/5B編碼。
PHY在發送數據的時候,收到MAC過來的數據(對PHY來說,沒有幀的概念,對它來說,都是數據而不管什麼地址,數據還是CRC),每4bit就增加1bit的檢錯碼,然後把並行數據轉化為串列流數據,再按照物理層的編碼規則把數據編碼,再變為模擬信號把數據送出去。收數據時的流程反之。
PHY還有個重要的功能就是實現CSMA/CD的部分功能。
它可以檢測到網路上是否有數據在傳送,如果有數據在傳送中就等待,一旦檢測到網路空閑,再等待一個隨機時間後將送數據出去。如果兩個碰巧同時送出了數據,那樣必將造成沖突,這時候,沖突檢測機構可以檢測到沖突,然後各等待一個隨機的時間重新發送數據。這個隨機時間很有講究的,並不是一個常數,在不同的時刻計算出來的隨機時間都是不同的,而且有多重演算法來應付出現概率很低的同兩台主機之間的第二次沖突。
通信速率通過雙方協商,協商的結果是兩個設備中能同時支持的最大速度和最好的雙工模式,這個技術被稱為Auto Negotiation或者NWAY。
隔離變壓器把PHY送出來的差分信號用差模耦合的線圈耦合濾波以增強信號,並且通過電磁場的轉換耦合到連接網線的另外一端。
RJ-45中1、2是傳送數據的,3、6是接收數據的。
新的PHY支持AUTO MDI-X功能,也需要隔離變壓器支持,它可以實現RJ-45介面的1、2上的傳送信號線和3、6上的接收信號線的功能自動互相交換。
GMII簡介
GMII (Gigabit MII)
GMII採用8位介面數據,工作時鍾125MHz,因此傳輸速率可達1000Mbps。同時兼容MII所規定的10/100 Mbps工作方式。
GMII介面數據結構符合IEEE乙太網標准。該介面定義見IEEE 802.3-2000。
發送器:
◇ GTXCLK——吉比特TX..信號的時鍾信號(125MHz)
◇ TXCLK——10/100M信號時鍾
◇ TXD[7..0]——被發送數據
◇ TXEN——發送器使能信號
◇ TXER——發送器錯誤(用於破壞一個數據包)
註:在千兆速率下,向PHY提供GTXCLK信號,TXD、TXEN、TXER信號與此時鍾信號同步。否則,在10/100M速率下,PHY提供 TXCLK時鍾信號,其它信號與此信號同步。其工作頻率為25MHz(100M網路)或2.5MHz(10M網路)。
接收器:
◇ RXCLK——接收時鍾信號(從收到的數據中提取,因此與GTXCLK無關聯)
◇ RXD[7..0]——接收數據
◇ RXDV——接收數據有效指示
◇ RXER——接收數據出錯指示
◇ COL——沖突檢測(僅用於半雙工狀態)
管理配置
◇ MDC——配置介面時鍾
◇ MDIO——配置介面I/O
管理配置介面控制PHY的特性。該介面有32個寄存器地址,每個地址16位。其中前16個已經在「IEEE 802.3,2000-22.2.4 Management Functions」中規定了用途,其餘的則由各器件自己指定。
RMII簡介
RMII: Reced Media Independant Interface 即簡化媒體獨立介面;是標準的乙太網介面之一,比MII有更少的I/O傳輸。
關於RMII口和MII口的問題
RMII口是用兩根線來傳輸數據的,
MII口是用4根線來傳輸數據的,
GMII是用8根線來傳輸數據的。
MII/RMII只是一種介面,對於10M線速,MII的速率是2.5M,RMII則是5M;對於100M線速,MII的速率是25M,RMII則是50M。
MII/RMII 用於傳輸乙太網包,在MII/RMII介面是4/2bit的,在乙太網的PHY里需要做串並轉換、編解碼等才能在雙絞線和光纖上進行傳輸,其幀格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN)。
乙太網幀的格式為:前導符+開始位+目的mac地址+源mac地址+類型/長度+數據+padding(optional)+32bitCRC
如果有vlan,則要在類型/長度後面加上2個位元組的vlan tag,其中12bit來表示vlan id,另外4bit表示數據的優先順序!
⑹ STM32 網路Ethernet)介面中ETH_PPS_OUT管腳的作用是什麼
STM32神舟IV號是RMII的,你可以找一下他的原理圖,網卡晶元是DM9161AE