你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】PHY芯片和STM32的MAC基础知识

[复制链接]
STMCU小助手 发布时间:2021-12-27 17:00
5.1   初学者重要提示
: \5 [' F  b) R6 C1 k5 Q' a7 o  学习本章节后,务必学习STM32参考手册中MAC章节的基础知识讲解,非常重要。
$ E6 A) v/ {0 _* e0 s( M. O% o/ H  实际项目中,关于MAC的配置问题,需要大家学习我们论坛网友发的这个帖子。0 S# g  }& ]# j0 }' i  U* v( i
$ _7 q( `' {3 B* k( }) S
5.2   什么是MAC
5 b( R4 S( R" V% m0 ^媒体访问控制(MAC,Media Access Control),又称作介质访问控制,简称MAC,是局域网中数据链路层的下层部分,提供地址及媒体访问的控制方式,使得不同设备或网络上的节点可以在多点的网络上通信,而不会互相冲突,上述的特性在局域网中格外重要。早期网络发展时以MAC判别各个网络接口的位置,但后来互联网发展后,才有IP的制定与使用。若只是两台设备之间全双工的通信,因为两台设备可以同时发送及接收数据,不会冲突,因此不需要用到MAC协议。0 L: N, o. L2 I0 W& e5 ?

& u6 J7 x$ ^9 ?" Z0 ~7 w+ H0 `媒体访问控制MAC子层负责解决与媒体接入有关的问题,在物理层的基础上进行无差错的通信。
/ L; a4 |/ n1 w/ ]; ~, r
+ G; C( H4 J0 U, p! j0 P* h) {MAC子层是网络与设备的接口,它从网络层接收数据帧,然后通过媒体访问规则和物理层将数据帧发送到物理链路上。它也从物理层接收数据帧,再送到网络层。总的来说,MAC有三大功能:
! W+ W. e' p. z& ]; R& L6 q& ~6 |# ?5 u0 W) z: A3 I1 {4 y
  决定节点何时发送数据包。
  q* z4 [; A% S+ l/ S4 Q; z  将数据帧发送到物理层,然后发送到物理链路。0 L; E4 @9 a5 `) t( ]) F% h8 C
  从物理层接收数据帧,然后送给网络层处理。
* Y& s* S5 n& }& l3 L" |3 Z& Q其中最重要的是第一点:决定节点何时发送数据包。对于每一种媒体访问控制技术,用来控制节点发送时机的规则叫做媒体访问规则。局域网上的节点不能想要发送数据就发送,节点只能在轮到它的时候才发送。6 d' f7 A8 e& e  O! ?3 A7 o

7 k& q7 A( [( T9 R5.3   MAC地址7 ^/ I/ i0 E" z8 a: Z  ~. m# k
MAC地址,又称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。/ \& U, {9 I. l$ i8 g4 K

- w! y6 m( e% {2 m1 U1 JMAC地址长度是48bit(6字节),由16进制的数字组成,分为前24位和后24位:& ]/ J  H$ f: q8 y" ^

+ U( R# C- R# E/ v) Z  前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
0 x. h2 ?1 U$ \2 O$ a/ r3 D% e# \; J  后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。/ D( n1 n* u6 [) u) U* k
MAC地址的完整数据格式如下(来自wiki百科):# z$ D  k$ s8 B- E8 K! G6 A0 j$ B& _( m$ c
/ X2 r; c* m9 u: d
aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDIwMDgvMTM3OTEwNy0yMDIw.png
- g- J* Z* I# s$ M
, I% T3 |, h. x4 x3 B) r# h
第一个字节的后两位比较重要:
, \& p; P3 J1 u7 |
0 l$ h; V3 b+ [$ D5 e2 ib0 = 0:表示MAC单播地址。1 m, ?5 V9 w' ]  Z, |( u5 q

$ X; p- ]7 J( W2 q7 Q* w/ Nb0 = 1 : 表示MAC组播地址。
2 N# k1 r6 z( h2 k/ S( T8 b! _6 ^+ i7 M6 X
b1 = 0:表示OUI分配的全球唯一MAC地址。
& i3 m% k% T/ y
+ e% X9 \2 p; X" Sb1 = 1:表示用于本地管理的MAC地址。
+ O  ?' P, t% G2 H) B# c2 ?
6 Q. q% [/ ]2 t9 S为了更好地理解,举几个例子:, v% V- W+ z1 G- B

  l7 E4 V, ?5 S: V' ?  00:xx:xx:xx:xx:xx是MAC单播地址。. k2 L; t! ?3 v- h
  01:xx:xx:xx:xx:xx是MAC组播地址。2 F6 ~& b" m- b9 L! ^, P
  01:00:5e:xx:xx:xx是IPv4组播地址。% ], f2 I* D6 w. E# t* X
  ff:ff:ff:ff:ff:ff则作为广播地址。( Z4 T! W, d# Z/ c- {& _7 w( c/ ^( a! n
  00:50:c2:xx:xx:xx 是意法半导体的MAC地址。
0 i3 o1 f7 M8 e1 R5.4   STM32自带MAC基础知识, ?9 h9 \: e9 _; `
关于STM32自带的MAC部分,STM32参考手册中写的晦涩难懂,特别是中文翻译版本,逻辑混乱,如果可以的话,建议大家看英文版。% U- Z8 P' m2 e0 Y! W3 @! ?# v
7 I. ], u0 q. |
STM32参考手册中对MAC的讲解主要分为三部分:
( t! e3 X. E9 b$ f$ t/ g* \; K
( u+ {7 }% f- g0 W; N0 T$ ~* p  MAC的接口MII和RMII。
  ^- E( {6 y6 h- Z- s) u7 N参考手册中对这一部分讲解的比较详细,也比较容易理解,建议初学者务必读一读。我们这里就不将其复制粘贴过来了。% w$ ?( ]6 l+ \2 ~4 B, Y

) G" w3 d; \! ~3 }  MAC802.3帧格式,帧发送,帧接收等方面的讲解。
  I3 z$ \7 K$ m# x# ?- J4 w3 E这一个部分知识点理解起来比较困难,配合下一章节的底层驱动就好理解了。
2 r: T2 i6 G  x+ y' _; V9 N2 L2 Q; _
  MAC的DMA收发方式控制。: X- x; I% X4 ^) p6 m3 P4 I3 }
手册中给出了DMA方式的发送和接收的初始化顺序,在下一章节讲解底层驱动的时候结合驱动代码会理解的更好,建议初学者也读一遍。6 y: g; Q4 {  u6 N* ]5 H
- D! e: ~! _& ~- _* r
5.5   以太网PHY基础知识
$ X* f" E$ X. ?; a( g5 m仅有STM32自带的MAC还不能做网络通信,还需要外接以太网PHY芯片才可以,如同RS485通信一样,仅有一个串口是不行的,还需要外接RS485的PHY芯片。
& R$ n3 C% E+ O8 d! t& q) D- ]; s; r, Z1 x
PHY(Port Physical Layer),可称之为端口物理层,是一个对OSI模型物理层的简称。现在常用于STM32的有DP83848,LAN8270,DM9161/9162等。这些PHY芯片都大同小异,基本寄存器都是一样的,只有扩展寄存和厂商专门设置的寄存器不同。如果用户将其中一个PHY驱动成功了,驱动另一个也是非常方便的,下面是DP83848和DM9161/9162的基本寄存器和扩展寄存器:5 I+ D9 D' Y. f1 D
1 |4 R* ]+ Y) s
  1. /* DP83848C and DM9161 PHY Registers is the same */# ]% P" e/ C- F. F; |
  2. #define PHY_REG_BMCR        0x00        /* Basic Mode Control Register       */
    9 a$ y* W+ {2 ~1 I# G: O: h) Z
  3. #define PHY_REG_BMSR        0x01        /* Basic Mode Status Register        */
    5 L4 |7 W: {! H$ V
  4. #define PHY_REG_IDR1        0x02        /* PHY Identifier 1                  */" s& a% X/ F. d9 N( w; c* @, J2 ~
  5. #define PHY_REG_IDR2        0x03        /* PHY Identifier 2                  */
      k$ F* J$ [1 k, E# ^4 ?9 l
  6. #define PHY_REG_ANAR        0x04        /* Auto-Negotiation Advertisement    */
    8 h% h9 {6 w: O& X" S
  7. #define PHY_REG_ANLPAR      0x05        /* Auto-Neg. Link Partner Abitily    */
    ! K% W; @: i* c( m7 a6 c
  8. #define PHY_REG_ANER        0x06        /* Auto-Neg. Expansion Register      */- u( `0 ^' }' Q% W$ U; h. M9 P
  9. #define PHY_REG_ANNPTR      0x07        /* Auto-Neg. Next Page TX .DM9161 NO */
    1 ^3 z1 j* A' b9 h+ m' j

  10. 1 F/ X6 X8 X* g" B- ]# v/ j! c) Y
  11. /* Register BMCR bit defination */
    " J- ]$ Y" ^( M9 Y- a
  12. #define PHY_FULLD_100M      0x2100      /* Full Duplex 100Mbit               */
    8 z7 ?2 b5 @+ U
  13. #define PHY_HALFD_100M      0x2000      /* Half Duplex 100Mbit               */6 i6 [: _: g  \# G
  14. #define PHY_FULLD_10M       0x0100      /* Full Duplex 10Mbit                */
    # y( w+ A5 k2 q0 o
  15. #define PHY_HALFD_10M       0x0000      /* Half Duplex 10MBit                */3 h+ r% x0 ]. @$ {6 y) r: V
  16. #define PHY_AUTO_NEG        0x1000      /* Select Auto Negotiation           */
      u- O, y4 A8 R/ e1 ?) \

  17. 3 c+ G9 f% Z. C* r
  18. /* PHY Extended Registers  only for DP83848C */! H" ]1 V7 e9 R3 q' g( q  H5 d
  19. #define PHY_REG_STS         0x10        /* Status Register                   */9 D. m% N( @+ ~$ y3 B
  20. #define PHY_REG_MICR        0x11        /* MII Interrupt Control Register    */
    / v4 y- K% t  G& ^, y
  21. #define PHY_REG_MISR        0x12        /* MII Interrupt Status Register     */$ o( ~0 R% K6 Q# s4 C8 R
  22. #define PHY_REG_FCSCR       0x14        /* False Carrier Sense Counter       */1 T% c; k$ }9 ~/ p" a- @1 j
  23. #define PHY_REG_RECR        0x15        /* Receive Error Counter             */
    2 t( D# S, Q3 V) l' ?0 M1 E
  24. #define PHY_REG_PCSR        0x16        /* PCS Sublayer Config. and Status   */* a0 Q1 V- f1 m! `  _
  25. #define PHY_REG_RBR         0x17        /* RMII and Bypass Register          */, k7 u0 Z: w2 ^  D: D9 r7 {
  26. #define PHY_REG_LEDCR       0x18        /* LED Direct Control Register       */
    $ a( k8 f! w# f2 d0 l
  27. #define PHY_REG_PHYCR       0x19        /* PHY Control Register              */
    ' \7 a) ]6 w6 Q: I: v' [8 b7 T2 y/ M
  28. #define PHY_REG_10BTSCR     0x1A        /* 10Base-T Status/Control Register  */
    1 Q& R7 T( B  d# o7 V; I) D
  29. #define PHY_REG_CDCTRL1     0x1B        /* CD Test Control and BIST Extens.  */. P7 J, I/ H; ~* [' R
  30. #define PHY_REG_EDCR        0x1D        /* Energy Detect Control Register    */
    6 A5 H! x( U. O! t

  31. 3 h2 z7 Z) G, p" R3 H& O4 s
  32. /* PHY Extended Registers  only for DM9161 */& ~$ v* l' [8 E$ V6 P1 s# i
  33. #define PHY_REG_DSCR        0x10     /* Specified Congfiguration Register            */' L6 V% A, b8 H- Q+ f  `* R6 Q! C: `
  34. #define PHY_REG_DSCSR       0x11     /* Specified Congfiguration and Status Register */
    . B+ N* {' C9 O! G
  35. #define PHY_REG_10BTCSR     0x12     /* 10Base-T Status/Control Register              */; v8 y/ @3 ~6 a6 s% i/ m
  36. #define PHY_REG_PWDOR       0x13     /* Power Down Control Register                    */
    $ s2 m% H/ q& L4 S8 M- Z8 t4 a
  37. #define PHY_REG_CONGFIG       0x14     /* Specified Congfig Register                   */
    # P1 e* h$ r3 [( `7 q5 t3 P
  38. #define PHY_REG_INTERRUPT   0x15     /* Specified interrupt Register                  */
    7 \7 A9 g  P' a* q3 \8 X
  39. #define PHY_REG_SRECR       0x16     /* Specified Receive Error Counter               */" Q3 d! n7 x( h, l# b0 e! a
  40. #define PHY_REG_DISCR       0x17     /* Specified Disconnect Counter Register        */
    0 b: A6 q8 q: L1 a, o+ i
  41. #define PHY_REG_RLSR           0x18     /* Hardware reset latch state Register          */
    6 Z, X# F: p/ t
  42. #define PHY_REG_PSCR           0x1D     /* Power Saving control register                */
复制代码
, q- h5 g# P* S; J* l$ e; B
对于初学者来说,了解这些知识点就够了,具体如何配置这些寄存器会在下个章节讲解。! H' a: h' \; o( |& t, G
9 j. n: W+ X2 N, y2 a9 ~
5.6   总结

& V5 g) |& ~4 d+ H1 `1 s, w本章节就为大家讲解这么多,主要是为下章节的讲解做个铺垫。学习完毕本章节后,务必将STM32参考手册中MAC章节读一遍。# F' p3 i' H& P* j
+ t/ r9 h, D9 }( I2 u

: V: M( G- z" T4 P' I8 d+ w: \: v
收藏 评论0 发布时间:2021-12-27 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版