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

STM32网络之MII和RMII接口

[复制链接]
STMCU小助手 发布时间:2021-7-19 14:55
1、MII接口
1 O5 {1 Z$ G5 w5 n: E  N8 a0 ?* R介质独立接口(MII) 定义了10 Mbit/s 和100 Mbit/s 的数据传输速率下MAC 子层与PHY 之间的互连。! s3 r  Q+ C6 Z- P0 c9 Y
1.png ! R% a2 l1 U0 |+ N7 |' r
管脚定义介绍:
# h8 x: O' {3 \+ x" y! x& S. _# X- y2 |2 r( v
& I; V) o% f4 d- F) _# h5 J% a; h
MII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。
& ~8 r- k( a4 s( q' G& o& Q: l. u6 p8 x- Y
! m8 D2 H6 ?. J7 u' H9 g- i' [
MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。
1 R3 X3 |  t4 b1 F: G" a! Y  z
7 |1 f( b' V9 C. K, C

/ k& {0 p; l: e6 g, @MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。. x: `4 [" S- ~1 l4 Q4 c

1 s, Q5 e0 f. r% K

' b( q* }4 S% Q5 \9 vMII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。
; Y% @8 n! d) v% T* D2 U2 Z/ D8 ~4 ^4 t2 U$ P% P; g

+ V- ]% a+ g3 l# B8 @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 的特定信息。4 M8 a% b4 \8 V. ?# U. b

5 P+ ?! |( D1 u3 V% d( n

5 U  Q$ D; n0 ^+ \) k4 GMII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV验证。/ Y& s8 h* S6 V' [& D3 B! `- Z0 g  u; X

$ Z8 Z: a+ N7 O$ V
; }5 _  c4 ^$ _' R/ k
MII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。
- b/ A5 P3 i! e+ b0 U
4 {0 \( L7 M! b( ~, ^/ M# j

3 c  K. E* s5 O- R0 r8 F* c. i; n4 ]MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
" n2 O+ |$ A! M1 L8 U* J" Y6 H, {+ k: \( z* f3 `3 D8 H+ L0 n) G
% u; `4 ]( Z9 x( @& m. ^% M
MII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
( I+ ?; f% ?6 b2 a" x$ l7 ]* i; \/ l  v1 k

4 G" Q9 `  }6 g" AMDC:MDC信号属于SMI接口,具体请看《STM32网络之SMI接口》
& m! S5 }* r5 F" P
4 N) K; s4 @; \! l% Q

( \# X. R' Q. Y- O+ F. yMDIO:MDIO信号属于SMI接口,具体请看《STM32网络之SMI接口》
7 f1 j4 E2 Y0 {  c, M0 Z  I) \* }# b2 l6 n# U6 ?1 u8 @  m  [5 d& c
- n: ~; G, q; k! V! ]& |, ^
下图TX接口信号编码
7 p% @, R2 K3 R( c8 u 2.png
, e, z9 }7 T$ w2 j* U# Z" k下图RX 接口信号编码, ~; Q$ J% V; |2 t
3.png
& V* \0 Z9 l+ b. t+ U# ?$ ~
0 l: W$ x6 [) N0 x

( M+ e9 {) j! P3 b) E1 FMII接口的时钟源/ g; g0 S3 ]+ @* F
要生成TX_CLK 和RX_CLK 时钟信号,必须向外部PHY 提供25MHz 时钟,如图所 示。除了使用外部 25 MHz石英晶体提供该时钟,还可以通过STM32F20xx 微控制器的MCO引脚输出该信号。这种情况下,必须对PLL 倍频进行配置,以通过25 MHz 外部石英晶体在MCO 引脚上获得所需频率。9 Z* b  {( O- C) D2 Y& ~) k3 O
4.png
2 Z3 w- k& B9 i" j) R/ J1 M对应的代码5 g4 a0 C2 y( Y& E
  1. <font face="微软雅黑" size="3">
    / t# @" o: ]6 |. W+ J4 k
  2. /* Enable GPIOs clocks */
    - x3 _* I* _+ E1 J  k% T  y0 f
  3. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    7 l1 ^/ Z& O$ v

  4. 8 h3 Z* j9 @- u( D2 Z8 e' W6 a8 j
  5. /* Enable SYSCFG clock */( h5 v  g5 K1 \" V# a- Q
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  
    ! G4 P! i4 X, q- x* W! i( p5 p

  7. 0 @! l# ?+ k6 P+ }  }1 e) }
  8. /* Configure MCO (PA8) */
    # O- A* c$ x+ c2 J
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;. q6 b, d: X9 X4 `. F, V+ }6 Z
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;! F0 v- H$ I7 D7 u6 G9 P: }" o5 l
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;1 x' N. B1 H- V( m* a6 H% O3 x
  12. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    4 A4 ~) m; S) z* l( B; m9 ~* a
  13. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  , U# ?1 B) ^0 z% q1 }. \8 I
  14. GPIO_Init(GPIOA, &GPIO_InitStructure);' O4 T: u& y* o  t. e$ K& h
  15. /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */
    " e6 c- x0 \1 B+ Q$ B
  16. RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);5 d5 T0 [' _( J) }
  17. </font>
复制代码
2、RMII接口
8 f8 f4 r7 U' g- t7 C) U) ]# }Reduced media-independent interface: RMII(精简介质独立接口)。精简介质独立接口(RMII) 规范降低了10/100 Mbit/s 下微控制器以太网外设与外部PHY 间的引脚数。2 h- k: Z0 Z0 P( d2 x, j
- W% ^2 f% Q; M
, H: D( C3 X& E" d- S
根据IEEE 802.3u 标准,MII包括16 个数据和控制信号的引脚。RMII规范将引脚数减少为 7 个(引脚数减少62.5%)。引脚的含义参考MII接口即可。
% K% ~- ?) S; m' a 5.png * l8 w$ D) w: a
RMII接口是MAC和PHY之间的实例化对象。这些有助于MAC的MII接口转化为RMII接口。RMII接口具有以下特点
' [" v  u- n2 |7 G8 }9 u2 W
! l  D$ n' p3 m" _; u' A& P/ j

/ b# Y8 |7 m% V7 U( d- _# k% k10-Mbit/s 和 100-Mbit/s 的运行速率
" D/ D2 G0 h, _' M& M1 T4 `  G# y" M  [  ]3 [

2 y: I8 Y6 J5 p% ^1 s1 \参考时钟必须是 50 MHz
! c1 J0 W8 ^3 S/ _1 f: m- A
, E! @6 s. N. l1 ]0 G: u! b

" U% c: D8 C7 u+ T! ^+ `相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY
& S* X# z$ w; l8 h4 D. V& r5 x/ z2 F0 S0 V$ x  }

, Y4 T1 @: T1 B  T* i/ U它提供了独立的 2 位宽(双位)的发送和接收数据路径; A5 L8 ^+ _$ V9 _& }" g4 n8 L: |

8 S% B) U1 Y) S) R
; o" L, @$ O# i9 x5 ^" V
这里时钟管脚比MII接口少,有一个非常重要的点,那就是RMII接口时钟源必须是50MHZ
% Z! Y6 ]- P+ [+ u2 \# F  O5 u- p9 l# B# F3 y
4 `6 R! L& N" l- P6 A: x: {* M/ {
RMII接口时钟源
* I+ ~" J2 z6 ~$ F  {5 x0 z! r+ Z) e7 B" M
- K' N5 X+ ^+ z+ V0 a1 |
STM32F207xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置PLL来产生这一时钟。' j( R! l1 `3 t8 P% P9 b$ x, G
6.png ( |3 M2 E% k% L9 V4 M
使用外部50 MHz 时钟驱动PHY 或使用嵌入式PLL 生成50 MHz 频率信号来驱动PHY。
" R3 q, A2 v" r3 j
- }* s4 E+ F- W+ `& S/ |7 |% Q

* h3 j/ e1 l) v4 ~' V# T3、两种接口对应的引脚
4 O# N# S% R; V* F$ j0 y, FSTM32F207VCT6(100pin)的芯片7 k' f- S/ E5 D
7.png 0 {; z# _* N7 y
其中ETH_PPS_OUT这个管脚ST官方demo屏蔽,不属于MII接口也不属于RMII接口。下面不将其统计进入。3 }, L  L' _5 ^

# o. C- W* x- v

2 }8 m8 k: J) A3 \: I& o* ]2 ]MII 共15个接口加上SMI接口,共17个引脚。(没有包含25MHz时钟的引脚). Q, {; _0 t! z" X
8.png 6 B2 F3 R& Y) |& Z* y1 y* V
RMII共7个接口加上SMI接口,共9个引脚。8 P2 y6 W! R+ c. P2 i6 v4 x( L& _
9.png
+ p. @! |# a$ q1 Z3 U- l除了上述我自行统计的MII接口和RMII接口对应的pin之外,ST官方在参考手册也给出了对应图,如下:9 o8 \% Y3 r# K1 e9 P6 W8 l
10.png 2 |7 y$ Z. K0 u" ~5 h
+ |1 n. g( c! b' w0 e
4 N4 s4 n4 X3 f8 S) G% ^4 v- j9 x/ N) `2 Y
4、MII和RMII的选择- ~% b; k* F( i2 [4 ]0 d+ \3 [
使用SYSCFG_PMC 寄存器(注意:这里和F107不同,F107是AFIO_MAPR寄存器)中的23配置位MII_RMII_SEL选择MII 或RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置MII/RMII 模式。% w5 `% [& f, J8 `% M, @4 M3 ^7 J
' a4 @8 k6 S5 O( C

8 h- V8 C$ |4 X对应的ST库函数为
9 _+ Y$ Y" q5 h  T* [) |8 I7 a3 i: v' i' z; g
  1. <font face="微软雅黑" size="3">9 \2 B" {& C( j/ K8 a; I
  2. //函数入参可选以下
    # z& v  T" [" Q/ E+ Q5 B8 u6 K: T
  3. //SYSCFG_ETH_MediaInterface_MII: MII mode selected5 |5 |4 b# B% W) \/ U
  4. //SYSCFG_ETH_MediaInterface_RMII: RMII mode selected
    / j" L* s) |9 G7 ~" `: z3 T
  5. void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
    ' p2 K- t) j# s8 O( W0 i8 C4 w. t0 l6 r0 {
  6. </font>
复制代码
MII/RMII 内部时钟方案
* ]& [% a. f4 X4 j1 K' \8 [' e3 q6 d2 }: R% X; n: O

, q! s+ X% u, _支持MII 和RMII 以及10 和100 Mbit/s 运行所需的时钟方案,如下图所示。% k* n' Z; E, s; x/ l6 ]6 `
11.png
0 i3 |! z5 m4 R0 L注意上图红框中:HCLK必须大于25MHz,这个问题点,在上一篇文章《STM32网络之SMI接口》中已经提到了,这里再次提到,如果不满足这个条件,可能会出现奇奇怪怪的问题,不好查找。4 d/ O9 \5 p, {7 a- {
+ R3 v/ b3 D* Z( c5 U

- T1 n5 e2 H- Z% S7 `9 D, B在官方手册中,还有一句# r4 q0 Q' V& ^; [, q8 u
12.png
8 D) }) L0 R8 |! G0 z' i要节省引脚,需在同一个GPIO 引脚上复用RMII_REF_CK 和MII_RX_CLK 这两个输入时钟信号。; D* R$ e0 O- F3 o( T
6 j% I: M6 z5 K1 Z1 V+ O+ ]

: y2 B# g+ p# ?5 h7 o) ^5 j6 J4 w
收藏 评论0 发布时间:2021-7-19 14:55

举报

0个回答

所属标签

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