【STM32F407】第5章 PHY芯片和STM32的MAC基礎知識


最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243

第5章   PHY芯片和STM32的MAC基礎知識

本章節為大家講解STM32自帶的MAC和PHY芯片的基礎知識,為下一章底層驅動的講解做一個鋪墊。

5.1初學者重要提示

5.2什么是MAC

5.3 MAC地址

5.4 STM32自帶MAC基礎知識

5.5以太網PHY基礎知識

5.6總結

 

 

5.1   初學者重要提示

  1.   學習本章節后,務必學習STM32參考手冊中MAC章節的基礎知識講解,非常重要。
  2.   實際項目中,關於MAC的配置問題,需要大家學習我們論壇網友發的這個帖子。

IEEE MAC地址購買價格及購買方案選擇:http://www.armbbs.cn/forum.php?mod=viewthread&tid=28416

5.2   什么是MAC

媒體訪問控制(MAC,Media Access Control),又稱作介質訪問控制,簡稱MAC,是局域網中數據鏈路層的下層部分,提供地址及媒體訪問的控制方式,使得不同設備或網絡上的節點可以在多點的網絡上通信,而不會互相沖突,上述的特性在局域網中格外重要。早期網絡發展時以MAC判別各個網絡接口的位置,但后來互聯網發展后,才有IP的制定與使用。若只是兩台設備之間全雙工的通信,因為兩台設備可以同時發送及接收數據,不會沖突,因此不需要用到MAC協議。

媒體訪問控制MAC子層負責解決與媒體接入有關的問題,在物理層的基礎上進行無差錯的通信。

MAC子層是網絡與設備的接口,它從網絡層接收數據幀,然后通過媒體訪問規則和物理層將數據幀發送到物理鏈路上。它也從物理層接收數據幀,再送到網絡層。總的來說,MAC有三大功能:

  •   決定節點何時發送數據包。
  •   將數據幀發送到物理層,然后發送到物理鏈路。
  •   從物理層接收數據幀,然后送給網絡層處理。

其中最重要的是第一點:決定節點何時發送數據包。對於每一種媒體訪問控制技術,用來控制節點發送時機的規則叫做媒體訪問規則。局域網上的節點不能想要發送數據就發送,節點只能在輪到它的時候才發送。

5.3   MAC地址

MAC地址,又稱為物理地址、硬件地址,用來定義網絡設備的位置。在OSI模型中,第三層網絡層負責 IP地址,第二層數據鏈路層則負責 MAC地址。因此一個主機會有一個MAC地址,而每個網絡位置會有一個專屬於它的IP地址。

MAC地址長度是48bit(6字節),由16進制的數字組成,分為前24位和后24位:

  •   前24位叫做組織唯一標志符(Organizationally Unique Identifier,即OUI),是由IEEE的注冊管理機構給不同廠家分配的代碼,區分了不同的廠家。
  •   后24位是由廠家自己分配的,稱為擴展標識符。同一個廠家生產的網卡中MAC地址后24位是不同的。

MAC地址的完整數據格式如下(來自wiki百科):

 

第一個字節的后兩位比較重要:

b0 = 0:表示MAC單播地址。

b0 = 1 : 表示MAC組播地址。

b1 = 0:表示OUI分配的全球唯一MAC地址。

b1 = 1:表示用於本地管理的MAC地址。

為了更好地理解,舉幾個例子:

  •   00:xx:xx:xx:xx:xx是MAC單播地址。
  •   01:xx:xx:xx:xx:xx是MAC組播地址。
  •   01:00:5e:xx:xx:xx是IPv4組播地址。
  •   ff:ff:ff:ff:ff:ff則作為廣播地址。
  •   00:50:c2:xx:xx:xx 是意法半導體的MAC地址。

5.4   STM32自帶MAC基礎知識

關於STM32自帶的MAC部分,STM32參考手冊中寫的晦澀難懂,特別是中文翻譯版本,邏輯混亂,如果可以的話,建議大家看英文版。

STM32參考手冊中對MAC的講解主要分為三部分:

  •   MAC的接口MII和RMII。

參考手冊中對這一部分講解的比較詳細,也比較容易理解,建議初學者務必讀一讀。我們這里就不將其復制粘貼過來了。

  •   MAC802.3幀格式,幀發送,幀接收等方面的講解。

這一個部分知識點理解起來比較困難,配合下一章節的底層驅動就好理解了。

  •   MAC的DMA收發方式控制。

手冊中給出了DMA方式的發送和接收的初始化順序,在下一章節講解底層驅動的時候結合驅動代碼會理解的更好,建議初學者也讀一遍。

5.5   以太網PHY基礎知識

僅有STM32自帶的MAC還不能做網絡通信,還需要外接以太網PHY芯片才可以,如同RS485通信一樣,僅有一個串口是不行的,還需要外接RS485的PHY芯片。

PHY(Port Physical Layer),可稱之為端口物理層,是一個對OSI模型物理層的簡稱。現在常用於STM32的有DP83848,LAN8270,DM9161/9162等。這些PHY芯片都大同小異,基本寄存器都是一樣的,只有擴展寄存和廠商專門設置的寄存器不同。如果用戶將其中一個PHY驅動成功了,驅動另一個也是非常方便的,下面是DP83848和DM9161/9162的基本寄存器和擴展寄存器:

/* DP83848C and DM9161 PHY Registers is the same */
#define PHY_REG_BMCR        0x00        /* Basic Mode Control Register       */
#define PHY_REG_BMSR        0x01        /* Basic Mode Status Register        */
#define PHY_REG_IDR1        0x02        /* PHY Identifier 1                  */
#define PHY_REG_IDR2        0x03        /* PHY Identifier 2                  */
#define PHY_REG_ANAR        0x04        /* Auto-Negotiation Advertisement    */
#define PHY_REG_ANLPAR      0x05        /* Auto-Neg. Link Partner Abitily    */
#define PHY_REG_ANER        0x06        /* Auto-Neg. Expansion Register      */
#define PHY_REG_ANNPTR      0x07        /* Auto-Neg. Next Page TX .DM9161 NO */

/* Register BMCR bit defination */
#define PHY_FULLD_100M      0x2100      /* Full Duplex 100Mbit               */
#define PHY_HALFD_100M      0x2000      /* Half Duplex 100Mbit               */
#define PHY_FULLD_10M       0x0100      /* Full Duplex 10Mbit                */
#define PHY_HALFD_10M       0x0000      /* Half Duplex 10MBit                */
#define PHY_AUTO_NEG        0x1000      /* Select Auto Negotiation           */

/* PHY Extended Registers  only for DP83848C */
#define PHY_REG_STS         0x10        /* Status Register                   */
#define PHY_REG_MICR        0x11        /* MII Interrupt Control Register    */
#define PHY_REG_MISR        0x12        /* MII Interrupt Status Register     */
#define PHY_REG_FCSCR       0x14        /* False Carrier Sense Counter       */
#define PHY_REG_RECR        0x15        /* Receive Error Counter             */
#define PHY_REG_PCSR        0x16        /* PCS Sublayer Config. and Status   */
#define PHY_REG_RBR         0x17        /* RMII and Bypass Register          */
#define PHY_REG_LEDCR       0x18        /* LED Direct Control Register       */
#define PHY_REG_PHYCR       0x19        /* PHY Control Register              */
#define PHY_REG_10BTSCR     0x1A        /* 10Base-T Status/Control Register  */
#define PHY_REG_CDCTRL1     0x1B        /* CD Test Control and BIST Extens.  */
#define PHY_REG_EDCR        0x1D        /* Energy Detect Control Register    */

/* PHY Extended Registers  only for DM9161 */
#define PHY_REG_DSCR        0x10     /* Specified Congfiguration Register            */
#define PHY_REG_DSCSR       0x11     /* Specified Congfiguration and Status Register */
#define PHY_REG_10BTCSR     0x12     /* 10Base-T Status/Control Register              */
#define PHY_REG_PWDOR       0x13     /* Power Down Control Register                    */
#define PHY_REG_CONGFIG       0x14     /* Specified Congfig Register                   */
#define PHY_REG_INTERRUPT   0x15     /* Specified interrupt Register                  */
#define PHY_REG_SRECR       0x16     /* Specified Receive Error Counter               */
#define PHY_REG_DISCR       0x17     /* Specified Disconnect Counter Register        */
#define PHY_REG_RLSR           0x18     /* Hardware reset latch state Register          */
#define PHY_REG_PSCR           0x1D     /* Power Saving control register                */

對於初學者來說,了解這些知識點就夠了,具體如何配置這些寄存器會在下個章節講解。

5.6   總結

本章節就為大家講解這么多,主要是為下章節的講解做個鋪墊。學習完畢本章節后,務必將STM32參考手冊中MAC章節讀一遍。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM