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

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

[复制链接]
STMCU小助手 发布时间:2021-12-27 17:00
5.1   初学者重要提示1 n" @* q. M2 e& R8 N0 @/ w
  学习本章节后,务必学习STM32参考手册中MAC章节的基础知识讲解,非常重要。& A* `2 E5 k; C  c
  实际项目中,关于MAC的配置问题,需要大家学习我们论坛网友发的这个帖子。  ^/ I0 \1 \& Z$ ]7 p3 o
. Q' O5 t8 f6 B4 i
5.2   什么是MAC. T3 X* t$ a+ b2 @; r
媒体访问控制(MAC,Media Access Control),又称作介质访问控制,简称MAC,是局域网中数据链路层的下层部分,提供地址及媒体访问的控制方式,使得不同设备或网络上的节点可以在多点的网络上通信,而不会互相冲突,上述的特性在局域网中格外重要。早期网络发展时以MAC判别各个网络接口的位置,但后来互联网发展后,才有IP的制定与使用。若只是两台设备之间全双工的通信,因为两台设备可以同时发送及接收数据,不会冲突,因此不需要用到MAC协议。
0 }+ }7 O3 {6 {( O5 F) e0 N3 t0 M$ P5 m- I0 w8 ^8 M  U
媒体访问控制MAC子层负责解决与媒体接入有关的问题,在物理层的基础上进行无差错的通信。
/ y+ I$ i! |, \9 ^/ N& d* g0 ~2 I% `, T! f( ~7 C; a+ P
MAC子层是网络与设备的接口,它从网络层接收数据帧,然后通过媒体访问规则和物理层将数据帧发送到物理链路上。它也从物理层接收数据帧,再送到网络层。总的来说,MAC有三大功能:
7 |+ e( x6 o3 q8 q, `! l. ]$ X' q7 @( G8 G5 _* f: I7 C( A
  决定节点何时发送数据包。
' c3 y3 Z) g; q  将数据帧发送到物理层,然后发送到物理链路。0 ]9 J5 n+ J; U$ z' ^) b+ T& k
  从物理层接收数据帧,然后送给网络层处理。
  H5 w# A: y" ?# ?0 N0 J9 h# W  b其中最重要的是第一点:决定节点何时发送数据包。对于每一种媒体访问控制技术,用来控制节点发送时机的规则叫做媒体访问规则。局域网上的节点不能想要发送数据就发送,节点只能在轮到它的时候才发送。
' s3 z1 o! ^/ S$ d, @' B9 o" r1 ]3 f
5.3   MAC地址
: `/ }3 V" {$ s5 S/ h3 \  |+ Z+ q( lMAC地址,又称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。
8 ~" P' |0 S! H8 K: s' E1 u6 I0 \' n6 U
MAC地址长度是48bit(6字节),由16进制的数字组成,分为前24位和后24位:2 C# W$ k. N; Y' O; e' A* K( U0 J8 d
: L/ W- |6 m) }+ I% x
  前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
( [# P8 Q! n7 N% A* w4 o" m6 k$ Z+ z# v  后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。
& h/ W& \5 t/ V/ h: U% p# Z! MMAC地址的完整数据格式如下(来自wiki百科):
) t8 y/ l2 J, u! b0 ~( m& N! i5 G' _5 D3 }& q! q3 n, e
aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTM3OTEwNy8yMDIwMDgvMTM3OTEwNy0yMDIw.png

8 S/ p: x3 d5 r' G0 M: s1 O+ U8 l% E/ p; A* }
第一个字节的后两位比较重要:3 X* _1 S) R* N$ ]% u
5 t- L8 R# y- ~  Z
b0 = 0:表示MAC单播地址。$ ]) @# D! u9 K$ d1 _( T$ _) M7 d

. j! k% G# x* [! U' [& C8 |b0 = 1 : 表示MAC组播地址。* q/ w4 p* {# W- R8 a6 d

) b/ {* i2 ^) o0 Ub1 = 0:表示OUI分配的全球唯一MAC地址。9 Z1 a) f; I+ L# W( J' N& P
- I0 R# M" z4 C; Q3 y1 a- C8 q
b1 = 1:表示用于本地管理的MAC地址。
# a1 G: Y5 r5 B/ d# v" v8 y! n( |$ A" u9 R0 L% T! A
为了更好地理解,举几个例子:: B+ W# f$ l4 v/ ?6 H/ j
4 o; v7 l2 h" S: w6 q. t  g. u/ @; q
  00:xx:xx:xx:xx:xx是MAC单播地址。
: \( V& n: x8 x. H1 f1 g  01:xx:xx:xx:xx:xx是MAC组播地址。; x2 C( v" x2 l  Q6 T$ ?
  01:00:5e:xx:xx:xx是IPv4组播地址。/ K5 e, B) i% T* S: d" U! ~
  ff:ff:ff:ff:ff:ff则作为广播地址。  _* e, x* a  D$ K: M. L+ ^9 s
  00:50:c2:xx:xx:xx 是意法半导体的MAC地址。/ d5 h6 s& e1 X
5.4   STM32自带MAC基础知识
# T, ]! U* f8 j# R! B7 _% M5 _关于STM32自带的MAC部分,STM32参考手册中写的晦涩难懂,特别是中文翻译版本,逻辑混乱,如果可以的话,建议大家看英文版。
' q% ]6 |; ?" @
4 Z1 L2 u# A! }: gSTM32参考手册中对MAC的讲解主要分为三部分:
( b, m4 ^* e' w/ O
6 {+ P( |1 A9 e4 |  MAC的接口MII和RMII。
- Z2 W# o! P8 d5 ?参考手册中对这一部分讲解的比较详细,也比较容易理解,建议初学者务必读一读。我们这里就不将其复制粘贴过来了。# F% ^$ Y. A: G. g! K; z0 K3 V
/ o0 @) I$ ], l" B, i5 ?
  MAC802.3帧格式,帧发送,帧接收等方面的讲解。8 ?& h1 l0 ?  o7 c7 a
这一个部分知识点理解起来比较困难,配合下一章节的底层驱动就好理解了。
' L1 `4 F9 n8 S4 ]. x0 N2 z
0 H4 a4 P" N/ u7 b  MAC的DMA收发方式控制。
2 {. M9 T  h: n手册中给出了DMA方式的发送和接收的初始化顺序,在下一章节讲解底层驱动的时候结合驱动代码会理解的更好,建议初学者也读一遍。) D# D9 f) Z0 a( k7 j8 E# D
# Q  |) Q; ^0 i( `
5.5   以太网PHY基础知识
+ _; }' \+ _7 w仅有STM32自带的MAC还不能做网络通信,还需要外接以太网PHY芯片才可以,如同RS485通信一样,仅有一个串口是不行的,还需要外接RS485的PHY芯片。6 ^2 O% I* Z& E+ n

  L6 p( I- A8 f9 ?- |! }PHY(Port Physical Layer),可称之为端口物理层,是一个对OSI模型物理层的简称。现在常用于STM32的有DP83848,LAN8270,DM9161/9162等。这些PHY芯片都大同小异,基本寄存器都是一样的,只有扩展寄存和厂商专门设置的寄存器不同。如果用户将其中一个PHY驱动成功了,驱动另一个也是非常方便的,下面是DP83848和DM9161/9162的基本寄存器和扩展寄存器:5 r6 q  F( q! o, I, F
% f$ x( r( I% ?9 {
  1. /* DP83848C and DM9161 PHY Registers is the same */
    2 j+ `& [, G& ]  n; k% Z9 n6 p2 o
  2. #define PHY_REG_BMCR        0x00        /* Basic Mode Control Register       */
    # A' u, d3 R: l  `; h( x1 _
  3. #define PHY_REG_BMSR        0x01        /* Basic Mode Status Register        */
    . U/ G0 Z. V  Y5 p$ ~  m
  4. #define PHY_REG_IDR1        0x02        /* PHY Identifier 1                  */5 r$ q* l3 Z7 G. e0 n- l
  5. #define PHY_REG_IDR2        0x03        /* PHY Identifier 2                  */& t, y) M' L/ h$ m  a, g
  6. #define PHY_REG_ANAR        0x04        /* Auto-Negotiation Advertisement    */
    ) A# V% d* Y" Z2 a  Y
  7. #define PHY_REG_ANLPAR      0x05        /* Auto-Neg. Link Partner Abitily    */
    5 D! c5 T  d3 Y& E9 n5 i
  8. #define PHY_REG_ANER        0x06        /* Auto-Neg. Expansion Register      */% X4 {9 R  Z3 i% C
  9. #define PHY_REG_ANNPTR      0x07        /* Auto-Neg. Next Page TX .DM9161 NO */
    % b1 `9 v$ m0 @& C+ O) a! P

  10. * Q4 i& X: A% u: C
  11. /* Register BMCR bit defination */
    2 ^$ b: d; @! P/ S0 U4 O
  12. #define PHY_FULLD_100M      0x2100      /* Full Duplex 100Mbit               */
    ( n0 u& [% O+ s' a0 E
  13. #define PHY_HALFD_100M      0x2000      /* Half Duplex 100Mbit               *// y1 D: _# j7 e. M
  14. #define PHY_FULLD_10M       0x0100      /* Full Duplex 10Mbit                */
    + X/ s- v# Q4 M: Z" q7 U, b5 P6 y
  15. #define PHY_HALFD_10M       0x0000      /* Half Duplex 10MBit                */
    / @' M8 Z2 Q- j/ t9 M6 J; u
  16. #define PHY_AUTO_NEG        0x1000      /* Select Auto Negotiation           */
    : I5 k+ O% U" x1 Q# ?* w  u

  17. ( a4 b* i) V9 z3 j
  18. /* PHY Extended Registers  only for DP83848C */
    1 g; ]" e9 \- ^* D6 g3 G; a, m6 x  _
  19. #define PHY_REG_STS         0x10        /* Status Register                   */
    & \0 Z0 b5 S$ H6 `
  20. #define PHY_REG_MICR        0x11        /* MII Interrupt Control Register    */* e! p% `4 T- H
  21. #define PHY_REG_MISR        0x12        /* MII Interrupt Status Register     */: b( x  d* f1 @' r* U7 ]
  22. #define PHY_REG_FCSCR       0x14        /* False Carrier Sense Counter       */; S/ B2 A4 _) }2 U1 Q: L7 D% ~
  23. #define PHY_REG_RECR        0x15        /* Receive Error Counter             */5 {1 h' v$ @' m% ]( s, [
  24. #define PHY_REG_PCSR        0x16        /* PCS Sublayer Config. and Status   */& r6 Q, u7 L* j, X0 ~! d
  25. #define PHY_REG_RBR         0x17        /* RMII and Bypass Register          */
      Y; y6 P3 Q& j/ C  [7 W2 N% W
  26. #define PHY_REG_LEDCR       0x18        /* LED Direct Control Register       */, Q3 U9 j7 A; {
  27. #define PHY_REG_PHYCR       0x19        /* PHY Control Register              */
    9 U* s9 T% m# r0 I7 I6 h7 |
  28. #define PHY_REG_10BTSCR     0x1A        /* 10Base-T Status/Control Register  */' _3 b* [$ l+ `+ H
  29. #define PHY_REG_CDCTRL1     0x1B        /* CD Test Control and BIST Extens.  */# p; g  T( j! Z) L5 L6 k
  30. #define PHY_REG_EDCR        0x1D        /* Energy Detect Control Register    */* I9 ^3 W( I- Y3 _

  31. ) I* U. g9 \) z* S
  32. /* PHY Extended Registers  only for DM9161 */
    : E* Y" L" j( ]
  33. #define PHY_REG_DSCR        0x10     /* Specified Congfiguration Register            */
    . Y1 _; J# e' S6 D, y; \
  34. #define PHY_REG_DSCSR       0x11     /* Specified Congfiguration and Status Register */  q5 a6 {! _! k1 ^
  35. #define PHY_REG_10BTCSR     0x12     /* 10Base-T Status/Control Register              */- L9 b/ s: J& V/ N2 b
  36. #define PHY_REG_PWDOR       0x13     /* Power Down Control Register                    */
    7 i: o7 ^' ^! f( L! F
  37. #define PHY_REG_CONGFIG       0x14     /* Specified Congfig Register                   */
    , ?* y) N0 f6 z9 z3 c
  38. #define PHY_REG_INTERRUPT   0x15     /* Specified interrupt Register                  */8 g. r2 y: w4 l* o
  39. #define PHY_REG_SRECR       0x16     /* Specified Receive Error Counter               */
    " V/ c/ K7 @7 U3 J9 ^0 H" W
  40. #define PHY_REG_DISCR       0x17     /* Specified Disconnect Counter Register        */
    ' ^" K' x/ ]- k( H# d# m
  41. #define PHY_REG_RLSR           0x18     /* Hardware reset latch state Register          */; F4 e* S8 |8 Y7 W
  42. #define PHY_REG_PSCR           0x1D     /* Power Saving control register                */
复制代码
5 x) |( Z4 ?. ^" B/ D" c0 P- n8 ~
对于初学者来说,了解这些知识点就够了,具体如何配置这些寄存器会在下个章节讲解。
$ N' T& u4 V, y
5 r" K6 M  j- h5 d2 P: S! ~5.6   总结
) y/ u2 A$ g4 T8 |
本章节就为大家讲解这么多,主要是为下章节的讲解做个铺垫。学习完毕本章节后,务必将STM32参考手册中MAC章节读一遍。! W2 N$ ?  r3 B7 d" T
8 b+ t# O3 S0 A, V# J0 R* ~

, N5 I0 l2 ~2 k4 o0 r4 t* d  o' g7 ?4 q
3 t' Q5 n) j( v3 t
收藏 评论0 发布时间:2021-12-27 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

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