5 数据链路层

数据链路层的主要职责是通过单个链路传输数据报。数据链路层协议定义了跨节点交换的数据包的格式以及错误检测,重传,流控制和随机访问等操作。

数据链路层提供服务:

成帧和链路访问:数据链路层协议在链路层传输之前将每个网络帧封装在链路层帧内。帧由包含网络层数据报的数据字段和多个数据字段组成。它规定了帧的结构以及通过链路传输帧的信道访问协议。

可靠的交付:数据链路层提供可靠的交付服务,即无错误地传输网络层数据报。通过传输和确认完成可靠的传送服务。数据链路层主要通过链路提供可靠的传送服务,因为它们具有较高的错误率并且可以在本地校正,发生错误的链路而不是强制重新传输数据。

流控制:接收节点可以以比处理帧更快的速率接收帧。如果没有流量控制,接收器的缓冲区可能会溢出,帧可能会丢失。为了克服这个问题,数据链路层使用流控制来防止链路一侧的发送节点压倒链路另一侧的接收节点。

错误检测:可以通过信号衰减和噪声引入错误。数据链路层协议提供了一种检测一个或多个错误的机制。这是通过在帧中添加错误检测位来实现的,然后接收节点可以执行错误检查。

纠错:纠错与错误检测类似,不同之处在于接收节点不仅检测错误,还确定错误发生在帧中的位置。

半双工和全双工:在全双工模式下,两个节点都可以同时传输数据。在半双工模式下,只有一个节点可以同时传输数据。

5.1错误检测

当数据从一台设备传输到另一台设备时,系统不保证该设备接收到的数据与另一台设备发送的数据是否相同。错误是接收端收到的消息与传输的消息不同的情况。

错误可以分为两类:单比特错误和突发错误

1.单比特错误
给定数据单元的唯一一位从1变为0或从0变为1。

单比特错误主要发生在并行数据传输中。例如,如果使用8条线来发送一个字节的8位,如果其中一条线路有噪声,则每个字节会损坏单个位。

2.突发错误
两个或多个位从0更改为1或从1更改为0称为突发错误。从第一个损坏位到最后一个损坏位确定突发错误。

突发错误最有可能发生在串行数据传输中。受影响的位数取决于噪声和数据速率的持续时间。

5.2纠错

最流行的错误检测技术是:单一奇偶校验、二维奇偶校验、校验、循环冗余校验

1.单一奇偶校验

单奇偶校验是一种简单的机制,检测错误的成本低廉。在该技术中,冗余比特也称为奇偶校验比特,其附加在数据单元的末端,使得1的数量变为偶数。因此,传输比特的总数将是9比特。
如果1位的数量是奇数,则附加奇偶校验位1,如果1位的数量是偶数,则在数据单元的末尾附加奇偶校验位0。

在接收端,根据接收的数据位计算奇偶校验位,并与接收的奇偶校验位进行比较。

此技术生成偶数的总数为1,因此称为偶数奇偶校验。

单奇偶校验的缺点有两点:第一,它只能检测非常罕见的单位错误;第二,如果两个位互换,则它无法检测到错误。

2.二维奇偶校验

使用以表格形式组织数据的二维奇偶校验可以提高性能。为每一行计算奇偶校验位,相当于单奇偶校验。

在二维奇偶校验中,将一个位块分成行,并将冗余位行添加到整个块中。

在接收端,奇偶校验位与根据接收数据计算的奇偶校验位进行比较。

二维奇偶校验的缺点有两点:第一,如果一个数据单元中的两个位被破坏,而另一个数据单元中完全相同位置的两个位也被破坏,那么二维奇偶校验器将无法检测到错误;第二,在某些情况下,此技术不能用于检测 4 位或更多位错误。

3.校验

校验和是基于冗余概念的错误检测技术。它分为两部分:校验和生成器以及校验和检查

校验和在发送方生成。校验和生成器将数据细分为每个n位的相等段,并且所有这些段通过使用一个补码算法加在一起。该和被补充并附加到原始数据,称为校验和字段。扩展数据通过网络传输。

校验和在接收方验证。接收器将输入数据细分为每个n比特的相等段,并且将所有这些段加在一起,然后补充该总和。如果和的补码为零,则接受数据,否则拒绝数据。

接收方遵循以下步骤:

  • 块单元被分成k个部分和n个比特中的每一个。
  • 通过使用一个补码算法将所有k个部分加在一起得到总和。
  • 总和是补充。
  • 如果和的结果为零,则接受数据,否则丢弃数据。

4.循环冗余校验(CRC)
CRC是用于确定错误的冗余错误技术。以下是CRC中用于错误检测的步骤:

第一步:在CRC技术中,一串n 0被附加到数据单元,并且该n数小于预定数量的比特数,称为n + 1比特的除法。

第二步:使用一个过程将新扩展的数据除以除数称为二进制除法。从该除法产生的余数称为CRC余数。

第三步:CRC余数替换原始数据末尾的附加0。这个新生成的单元被发送到接收器。

第四步:接收器接收数据,然后接收CRC余数。接收器将整个单元视为一个单元,并将其除以用于查找CRC余数的相同除数。

如果该除法的结果为零,这意味着它没有错误,并且数据被接受。如果该除法的结果不为零,则意味着数据由错误组成。因此,数据被丢弃。

5.3数据链路控制

数据链路控制是数据链路层提供的服务,可通过物理介质提供可靠的数据传输。例如,在半双工传输模式中,一个设备一次只能传输数据。如果链路末端的两个设备同时传输数据,它们将发生冲突并导致信息丢失。数据链路层提供设备之间的协调,以便不发生冲突。

数据链路层提供三个功能:

  • 线路控制
  • 流量控制
  • 错误控制

1.线路控制
线路控制是数据链路层的一项功能,它提供链路系统之间的协调。它确定哪个设备可以发送,以及何时可以发送数据。

线路控制可以通过两种方式实现:ENQ/ACK、Poll/select。

(1) END / ACK
END / ACK代表查询/确认当链路上没有错误的接收器并且在两个设备之间具有专用路径以使得能够接收传输的设备是预期的设备时使用。END / ACK协调哪个设备将开始传输以及接收者是否准备好。
发送器发送称为查询(ENQ)的帧,询问接收器是否可用于接收数据。

接收器响应肯定确认(ACK)或否定确认(NACK),其中肯定确认意味着接收器准备接收传输,否定确认意味着接收器不能接受传输。

以下是接收者的回复:

  • 如果对ENQ的响应是肯定的,则发送方将发送其数据,并且一旦其所有数据都已被发送,则设备利用EOT(发送结束)帧完成其发送。
  • 如果对ENQ的响应是否定的,则发送方断开连接并在另一时间重新开始传输。
  • 如果响应既不是负面也不是正面,则发送方假定ENQ帧在传输过程中丢失,并且在放弃之前尝试三次建立链接。

(2) Pool/Select
线路控制的Pool/Select方法适用于将一个设备指定为主站,而其他设备为二级站的拓扑。

在这种情况下,主设备和多个从设备组成一条传输线,所有的交换都是通过主设备进行的,即使目的地是从设备。主要设备控制通信链路,而次要设备遵循主要设备的指令。主要设备确定允许哪个设备使用通信信道。因此,我们可以说它是会话的发起者。

如果主设备想要从辅助设备接收数据,它会要求辅助设备发送任何数据,这个过程称为Pool。如果主设备想要向从设备发送一些数据,那么它会告诉目标从设备准备接收数据,这个过程称为Select。

Select
当主设备有要发送的内容时使用Select模式。

当主设备想要发送一些数据时,它通过发送选择(SEL)帧向辅助设备警告即将到来的传输,帧的一个字段包括预期的辅助设备的地址。

当辅助设备接收SEL帧时,它发送指示辅助就绪状态的确认。

如果辅助设备准备好接受数据,则主设备将两个或更多个数据帧发送到预期的辅助设备。数据传输完成后,辅助设备会发送一个确认,指出已收到数据。

Pool
当主设备想要从辅助设备接收一些数据时,使用轮询模式。

当主设备想要接收数据时,它会询问每个设备是否有任何要发送的内容。

首先,主要询问(轮询)第一个辅助设备,如果它以NACK(否定确认)响应则表示它没有任何要发送的内容。现在,它接近第二个辅助设备,它用ACK响应意味着它有要发送的数据。辅助设备可以一个接一个地发送一个以上的帧,或者有时可能需要在发送每个帧之前发送ACK,这取决于所使用的协议的类型。

2.流量控制
它是一组程序,告诉发送方在数据压倒接收方之前它可以传输多少数据。接收设备具有有限的速度和有限的存储器来存储数据。因此,接收设备必须能够在达到限制之前通知发送设备暂时停止发送。它需要一个缓冲区,一块内存,用于存储信息,直到它们被处理完毕。

目前有两种方法来控制数据流:停止与等待、滑动窗口

(1) 停止与等待
在停止与等待方法中,发送方在它发送的每个帧之后等待确认。
收到确认后,只发送下一帧。交替发送和等待帧的过程继续,直到发送者发送EOT(发送结束)帧。

停止等待的好处

停止与等待方法很简单,因为在发送下一帧之前检查并确认每个帧。

停止等待的缺点

停止等待技术使用效率低,因为每个帧必须一直传输到接收器,并且确认在下一帧发送之前一直传播。发送和接收的每个帧使用遍历链路所需的整个时间。

(2) 滑动窗口
滑动窗口是一种流控制方法,其中发送方可以在获得确认之前发送若干帧。在滑动窗口控制中,可以一个接一个地发送多个帧,由于可以有效地利用通信信道的容量。滑动窗口是指发送方和接收方端的虚拟框。窗口可以在任一端保持帧,并且它提供在确认之前可以传输的帧数的上限。

发件人窗口
在传输开始时,发送方窗口包含n-1帧,当它们被发送出去时,左边界向内移动缩小窗口的大小。例如,如果窗口的大小为w,如果发送了三个帧,则发送方窗口中遗漏的帧数为w-3。

一旦ACK到达,则发送方窗口扩展到将等于ACK确认的帧数的数字。

例如,窗口的大小为7,如果已发送帧0到4并且没有到达确认,则发送方窗口仅包含两个帧,即5和6.现在,如果ACK已到达,则数字4表示0到3帧未损坏,发送方窗口扩展到包括接下来的四个帧。因此,发送方窗口包含六个帧(5,6,7,0,1,2)。

接收窗口

在传输开始时,接收器窗口不包含n帧,但它包含n-1个帧空间。当新帧到达时,窗口的大小会缩小。

接收器窗口不表示接收的帧数,但它表示在发送ACK之前可以接收的帧数。例如,窗口的大小是w,如果接收到三个帧,则窗口中可用的空间数是(w-3)。

一旦发送确认,接收器窗口扩展的数量等于确认的帧数。

假设窗口的大小为7意味着接收器窗口包含七个帧的七个空格。如果接收到一帧,则接收器窗口收缩并将边界从0移动到1.这样,窗口逐个缩小,因此窗口现在包含六个空格。如果已发送0到4的帧,则窗口在发送确认之前包含两个空格。

3.错误控制

错误控制是一种错误检测和重传技术。错误控制的类型如下:

(1) 停止等待ARQ
停止等待ARQ是一种用于在帧损坏或丢失的情况下重新传输数据的技术。该技术的工作原理是发送方在收到最后发送帧的确认之前不发送下一帧。

(2) 重传

重传需要四个功能

  • 发送设备保留最后发送帧的副本,直到收到确认。如果未正确接收帧,则保留副本允许发送方重新传输数据。
  • 数据帧和ACK帧都交替编号为0和1,以便可以单独识别它们。假设数据1帧确认数据0帧意味着数据0帧已正确到达并期望接收数据1帧。
  • 如果在最后发送的帧中发生错误,则接收器发送未编号的NAK帧。收到NAK帧后,发送方重新发送数据。
  • 它适用于计时器。如果在规定的时间内没有收到确认,则发送方认为帧在传输过程中丢失,因此它将重新发送帧。

重传的两种可能性

  • 损坏的帧:当接收器接收到损坏的帧时,即帧包含错误,然后它返回NAK帧。例如,当发送数据0帧,然后接收器发送ACK 1帧意味着数据0已正确到达,并发送数据1帧。发送方发送下一帧:数据1.它达到未损坏,接收方返回ACK 0.发送方发送下一帧:数据0.接收方报告错误并返回NAK帧。发送方重新传输数据0帧。
  • 丢失帧:发送者配备定时器,并在帧发送时启动。有时框架没有到达接收端,因此无论是正面还是负面都不能确认。发送器等待确认,直到定时器熄灭。如果定时器熄灭,它将重新发送最后一个发送的帧。

(3) 滑动窗ARQ
滑动窗ARQ是一种用于连续传输错误控制的技术。

用于重传的三个功能

  • 在这种情况下,发送方保留所有发送帧的副本,直到它们被确认为止。假设已经发送了从0到4的帧,并且最后一次确认是针对第2帧,发送方必须保留第3帧和第4帧的副本,直到它们正确接收为止。
  • 接收器可以根据条件发送NAK或ACK。NAK帧告诉发件人数据已被收到损坏。由于滑动窗口是连续传输机制,因此必须对ACK和NAK进行编号以识别帧。ACK帧由一个数字组成,表示接收方希望接收的下一帧。NAK帧由表示损坏帧的数字组成。
  • 滑动窗口ARQ配备有计时器以处理丢失的确认。假设在收到任何确认之前已经发送了n-1帧。发送方等待确认,因此它启动计时器并等待再发送之前。如果分配的时间用完,则发送方根据使用的协议重新发送一个或所有帧。

滑动窗口ARQ中使用的两个协议
Go-Back-n ARQ:在Go-Back-N ARQ协议中,如果一帧丢失或损坏,则它重新发送所有帧,之后它不接收肯定ACK。

选择性拒绝ARQ:选择性拒绝ARQ技术比Go-Back-n ARQ更有效。在该技术中,仅重传那些已经接收到否定确认(NAK)的帧。接收器存储缓冲区保持所有损坏的帧保持不变,直到正确接收到错误帧。接收器必须具有适当的逻辑,以便以正确的顺序重新插入帧。发送方必须包含一个搜索机制,该机制仅选择所请求的重传帧。

6 STM32 的 ETH 外设

前文讲解了以太网的相关理论知识,接下来笔者将从实际出发,介绍STM32XX7系列ETH外设,从而将理论结合实际应用。

如果从硬件角度来看以太网,则由CPU,MAC,PHY三部分组成的,如下图所示:

上图中DMA集成在CPU,CPU、MAC、PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,将MAC集成进CPU而将PHY留在片外,这种结构是最常见的。 下图是网络接口内部结构图,虚框表示CPU,MAC集成在CPU中,PHY芯片通过MII接口与CPU上的MAC连接。

STM32XX7系列控制器内部集成了一个以太网外设,它实际是一个通过 DMA 控制器进行介质访问控制 (MAC),它的功能就是实现 MAC 层的任务。

以太网提供了可配置、灵活的外设,用以满足客户的各种应用需求。它支持与外部物理层(PHY) 相连的两个工业标准接口:默认情况下使用的介质独立接口 (MII)(在 IEEE 802.3 规范中定义)和简化介质独立接口 (RMII)。它有多种应用领域,例如交换机、网络接口卡等。Nucleo-F746ZG借助以太网外设,STM32F746 控制器可以通过 ETH 外设按照 IEEE 802.3-2002 标准发送和接收 MAC 数据包。遵循IEEE 1588-2008 标准,用于规定联网时钟同步的精度。

ETH 内部自带专用的 DMA 控制器用于 MAC, ETH 支持两个工业标准接口介质独立接口 (MII)和简化介质独立接口 (RMII) 用于与外部 PHY 芯片连接。 MII 和 RMII 接口用于 MAC 数据包传输, ETH 还集成了站管理接口 (SMI) 接口专门用于与外部 PHY 通信,用于访问 PHY 芯片寄存器。

ETH 有专用的 DMA 控制器,它通过 AHB 主从接口与内核和存储器相连, AHB 主接口用于控制数据传输,而 AHB 从接口用于访问“控制与状态寄存器” (CSR) 空间。在进行数据发送是,先将数据有存储器以 DMA 传输到发送 TX FIFO 进行缓冲,然后由 MAC 内核发送;接收数据时, RXFIFO 先接收以太网数据帧,再由 DMA 传输至存储器。 ETH 系统功能框图见下图。

【注】当使用以太网时, AHB 时钟频率必须至少为 25 MHz。

6.1站管理接口:SMI

站管理接口 (SMI) 允许应用程序通过 2 线时钟和数据线访问任意 PHY 寄存器。该接口支持访问多达 32 个 PHY。

应用程序可以从 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 设备同步传输状态信息。

SMI 帧格式
下表中给出了与读操作或写操作有关的帧结构,位传输顺序必须从左到右。

管理帧包括八个字段:

  • 报头:每个事务(读取或写入)均可通过报头字段启动,报头字段对应于 MDIO 线上 32个连续的逻辑“1”位以及 MDC 上的 32 个周期。该字段用于与 PHY 设备建立同步。
  • 起始:帧起始由 <01> 模式定义,用于验证线路从默认逻辑“ 1”状态变为逻辑“ 0”状态,然后再从逻辑“0”状态变为逻辑“1”状态。
  • 操作:定义正在发生的事务(读取或写入)的类型。
  • PADDR: PHY 地址有 5 位,可构成 32 个唯一 PHY 地址。最先发送和接收地址的MSB 位。
  • PADDR:寄存器地址有 5 位,从而可在所选 PHY 设备中对 32 个不同的寄存器进行寻址。最先发送和接收地址的 MSB 位。
  • TA:周转字段在 RADDR 和 DATA 字段间定义了一个 2 位模式,以避免在读取事务期间出现竞争现象。读取事务时, MAC 控制器将 TA 的 2 个位驱动为 MDIO 线上的高阻态。 PHY 设备必须将 TA 的第一位驱动为高阻态,将 TA 的第二位驱动为“0”。写入事务时, MAC 控制器针对 TA 字段驱动 <10> 模式。 PHY 设备必须将 TA 的 2 个位驱动为高阻态。
  • 数据:数据字段为 16 位。最先发送和接收的位必须为 ETH_MIID 寄存器的位 15。
    -空闲: MDIO 线驱动为高阻态。三态驱动器必须禁止, PHY 的上拉电阻使线路保持逻辑“1”状态。

SMI 写操作
当应用程序将 MII 写入位和繁忙位(在以太网 MAC MII 地址寄存器 (ETH_MACMIIAR) 中)置 1 时, SMI 将通过传输 PHY 地址、 PHY 中的寄存器地址以及写入数据(在以太网 MACMII 数据寄存器 (ETH_MACMIIDR) 中)来触发对 PHY 寄存器进行写操作。事务进行期间,应用程序不应更改 MII 地址寄存器的内容或 MII 数据寄存器。在此期间对 MII 地址寄存器或MII 数据寄存器执行的写操作将会忽略(繁忙位处于高电平状态),事务将无错完成。写操作完成后, SMI 将通过复位繁忙位进行指示。

下图显示了写操作的帧格式。

SMI 时钟选择
MAC 启动管理写/读操作。 SMI 时钟是一个分频时钟,其时钟源为应用时钟( AHB 时钟)。分频系数取决于 MII 地址寄存器中设置的时钟范围。下表显示了如何设置时钟范围。

6.2介质独立接口: MII

介质独立接口 (MII) 定义了 10 Mb/s 和 100 Mb/s 的数据传输速率下 MAC 子层与 PHY 之间的互连。

  • MII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:速率为 10 Mb/s 时为 2.5 MHz;速率为 100 Mb/s 时为 25 MHz。

  • MII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:速率为 10 Mb/s 时为 2.5 MHz;速率为 100 Mb/s 时为 25 MHz。

  • MII_TX_EN:发送使能信号。该信号表示 MAC 当前正针对 MII 发送半字节。该信号必须与报头的前半字节进行同步 (MII_TX_CLK),并在所有待发送的半字节均发送到 MII时必须保持同步。

  • MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,由 MAC 子层同步驱动,在MII_TX_EN 信号有效时才为有效信号(有效数据)。 MII_TXD[0] 为最低有效位,MII_TXD[3] 为最高有效位。禁止 MII_TX_EN 时,发送数据不会对 PHY 产生任何影响。

  • MII_CRS:载波侦听信号。当发送或接收介质处于非空闲状态时,由 PHY 使能该信号。发送和接收介质均处于空闲状态时,由 PHY 禁止该信号。 PHY 必须确保 MII_CS 信号在冲突条件下保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。

  • MII_COL:冲突检测信号。检测到介质上存在冲突后, PHY 必须立即使能冲突检测信号,并且只要存在冲突条件,冲突检测信号必须保持有效状态。该信号无需与 TX 和 RX 时钟保持同步。在全双工模式下,该信号没意义。

  • MII_RXD[3:0]:数据接收信号。该信号是 4 个一组的数据信号,由 PHY 同步驱动,在MII_RX_DV 信号有效时才为有效信号(有效数据)。 MII_RXD[0] 为最低有效位,MII_RXD[3] 为最高有效位。当 MII_RX_EN 禁止、 MII_RX_ER 使能时,特定的MII_RXD[3:0] 值用于传输来自 PHY 的特定信息。

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

  • MII_RX_ER:接收错误信号。该信号必须保持一个或多个周期 (MII_RX_CLK),从而向MAC 子层指示在帧的某处检测到错误。该错误条件必须通过 MII_RX_DV 验证。

TX 接口信号编码

RX 接口信号编码

MII 时钟源

要生成 TX_CLK 和 RX_CLK 时钟信号,必须向外部 PHY 提供 25MHz 时钟,如图 474 所示。除了使用外部 25 MHz 石英晶体提供该时钟,还可以通过 STM32F75xxx 和 STM32F74xxx 微控制器的 MCO 引脚输出该信号。这种情况下,必须对 PLL 倍频进行配置,以通过 25 MHz外部石英晶体在 MCO 引脚上获得所需频率。

6.3精简介质独立接口:RMII

精简介质独立接口 (RMII) 规范降低了 10/100 Mb/s 下微控制器以太网外设与外部 PHY 间的引脚数。根据 IEEE 802.3u 标准, MII 包括 16 个数据和控制信号的引脚。 RMII 规范将引脚数减少为 7 个(引脚数减少 62.5%)。

RMII 是 MAC 和 PHY 之间的实例化对象。这有助于将 MAC 的 MII 转换为 RMII。 RMII 具有以下特性:

  • 支持 10 Mb/s 和 100 Mb/s 的运行速率
  • 参考时钟必须是 50 MHz-
  • 相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY
  • 它提供了独立的 2 位宽(双位)的发送和接收数据路径

RMII 时钟源
使用外部 50 MHz 时钟驱动 PHY 或使用嵌入式 PLL 生成 50 MHz 频率信号来驱动 PHY。

如果使用RMII接口时,50MHz时钟来源有以下几种方式:

方式一:外部时钟

一个50MHz的外部晶振同时给MAC和PHY供应50MHz时钟,MCU其他的部分用自己独立的时钟。这个方式需要外挂一颗晶振。

方式二:与MCU共用外部时钟

MAC, PHY, MCU都用一颗50MHz外部晶振统一提供时钟源。

方式三:STM32输出时钟源

把50MHz换成25MHz,通过STM32的MCO引脚可以输出同样的25MHz时钟给PHY,然后用PHY内部的PLL配置出50MHz时钟反补给STM32的MAC,这样就满足了PHY和MAC都是50MHz。

值得注意的是,以上设计针对STM32XX7系列。

最后,来看看一个实际硬件案例。

下图是Nucleo-F746ZG开发板的ETH硬件电路图。主要是 LAN8742A 通过 RMII 和 SMI接口与 STM32F746 控制器连接,见下图。

STM32F746通过RMII 接口连接PHY芯片LAN8742, 然后经过百兆网络变压器到RJ45接口。因为 LAN8742A只有 RMII 接口,因此这里与开发板的连接采用了 RMII 接口。电路设计时,将 nINTSEL 引脚通过下拉电阻拉低,也就是REF_CLK Out 模式,设置 nINT/FEFCLKO 为输出 50MHz 时钟,当然前提是在 XTAL1 和 XTAL2 接入了 25MHz 的时钟源。

PHY芯片LAN8742的nRST复位引脚连接到了STM32F746的复位引脚, 两者可以同时使用复位按钮。

以上内容部分翻译自data-link-layer



欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书


欢迎订阅我的微信公众号

《通信技术 - 以太网》详解以太网(二)相关推荐

  1. 以太网详解(二)-物理介质(100base-TX等)介绍

    转载原文:https://blog.csdn.net/ZCShouCSDN/article/details/80208596 在搞网络这一块的时候,看到了100Base-T.100Base-TX等这些 ...

  2. 三菱FX5U系列PLC之间进行UDP以太网通信的具体方法示例详解(二)

    三菱FX5U系列PLC之间进行UDP以太网通信的具体方法示例详解(二) 假设有A.B两个FX5U系列的PLC要进行UDP以太网通信,进行数据交互. 上次和大家分享了两台FX5U系列PLC进行UDP以太 ...

  3. Ubuntu成长历程-内核配置menuconfig详解(二)

    Ubuntu成长历程-内核配置menuconfig详解(二) Ubuntu成长历程-内核配置menuconfig详解(二) ---Device Drivers 说实话,这部分涉及的内容实在太多了,就不 ...

  4. 【FFmpeg】ffmpeg命令详解(二)

    ffmpeg命令详解(二) 4.流选择 4.1 自动选择流 4.2 手动选择流 5.命令行选择详解 5.1 命令行选项的值说明: 5.2 流说明符 5.3 通用选项 5.4 主选项 5.5 视频相关选 ...

  5. PR详解及二分类的PR曲线绘制

    PR详解及二分类的PR曲线绘制 从混淆矩阵可见: 要提高Precesion,只要让预测为正样本的阈值尽可能高(最高为1,即只有当100%认为是正样本时才会被预测为正),即只有极大概率为正才会被预测为正 ...

  6. HAProxy详解(二):HAProxy基础配置与应用实例

    一.HAProxy基础配置与应用实例: 1.快速安装HAProxy集群软件: HAProxy的官网: https://www.haproxy.org/#down下载HAProxy的源码包. 安装: [ ...

  7. Fragment详解之二——基本使用方法

    前言:依然没有前言--文章写的太快,生活过得太有章程,前言都不知道写什么了-- 相关文章: 1.<Fragment详解之一--概述> 2.<Fragment详解之二--基本使用方法& ...

  8. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

  9. Linux中/proc目录下文件详解(二)

    Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...

  10. logback 常用配置详解(二) appender

    详细整理了logback常用配置 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 logback 简介 logback常用配置详解(一)<configuration> an ...

最新文章

  1. 雇佣和留住开发人员,打造优秀的团队
  2. struts中简单的校验
  3. 九章算法班L5 Linked List
  4. AceTeamwork 软件成就继续蝉联国内最优秀的项目工时(timesheet)及费用报销(expense)软件...
  5. 基于VC的OPC客户端软件研究与实现
  6. [转]图片格式WEBP全面解析
  7. Springboot 项目启动后执行某些自定义代码
  8. html自动按键,VBS脚本和HTML DOM自动操作网页
  9. 视觉SLAM十四讲(1):预备知识
  10. 不要再纠结卷积的公式啦!0公式深度解析全连接前馈网络与卷积神经网络!
  11. mybatis中SqlSession一定要关闭
  12. 数据分析师的30种死法
  13. mysql出现死锁场景_mysql死锁场景分析
  14. 李华锦叔叔:追女生该如何正确的花钱?
  15. 查看docker 容器的端口
  16. UART串口通信协议详解
  17. Linux ssh 文件 authorized_keys 和 known_hosts
  18. 微信小游戏世界排行榜的绘制
  19. Baizhi Memcached GJF
  20. easyExcel下载或导出

热门文章

  1. Solaris系统root用户无法直接登录
  2. React 集成 jsoneditor 以对json数据进行展示和修改
  3. jsp在线预览Word文档操作步骤(自己测试的)
  4. 项目一实时数仓数据采集
  5. 计算机在酒店与应用中的展望,对酒店计算机信息管理系统的分析与展望
  6. 关于下载Keil5无法打开keil4文件的问题解决方案
  7. 数据包络分析方法与maxdea软件_奥林巴斯OmniScan X3探伤仪软件升级,缺陷图像无处藏...
  8. matlab二阶系统的单位阶跃响应为,2 二阶系统阶跃响应
  9. HTMLTestRunner测试报告美化
  10. composer 安装laravel