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

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

[复制链接]
STMCU小助手 发布时间:2021-9-28 09:00
我们介绍了STM32网络控制器的SMI接口,SMI接口主要是用于和外部PHY芯片通信,配置PHY寄存器用的。
0 r; Z6 g  G) {
1 k/ r+ m/ w% X: e1 q+ p  ?- S
1 S- P" y! W7 s# G
真正网络通信的数据流并不是通过SMI接口传输的,是通过MII接口或者RMII通信的。& v2 l0 Y) d6 l+ \3 S" T7 p5 x4 n

; d. v- e1 I3 i1、MII接口
: o/ y0 i! V/ |0 A+ p" h' i+ o! c7 o" |3 @, B/ y0 U2 F
介质独立接口(MII) 定义了10 Mbit/s 和100 Mbit/s 的数据传输速率下MAC 子层与PHY 之间的互连。
, n: j: H9 K- Y2 W
13.png
管脚定义介绍:4 D$ d  u0 @+ N" a+ b7 S  M/ g
) u0 z( C& m4 r3 b

# l( m3 ~3 Z. k+ @9 \1 IMII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。
: n2 M9 d9 v$ ~9 e- I/ E  r5 i& y8 c( w" ]" o9 a8 G- D  c
! l2 a  s9 o! Y0 }2 m( \: O5 L
MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。
5 a' B3 u' W9 a% s, f( G3 J/ d. k* x% Z2 J
- Y4 d2 T: }4 M( j
MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。2 P+ y% f6 T/ i+ j/ t

4 p# o: f4 X: I. ^
' `. M( J* f0 ~# l* ^' n
MII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。* {. p1 s* s, g# I( I: ?
3 _" W2 \' E2 p- v6 e! b

) ?% a8 |2 W0 G- {) dMII_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 的特定信息。
  g8 [' H/ j) K- w/ v
8 I* \5 a& G" ?

# R8 c, `1 J9 O7 o3 DMII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV验证。
( Z/ H  t- g; A* Y3 t# P- \) \/ Z2 A) d; J( O

& u$ H0 Q4 h) x, \* a2 V; _MII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。2 U0 q* n3 v8 R2 z/ d; {$ R

5 _! K# f& Y) s1 p' o- E
* f+ p# Q9 p5 Y: U9 C6 O
MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。* J* p$ Z1 B! A

9 w7 g, N0 p3 t4 I
. I: E  b9 P; p$ U, s- D" M. @
MII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
1 h6 B' S) t) h' r% D. m7 l
, ?. r8 t" r! s: ^6 Z$ [
8 L7 J; `" H& ?8 o
MDC:MDC信号属于SMI接口,具体请看《STM32网络之SMI接口》。0 ]. z( ]. _' U( y# B
9 t1 k& R/ \5 B* e

+ \5 A* v8 J. k# X- G. y. Y6 uMDIO:MDIO信号属于SMI接口,具体请看《STM32网络之SMI接口》。
* _( e+ _6 I  d2 }
# \! F9 W0 Q) m* L' R3 R+ n
+ o% p& J& q( H0 X+ x4 n+ a5 r5 v' t
下图TX接口信号编码
9 `" P6 z1 H  n4 m, D! `3 s
14.png
下图RX 接口信号编码6 d5 G" u3 c5 H/ T8 V) ?, z) X
15.png
MII接口的时钟源
& P- W$ T* h5 t2 B& c  b$ x4 q4 t6 n  `% E

' ~1 \' ], v7 K要生成TX_CLK 和RX_CLK 时钟信号,必须向外部PHY 提供25MHz 时钟,如图所 示。除了使用外部 25 MHz石英晶体提供该时钟,还可以通过STM32F20xx 微控制器的MCO引脚输出该信号。这种情况下,必须对PLL 倍频进行配置,以通过25 MHz 外部石英晶体在MCO 引脚上获得所需频率。% h: K" n( m; a0 Z6 e/ q
16.png
对应的代码1 J: p& I; B- m: N% [2 ~/ u9 c  f) w
  1. * d' G* I- j. M) X4 r, d
  2. /* Enable GPIOs clocks */" ~$ w1 S6 A6 U" i2 l: r
  3. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);) M7 h4 _8 O! u" S2 B
  4. - G" i. `- n1 l+ Y
  5. /* Enable SYSCFG clock */$ r6 |/ x* \+ x) R  O$ Q
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  6 b. {! v6 d! F; L. ?
  7. , ^" m4 F, Z9 r
  8. /* Configure MCO (PA8) */
    ' o# V- S! G/ B" R* q8 Y
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    * i- }4 F, K# T4 V' q
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    8 D. A2 d0 f, v6 Q* Y2 Y
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    ( F1 R8 |0 L. `  k
  12. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;# O' L2 ?+ ]$ R
  13. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  
    * M# @( `) g% L6 @% o5 d
  14. GPIO_Init(GPIOA, &GPIO_InitStructure);
    $ Q7 e! g( j0 E$ n
  15. /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */
    1 T0 T, w3 [) q; N# x
  16. RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);
复制代码
2、RMII接口
! C, y) _5 e- z* h" O( e
# O5 E7 F5 Z' R7 n9 KReduced media-independent interface: RMII(精简介质独立接口)。精简介质独立接口(RMII) 规范降低了10/100 Mbit/s 下微控制器以太网外设与外部PHY 间的引脚数。- O& ]* m# h' h3 f

9 ^4 `! d  N8 J9 z9 q2 n
6 o. ]: |3 v4 r/ s4 f+ B/ Q, e
根据IEEE 802.3u 标准,MII包括16 个数据和控制信号的引脚。RMII规范将引脚数减少为 7 个(引脚数减少62.5%)。引脚的含义参考MII接口即可。, {0 @7 g, ^* {' h- |9 \
17.png
RMII接口是MAC和PHY之间的实例化对象。这些有助于MAC的MII接口转化为RMII接口。RMII接口具有以下特点# Z' [8 A! T; t7 Z

: H+ ?6 K" U- T  d1 b2 B
' A" b7 o3 @- ]6 z7 u
10-Mbit/s 和 100-Mbit/s 的运行速率
9 E! u/ C9 c4 T, m3 ]7 ]1 y! D+ Y# A3 U( U

- f: a4 K9 P5 s6 W2 y参考时钟必须是 50 MHz
) a2 m1 e' S. m9 x
7 ~, z+ C8 O5 o

( E9 {, P* F) j) O7 J# p/ [相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY
5 ~% z: ?1 @: g% m6 ?1 U1 r. C+ \  f5 x* t! M0 [% \( i  w

8 N; G& u: e5 y- ^% ~  @  |/ E它提供了独立的 2 位宽(双位)的发送和接收数据路径/ P) l( s7 M/ v% e* D9 n5 W
! Q* T- z: i. X/ c6 V) K

. j0 v. W' S8 E# r; r这里时钟管脚比MII接口少,有一个非常重要的点,那就是RMII接口时钟源必须是50MHZ
% S) p0 A( R, N# k, o. T% D2 }5 {
$ K3 Z) H' R- W! XRMII接口时钟源
. d+ z" X* A1 l; s: H2 m
" H. B( d# w  q

  C  ]: ]: O+ y: ~  F/ V. xSTM32F207xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置PLL来产生这一时钟。$ h4 W; ~/ ~* k8 ~
18.png
使用外部50 MHz 时钟驱动PHY 或使用嵌入式PLL 生成50 MHz 频率信号来驱动PHY。
  l( k* {! b& F3 w, C0 B0 {4 V6 O0 h' w
/ w9 k7 q# m  \" V$ D
3、两种接口对应的引脚2 {1 _& J) [* {( e% E2 T
: `. [2 [) v1 N

$ X1 Z. ]7 D4 U/ cSTM32F207VCT6(100pin)的芯片
/ T, D1 T8 N- k4 x* F

  1. ( f  b* f1 X4 y, F& {
  2. Ethernet pins configuration" l* a7 x, `$ y: a% m
  3. ETH_MDIO -------------------------> PA2  pin 25
    1 W: [4 b, v1 @2 h6 N& e2 w
  4. ETH_MDC --------------------------> PC1  pin 16
    " x* A$ {4 Z1 P" Z/ l* T2 R
  5. ETH_PPS_OUT ----------------------> PB5  pin 91, ?6 ~" _. m* |6 X1 P
  6. ETH_MII_CRS ----------------------> PA0  pin 23
    8 e8 Q  i1 v: A: j7 A6 C% E
  7. ETH_MII_COL ----------------------> PA3  pin 26
    4 h( Q& n4 N, O6 @
  8. ETH_MII_RX_ER --------------------> PB10 pin 47
    5 x0 Q( y, n8 t% d: U0 v
  9. ETH_MII_RXD2 ---------------------> PB0  pin 35
    ) g* P: q0 ^$ E* p% E& M2 v1 K
  10. ETH_MII_RXD3 ---------------------> PB1  pin 36
    ; ]! W* H( ~- \0 `' [) \7 k
  11. ETH_MII_TX_CLK -------------------> PC3  pin 18
    5 K7 j  L! n7 j8 U( a
  12. ETH_MII_TXD2 ---------------------> PC2  pin 17
    ! [9 q0 {) A* G0 r
  13. ETH_MII_TXD3 ---------------------> PB8  pin 95
    8 X' `3 ?  T2 C& a( H; z% I$ c
  14. ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1  pin 24
    # n5 `4 c* l' z3 }5 C
  15. ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7  pin 32
    & p+ o8 O& B+ |4 V8 M
  16. ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4  pin 331 y- Z3 R7 |8 x$ _5 G5 Q9 y
  17. ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5  pin 347 Q; E- |% ^2 q# X1 a( U' U
  18. ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PB11 pin 48
    . V' j5 F+ Y3 |. Q9 S
  19. ETH_MII_TXD0/ETH_RMII_TXD0 -------> PB12 pin 51' e) f2 m: r: Y1 Q8 i& L
  20. ETH_MII_TXD1/ETH_RMII_TXD1 -------> PB13 pin 52
复制代码
其中ETH_PPS_OUT这个管脚ST官方demo屏蔽,不属于MII接口也不属于RMII接口。下面不将其统计进入。. y$ x+ t/ m* a' I
6 w% ^& {' @1 ?) K9 t8 o! i4 k
& O- F5 n) S, T6 w) N
MII 共15个接口加上SMI接口,共17个引脚。(没有包含25MHz时钟的引脚)
' s; L9 W) x/ L( [" n" a
19.png
RMII共7个接口加上SMI接口,共9个引脚。
5 L) N  _6 h8 [
20.png
除了上述我自行统计的MII接口和RMII接口对应的pin之外,ST官方在参考手册也给出了对应图,如下:
/ _2 d" a' w4 Y  U' X
21.png
4、MII和RMII的选择) X* T' X( a5 a2 N

3 L% ]. k. V1 ~/ {" r0 S7 i

" i/ P* J- G, c+ E  G8 ^4 Q* C使用SYSCFG_PMC 寄存器(注意:这里和F107不同,F107是AFIO_MAPR寄存器)中的23配置位MII_RMII_SEL选择MII 或RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置MII/RMII 模式。
7 H  G2 c0 f, B+ \# E: q
% L! k& J) {- ?4 C! K1 a1 A
: Q" |, s3 y% @
对应的ST库函数为# P5 C! r4 D1 V' n
  1. //函数入参可选以下
    2 ^1 f/ u" ^) G! l# M0 j3 h
  2. //SYSCFG_ETH_MediaInterface_MII: MII mode selected5 A' R6 k' @; ^
  3. //SYSCFG_ETH_MediaInterface_RMII: RMII mode selected& \6 y' \& ]; J( G  Y- @( u# ^
  4. void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
复制代码
MII/RMII 内部时钟方案( P; k8 [+ B  V! t3 A# [$ O5 @1 ]/ H
, m* O- X9 c! i" k

5 k6 y" V) [9 D支持MII 和RMII 以及10 和100 Mbit/s 运行所需的时钟方案,如下图所示。
& w# u' H* h' V) e. t' T" L
22.png
注意上图红框中:HCLK必须大于25MHz,这个问题点,在上一篇文章《STM32网络之SMI接口》中已经提到了,这里再次提到,如果不满足这个条件,可能会出现奇奇怪怪的问题,不好查找。
5 x+ N3 E& ~3 j1 |( O( u3 w4 \
9 T, _& k1 l+ E: N

' P5 o1 v$ u" @+ G" M# K在官方手册中,还有一句
0 b/ o. p9 x, x' ^9 w8 j
23.png
要节省引脚,需在同一个GPIO 引脚上复用RMII_REF_CK 和MII_RX_CLK 这两个输入时钟信号。" r" s: r3 p2 }. \

. P; H9 R; S) ^' \+ L$ i' b
1 v) g, A1 z3 Z5 [" p- ~
" S6 i' d) @! S+ [" H
' b. _' b8 ]. o. c' J
收藏 评论0 发布时间:2021-9-28 09:00

举报

0个回答

所属标签

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