
01、以太网简介 STM32F20X和STM32F21的以太网外设可接受和发送数据按照IEE802.3-2002标准。& ]' c+ L" m/ y( o N 以太网提供一个完整的、灵活的外设去满足不同应用和要求。它支持与外部相连(PHY)的两个标准的工业接口:默认情况使用在IEEE802.3规范中定义的独立介质接口(MII)和精简介质独立接口(RMII)。它可以被用于大量的需求,例如开关(交换机)、网络接口卡等等。 以太网满足下列标准:- d. F3 `7 K M, e b" u! M. ^ ● IEEE 802.3-2002,用于以太网MAC。1 P1 z/ U+ ~! l8 m ● IEEE 1588-2008 标准,用于规定联网时钟同步的精度。3 ?0 {3 Y" |2 S5 v. ~ 8 y r" ~: N9 z% O' X1 w; x ● AMBA 2.0,用于AHB 主/从端口。 & F3 Y/ e0 } S6 u; @ ● RMII 联盟的 RMII规范。 3 Y5 H, g+ ~: O; l% t) w 02、STM32F207的ETH介绍! j7 @% ]8 @2 G- Z! N STM32F207支持MII接口和RMII接口。STM32F207以太网外设包括一个MAC802.3(介质访问控制)和一个DMA控制器。它默认情况下支持MII和RMII接口,通过一个选择位进行切换。 4 z) V6 b* @6 B8 j DMA控制器通过AHB主从接口和内核与内存相连。AHB主接口控制数据传输,AHB从接口用于访问控制和状态寄存器(CSR)空间。 在MAC内核发送数据之前,数据经过DMA的方式发送到FIFO中缓存。同样的,接收FIFO存储通过线路收到的以太网数据帧,直到这些数据帧通过DMA被传输到系统内存。" W; \! W5 `. q" p" H0 f; C + q* t0 K5 t1 J* }4 P 以太网外设也包括一个SMI,用于和外部PHY通讯。通过一组寄存器的配置,用户可以选择MAC和DMA控制器的不同模式和功能。% A6 }9 l% z2 D8 V8 ? 当使用以太网时,AHB时钟必须至少25MHZ。 % h$ s5 x& P3 c) _# v) p7 D! ] 下面是ETH的框图. G8 h! n" f- o0 M% C & K" D& a B% X* X' e/ j8 \" D ![]() 关于AHB的连接信息: " P* {! u6 C, _ 区域1:我们称为SMI接口,用于配置外部PHY芯片。! i8 X+ P4 K- x ?) A / v/ x9 l7 A6 T1 j 区域2:是数据交换接口,也就是上面我们说的MII接口和RMII接口。7 J# |9 g" l0 R0 p 03、SMI接口 3.1、站管理接口:SMI 站管理接口允许任何PHY寄存器请求通过2线时钟和数据线。这个接口支持最多到32个PHY。 7 r( e& m( P s7 p: y8 t; ? 应用程序可以从 32个 PHY中选择一个PHY,然后从任意PHY 包含的32 个寄存器中选择一个寄存器,发送控制数据或接收状态信息。任意给定时间内只能对一个PHY 中的一个寄存器进行寻址。 MDC 时钟线和 MDIO数据线在微控制器中均用作复用功能I/O: MDC:周期性时钟,提供以最大频率2.5 MHz 传输数据时的参考时序。MDC的最短高电平时间和最短低电平时间必须均为160 ns。MDC的最小周期必须为400 ns。在空闲状态下,SMI管理接口将 MDC时钟信号驱动为低电平。 MDIO:数据输入/输出比特流,用于通过MDC 时钟信号向/从PHY 设备同步传输状态信息。 ![]() 9 T9 z( `, r9 c: i, L' N' Y 3.2、SMI帧结构 下图给出了读操作和写操作帧结构,位传输必须要求从左到右。' m+ v s6 ` a0 G1 O* b5 `1 g7 J; ^! M ![]() * C( G; u! B+ R3 v2 V2 @ Preamble(32bit前导符):每个传输(读或者写)都必须以前导符开始,前导符是MDIO线上连续的32个逻辑’1’信号,和对应MDC线上的32个时钟信号。这部分信号用于和PHY设备建立同步。. E1 _0 V" f: e6 l6 }, ~' S$ H c4 M( w8 F& m. {0 Y Start(起始符):帧的起始符定义为’01’,也就是MDIO线从逻辑’1’降到’0’再回到’1’,以标记传输的。. N2 l" D& O7 ^7 Z/ T9 B( q 7 R( p4 Q; W0 Q( a6 H" S, Z 开始。 " ?5 E4 F0 u, ^* r1 m Operation(操作符):用于定义操作的类型:读或者写。! j5 N: b9 J; ?; w. a 5 v( F+ }8 |. G: I PADDR:PHY的地址有5位,可以区分32个PHY。高位先被发送和接收。 RADDR:寄存器的地址有5位,可以寻址32个独立的寄存器。高位先被发送和接收。2 {1 E6 z. m9 a( Z+ Y. Q" g( t3 E! { @, f TA:2位的转向符,插在RADDR和数据(DATA)之间,用于避免读操作时发生冲突。读操作时,在TA的这2位时间内,MAC控制器保持MDIO线的高阻状态,PHY设备则先保持1位的高阻状态,在第2位时输出’0’信号。写操作时,在TA的这2位时间内,MAC控制器驱动MDIO线输出’10’信号,而PHY设置则保持高阻状态。 " u% O3 e8 |6 N' \$ o4 O- ? DATA(数据):16位的数据域。最先发送和接收的是ETH_MIID寄存器的第15位。8 H, O) d* u5 l' A 空闲位:MDIO线保持在高阻状态。取消所有的三态驱动,由PHY的上拉电阻保证MDIO线处于逻辑’1’。 1 |: G9 T% G! w7 q8 x" h 3.3、SMI写操作! B4 `0 | c$ ] w" S' O 当应用程序设置了MII写和忙位(以太网MACMII地址寄存器(ETH_MACMIIAR)),SMI接口会向PHY传 送 PHY地 址 和 PHY寄 存 器 地 址 ,然 后 传 输 数 据 (以 太 网 MAC MII 数据 寄 存器(ETH_MACMIIDR))。在SMI接口传输数据的过程中,不能修改MII地址寄存器和MII数据寄存器的内容;在此过程中(忙位为高),对MII地址寄存器或MII数据寄存器的写操作将被忽视,并且不影响整个传输的正确完成。当完成写操作时,SMI接口将清除忙位,告知应用程序。! W8 t5 q: J" i2 ~* l+ u; U 下图描述了写操作时的帧格式。2 B O. G8 w% n& }: }% @2 b, L ![]() 3.4、SMI读操作 当程序把以太网MACMII地址寄存器(ETH_MACMIIAR)的MII忙位置为’1’,而保持MII写位为’0’,SMI接口则发送PHY地址和PHY寄存器地址,执行读PHY寄存器的操作。在整个传输过程中,应用程序不能修改MII地址寄存器和MII数据寄存器的内容。在传输过程中(忙位为高),对MII地址寄存器或者MII数据寄存器的写操作将被忽视,并且不影响整个传输的正确完成。在读操作完成后,SMI接口将清除忙位,并把从PHY读回的数据更新到MII数据寄存器中。 . L; l x0 m# s, ^5 j* \ 下图描述了读操作的帧格式 ![]() & E2 h& D# y2 e- g: J) [/ a- ^: E. a 3.5、SMI时钟选择 MAC 启动管理写/读操作。SMI时钟是一个分频时钟,其时钟源为应用时钟(AHB时钟)。分频系数取决于MII地址寄存器中设置的时钟范围。这里既然说到了时钟,就再次提一下上文提到的内容:当使用以太网时,AHB时钟必须至少25MHZ。2 @' g; x. T$ q, y6 k 0 @7 i; W" W+ Y- N/ b& T# w ![]() {9 S* y4 k" M! b* U 04、代码/ l1 Y3 ] I% r m. g STM32的网口的SMI接口初始化是十分简单的。$ c% v9 A5 m, J/ h 初始化GPIO。 \5 a! [" q. ?3 C( h) B( W
因为SMI接口需要MAC配合,所以需要是使能MAC的时钟。. h1 f$ Q2 Q% h+ [5 F" K ) [9 N: t5 j" @' j6 l/ ]. R% L
SMI接口的读函数和写函数。. i1 [+ e% C; u' R6 M/ N
% l/ `3 R7 w' Y7 P$ W$ B- o |
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化
【Hot!】STM32全系列开发板都支持Arduino开发,你知道吗?