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

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

[复制链接]
STMCU小助手 发布时间:2022-4-17 20:35
SMI接口主要是用于和外部PHY芯片通信,配置PHY寄存器用的。; ~1 |# U& r( c" I  e$ V7 M7 P. q

0 X7 Z4 R# g$ o# X4 i5 C真正网络通信的数据流并不是通过SMI接口传输的,是通过MII接口或者RMII通信的。$ t8 I: F& U7 z+ c8 |% s5 _
" Z3 J. }* g0 i4 @$ C) Z; v/ s8 s
1、MII接口
7 @' z0 U) s5 h+ _( a介质独立接口(MII) 定义了10 Mbit/s 和100 Mbit/s 的数据传输速率下MAC 子层与PHY 之间的互连。: n- ]- K+ K* ~& ^" h, y" ^. A( e

7 e0 ^* C* \8 W f78ab27878bb2382acc1af236eed1070.png
! q5 a, p: t* r* j+ f
3 \$ r+ a  \+ w6 R* K1 J2 P. z( d管脚定义介绍:
4 V! _% X8 }3 ^& R+ I; [
! }0 Z- N; r8 l# h' v  b1.MII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。
+ T  S0 I- q7 A% W. y0 R: u7 t5 ^8 K
2.MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。8 V+ E) S$ k! A
  P. w, j3 g; l: G' ^$ J+ J- Y
3.MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。
7 e7 A: [+ U* E* N/ @7 F- d
6 x2 Y* d$ d) g4.MII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。( F' z" M3 h0 M# y
! `- r% `: F# Z; ?5 ~, i
5.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 的特定信息。
! e! E8 a" ^; s+ e, b- d/ N$ Q9 n1 d( k) M% T
6.MII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV验证。) M' k8 z* c" z. v% T1 T

, C7 ?* `; \) n, {0 O3 Q7.MII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。/ U* D1 G- b5 j2 D2 ]1 g' K
' E  F% S8 k1 J0 d5 p( M
8.MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。/ l0 C0 h& ^2 v& }1 w1 l8 J
) D8 L4 z- u8 N- M; |! t
9.MII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。! _: O! g4 [4 z" Y) g! r1 z3 Q
! ^+ z5 d+ F8 i$ f9 J& P
10.MDC:MDC信号属于SMI接口
/ h* }( X; I8 P9 e4 w& r5 v1 ~- {6 F9 g
/ g% D4 _) A4 X7 h7 }4 f! @11.MDIO:MDIO信号属于SMI接口8 @/ L; O. r6 W: K2 l$ F

  |0 G. X2 L" D7 O6 t下图TX接口信号编码
. U' [8 R; E# [2 U) ~; x8 a! ~/ X! z* P3 C; a5 Z, L+ o
9d918643b2cc56037b549b4663d997ec.png   J3 Q4 a; T) q; X9 `* l$ S

! o; g1 U! R; R! @5 R8 e$ A下图RX 接口信号编码
& W) H6 U3 b; U7 C* M; r3 e
. `1 }; D) a- O& n0 h  J7 R 724f91a7cb805d25cdb603cfaeeaf5a9.png # R  i9 M( @# V+ A( x+ M: B5 H/ n' |
0 ?) P6 o4 }/ L9 g
MII接口的时钟源# W5 \$ B  E9 g4 c4 u6 w( U) W( P
/ ^4 V3 ^) h) K3 a# |1 d3 g
要生成TX_CLK 和RX_CLK 时钟信号,必须向外部PHY 提供25MHz 时钟,如图所 示。除了使用外部 25 MHz石英晶体提供该时钟,还可以通过STM32F20xx 微控制器的MCO引脚输出该信号。这种情况下,必须对PLL 倍频进行配置,以通过25 MHz 外部石英晶体在MCO 引脚上获得所需频率。: T4 f+ c5 l6 l* {' {8 r1 |! R
! O& I; s; N+ T$ Q8 d1 x/ P" Z- _9 N$ G
193bccbcfc4cb27fd1bf9f5d01ed1df4.png + g8 v" M" m5 x; r& a

6 _3 {: R( I8 v( ~) U对应的代码$ Q0 d: j5 I1 x5 D" \1 A& k

; t4 G0 e( Z: B" r3 E) Z6 s; U8 S
  1. /* Enable GPIOs clocks */
    7 q0 m* r+ ]! A& g
  2. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    9 ]' h" Z# L" t3 o7 Y
  3. 4 f' A. k8 A$ |4 u% L% }8 I6 B- V- q
  4. /* Enable SYSCFG clock */
    , p+ w* o, s8 t) i
  5. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  
    ) W, |( N8 m- F, Z9 X. B* t
  6.   B+ s( A* F% m4 \/ h* P
  7. /* Configure MCO (PA8) */6 w  S8 C) H- t- V+ x: B
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    ' m- ^3 @7 u6 i) E0 c- m2 R6 x
  9. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    / \! a9 V' ]" X* B7 _
  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    $ G' r9 B4 p$ d( V
  11. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    2 M' N3 F' @7 _" z
  12. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  * H6 G) U* I' u' d
  13. GPIO_Init(GPIOA, &GPIO_InitStructure);: W& g' J- ^5 C0 c7 V' v
  14. /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */
    / P1 n0 p( |1 t. D. e
  15. RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);
复制代码

$ e8 G) r, L$ F1 T' f$ d" `' t2、RMII接口

3 V1 [" p/ a  GReduced media-independent interface: RMII(精简介质独立接口)。精简介质独立接口(RMII) 规范降低了10/100 Mbit/s 下微控制器以太网外设与外部PHY 间的引脚数。
1 `9 j! {& ~, z
  l* Z+ ?. R; K+ k2 F根据IEEE 802.3u 标准,MII包括16 个数据和控制信号的引脚。RMII规范将引脚数减少为 7 个(引脚数减少62.5%)。引脚的含义参考MII接口即可。
& @4 k% ?5 E: e4 s
& i9 w% q: G/ q" F 4288f6037be85b367479cb763bd18691.png
: T$ n1 p! Q" X7 w2 k+ |/ E8 `) ?6 ?/ n4 |+ G% i2 a0 \
RMII接口是MAC和PHY之间的实例化对象。这些有助于MAC的MII接口转化为RMII接口。RMII接口具有以下特点
  d% [$ I( c& ^8 z( @, r( ~3 H  J  E
1.10-Mbit/s 和 100-Mbit/s 的运行速率
" z5 M, A8 a& @- `4 O  I( Y
+ [" o& G- q) t7 W. O2.参考时钟必须是 50 MHz
5 V+ r- R+ v6 Z( F" o" A" x; K7 ^8 W7 O- Q6 \9 v
3.相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY0 T6 W8 R( Q, {+ G

; t  H+ v' Z5 P$ e, d$ s4.它提供了独立的 2 位宽(双位)的发送和接收数据路径* Y  x7 T0 n8 d) D8 s% h  D

/ Y6 G0 |- @/ _" x* p2 f这里时钟管脚比MII接口少,有一个非常重要的点,那就是RMII接口时钟源必须是50MHZ* V) Y# g2 _& h/ O  H& j

/ C$ U! ]- T7 M+ S+ o9 I) NRMII接口时钟源
* o- a7 i) w/ p0 S" Y! _* _) g
6 }- n* D' J: FSTM32F207xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置PLL来产生这一时钟。6 h" e8 d4 E( g

$ U! Y4 ^7 V( b: u, Z/ D( D( q d50816964d9c16a023f44b8b1983e95f.png 1 ]2 U( V7 Y- ]5 V: p; E: [0 Z0 F' C: [

3 b$ k5 s3 j4 ^; j0 Z. Z使用外部50 MHz 时钟驱动PHY 或使用嵌入式PLL 生成50 MHz 频率信号来驱动PHY。: h; g) B: ]; A. {$ i6 h, ~& @

$ k$ z6 m- S. y2 J7 s) U; o% z3、两种接口对应的引脚
6 A  T& @% W9 @$ v! p0 c& CSTM32F207VCT6(100pin)的芯片
/ i) D- J7 {! U3 c8 s* N
) }7 @5 }6 f2 m( `
  1. Ethernet pins configuration
    8 E/ X0 _3 U: m) b- ^
  2. ETH_MDIO -------------------------> PA2  pin 25
    $ S9 U- |; `/ y! z- N
  3. ETH_MDC --------------------------> PC1  pin 16
    / ~0 b( Y/ A; N) K1 G$ D, R
  4. ETH_PPS_OUT ----------------------> PB5  pin 91, r4 ^  o! [7 R7 L" R
  5. ETH_MII_CRS ----------------------> PA0  pin 23$ ^: J! R* r: w( z, n6 ^3 C) K8 j
  6. ETH_MII_COL ----------------------> PA3  pin 26( Q8 V: o/ m7 J  Z) e
  7. ETH_MII_RX_ER --------------------> PB10 pin 47" i6 l, H/ y- z, L5 {5 W
  8. ETH_MII_RXD2 ---------------------> PB0  pin 35" i% X. l" u" `3 B7 X6 g
  9. ETH_MII_RXD3 ---------------------> PB1  pin 36/ o; D/ Y  |9 Y
  10. ETH_MII_TX_CLK -------------------> PC3  pin 18
    - Z' m$ s/ _) F( o4 R, |, y3 K+ y
  11. ETH_MII_TXD2 ---------------------> PC2  pin 17: r$ `9 E4 y  S1 r$ m) K
  12. ETH_MII_TXD3 ---------------------> PB8  pin 95
    ' @+ E& |5 {* C" x+ Q% S2 n
  13. ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1  pin 24
    6 }# L2 ~5 R0 [% F
  14. ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7  pin 32. r% M4 ^: y- g- f
  15. ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4  pin 33! f) T7 X) M' t7 S
  16. ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5  pin 34( P  H2 u9 o& x6 u9 I
  17. ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PB11 pin 487 `7 s. J9 }# A) o- b1 {
  18. ETH_MII_TXD0/ETH_RMII_TXD0 -------> PB12 pin 513 p) \! G9 t1 D) n, d# l0 S' g
  19. ETH_MII_TXD1/ETH_RMII_TXD1 -------> PB13 pin 520 F/ u- }7 A  n% _+ d- s: `
复制代码

, U$ X% _2 {; C0 h# o3 q其中ETH_PPS_OUT这个管脚ST官方demo屏蔽,不属于MII接口也不属于RMII接口。下面不将其统计进入。4 l, [8 J5 P* `( |, v0 v
+ B" [& R$ W2 g# u5 S+ {- k
MII 共15个接口加上SMI接口,共17个引脚。(没有包含25MHz时钟的引脚)# I6 o' b5 j% a7 C' P+ ?" p
6 s+ V" X+ j* v& ^# Q/ ~- h6 r
3fd756e4a852b9a7a6869e64de11d3c9.jpg ; n% U9 o2 o( |
) m; _5 V8 @8 a% d# I% v$ q3 c# U
RMII共7个接口加上SMI接口,共9个引脚。
7 v" V9 g0 F& _% X; H/ T# P
% ]) ~2 r; y& r fbfbee9397e007b52da3316d00799b78.jpg
/ ?* I4 Y$ C1 y7 q5 Q9 c" v
+ I2 M+ u; ^; U9 o/ ~: T# F除了上述我自行统计的MII接口和RMII接口对应的pin之外,ST官方在参考手册也给出了对应图,如下:9 ^7 k  N" Q' A$ F+ g

/ G7 H9 B( J% U) d- V& `0 e ee4b1f778d8b908c372e5c0c89e3c0de.jpg ! h0 X0 z/ n# c1 C$ c- c0 O
: V+ L$ ]2 L2 ^5 z% S
4、MII和RMII的选择
9 o2 [  Q7 f+ f使用SYSCFG_PMC 寄存器(注意:这里和F107不同,F107是AFIO_MAPR寄存器)中的23配置位MII_RMII_SEL选择MII 或RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置MII/RMII 模式。5 ]. ]' L$ A( B9 b' v8 p
& r+ A) O4 Z4 |+ S, ?
对应的ST库函数为  Z; @- d. O* K) w

/ n$ @$ G, J) G
  1. //函数入参可选以下7 m6 m' |) B/ v9 ?6 F; ~3 I* N
  2. //SYSCFG_ETH_MediaInterface_MII: MII mode selected$ \- j3 E' o) i& a
  3. //SYSCFG_ETH_MediaInterface_RMII: RMII mode selected
    , [8 t: i' q* N% ~: q
  4. void SYSCFG_ETH_MediaInterfaceConfig(uint32_t SYSCFG_ETH_MediaInterface)
复制代码

5 }2 S; x/ P0 ?. F0 T8 PMII/RMII 内部时钟方案' p0 b" @% S4 x; s4 ?. V7 W$ t" E

! o# ~; Y, W' P. P# J& s支持MII 和RMII 以及10 和100 Mbit/s 运行所需的时钟方案,如下图所示。
- t: _* \( _* P3 s, A! @6 e8 w& ^9 v+ `9 z
b43dee48124f6c4ac9911d14cf6c760b.png
9 N8 b* \. R0 i: h% x' j3 g2 u0 w: k4 c3 d' {* d4 A
注意上图红框中:HCLK必须大于25MHz,这个问题点,在上一篇文章《STM32网络之SMI接口》中已经提到了,这里再次提到,如果不满足这个条件,可能会出现奇奇怪怪的问题,不好查找。& d* [, D4 d4 Q, [( n3 _
7 Y- m3 [4 `) K: f7 c3 e
在官方手册中,还有一句
7 w, G) [, g- M+ |) @. q5 o3 h* j" V5 Q: e" f8 X8 [. p3 C
1c78c4642e556f89599c20b618840314.png
+ w/ Y, u5 x* B. n* u: J! I, Z$ ]# s1 D0 e. [; O6 l
要节省引脚,需在同一个GPIO 引脚上复用RMII_REF_CK 和MII_RX_CLK 这两个输入时钟信号。
% q: L. Y1 m' m
# a/ u1 f/ d, g, b, J* z9 t" v2 f0 U; e5 I# U. g; a2 q
收藏 评论0 发布时间:2022-4-17 20:35

举报

0个回答

所属标签

相似分享

官网相关资源

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