STMCU小助手
发布时间:2022-4-17 20:35
|
SMI接口主要是用于和外部PHY芯片通信,配置PHY寄存器用的。 2 @$ N, ^6 S5 _" Q) V# B. k5 } 真正网络通信的数据流并不是通过SMI接口传输的,是通过MII接口或者RMII通信的。8 h. I: T! \& r I; k& d7 W ) f) m6 L( ~/ } 1、MII接口4 n" {9 u; y9 E# h 介质独立接口(MII) 定义了10 Mbit/s 和100 Mbit/s 的数据传输速率下MAC 子层与PHY 之间的互连。 9 a7 N* p( } i' X9 N8 {$ u
管脚定义介绍:8 O. x8 B e! ?* u ] - u. k& G, j5 J 1.MII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。/ K8 k" f! T6 i; N' C- g 2.MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。 $ j% A1 }9 H, N Q 3.MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。 4.MII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。) [- ?1 D6 M, O 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 的特定信息。 4 f* ?/ o Y$ ^, ]* \ 6.MII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV验证。; E/ y$ @7 g9 O+ m) T ( ~6 c; a% m- ]3 z B 7.MII_RX_DV:接收数据有效信号。该信号表示 PHY 当前正针对 MII 接收已恢复并解码的半字节。该信号必须与恢复帧的头半字节进行同步 (MII_RX_CLK),并且一直保持同步到恢复帧的最后半字节。该信号必须在最后半字节随后的第一个时钟周期之前禁止。为了正确地接收帧,MII_RX_DV 信号必须在时间范围上涵盖要接收的帧,其开始时间不得迟于 SFD 字段出现的时间。- x% j4 c0 y, Z6 P1 R# E, Y' ] 8.MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。 9.MII_COL:冲突检测信号。检测到介质上存在冲突后,PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。# S0 I, j2 w3 P9 h% O1 p 10.MDC:MDC信号属于SMI接口( q' m* @2 H C) E , m" a/ k T* A% s7 Q- g/ ? 11.MDIO:MDIO信号属于SMI接口 , E# y5 `) Y- Y$ d0 J1 x( G 下图TX接口信号编码, d' i. y3 d: b; n6 {
% ]1 u3 h/ }/ c# D 下图RX 接口信号编码
' G7 s$ m! p" H- W: y" r! X+ X MII接口的时钟源 要生成TX_CLK 和RX_CLK 时钟信号,必须向外部PHY 提供25MHz 时钟,如图所 示。除了使用外部 25 MHz石英晶体提供该时钟,还可以通过STM32F20xx 微控制器的MCO引脚输出该信号。这种情况下,必须对PLL 倍频进行配置,以通过25 MHz 外部石英晶体在MCO 引脚上获得所需频率。4 |: G$ T$ p* Y) a/ n' J1 i7 X1 q6 r
对应的代码
2、RMII接口+ \" k9 d9 ?9 P Reduced media-independent interface: RMII(精简介质独立接口)。精简介质独立接口(RMII) 规范降低了10/100 Mbit/s 下微控制器以太网外设与外部PHY 间的引脚数。 根据IEEE 802.3u 标准,MII包括16 个数据和控制信号的引脚。RMII规范将引脚数减少为 7 个(引脚数减少62.5%)。引脚的含义参考MII接口即可。3 B* w- J" ^" O) E7 B " t3 N! L& R/ s" a3 c
' G+ [, S" L/ V% y$ w$ ~ RMII接口是MAC和PHY之间的实例化对象。这些有助于MAC的MII接口转化为RMII接口。RMII接口具有以下特点3 @8 ^, R6 h: s! u& i 1.10-Mbit/s 和 100-Mbit/s 的运行速率" R3 d4 S( ^! D8 _# X4 M% g 2 r9 i/ B8 _2 Q- c( O3 r 2.参考时钟必须是 50 MHz # g3 b! L3 \& J 3.相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY 4.它提供了独立的 2 位宽(双位)的发送和接收数据路径5 V+ v) f! h& U! {$ N2 z 这里时钟管脚比MII接口少,有一个非常重要的点,那就是RMII接口时钟源必须是50MHZ ! J* i8 j: t( p+ q8 A6 h! b. | RMII接口时钟源$ j8 B8 g8 ?: j* v STM32F207xx控制器可以从MCO引脚提供50MHz时钟信号,当然用户需要配置PLL来产生这一时钟。5 v$ Y* `! q4 o' e+ s
8 I7 w1 e! B6 [" a+ U; a 使用外部50 MHz 时钟驱动PHY 或使用嵌入式PLL 生成50 MHz 频率信号来驱动PHY。 3 g5 M$ W6 g+ y) Y6 M, m 3、两种接口对应的引脚 STM32F207VCT6(100pin)的芯片
其中ETH_PPS_OUT这个管脚ST官方demo屏蔽,不属于MII接口也不属于RMII接口。下面不将其统计进入。 MII 共15个接口加上SMI接口,共17个引脚。(没有包含25MHz时钟的引脚), R) S; R! F7 H2 c8 N# h( C6 y d
; @ @+ I. O% J: E RMII共7个接口加上SMI接口,共9个引脚。 $ C+ Q. Z. u, Y2 {& F8 b
7 d2 T" e5 q& W* T 除了上述我自行统计的MII接口和RMII接口对应的pin之外,ST官方在参考手册也给出了对应图,如下:1 [' s* J3 _9 e4 V4 S % t. o! ^- c, \% K/ y- v
( p: l0 @) T3 p+ g6 l! r 4、MII和RMII的选择- o& p a# ^9 {, H: L- d 使用SYSCFG_PMC 寄存器(注意:这里和F107不同,F107是AFIO_MAPR寄存器)中的23配置位MII_RMII_SEL选择MII 或RMII 模式。以太网控制器处于复位模式或使能时钟前,应用程序必须设置MII/RMII 模式。 对应的ST库函数为
MII/RMII 内部时钟方案 支持MII 和RMII 以及10 和100 Mbit/s 运行所需的时钟方案,如下图所示。
注意上图红框中:HCLK必须大于25MHz,这个问题点,在上一篇文章《STM32网络之SMI接口》中已经提到了,这里再次提到,如果不满足这个条件,可能会出现奇奇怪怪的问题,不好查找。 1 b5 J5 Z, s* M' D 在官方手册中,还有一句
9 _0 u( @4 h- C# t! x; Y) J 要节省引脚,需在同一个GPIO 引脚上复用RMII_REF_CK 和MII_RX_CLK 这两个输入时钟信号。 - j$ b0 E8 I2 p" Q0 O- v' b8 U |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版