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

STM32网络之MII和RMII接口

[复制链接]
STMCU小助手 发布时间:2021-7-19 14:55
1、MII接口4 C3 y1 p1 a& v: ]) r4 R, r
介质独立接口(MII) 定义了10 Mbit/s 和100 Mbit/s 的数据传输速率下MAC 子层与PHY 之间的互连。
- M& C( Q% n" B  U. w 1.png , b6 ~1 x0 f/ a, t, u: K
管脚定义介绍:. r) w8 `* n0 k+ }% [. x
- ^' A# i1 g; G+ O: y9 {

4 ^6 W1 |2 d! OMII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。9 [" E4 I: ?7 W

9 j4 o( J/ E+ f- S9 r- m, Y' v

& v7 A6 z3 H2 a& w1 y  J1 \4 TMII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。, }4 ?3 _3 ^$ _6 D
9 b, U  [# P2 H. G; \7 P

1 D# \9 L0 y7 p2 dMII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。! n9 z, h8 P% q4 {1 R/ M

) T1 x: S- a4 m! t9 A7 E6 U

7 X, X2 L( Q6 Z# x) N( UMII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。
6 }# v1 a, A8 D8 j2 N# x, V% T
( D- M) ~5 @% {* j8 _  ~( d3 i7 t
1 c$ D8 C; y$ a
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 的特定信息。3 C& P+ T& f: J6 I

+ y- n; t0 L; j- a
5 P4 G- P5 N4 p. u4 V
MII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV验证。
$ S8 U2 O& }' Z, m& H! f7 F* _, i# g9 n2 I/ B4 k4 e7 {3 Z

9 \2 ~" U$ B% p+ IMII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。, ^, p7 z2 j2 N5 r

/ G2 e' C" O9 z  T8 |; d! G

. R; j, k/ q! `2 s" TMII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
$ w% v# A+ e8 g% H9 r' x' b% v9 w+ R. g5 W* f' B5 ^

( Y- H4 s) y4 s$ t/ t' R$ H3 f, U4 hMII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。
* r: x: C9 d# }5 z2 A- a2 Y: B7 q+ X2 P  b% v) T8 g. b7 I% Y0 F
/ y% J+ E9 k# Q9 q( J' W: W4 `0 w* L
MDC:MDC信号属于SMI接口,具体请看《STM32网络之SMI接口》。
$ M1 |! S6 [8 Z. g5 z9 ~' g! E' d+ w8 I  b8 o+ M- l

; E) [0 z: m# y# @MDIO:MDIO信号属于SMI接口,具体请看《STM32网络之SMI接口》。
, w) u& {$ Z3 c" }: s* c2 @/ b4 V' k$ a6 a6 D! D9 {% i
! g: k7 j2 M9 K7 x7 k
下图TX接口信号编码3 T. _" H( M) Q- E6 H. T
2.png * M: q; ?( a  c# @7 ^9 @4 M
下图RX 接口信号编码. G5 L* ]2 h2 W
3.png 6 D' p' H& z1 Q& m, _
7 L* D+ S1 A, K) K; B2 N: ~7 S
. I+ V. \7 c: b  I- {
MII接口的时钟源
1 K5 s3 Q! }' m- Q  p- ^要生成TX_CLK 和RX_CLK 时钟信号,必须向外部PHY 提供25MHz 时钟,如图所 示。除了使用外部 25 MHz石英晶体提供该时钟,还可以通过STM32F20xx 微控制器的MCO引脚输出该信号。这种情况下,必须对PLL 倍频进行配置,以通过25 MHz 外部石英晶体在MCO 引脚上获得所需频率。
; \) Y; s! I9 x/ ^ 4.png : o5 u& h% d0 m  s+ s8 x
对应的代码$ m) O! a! ?  g& D6 \
  1. <font face="微软雅黑" size="3">
    % O: E; z! f) i# o) J. i
  2. /* Enable GPIOs clocks */. U5 [5 l2 ?- q2 O5 ?) w- _" E
  3. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);6 ?: q6 W% i6 f- o, }

  4. / W, G+ a$ y  E* h) F( Z& N
  5. /* Enable SYSCFG clock */
    $ y( I- T8 V3 h' W
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  
    ' @5 r5 d$ M* z1 O/ k: P9 c& D

  7. 4 {! u: G( l: Y' \) J; ?2 W# B
  8. /* Configure MCO (PA8) */! l4 f% W% M( L4 W, V$ g6 L+ M
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;& ^6 ]" G& k* `, N. j& t$ G- x
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;& b' A* `$ G5 e! E' {; D# k
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;2 \: z/ I: C: ^6 T% ?5 C  Q1 t
  12. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;, L8 D! f9 b& X  W5 T, }$ g0 S( ?" O
  13. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  ( G; N( h1 T" ~7 A1 e! _7 i' g8 ^
  14. GPIO_Init(GPIOA, &GPIO_InitStructure);
    0 K: I1 L  j- J9 T* U* g4 r
  15. /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */& ^+ ^# r  |( G* ?$ w8 C
  16. RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);
    : o6 `+ @9 U3 |
  17. </font>
复制代码
2、RMII接口
% P0 Q" t) B9 c" v! w) s# }$ r+ kReduced media-independent interface: RMII(精简介质独立接口)。精简介质独立接口(RMII) 规范降低了10/100 Mbit/s 下微控制器以太网外设与外部PHY 间的引脚数。: I; {) M* q2 J0 k: z- D5 t9 V
) X0 p1 T% @+ }  C0 Z

/ m+ x* I- P  c/ Q根据IEEE 802.3u 标准,MII包括16 个数据和控制信号的引脚。RMII规范将引脚数减少为 7 个(引脚数减少62.5%)。引脚的含义参考MII接口即可。
1 S) Y7 z6 Y/ J. }/ F8 `9 z1 ?1 i 5.png ! p, A3 M9 X- ^  h5 {% ]- u* I# P6 J
RMII接口是MAC和PHY之间的实例化对象。这些有助于MAC的MII接口转化为RMII接口。RMII接口具有以下特点
+ K+ S: G$ a# [9 J) t3 y1 r% c9 p! R' ]3 t) ?2 @: y/ ]) x% Q

) V% n( x; ^- {$ a# ~10-Mbit/s 和 100-Mbit/s 的运行速率
7 r" P  A/ P$ @! Y5 O5 U
  ]: y# ^, G7 d8 K1 @3 R
( u; l% k8 `9 _8 o- H
参考时钟必须是 50 MHz# {/ c" a7 W* Z& r1 z# F# x

2 y4 p1 J* o$ q9 P& `. y  y

7 S% I0 p  K8 V. R1 f相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY
8 v: i. A+ ?& h! I
. k& a+ k. `$ A1 I( i

2 |* N& Y. C6 @3 h; s它提供了独立的 2 位宽(双位)的发送和接收数据路径
8 j8 F. b) b* @6 |. @! _' y9 ^- A# L5 S& n- Q2 C6 @1 q7 D
4 s( U" S3 y8 G) q: D: t
这里时钟管脚比MII接口少,有一个非常重要的点,那就是RMII接口时钟源必须是50MHZ
/ ^" }# ^3 S, `3 o
, W, x: V! u8 X/ S2 q

3 \3 }( P% |' }5 {! }RMII接口时钟源1 l5 [% D' Q4 O

. `' s1 q  t) \/ ], F

/ G0 s( |% j3 _# r; q' U) v- @9 iSTM32F207xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置PLL来产生这一时钟。! `2 f) r: A+ k0 ^4 R5 L: |/ h
6.png ! u8 K0 s" w  c9 L1 K4 G- g* @
使用外部50 MHz 时钟驱动PHY 或使用嵌入式PLL 生成50 MHz 频率信号来驱动PHY。% W" a& q. k" L4 h. j
* h" s1 ^' F, z) q+ f) x7 q
  ]) m/ h$ C3 w5 ~
3、两种接口对应的引脚4 p2 o8 y4 B% o0 B% |* l7 i
STM32F207VCT6(100pin)的芯片
$ f4 ?# s, X* E* i8 j/ [ 7.png
. J5 I7 W- W# R其中ETH_PPS_OUT这个管脚ST官方demo屏蔽,不属于MII接口也不属于RMII接口。下面不将其统计进入。
$ D+ v! U5 U, b9 t! d( K2 t1 T1 |$ m9 c/ T) B7 o# L/ u
, R  V8 u0 Z5 U4 G, }! d
MII 共15个接口加上SMI接口,共17个引脚。(没有包含25MHz时钟的引脚)4 b% q  B5 @2 p: k. U
8.png
2 T2 u; j2 v1 R9 g. R8 `5 ?RMII共7个接口加上SMI接口,共9个引脚。
9 g8 n9 x3 M) J9 }, i 9.png
4 ^" _9 n1 V; I0 j9 E5 P  T% G4 Y除了上述我自行统计的MII接口和RMII接口对应的pin之外,ST官方在参考手册也给出了对应图,如下:6 j& `  W3 ~( q0 m
10.png
% Y8 O& ]& z( ?+ P7 Z: t* u+ V
3 c9 y4 e$ W; y2 m3 `/ X, V, [

4 \! J) U- L1 u. o* \4、MII和RMII的选择8 ]( E- G$ _* s* @
使用SYSCFG_PMC 寄存器(注意:这里和F107不同,F107是AFIO_MAPR寄存器)中的23配置位MII_RMII_SEL选择MII 或RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置MII/RMII 模式。
. [, I0 ^+ A# B# B& o, r. U# W; \& a/ Z; C$ Z" X7 }0 `

& n2 f& J& a8 O7 r对应的ST库函数为
0 a+ \! D9 o  l# J4 a1 T* n6 P
  1. <font face="微软雅黑" size="3">
    - V6 h$ V3 G; G6 G; I
  2. //函数入参可选以下
    / X! T5 U$ L9 i4 C
  3. //SYSCFG_ETH_MediaInterface_MII: MII mode selected1 \8 |/ t5 ~4 F2 t) G
  4. //SYSCFG_ETH_MediaInterface_RMII: RMII mode selected
    5 `- `# _; Q# a  z: c; _! z
  5. void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
    1 K1 X! y0 a2 ?8 T' ~
  6. </font>
复制代码
MII/RMII 内部时钟方案
* P% n8 \1 F% l  t( H( o6 }* l% m

4 c* D4 b' z9 Y1 W/ ?3 k7 Q6 n支持MII 和RMII 以及10 和100 Mbit/s 运行所需的时钟方案,如下图所示。
  ~. b& D2 Z" {1 [% t 11.png
+ X: H& T8 F7 u注意上图红框中:HCLK必须大于25MHz,这个问题点,在上一篇文章《STM32网络之SMI接口》中已经提到了,这里再次提到,如果不满足这个条件,可能会出现奇奇怪怪的问题,不好查找。; p9 ^1 m- x6 C: Y3 j) j( J8 K# T
& f( t) O; N$ g/ y1 B

) L+ ^6 N# t6 c% y7 g; I. A& }- B在官方手册中,还有一句  A% G/ ~( n. i4 j9 a! |2 d
12.png * L5 N4 l/ E( J' U6 u9 w
要节省引脚,需在同一个GPIO 引脚上复用RMII_REF_CK 和MII_RX_CLK 这两个输入时钟信号。+ x6 t4 R! f! B4 p1 l
. W% I- C( Q, H0 C
$ O! H9 U9 Z% s$ w) n
赞 收藏 评论0 发布时间:2021-7-19 14:55

举报

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