最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=104619php
本章節爲你們講解STM32自帶的MAC和PHY芯片的基礎知識,爲下一章底層驅動的講解作一個鋪墊。網絡
4.1初學者重要提示學習
4.2什麼是MACspa
4.3 MAC地址翻譯
4.4 STM32自帶MAC基礎知識code
4.5以太網PHY基礎知識blog
4.6總結教程
IEEE MAC地址購買價格及購買方案選擇:http://www.armbbs.cn/forum.php?mod=viewthread&tid=28416。接口
媒體訪問控制(MAC,Media Access Control),又稱做介質訪問控制,簡稱MAC,是局域網中數據鏈路層的下層部分,提供地址及媒體訪問的控制方式,使得不一樣設備或網絡上的節點能夠在多點的網絡上通訊,而不會互相沖突,上述的特性在局域網中格外重要。早期網絡發展時以MAC判別各個網絡接口的位置,但後來互聯網發展後,纔有IP的制定與使用。若只是兩臺設備之間全雙工的通訊,由於兩臺設備能夠同時發送及接收數據,不會衝突,所以不須要用到MAC協議。ci
媒體訪問控制MAC子層負責解決與媒體接入有關的問題,在物理層的基礎上進行無差錯的通訊。
MAC子層是網絡與設備的接口,它從網絡層接收數據幀,而後經過媒體訪問規則和物理層將數據幀發送到物理鏈路上。它也從物理層接收數據幀,再送到網絡層。總的來講,MAC有三大功能:
其中最重要的是第一點:決定節點什麼時候發送數據包。對於每一種媒體訪問控制技術,用來控制節點發送時機的規則叫作媒體訪問規則。局域網上的節點不能想要發送數據就發送,節點只能在輪到它的時候才發送。
MAC地址,又稱爲物理地址、硬件地址,用來定義網絡設備的位置。在OSI模型中,第三層網絡層負責 IP地址,第二層數據鏈路層則負責 MAC地址。所以一個主機會有一個MAC地址,而每一個網絡位置會有一個專屬於它的IP地址。
MAC地址長度是48bit(6字節),由16進制的數字組成,分爲前24位和後24位:
MAC地址的完整數據格式以下(來自wiki百科):
第一個字節的後兩位比較重要:
b0 = 0:表示MAC單播地址。
b0 = 1 : 表示MAC組播地址。
b1 = 0:表示OUI分配的全球惟一MAC地址。
b1 = 1:表示用於本地管理的MAC地址。
爲了更好地理解,舉幾個例子:
關於STM32自帶的MAC部分,STM32參考手冊中寫的晦澀難懂,特別是中文翻譯版本,邏輯混亂,若是能夠的話,建議你們看英文版。
STM32參考手冊中對MAC的講解主要分爲三部分:
參考手冊中對這一部分講解的比較詳細,也比較容易理解,建議初學者務必讀一讀。咱們這裏就不將其複製粘貼過來了。
這一個部分知識點理解起來比較困難,配合下一章節的底層驅動就好理解了。
手冊中給出了DMA方式的發送和接收的初始化順序,在下一章節講解底層驅動的時候結合驅動代碼會理解的更好,建議初學者也讀一遍。
僅有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 */
對於初學者來講,瞭解這些知識點就夠了,具體如何配置這些寄存器會在下個章節講解。
本章節就爲你們講解這麼多,主要是爲後面移植章節的講解作個鋪墊。學習完畢本章節後,務必將STM32參考手冊中MAC章節讀一遍。