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

STM32网络之MII和RMII接口

[复制链接]
STMCU小助手 发布时间:2021-7-19 14:55
1、MII接口# \( M' T0 j1 \. a, I; @! X7 M( ^  Q
介质独立接口(MII) 定义了10 Mbit/s 和100 Mbit/s 的数据传输速率下MAC 子层与PHY 之间的互连。, H; d6 O& @/ e0 \0 y1 U
1.png
9 |: I' K' X5 V* |$ L管脚定义介绍:
2 G, F% X/ Z7 O
/ Y& g7 |% Z" Y) h. ^8 c% M

1 S) N, R7 s) T2 w3 C6 EMII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。" k9 h% h6 X7 p
) h0 c( E! L  s5 ?( y; p$ L/ Z

! h$ I' ]; F/ n. @, L4 EMII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。
' L" {$ i; l% w6 x, U1 r3 h! R3 z6 L+ T- M, S( L' v% l

, Y! L9 Q' S6 n8 o8 m& a3 }MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。. Y& d; w) G9 c2 F

+ Y+ [1 K9 v# u; L' Z6 o! O
5 E. u$ h' Z) v; ?) Z8 Q: f
MII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。
( m7 g( Q+ B2 ~( V/ J3 w" z+ r7 Q
& i" K5 U: X7 ^2 U" L
: Q/ t9 T: K( [7 j; B% g4 m
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 的特定信息。
0 Z% t& m8 o% T- n- p
1 [  n0 x% B+ X  [& i" @
; g; }1 q" z4 F) @
MII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV验证。
- [- W2 ]. R! n, c
6 E: O7 u1 x4 Z" N
8 z& S7 F7 |' g$ D, B! W
MII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。( J4 R4 B# T. p, T8 X

8 d' z+ i( \; Q. H- w9 a- ^
1 h  U+ E2 E# J7 \9 ^* Z$ H( X
MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。) D, y( ~) E- J( x! Z( w
9 M' {8 R. ]1 n' q  Y9 V
5 r; N+ o) a0 A0 j5 C
MII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
! Q- p8 Q; c& s/ g1 y
  ^  I& U2 w! S  `
. p5 @6 K( m5 H+ M( {: L2 N! b8 s  ^
MDC:MDC信号属于SMI接口,具体请看《STM32网络之SMI接口》& c6 i/ h; v) t3 R; m5 ]& V5 O

' B6 ?# ]5 z2 \% d6 B

/ E, a7 F! u9 E) ]) v1 d- ]# FMDIO:MDIO信号属于SMI接口,具体请看《STM32网络之SMI接口》
& m$ n6 Y' f8 h& ]: [
: ~: I$ O3 T9 j4 {# z1 A" y

9 Y2 ]7 l. c. J1 G5 M. w  T4 f$ p! H" S下图TX接口信号编码
& h; @+ K$ C) y/ q9 M5 ` 2.png
" N- i) M; }& p* [* a- P下图RX 接口信号编码5 \5 e- j$ f# q8 x) g
3.png
# g& q2 m' v; `& H; f+ a; X$ F2 r
9 V7 q$ T$ A5 l8 e1 u
$ |$ k! O5 W( p% x; b; n
MII接口的时钟源
' R+ ?1 U* u  K$ H9 V3 w7 n- T要生成TX_CLK 和RX_CLK 时钟信号,必须向外部PHY 提供25MHz 时钟,如图所 示。除了使用外部 25 MHz石英晶体提供该时钟,还可以通过STM32F20xx 微控制器的MCO引脚输出该信号。这种情况下,必须对PLL 倍频进行配置,以通过25 MHz 外部石英晶体在MCO 引脚上获得所需频率。
! ~, E% u: u* u9 a( K6 C0 h. B 4.png
7 j2 n0 n, ]# A对应的代码, O9 n; L  l0 S. a4 ?1 D- r' r
  1. <font face="微软雅黑" size="3">' t- u+ K" h2 ]# B/ S) p
  2. /* Enable GPIOs clocks */
    / l7 b" P# j1 k
  3. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);. d# I9 R6 [; V9 `

  4. 8 |8 r' d1 q4 o2 B9 K$ t6 Z" w
  5. /* Enable SYSCFG clock */
    # q* w$ v; H: M2 n& D2 z
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  
    ! w3 L7 _0 d; F$ |; i: D' D5 ^: r  Q7 a

  7. 4 p, t% u1 R4 t3 S. t  E5 N; i+ L
  8. /* Configure MCO (PA8) */
    5 O) Q3 h4 ^6 R
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    6 `- o0 j% S+ a0 {# k" {
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;% v  N/ Z" p1 i$ a. i* M
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;1 P, U' p8 J$ h0 m6 ~- a
  12. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;; k, z  o: i' O6 R2 N8 ?" n
  13. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  
    , O9 g. @9 E# l% Q. Q, C  b
  14. GPIO_Init(GPIOA, &GPIO_InitStructure);1 H+ q& p4 I+ g. q$ d
  15. /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */( C9 B! X# Q9 b  v
  16. RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);
    " t' C. N7 I  u
  17. </font>
复制代码
2、RMII接口
) O( V( h9 q  l8 f* e* zReduced media-independent interface: RMII(精简介质独立接口)。精简介质独立接口(RMII) 规范降低了10/100 Mbit/s 下微控制器以太网外设与外部PHY 间的引脚数。- ?# o6 M  X) i) }4 [, j& e; d

. k9 G+ J5 ?" _$ H
! ^! ^& [4 l( u6 Z8 a7 o
根据IEEE 802.3u 标准,MII包括16 个数据和控制信号的引脚。RMII规范将引脚数减少为 7 个(引脚数减少62.5%)。引脚的含义参考MII接口即可。- T: J" [/ c# Z; ~3 N
5.png , ?6 x2 y. {) S# @) x
RMII接口是MAC和PHY之间的实例化对象。这些有助于MAC的MII接口转化为RMII接口。RMII接口具有以下特点
" S9 m% Y9 C6 q2 o* R: R/ s* ]3 y0 M7 L9 A5 u, |# k" }
( T$ `4 Y* n7 W
10-Mbit/s 和 100-Mbit/s 的运行速率
" p$ h, n( f5 J
( N4 D$ h  Z# v

5 k% X# ^) Y9 c' i参考时钟必须是 50 MHz
4 Y$ J, U% O* ^. n  U+ V, Z$ Y" ?4 n. D$ [

9 D0 j. c  _! T! Z相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY" O( |& W: E: N/ f
2 W+ `3 k1 Y- ?+ A

; U( Q# X! S! x它提供了独立的 2 位宽(双位)的发送和接收数据路径# \8 w# d7 y+ I' x" G" ?+ A" D
. B) {- v0 @; ^; |; V+ E; A

! `3 X' O  E" R' K这里时钟管脚比MII接口少,有一个非常重要的点,那就是RMII接口时钟源必须是50MHZ- Z- a' }/ Y0 m0 {0 ^: T
, l! E5 s0 Y/ k+ b: @
+ M; T  Q' {6 ^0 j$ Z& m
RMII接口时钟源
1 ?- Q& k6 s& ^5 l3 y0 E% w) N* x
6 g: U  Y; N. u; ]

: L! f$ T$ @* N" h. E: P# n5 n" lSTM32F207xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置PLL来产生这一时钟。: R/ ?4 s/ j4 Y/ K3 \' X
6.png
+ ^+ U, z4 `. j  }3 D& P使用外部50 MHz 时钟驱动PHY 或使用嵌入式PLL 生成50 MHz 频率信号来驱动PHY。# X  O0 K1 H# O9 o1 z. M' O

1 J# c  f2 k$ k
4 |$ R4 |8 e  U+ ~$ o/ K
3、两种接口对应的引脚7 G0 `% k3 t) Q& d# p
STM32F207VCT6(100pin)的芯片  L1 J$ \3 x9 a' T
7.png
4 A( d) n" V! K: [! p) E7 q其中ETH_PPS_OUT这个管脚ST官方demo屏蔽,不属于MII接口也不属于RMII接口。下面不将其统计进入。/ Y/ \9 f$ F6 t0 G8 w. b

+ Y$ Q3 T2 `0 l/ P( X

4 `  Q) j( v0 p0 D/ @  Z- bMII 共15个接口加上SMI接口,共17个引脚。(没有包含25MHz时钟的引脚)
2 l- P! S: U6 o9 A" M! g1 p; G 8.png
% }& O- E: m0 `" W; J$ y! ]RMII共7个接口加上SMI接口,共9个引脚。8 I& u1 {, D" m; W, I
9.png
+ A- U2 X& H/ f2 [- U/ |/ `2 a除了上述我自行统计的MII接口和RMII接口对应的pin之外,ST官方在参考手册也给出了对应图,如下:, J& N, Q3 D# s
10.png 8 ]: U: s5 e+ l9 V/ t+ T( @- l
) u' E; ^, ~5 e* R7 |1 p

. O) ^& z3 k  f" Y4、MII和RMII的选择# D8 d  o' {6 u* F. i
使用SYSCFG_PMC 寄存器(注意:这里和F107不同,F107是AFIO_MAPR寄存器)中的23配置位MII_RMII_SEL选择MII 或RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置MII/RMII 模式。+ h3 y  b$ w/ @' h

9 m+ ~2 f/ {" `/ l1 F
9 ^( O5 f, S8 N0 Z4 i1 P
对应的ST库函数为# }. ~2 M7 v3 [. K) s' K- w( X

5 K; y% ]  J, a: s- b4 l
  1. <font face="微软雅黑" size="3">
    ) p5 K* D+ w, ~. u6 ?
  2. //函数入参可选以下
    4 G; Y& Q& h; G& k6 W
  3. //SYSCFG_ETH_MediaInterface_MII: MII mode selected
    . _1 U# G( w/ t0 z. M/ I0 s4 L% \
  4. //SYSCFG_ETH_MediaInterface_RMII: RMII mode selected1 A- E$ g# D0 f, B9 P. X
  5. void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface) $ G+ d8 C% D5 |5 ~
  6. </font>
复制代码
MII/RMII 内部时钟方案$ Z: E. p; ]1 b

; {7 W/ w& P. f2 U5 f: Z" }& W

- N. w" J; {  U. a" r# x) w5 |支持MII 和RMII 以及10 和100 Mbit/s 运行所需的时钟方案,如下图所示。
7 L" t* q9 n- S" Y* X. w8 S- ] 11.png
  k: x8 s) |( I9 \注意上图红框中:HCLK必须大于25MHz,这个问题点,在上一篇文章《STM32网络之SMI接口》中已经提到了,这里再次提到,如果不满足这个条件,可能会出现奇奇怪怪的问题,不好查找。
4 P- `4 h$ E  |: S/ L$ U
0 F2 H  o- ?: e. S" q7 O, }

  ~  n/ d2 G/ [6 T4 A, H- j在官方手册中,还有一句9 |7 j; F* f7 U, s
12.png 3 S- b+ x1 {, N; n$ B5 W3 G, |5 }
要节省引脚,需在同一个GPIO 引脚上复用RMII_REF_CK 和MII_RX_CLK 这两个输入时钟信号。& h. f/ h7 l" p  Z

- c  B+ |5 u( s. o  h9 }- E: N
# n" V4 Z5 O% S: g
收藏 评论0 发布时间:2021-7-19 14:55

举报

0个回答

所属标签

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