【STM32F407】第3章 PHY芯片和STM32的MAC基础知识
最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=104619
第3章 PHY芯片和STM32的MAC基礎(chǔ)知識
本章節(jié)為大家講解STM32自帶的MAC和PHY芯片的基礎(chǔ)知識,為下一章底層驅(qū)動的講解做一個鋪墊。
4.1初學者重要提示
4.2什么是MAC
4.3 MAC地址
4.4 STM32自帶MAC基礎(chǔ)知識
4.5以太網(wǎng)PHY基礎(chǔ)知識
4.6總結(jié)
3.1 初學者重要提示
學習本章節(jié)后,務(wù)必學習STM32參考手冊中MAC章節(jié)的基礎(chǔ)知識講解,非常重要。
實際項目中,關(guān)于MAC的配置問題,需要大家學習我們論壇網(wǎng)友發(fā)的這個帖子。
IEEE MAC地址購買價格及購買方案選擇:http://www.armbbs.cn/forum.php?mod=viewthread&tid=28416。
3.2 什么是MAC
媒體訪問控制(MAC,Media Access Control),又稱作介質(zhì)訪問控制,簡稱MAC,是局域網(wǎng)中數(shù)據(jù)鏈路層的下層部分,提供地址及媒體訪問的控制方式,使得不同設(shè)備或網(wǎng)絡(luò)上的節(jié)點可以在多點的網(wǎng)絡(luò)上通信,而不會互相沖突,上述的特性在局域網(wǎng)中格外重要。早期網(wǎng)絡(luò)發(fā)展時以MAC判別各個網(wǎng)絡(luò)接口的位置,但后來互聯(lián)網(wǎng)發(fā)展后,才有IP的制定與使用。若只是兩臺設(shè)備之間全雙工的通信,因為兩臺設(shè)備可以同時發(fā)送及接收數(shù)據(jù),不會沖突,因此不需要用到MAC協(xié)議。
媒體訪問控制MAC子層負責解決與媒體接入有關(guān)的問題,在物理層的基礎(chǔ)上進行無差錯的通信。
MAC子層是網(wǎng)絡(luò)與設(shè)備的接口,它從網(wǎng)絡(luò)層接收數(shù)據(jù)幀,然后通過媒體訪問規(guī)則和物理層將數(shù)據(jù)幀發(fā)送到物理鏈路上。它也從物理層接收數(shù)據(jù)幀,再送到網(wǎng)絡(luò)層。總的來說,MAC有三大功能:
決定節(jié)點何時發(fā)送數(shù)據(jù)包。
將數(shù)據(jù)幀發(fā)送到物理層,然后發(fā)送到物理鏈路。
從物理層接收數(shù)據(jù)幀,然后送給網(wǎng)絡(luò)層處理。
其中最重要的是第一點:決定節(jié)點何時發(fā)送數(shù)據(jù)包。對于每一種媒體訪問控制技術(shù),用來控制節(jié)點發(fā)送時機的規(guī)則叫做媒體訪問規(guī)則。局域網(wǎng)上的節(jié)點不能想要發(fā)送數(shù)據(jù)就發(fā)送,節(jié)點只能在輪到它的時候才發(fā)送。
3.3 MAC地址
MAC地址,又稱為物理地址、硬件地址,用來定義網(wǎng)絡(luò)設(shè)備的位置。在OSI模型中,第三層網(wǎng)絡(luò)層負責 IP地址,第二層數(shù)據(jù)鏈路層則負責 MAC地址。因此一個主機會有一個MAC地址,而每個網(wǎng)絡(luò)位置會有一個專屬于它的IP地址。
MAC地址長度是48bit(6字節(jié)),由16進制的數(shù)字組成,分為前24位和后24位:
前24位叫做組織唯一標志符(Organizationally Unique Identifier,即OUI),是由IEEE的注冊管理機構(gòu)給不同廠家分配的代碼,區(qū)分了不同的廠家。
后24位是由廠家自己分配的,稱為擴展標識符。同一個廠家生產(chǎn)的網(wǎng)卡中MAC地址后24位是不同的。
MAC地址的完整數(shù)據(jù)格式如下(來自wiki百科):
第一個字節(jié)的后兩位比較重要:
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地址。
3.4 STM32自帶MAC基礎(chǔ)知識
關(guān)于STM32自帶的MAC部分,STM32參考手冊中寫的晦澀難懂,特別是中文翻譯版本,邏輯混亂,如果可以的話,建議大家看英文版。
STM32參考手冊中對MAC的講解主要分為三部分:
MAC的接口MII和RMII。
參考手冊中對這一部分講解的比較詳細,也比較容易理解,建議初學者務(wù)必讀一讀。我們這里就不將其復制粘貼過來了。
MAC802.3幀格式,幀發(fā)送,幀接收等方面的講解。
這一個部分知識點理解起來比較困難,配合下一章節(jié)的底層驅(qū)動就好理解了。
MAC的DMA收發(fā)方式控制。
手冊中給出了DMA方式的發(fā)送和接收的初始化順序,在下一章節(jié)講解底層驅(qū)動的時候結(jié)合驅(qū)動代碼會理解的更好,建議初學者也讀一遍。
3.5 以太網(wǎng)PHY基礎(chǔ)知識
僅有STM32自帶的MAC還不能做網(wǎng)絡(luò)通信,還需要外接以太網(wǎng)PHY芯片才可以,如同RS485通信一樣,僅有一個串口是不行的,還需要外接RS485的PHY芯片。
PHY(Port Physical Layer),可稱之為端口物理層,是一個對OSI模型物理層的簡稱。現(xiàn)在常用于STM32的有DP83848,LAN8270,DM9161/9162等。這些PHY芯片都大同小異,基本寄存器都是一樣的,只有擴展寄存和廠商專門設(shè)置的寄存器不同。如果用戶將其中一個PHY驅(qū)動成功了,驅(qū)動另一個也是非常方便的,下面是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 */
對于初學者來說,了解這些知識點就夠了,具體如何配置這些寄存器會在下個章節(jié)講解。
3.6 總結(jié)
本章節(jié)就為大家講解這么多,主要是為后面移植章節(jié)的講解做個鋪墊。學習完畢本章節(jié)后,務(wù)必將STM32參考手冊中MAC章節(jié)讀一遍。
微信公眾號:armfly_com
安富萊論壇:www.armbbs.cn
安富萊淘寶:https://armfly.taobao.com
總結(jié)
以上是生活随笔為你收集整理的【STM32F407】第3章 PHY芯片和STM32的MAC基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django从理论到实战(part25)
- 下一篇: 描写杏花的句子