LWIP (1.1) ETH Module以太网模块

2023-05-16

STM32 以太网 ETH模块说明
1.overview
2.ETH module in stm32h743

STM32H743 为例
开局一张图 ETHER 模块 红框所示 以STM32H743为例
32 BIt AHB为内部高速总线 D2 域,Master为可以发起读写。AHB总线在STM32 H743的最高速率 为240MHz。
对外接口为MII/RMII
在这里插入图片描述
开局第二张图
Ethernet high-level block diagram
在这里插入图片描述Eth_hclk ETH 模块的时钟源
DMA Arb 对模块外部 AHB Master可以主动发起数据的读写。对内连接 两个专用DMA (数据发送DMA,数据接收DMA)其分别连接 Tx,Rx FIFO (深度为2K)。FIFO连接两个对外数据寄存器 MAC Tx,MAC Rx ,对外用RMII/MII 对外引脚输出连接PYH。
AHB Slave 不可发起读写,CPU通过AHB Slave接口配置CRS控制寄存器控制整个ETH。

1.总线接口 ,用作数据传输。Master 用于DMA数据的 搬移,Slave 用于CPU对状态寄存器的读写。
2.DMA
3.MTL 缓存FIFO
4.MAC 以太网MAC协议处理
5.RMII,MII接口

开机第三张图 STM32 ETH模块主要实现MAC层

MAC数据包格式
IEEE 对以太网上传输的数据包格式也进行了统一规定,该数据包被称为 MAC 数据包。

在这里插入图片描述
MAC 数据包由前导字段、帧起始定界符、目标地址、源地址、数据包类型、数据域、填充域、校验和域组成。
前导字段,也称报头,这是一段方波,用于使收发节点的时钟同步。内容为连续 7 个字节,的 0x55。字段和帧起始定界符在 MAC 收到数据包后会自动过滤掉。

• 帧起始定界符 (SFD):用于区分前导段与数据段的,内容为 0xD5

• MAC 地址: MAC 地址由 48 位数字组成,它是网卡的物理地址,在以太网传输的最底层,就是根据 MAC 地址来收发数据的。部分 MAC 地址用于广播和多播,在同一个网络里不能有两个相同的 MAC 地址。 PC 的网卡在出厂时已经设置好了 MAC 地址,但也可以通过一些软件来进行修改,在嵌入式的以太网控制器中可由程序进行配置。数据包中的 DA 是目标地址, SA 是源地址。

• 数据包类型:本区域可以用来描述本 MAC 数据包是属于 TCP/IP 协议层的 IP 包、 ARP 包还是 SNMP 包,也可以用来描述本 MAC 数据包数据段的长度。如果该值被设置大于 0x0600,不用于长度描述,而是用于类型描述功能,表示与以太网帧相关的 MAC 客户端协议的种类。

• 数据段:数据段是 MAC 包的核心内容,它包含的数据来自 MAC 的上层。其长度可以从0~1500 字节间变化。

• 数据段:数据段是 MAC 包的核心内容,它包含的数据来自 MAC 的上层。其长度可以从0~1500 字节间变化。

• 填充域:由于协议要求整个 MAC 数据包的长度至少为 64 字节 (接收到的数据包如果少于64 字节会被认为发生冲突,数据包被自动丢弃),当数据段的字节少于 46 字节时,在填充域会自动填上无效数据,以使数据包符合长度要求。

• 校验和域: MAC 数据包的尾部是校验和域,它保存了 CRC 校验序列,用于检错。

MII 和 RMII 接口 ETH 对外接口连接PHY芯片实现物理层传输
图四
在这里插入图片描述
PHY:示例 LAN8720A
图五
高度抽象图如下
在这里插入图片描述
模块抽象图如下
在这里插入图片描述

来自LAN8720A/LAN8720AI 数据手册
在这里插入图片描述

在这里插入图片描述

最左边主要是RMII接口对接MCU实现数据的输入,以及LAN8720 寄存器配置端口MDC,MDIO
最右边是PHY输出(网线电平输出)
中间三大模块 RMII逻辑接口,接收模块,发送模块。要以一定的抽象视角。
一般封装方式,小巧,引脚少
如下所示
在这里插入图片描述
2. ETH Mode in STM32H743
在这里插入图片描述eth_hclk Digital input AHB clock
eth_sbd_intr_it Digital output Main Ethernet interrupt
lpi_intr_o Digital output Sideband signal generated when the transmitter or receiver enters or exits the LPI state.
pmt_intr_o Digital output Sideband signal generated when a valid remote wakeup packet is received

eth_mii_tx_clk Digital input MII Tx kernel clock
eth_mii_rx_clk Digital input MII Rx kernel clock
eth_rmii_ref_clk Digital input RMII reference kernel clock
eth_ptp_pps_out Digital output PTP pulse-per-second signal

以太网外设由 4 个主要功能模块组成:
1 控制和状态寄存器模块 (CSR),用于控制通过 AHB 32 位从接口进行的寄存器访问

2直接存储器访问接口 (DMA)

此为逻辑 DMA 模块,具有 1 条用于接收的物理通道和 1 条用于发送的物理通道。该模
块用于控制通过 AMBA AHB 32 位主接口在 MAC 和系统存储器之间进行的数据传输。
3介质访问控制模块 (MAC),负责实现以太网协议MAC 事务层 (MTL),负责控制应用和 MAC 之间的数据流

DMA 控制器

DMA 具有独立的发送 (Tx) 和接收 (Rx) 引擎。 Tx 引擎将数据从系统存储器传输到 MAC 事务层 (MTL),而 Rx 引擎将数据从设备端口 (PHY) 传输到系统存储器。

以太网传输数据量大速度快,这种条件下不适合CPU的干预,DMA在以太网传输中为必须选择。因此ETH模块有自带的专用以太网DMA模块。DMA模块负责数据搬运,所以根据以太网传输数据特点特别设计的DAM。

DMA将MAC接收到的数据包传输到系统内存中的Rx缓冲区,将Tx数据包从系统内存中的Tx缓冲区中传输出去。驻留在系统内存中的描述符包含指向这些缓冲区的指针。

DMA 的数据结构 描述符 descriptors
The base address of each list is written to the respective Tx and Rx registers: Channel Txdescriptor list address register (ETH_DMACTXDLAR)) and Channel Rx descriptor listaddress register (ETH_DMACRXDLAR))
在这里插入图片描述
descriptor 是一个固定格式的数据,需要确定descriptor list 列表长度
在这里插入图片描述
DMA 处理完列表中的最后一个描述符后,会自动跳转回列表地址寄存器中的起始描述符,以形成一个描述符环。
在这里插入图片描述
描述符列表位于应用的物理存储地址空间内。每个描述符最多可指向两个缓冲区。因此,可使用并以物理方式寻址两个缓冲区,而非存储器中的连续缓冲区。
在这里插入图片描述
所指向的缓存区(BUFFER1、2) 都是在应用程序当中。大小不会超过一包数据 。缓冲区只包含数据。缓冲区状态保存在描述符中。

每个正常描述符均包含两个缓冲区和两个地址指针。
在这里插入图片描述
descriptors 间的地址间距,descriptors数量都有相应的寄存器
descriptors 尾指针寄存器表示 descriptors N DMA 会依次增加到tail指针。其实地址和tail 中间的descriptors 是DMA访问的区间。
在这里插入图片描述
上图所示
base address 为descriptors 起始地址。 tail为DMA自动+1 的末尾地址。当前descriptors 指针表示当下时刻所使用的descriptors 。
当下descriptors 如果和尾指针相当,那么DMA不会执行+1,处于阻塞状态Current Descriptor Pointer == Descriptor Tail Pointer;,应为还未到Length (descriptors list 长度)所以不会跳回到起始地址。通过该表尾指针的位置就可以解除阻塞。Current Descriptor Pointer < Descriptor Tail Pointer;

对于一个发送数据包,以太网外设 DMA 至少需要一个descriptors。除了两个缓冲区、两个字节计数缓冲区和两个地址指针之外,发送描述符还具有控制字段,此类字段可用于按发送数据包来管理 MAC 操作。
descriptors 数据结构有很多种
分为TX,RX 写,读 具体参考手册描述。
其作用是对发送数据包的信息进行记录。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

The MAC Transaction Layer (MTL)

在这里插入图片描述

MAC 事务层 (MTL) 提供 FIFO 存储器接口,来缓冲和调整应用系统存储器和 MAC 之间的数据包。它还可以在应用时钟和 MAC 时钟域之间实现数据传输。 MTL 层具有两个 32 位宽的数据路径:发送路径和接收路径。

发送路径
应用或内部 DMA 将从应用或系统存储器中读取的以太网数据包推入到 Tx FIFO。当达到队列阈值(阈值模式)或完整数据包处于队列中(存储转发模式)时,相应数据包将弹出并传输到 MAC。发送 EOP 后,将从 MAC 获取发送状态并传送回应用或内部DMA。 Tx 队列大小为 2048 个字节。

接收路径
MTL Rx 模块从 MAC 接收数据包,并将其推入 Rx 队列。当队列超出配置的接收阈值( Rx 队列工作模式寄存器 (ETH_MTLRxQOMR) 中定义的 RTC 位 [1:0])时,或者在接收到完整数据包后,会将队列的状态(填充级别)报告给应用或 DMA。 MTL 还指示队列填充级别,以便 DMA 可向主接口发起预配置的突发传输。 Rx 队列大小为 2048 个字节。

MAC

在这里插入图片描述

MAC 负责以太网协议处理。在发送模式下,它从 MTL 接收数据,然后再将其传送到 PHY接口。在接收模式下, MAC 从 PHY 接口接收数据,然后再将其传送到 MTL 模块的 RxFIFO。
MAC transmission MAC数据传输时序

发送序列如下:

  1. 当 MTL 应用在 SOP(数据包起始)信号置为有效的情况下推入数据时,会启动发送。
  2. 检测到 SOP 信号时, MAC 接受数据并开始向 MII 发送。
  3. 当 EOP(数据包结束)传送到 MAC 时, MAC 执行以下操作之一:
    – MAC 完成常规发送,并向 MTL 提供发送状态。
    – 如果在发送期间发生常规冲突(半双工模式下) ,则 MAC 会将发送状态提供给 MTL,
    同时重试位置 1。 MAC 会提供重试请求,直到下列其中一个条件为真:
    数据包已成功发送
    达到最大重试请求次数。在这种情况下, MAC 中止数据包发送,并处于过度冲突发送状态。 MAC 接受并丢弃所有后续数据,直到接收到下一个 SOP。检测到来自MAC 的重试请求(在状态中)时, MTL 模块应从 SOP 重新发送同一数据包。
    – 如果发生以下任一情况,则 MAC 会中止数据包发送:
    无载波(半双工模式)
    载波丢失(半双工模式)
    过度延迟(半双工模式)
    延迟冲突(半双工模式)
    MAC 接受并丢弃所有后续数据,直到接收到下一个 SOP。
  4. 如果发送期间 MTL 无法连续提供数据, MAC 将发出下溢状态。 MAC 接受并丢弃所有
    后续数据,直到接收到下一个 SOP。
  5. 从 MTL 正常传输数据包期间,如果 MAC 在未获得前一数据包的 EOP 的情况下接收到
    SOP,则会忽略该 SOP 并将新的数据包视为前一数据包的延续。

MAC reception MAC层数据接收

当 MAC 在 MII 上检测到 SFD 时,将启动接收操作。 MAC 将去除报头和 SFD,然后再继续处理数据包。检查报头字段以进行过滤, FCS 字段用于验证数据包的 CRC。接收的数据包存储在浅缓冲区中,直到执行地址过滤。如果数据包未通过地址过滤器,则会在 MAC 中将其丢弃。
接收序列如下:

  1. MII 的接收数据有效信号 (RxDV) 激活时,接收状态机 (RSM) 开始寻找 SFD 字段( MII模式下的 0xD 半字节)。
    状态机会丢弃接收到的数据包,直至检测到 SFD。

  2. 检测到 SFD 时,状态机开始向 RPC 模块发送以太网数据包的数据,从 SFD 之后的第一个字节(目标地址)开始发送。

  3. 如果使能了 IEEE 1588 时间戳功能,则在 MII 上检测到任何数据包的 SFD 时, MAC 都

将获取系统时间的快照。如果在 MAC 过滤期间该数据包未被丢弃,则时间戳将传递给应用程序。 MAC 将接收到的半字节数据转换成字节,并将有效数据包数据转发到 RFC模块。

  1. 接收状态机对正在接收的以太网数据包的长度/类型字段进行解码。如果长度/类型字段小于 1,536 并且为 MAC 编程了自动去除 CRC/Pad( 工作模式配置寄存器 (ETH_MACCR) 的位 20),则状态机将发送数据包数据(数据量不超过长度/类型字段中指定的数量),然后开始丢弃字节(包括 FCS 字段)。状态机对长度/类型字段进行解码并检查长度解析。

  2. 当长度/类型字段大于或等于 1,536 时,如果尚未使能工作模式配置寄存器 (ETH_MACCR)位 21 中的类型数据包的 CRC 去除,则 RPE 模块会将所有接收到的以太网数据包数据发送到 RFC 模块。不过,如果已使能类型数据包的 CRC 去除,但未使能接收校验和减
    荷引擎,则 MAC 将去除并丢弃所有以太类型数据包的最后 4 个字节,然后将数据包转发到应用程序。

  3. 默认情况下,将 MAC 编程为使能看门狗定时器,即在 RPE 模块中会切断大于 2,048(如果使能巨型数据包,则为 10,240)字节的数据包(DA + SA + LT + 数据 + PAD + FCS)。此外,还可以使用可编程看门狗定时器(看门狗超时寄存器 (ETH_MACWTR) 的位 16)
    覆盖 2,048 或 10,240 字节的固定超时。 可通过编程工作模式配置寄存器 (ETH_MACCR)的位 19 来禁止看门狗定时器。但是,即使禁止看门狗定时器,也仍将切断大于 32 KB的数据包并给出看门狗超时状态

Ethernet functional description: MAC 以太网功能描述在这里插入图片描述

内容很多 具体参考数据手册

数据包过滤
MAC 支持对 Rx 数据包进行以下类型的过滤:

MAC 源地址或目标地址过滤:地址过滤模块 (AFM) 检查每个传入数据包的源地址和目标地址字段。

VLAN 过滤: MAC 支持基于 VLAN 标记的过滤和 VLAN 散列过滤。

第 3 层和第 4 层过滤:第 3 层过滤是指 IP 源地址和目标地址过滤。第 4 层过滤是指源端口和目标端口过滤。

4层大漏斗
在这里插入图片描述

IEEE 1588 时间戳
IEEE 1588 标准定义了精密时间协议 (PTP),此协议支持使用网络通信、局域计算和分布式对象等技术实现的测量和控制系统中的精密时钟同步。 PTP 适用于利用支持多播消息传送的局域网(包括但不限于以太网)进行通信的系统。该协议可对非均匀系统进行同步,这类系
统包含固有精度、分辨率和稳定性都不断变化的时钟。该协议支持亚微秒范围的系统级同步精度,并且需要极少的网络和本地时钟计算资源。以太网外设支持 IEEE 1588-2002(版本 1)和 IEEE 1588-2008(版本 2)。 IEEE 1588-2002支持通过 UDP/IP 传送的 PTP。 IEEE 1588 2008 支持通过以太网传送的 PTP。外设为这两种标准提供了可编程支持。它支持下列功能:
 支持两种时间戳格式
 可获取所有数据包或仅 PTP 型数据包的快照
 可获取仅事件消息的快照
 可基于时钟类型获取快照:普通、边界、端对端透明和点对点透明
 可将节点选作普通和边界时钟的主节点或从节点
 识别数据包中直接通过以太网发送的 PTP 消息类型、版本和 PTP 有效负载,并发送状态
 支持数字或二进制格式的测量亚秒级时间

MAC 生成的中断
在这里插入图片描述

MAC 可由于各种事件而生成中断。这些中断事件与 DMA 中的事件结合用于 eth_sbd_intr_it信号。 MAC 中断为电平型中断,即在被应用程序或软件清除之前始终保持有效(高电平)。中断状态寄存器 (ETH_MACISR) 介绍了可能导致 MAC 生成中断的事件。默认情况下 MAC
中断处于使能状态。可通过将中断使能寄存器 (ETH_MACIER) 中的相应屏蔽位置 1,以阻止各个事件将 eth_sbd_intr_it 信号中断置为有效。中断寄存器位仅指示报告事件的模块。必须读取相应的状态寄存器和其他寄存器才能清除中断。

PHY 接口

在这里插入图片描述

在这里插入图片描述
图示非常清晰。没有什么好说的。

Ethernet programming model

如何配置以太网模块,整体比较复杂,详细过程参考手册
在这里插入图片描述

PHY LAN8720A/LAN8720AI

在这里插入图片描述

LAN8720 满足MAC 的RMII接口的需求
在这里插入图片描述
引脚定义如上图所示
在这里插入图片描述
在这里插入图片描述
具体功能定义入上图所示

发送数据流
在这里插入图片描述
Ext Ref clk 为外部时钟对于MCU(MAC)和PHY来说,外部时钟同时给这两部分提供时钟源。
RMII接口TX 为2Bit 通过RMII接口传输到 4B/5B 编码器 50Mhz 双线2bit接口 传输4bit数据需要两个时钟周期所以 4bit 数据频率为 50/2=25MHz。
在这里插入图片描述
接收过程如上所示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LWIP (1.1) ETH Module以太网模块 的相关文章

随机推荐

  • c语言实现模拟FTP服务器项目

    下载源码后 xff0c 直接可以在ubuntu中编译运行 xff1a FTP服务器程序功能 xff1a 客户端 xff1a 1 输入命令 xff1a help 查看FTP服务器所支持的所有命令 2 输入名 xff1a ls 查看服务器上可以
  • 基于ArUco的视觉定位

    参考如下 博客 基于ArUco的视觉定位 1 3 https www freesion com article 4265319144 基于ArUco的视觉定位 4 https www pianshen com article 2491452
  • 伺服电机和步进电机的区别

    硬件型号 xff1a 三菱伺服电机HG KR43J 系统版本 xff1a 电机系统 1 控制的方式不同 步进电机 xff1a 通过控制脉冲的个数控制转动角度的 xff0c 一个脉冲对应一个步距角 伺服电机 xff1a 通过控制脉冲时间的长短
  • ubutnu更换国内源后,更新一直出现404,Not Found的问题

    1 问题 题主系统是ubuntu16 04 64位系统 尝试更换国内各种源 连ubuntu官方源都尝试了 sudo vim etc apt sources list修改为 deb https mirrors tuna tsinghua ed
  • Python+Flask实现股价查询系统。Python绘制股票k线走势

    文章目录 一 实现效果图二 实现思路1 获取数据 2 可视化数据三 源码获取 一 实现效果图 打开默认显示半年线 xff0c 可以通过可视化类型选择可视化k线图 高低点等 xff08 目前只完成了初版 xff0c 当查询的股票数据返回为空时
  • Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-5/g++-5_5.4.0-6ubuntu1~16

    今天在ubutun中在安装redis过程中 xff0c 安装gcc时遇到了Failed to fetch http mirrors tuna tsinghua edu cn ubuntu pool main g gcc 5 g 43 43
  • 切换日语输入法找不到MicrosoftIME键盘选项了

    去微软官方下载一个 Microsoft IME office 2010后 xff0c 安装解决 转载于 https www cnblogs com tupx p 3816026 html
  • msgid 属性

    Android源码中的String xml文件 xff0c msgid这个属性是干嘛的 xff1f 全局资源 xff0c 方便引用 比如在布局的text和activity中用到 转载于 https www cnblogs com Ph on
  • 2017年09月23日普级组 数列

    Description 小S今天给你出了一道找规律题 xff0c 题目如下 xff1a 有如下的数列1 xff0c 11 xff0c 21 xff0c 1211 xff0c 111221 xff0c 312211 xff0c 小S问你这个数
  • python 机器学习实战:信用卡欺诈异常值检测

    今晚又实战了一个小案例 xff0c 把它总结出来 xff1a 有些人利用信用卡进行诈骗等活动 xff0c 如何根据用户的行为 xff0c 来判断该用户的信用卡账单涉嫌欺诈呢 xff1f 数据集见及链接 xff1a 在这个数据集中 xff0c
  • Virtual Serial Port Driver 虚拟串口工具软件 使用介绍

    一般来说 xff0c 电脑的外部设备可以用过各种端口和电脑连接 常见的有USB xff0c VGA xff0c DVI等等 在工业领域或者是软件开发领域 xff0c 我们常常需要用简单低成本快捷的方式 xff0c 完成电脑和设备的连接 那么
  • Freertos 源码分析 队列queue

    队列queue xff08 零 xff09 队列的基础概念和形态 xff08 一 xff09 Freertos 队列 queue c FreeRTOS Kernel 10 4 6 include queue h Freertos队列模块包含
  • Freertos 任务TASK(一) 任务创建

    任务的创建 Freertos 的任务创建难点 1 xff09 堆栈生长的方向 2 xff09 64字节的对齐 3 xff09 任务堆栈初始化 Freertos 的任务使用任务控制块来进行管理 xff0c 是对任务的抽象 任务本身就是一段可执
  • Freertos Cortex-M3上下文切换

    上下文切换是操作系统实现虚拟化的核心功能 xff0c 操作系统对任务的管理通过上下文切换完成 Freertos 在STM32F103上的上下文切换是本文介绍的内容 STM32F103 采用 Cortex M3 内核 上下文切换的本质是对现场
  • STM32CubeMX配置freertos配置任务(一)

    使用STM32CubeMX 配置Freertos 生成一个任务点亮LED stm32cubemx STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具 xff0c 允许用户使用图形化向导生成C 初始化
  • STM32 精准采集ADC电压,误差分析

    ADC模块采集电压流程 数字世界和模拟世界的桥梁 xff0c 对于嵌入式软件而言 xff0c 大家止于采集功能的实现 本文目的在于深入理解ADC xff0c 积累技术做出更加稳定优秀的产品 STM32 大部分系列都是使用SAR 逐次逼近型电
  • STM32 编码器驱动/旋转编码器旋钮encoder

    本文已比较纯粹的方式介绍编码器和驱动的编写 编码器最少有两个输出信号 xff0c 一种典型的结构如上图所示 AB是编码器的输出引脚 当触点和黄色的金属片接触的时候信号发生跳变沿 xff0c 可以上上升沿也可以是下降沿 xff0c 具体根据A
  • UTC 转 LocalTime

    使用unsigned const char 纯碎是为了配合项目 xff0c 改成char 会比较通用些 BOOL CDllSuiteEngine Time StrToType unsigned const char lpszValue SY
  • CubeMX 图形配置工具 (UART) H743

    本文分两部分 1 图形操作步骤 2 自动生成代码结构分析 3 自动代码生成的坑 一 xff1a 使用CubeMX 配STM32H743 串口模块LPUSART 1 使能调试口 xff0c 以免使用SWD下载需要手动复位 2 配置 时钟树 x
  • LWIP (1.1) ETH Module以太网模块

    STM32 以太网 ETH模块说明 1 overview 2 ETH module in stm32h743 STM32H743 为例 开局一张图 ETHER 模块 红框所示 以STM32H743为例 32 BIt AHB为内部高速总线 D