1. 程式人生 > 實用技巧 >【STM32H7】第5章 PHY晶片和STM32的MAC基礎知識

【STM32H7】第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章節讀一遍。