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

【经验分享】STM32网络之MII和RMII接口

[复制链接]
STMCU小助手 发布时间:2021-9-28 09:00
我们介绍了STM32网络控制器的SMI接口,SMI接口主要是用于和外部PHY芯片通信,配置PHY寄存器用的。  W5 u* O5 K% r$ ^: H: Q) k0 R

1 I; @3 J  P$ p3 Z* F

# S& J! }- i9 t2 K8 d" ]! d& G真正网络通信的数据流并不是通过SMI接口传输的,是通过MII接口或者RMII通信的。' n" R. ^- ?/ k; M+ [9 E
* i8 N- o9 h* @9 y. ^. _
1、MII接口! ?, V% w: L, F  k

( u# s) I1 Y+ v7 B- [! j4 {4 }介质独立接口(MII) 定义了10 Mbit/s 和100 Mbit/s 的数据传输速率下MAC 子层与PHY 之间的互连。
) m7 P* Z9 p% d0 |9 B4 k
13.png
管脚定义介绍:
% N  E+ q8 g1 g: p9 a6 b7 Y
; t! o% r" o# c) Y- s
' l* H& t$ l3 O+ A9 V
MII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。/ K! l  I- Y$ Y& j6 ^' U
/ N. |" v) I9 B0 @7 U
" @: m; c0 K( @
MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。: L* ]: x, |% a# }# d. t
& F' E5 U( E) f! V( X9 I  f
9 o4 N& K. b* y8 M) n
MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。
6 N, i9 D7 ^: f' V1 O3 u, m8 h6 J7 B/ e" }) M9 [' H8 y7 c

) j4 G; q  \$ c- E1 oMII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。
7 G6 f/ T9 W. L  ~* X/ e, y# @1 E
, f. ?/ R3 H& G6 }2 p# e" L8 A7 B7 Z
MII_RXD[3:0]:数据接收信号。该信号是 4 个一组的数据信号,由 PHY 同步驱动,在MII_RX_DV 信号有效时才为有效信号(有效数据)。MII_RXD[0] 为最低有效位,MII_RXD[3] 为最高有效位。当 MII_RX_DV 禁止、MII_RX_ER 使能时,特定的MII_RXD[3:0] 值用于传输来自 PHY 的特定信息。
' J6 f4 n: R4 K7 i
) |2 @4 z9 \% j0 v1 B

9 f/ p+ x/ o; v; ]- T0 eMII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV验证。1 Z+ t1 a/ b( m8 G: k: c- g# Y

6 K6 M% T5 w+ O1 Z: Y% K6 b  y3 w

% l5 L1 }! Y  r8 d/ K- pMII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。
# \& b4 p; S+ N3 v* t6 r; d7 ]6 E" X) i3 c

# a7 n3 Q, o+ e' v* @: X! {MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。+ {% F1 t" ^. u0 d) ]9 r
) J2 n( t. `; W

" w- v& t/ M0 }2 rMII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
7 E" C( @" @, s8 G8 B3 u6 m$ w. d6 N/ i8 y+ F9 v, L5 _, I  S5 B
/ i0 D) T4 h+ ?- ?- C  u
MDC:MDC信号属于SMI接口,具体请看《STM32网络之SMI接口》。
( [* W+ Q" U8 u# q/ F& b# r0 D2 t- \6 R. ]- r6 s* f! Q

4 Y2 L+ p& A/ L* O! i8 g  A; H, qMDIO:MDIO信号属于SMI接口,具体请看《STM32网络之SMI接口》。+ N! C% n; ]4 V) A
  }, B3 r; L5 y  s
. D+ `0 m2 D) K( K- s9 b
下图TX接口信号编码( C8 a5 I; ]8 S$ J7 Q2 {8 I" L. W# `
14.png
下图RX 接口信号编码
6 H2 v0 e6 U/ {$ m$ w7 Y: g
15.png
MII接口的时钟源6 ~' f: ~+ E2 _- ]. Q( T
* g. X( {5 q3 D9 P# A% G+ U* ^- z
0 i: n8 b. Z5 g, ^* I( H
要生成TX_CLK 和RX_CLK 时钟信号,必须向外部PHY 提供25MHz 时钟,如图所 示。除了使用外部 25 MHz石英晶体提供该时钟,还可以通过STM32F20xx 微控制器的MCO引脚输出该信号。这种情况下,必须对PLL 倍频进行配置,以通过25 MHz 外部石英晶体在MCO 引脚上获得所需频率。
; i  y4 E9 f& n  k# P+ v' l6 j
16.png
对应的代码( g3 d/ C% O% `: ]5 G! f# Q

  1. ; l6 t: Q! ?) x' C
  2. /* Enable GPIOs clocks */$ y$ O" d0 _( {- s# R3 t* T
  3. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);. \: w" T0 v' |
  4. , m9 i* _. u5 B' K: }
  5. /* Enable SYSCFG clock */6 z$ S6 B- f5 ]
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  
    3 J4 k1 ~" _7 Q9 N' D; ]- L

  7. ; H1 R% e2 _+ ~1 X) b
  8. /* Configure MCO (PA8) */
    ' [5 g6 z/ h2 `/ ^2 l
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    ( Q/ W$ q2 W  U! I: G
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;7 j$ }0 [' R  d
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    ( c3 q7 P) Q- ?; `* X) S4 I
  12. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;7 x4 M' T( T9 G
  13. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  9 R, q" r: L! g4 T7 P4 s3 Z# a( _
  14. GPIO_Init(GPIOA, &GPIO_InitStructure);
    5 ~5 [0 u' V: e. R' ]
  15. /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */
    # P* `% i4 T5 b6 E  e/ W" V
  16. RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);
复制代码
2、RMII接口2 |; }; d6 @$ \

5 U8 f! g! a3 d) v3 FReduced media-independent interface: RMII(精简介质独立接口)。精简介质独立接口(RMII) 规范降低了10/100 Mbit/s 下微控制器以太网外设与外部PHY 间的引脚数。
+ K9 R% k- M* U: L
' L' B; K) A' I- R6 z$ A( g

+ ~% F4 b2 Z# x. T# c& s3 W  K2 U- Y根据IEEE 802.3u 标准,MII包括16 个数据和控制信号的引脚。RMII规范将引脚数减少为 7 个(引脚数减少62.5%)。引脚的含义参考MII接口即可。
+ E/ l" L1 h& e. q3 e; n8 d
17.png
RMII接口是MAC和PHY之间的实例化对象。这些有助于MAC的MII接口转化为RMII接口。RMII接口具有以下特点$ }+ V( H3 y7 s

7 N0 Z; V+ r8 y2 d0 Q

; m# \( Z. d! z5 j+ B10-Mbit/s 和 100-Mbit/s 的运行速率
8 d: Z% d% Y% M$ h% A% S; @- c, a2 X8 Y! {; w
% h3 t0 p1 j3 |
参考时钟必须是 50 MHz/ z$ T" y/ F* s0 y9 `9 b
2 M  Z& v5 m) b+ h  B
* P) a6 C: N0 F" x: ]
相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY7 h( @  v- c/ X/ m/ b) ^0 B0 A

# z0 ?9 ^# U. a3 f
- d- s+ h9 r" j* ^
它提供了独立的 2 位宽(双位)的发送和接收数据路径
4 t, G: i. J, h) j- [) \- ]4 [/ l' [# V/ z- i; B
0 y# T2 x( X! N! f, L( X% Z) `
这里时钟管脚比MII接口少,有一个非常重要的点,那就是RMII接口时钟源必须是50MHZ. c% F" n! k, l% a, E% O& n* B5 U

7 V% B$ F% @# b$ _5 zRMII接口时钟源
! k6 o" E8 p$ U; g; |5 @
9 R3 K7 Z4 \, |' ?) T

: ~! R; Q) Z8 U" X6 i1 U  e  USTM32F207xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置PLL来产生这一时钟。
/ z5 A( C6 c& @- p# e- ^
18.png
使用外部50 MHz 时钟驱动PHY 或使用嵌入式PLL 生成50 MHz 频率信号来驱动PHY。5 S/ q9 y0 _* }$ `2 l
5 e' u1 u8 z* V# D

" c( S( N0 d* i* C8 w5 s3、两种接口对应的引脚9 |" W- h( S) Y+ Z

- y% j8 V( r' u8 J# a
1 J" ]5 i2 K( s; n( a+ l2 h
STM32F207VCT6(100pin)的芯片& M+ o+ f7 \! h: M% J

  1. / c; z4 @1 |! z7 Q7 \+ f# K
  2. Ethernet pins configuration9 o& |% S2 P- L2 C* @
  3. ETH_MDIO -------------------------> PA2  pin 25
    3 y# E" [: I" c/ m% {  ]& a% _( X
  4. ETH_MDC --------------------------> PC1  pin 16
    ' F1 \5 G+ y/ N6 ^4 r4 b, v
  5. ETH_PPS_OUT ----------------------> PB5  pin 91: o$ x' g# c/ C
  6. ETH_MII_CRS ----------------------> PA0  pin 23
    ' z8 i1 g( `% _3 p* }! e
  7. ETH_MII_COL ----------------------> PA3  pin 26+ k' g) P0 f* W( \7 m7 ?( o/ }
  8. ETH_MII_RX_ER --------------------> PB10 pin 47
    8 _0 c7 A$ L# ?, t/ P8 e
  9. ETH_MII_RXD2 ---------------------> PB0  pin 35: z* v+ v' H2 ?- V
  10. ETH_MII_RXD3 ---------------------> PB1  pin 36* {  h3 ^, r5 Y! K2 v
  11. ETH_MII_TX_CLK -------------------> PC3  pin 18
    8 A9 F3 }6 k& j2 X7 @5 T/ h# E: k
  12. ETH_MII_TXD2 ---------------------> PC2  pin 170 d' r; P1 k. W  ~! K  Q( c2 w
  13. ETH_MII_TXD3 ---------------------> PB8  pin 95
    , A2 d. H& \- m" Q0 m  |  l, s
  14. ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1  pin 24
      H; V5 G5 I* P) Z% E- N9 @
  15. ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7  pin 32* b( I9 k9 c7 p8 y6 o
  16. ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4  pin 33
    1 q8 p* `/ o3 Q* P  t: X' [  e
  17. ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5  pin 34- m, Q1 n' V1 v7 H. x6 J' P* |
  18. ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PB11 pin 481 n! D1 i5 F  B2 a$ O
  19. ETH_MII_TXD0/ETH_RMII_TXD0 -------> PB12 pin 511 ^2 \& K* b& @1 y- M) S
  20. ETH_MII_TXD1/ETH_RMII_TXD1 -------> PB13 pin 52
复制代码
其中ETH_PPS_OUT这个管脚ST官方demo屏蔽,不属于MII接口也不属于RMII接口。下面不将其统计进入。% R* _$ ^; Y1 A) ~/ u4 ~* J
5 [( R3 N$ @- X4 b
+ t. |: D3 o5 j5 y
MII 共15个接口加上SMI接口,共17个引脚。(没有包含25MHz时钟的引脚)/ c+ @3 J' Q' R2 R. _( [# I( @
19.png
RMII共7个接口加上SMI接口,共9个引脚。6 a6 G' I: M. S
20.png
除了上述我自行统计的MII接口和RMII接口对应的pin之外,ST官方在参考手册也给出了对应图,如下:* W* B$ t' N0 N, Z! Y8 C
21.png
4、MII和RMII的选择
$ _' `0 }9 L( ^$ Z  F. W, o( r- y1 O! p6 Q! G8 [# l3 S# ?

  w6 ]# O. T1 a使用SYSCFG_PMC 寄存器(注意:这里和F107不同,F107是AFIO_MAPR寄存器)中的23配置位MII_RMII_SEL选择MII 或RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置MII/RMII 模式。
, U. b& q) h2 h- H4 e2 F- p0 M2 O  q) y6 q6 I  [$ Z
1 K4 {- M  U! e$ s
对应的ST库函数为3 c- l* _# T  Y" Q* K
  1. //函数入参可选以下% ?. b4 e# n# ], y1 v: I% G8 v, O
  2. //SYSCFG_ETH_MediaInterface_MII: MII mode selected6 f1 A; f# k. M( b
  3. //SYSCFG_ETH_MediaInterface_RMII: RMII mode selected
    8 ~0 F# f" H, K& Z* U
  4. void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
复制代码
MII/RMII 内部时钟方案
: ?& _" Y% `, ~" w1 b" G& O! K( E+ \+ ?8 T3 q) R% A! h+ R+ F
/ o; `/ }1 _5 A+ k7 W5 g! t
支持MII 和RMII 以及10 和100 Mbit/s 运行所需的时钟方案,如下图所示。
9 b* Z, _2 H0 Q; a' C3 z
22.png
注意上图红框中:HCLK必须大于25MHz,这个问题点,在上一篇文章《STM32网络之SMI接口》中已经提到了,这里再次提到,如果不满足这个条件,可能会出现奇奇怪怪的问题,不好查找。& D# q7 n3 H, {# {: c

; \" w9 T* n, Q; b

" @. j: E# n3 V4 D0 z- ]) r在官方手册中,还有一句: y" n- }- F) x' H6 }+ B
23.png
要节省引脚,需在同一个GPIO 引脚上复用RMII_REF_CK 和MII_RX_CLK 这两个输入时钟信号。  _+ e9 k% U/ D- ^) L

! F3 s, J2 F% ^, ?3 h$ {
2 h/ E* |. m2 D& ~$ o5 ?9 k

- e' ~- z- G7 }  F5 I& V! d* N9 Z8 q4 U1 O* I
赞 收藏 评论0 发布时间:2021-9-28 09:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版