01 基础问题 . b5 X5 N+ R% u# O; @ 1.1、芯片数据接口 0 \3 F: O1 t, n7 `: r$ h f8 p RTL8201E(L)是一种单芯片/单端口快速以太网物理接收器,支持MII接口,RMII接口,SNI接口。1 A/ _& [5 \! w ; _4 p5 U& K# q, ^8 ? } MII接口和RMII接口切换在8.1.1章节有讲到,如下图:+ n1 g: c& g/ L% f " a8 k* F6 C N( j/ S+ g# [7 E0 E6 S 选择MII接口,把COL/SNI脚拉低。# ?; G% s2 r* | . Q, G5 i2 k: K1 { RTL8201E的框图如下5 g, m# ^ D% {: H 7 n m, |8 p# a1 q$ B1 S 和MCU连接的系统框图如下:& u- b. g* ^" P# s H! J8 t8 V$ u# q' S ①RJ45也就是网口,就是我们常见的网口,如下图:# F" V; n, x- n$ w 6 b9 u) E% j# u0 m1 J 9 |2 q b! g+ F6 s ②magnetics,直译磁性元件,这里的通常叫法为:网络变压器。网络变压器又名网络隔离变压器、以太网变压器、网络滤波器,主要有信号传输、阻抗匹配、波形修复、信号杂波抑制和高电压隔离等作用。如下图 0 U9 Q1 e' b* n7 V4 h$ j 1 s3 B8 N/ @3 [ p 1 `" e) h+ u) }+ f1 R0 x2 b ③PHY芯片,中文可称之为端口物理层,PHY连接一个数据链路层的设备(MAC)到一个物理媒介,如光纤、铜缆线或网线等。也就是本文重点讲解的内容,如下图 ! j1 V) f; t( H( X7 m & T+ j4 `2 J2 K ④MAC部分,主要是STM32的ETH外设部分,这方面之前的文章已经讲解过了 0 r6 A3 N. W6 z, S8 T# U : q$ J- ?# {; l6 h9 b - a% y- l2 w6 z0 K: ~/ B2 z 涉及到的文章有《STM32网络之SMI接口》《STM32网络之MII和RMII接口》《STM32网络电路设计》《STM32网络之MAC控制器》《STM32网络之DMA控制器》《STM32网络之中断》。 1 x s$ N5 M. ~: g! O- L3 K 9 k) O2 t6 {4 b+ j% M- n 1.2、芯片地址4 ?' M- X: {, P+ m% w2 K( x* | MCU如何选择PHY芯片的地址,参看芯片的SMI接口 1 d0 q# Z6 {6 ?: k RTL8201的PHY地址经过两个管脚配置的 ) {3 w% o3 ^2 M8 D% b / q0 K# s( q4 F 在这里我们看出,这两个管脚和LED灯的管脚是复用的 . z- t! L! M6 y8 o0 l, J7 V 为了减少RTL8201EL的引脚数,LED引脚和PHY地址引脚复用。额外的捆绑考虑和LED使用必须被考虑,为了避免争用。具体的来说,当LED的输出被直接用来驱动LED时,每一个输出驱动的活跃状态依赖于相应的PHAD输入在上电和复位采样的逻辑电平。例如,如图6(左侧)显示,如果一个给定的输入电阻PHYAD拉高,那么相应的输出将被配置为低电平驱动。在右边,我们可以看到,如果一个给定的输入电阻拉低PHYAD然后相应的输出将被配置为一个高电平驱动。PHY地址配置脚不应该直接和VCC或GND相连,但是一个电阻(比如5.1KΩ)拉高或拉低。如果没有LED指示灯,LED的路径组件(LED+ 510Ω)可以被删除。) F8 ]1 f" x0 y% f4 b% |) C 5 y) e* U/ o2 I, q" \! V; z 0 P) I4 _/ V# D . l( ~& j$ j. F; F2 A5 Z1 ?$ ^ 1 F* r9 E% y1 a 查看PCB得知,我们的控制卡PHY的地址是06 ~# c& ]5 A: y% f" h 1.3、时钟源的选择! g) m/ Z/ x3 T ' X5 I1 g+ G' E; F ; ?+ S! }4 l5 Q9 y$ U O CKXTAL2 25MHz晶振输出(25MHzCrystal Output):该引脚提供25MHz晶振输出。当X1用一个外部的25MHz振荡器驱动时该引脚必须悬空。 / n+ U9 X2 m1 J; `% I % {4 P3 |% C) n) [& Q0 b) b/ A1 ` CKXTAL1 25MHz晶振输入(25MHzCrystalInput):该引脚提供25MHz晶振输入。如果使用一个25MHz的振荡器,连接X1到振荡器的输出。参见9.3节对时钟源的说明。 g* h- F$ J4 t% K, A% k! q) U 我们使用MCU的MCO1提供时钟,查看电路图,X2是悬空的。 \% c. W: x' Y $ z# o" Y9 G& i8 [ 备注: ' C1 ~4 |) v' E! s* y! ^# G! {! l 如果使用25MHz无源晶振,两个脚都需要连接,和MCU的无源晶振连接相同,关于晶振方面知识,可以参考《晶振原理讲解》。 $ P7 y8 o6 s, t 02 寄存器 PHY寄存器是由IEEE802.3定义的,一般通过SMI对PHY进行管理和控制,也就是读写PHY内部寄存器。PHY寄存器的地址空间为5位,可以定义0~31共32个寄存器。IEEE802.3定义了0~15这16个寄存器的功能,16~31寄存器由芯片制造商自由定义。 寄存器0、寄存器1和寄存器15讲解以及IEEE802.3官方文档,请看《PHY寄存器》。 0 g |5 x, P$ F 自定义寄存器164 b; g$ Q* ?# Y' X- X- U 获取PHY芯片的链接速度 ST官方库文件的驱动在stm32f2x7_eth_conf.h最后部分) V9 O! w8 y3 ~9 V8 |! J: E# } - d: n4 T+ U2 y7 s; V/ O ST官方使用的是DP83848芯片,寄存器16可以用来获取芯片的速度,这个寄存器就是DP83848芯片厂家自定义的寄存器,所以在移植STM32官方代码时注意这个问题。 , ^4 @$ y3 j3 h! \5 W6 ` ( E' N) \! ]+ n, m" t9 R. f7 Q1 { 我们使用的RTL8201芯片也是并不是这样的; d0 f8 e6 t! B5 s" V5 a 寄存器16 Nway设置寄存器 # U {: w+ D! U1 N7 P6 a # m2 x3 @! r. r" {6 z3 a# l1 @ 1 K" H) J1 H4 Y. S5 H# ?5 l0 K 翻译成中文如下 其他寄存器并非必须的寄存器,重要的寄存器0和寄存器1已经在《PHY寄存器》讲解过了。1 V- y. I1 R- b2 {) C8 I3 Y RTL8201资料下载:0 h$ a/ F6 X! Y5 W: G1 ] & B6 Q( W) ~0 w" e h4 v 链接:https://pan.baidu.com/s/1hKQcp9KCyICbTiZRANTiZA 提取码:wkr1$ Y+ g7 h2 G( Y. }& N |
stm32f207/stm32f407擦除内部flash讲解
【经验分享】STM32F2 中 DMA 的 FIFO 模式
STM32F2x7 通过以太网实现在应用中编程 (IAP)
STM32F2xx 微控制器中的 EEPROM 模拟
在 STM32 F0、 F2、 F3、 F4 和 L1 系列MCU 中使用硬件实时时钟 (RTC)
STM32F1xx、STM32F2xx、STM32F4xx、STM32L1xx、STM32F30/31/37/38x 定时器概览
使用 STM32F2xx 和 STM32F4xx 微控制器时如何提高 ADC 测量精度
使用 STM32F2 和 STM32F4 DMA 控制器
STM32F2x7 通过以太网实现在应用中编程 (IAP)
STM32F2xx 微控制器中的 EEPROM 模拟