【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 初學者重要提示
- 學習本章節後,務必學習STM32參考手冊中MAC章節的基礎知識講解,非常重要。
- 實際專案中,關於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章節讀一遍。