Ethercat学习-GD32以太网学习
文章目录
- 1、GD32F4以太网简介
- 2、以太网模框图简介
- 3、以太网主要模块介绍
- SMI接口
- RMII接口与MII接口
- DMA控制器
- 4、以太网配置流程
- 5、其他
1、GD32F4以太网简介
GD32F4系列以太网模块包含10/100Mbps以太网MAC,数据的收发都通过DMA进行操作,支持MII(媒体独立接口)与RMII(简化的媒体独立接口)两种与物理层(PHY)通讯的标准接口。
2、以太网模框图简介
以太网需要外接一个PHY(以太网芯片)才可以进行通信。与PHY连接的方式有两种,一种是通过MII直接连接,将MII接口化简为RMII接口,然后再与PHY进行连接。另外与PHY相连的还有一个SMI接口(站点管理接口)用于配置和管理PHY芯片。
AHB仲裁,在当TXDMA与RXDMA同时需要访问AHB总线的时候起作用。因为以太网外设与AHB的接口只有一个,所以当收发两个模块都需要访问AHB总线的时候就有一个优先级的问题。仲裁的方式有两种,一种是固定优先级,RXDMA总是对总线有更高优先级访问权限,一种是轮询优先级,TXDMA和RXDMA按照一定的访问比例来轮流访问总线,例如设置比例为2:1,但是目前这个比例表示什么还不太清楚,是RXDMA和TXDMA对总线的总访问次数的比值,还是发生竞争总次数中,RXDMA和TXDMA优先访问次数的比值,又或者是其他。
TXDMA控制器,用于从从内存中读取描述符和数据,并将状态写入到内存中。
TxMTL内含TxFIFO,用于缓存待MAC发 送的数据。
TXMAC控制数据帧的发送。
RxDMA控制器,用于从内存中读取描述符,以及将接收数据与状态写入内存中。
RxMTL内含RxFIFO与TXFIFO是相互独立的,用于缓存接受到的数据。
RXMAC控制数据接收,有过滤功能。
3、以太网主要模块介绍
SMI接口
SMI用于访问和配置PHY芯片中的寄存器。由两根线组成,MDC时钟线和MDIO数据线。SMI主要用到两个寄存器ENET_MAC_PHY_DATA和ENET_MAC_PHY_CTL。ENET_MAC_PHY_DATA中,在写数据时存放的是待写的数据;在读数据是存放的是读到的数据。ENET_MAC_PHY_CTL中PA存放的是PHY的地址;PR中存放的是待访问的PHY的寄存器;PW控制读写,0为读操作,1为写操作;PB用于判断传输状态,PB由软件置1,开始读或者写操作,当读或者写完成后,会又硬件清零。
RMII接口与MII接口
SYSCFG_CFG1寄存器的第23位ENET_PHY_SEL位进行配置,选择使用MII或者RMII模式,默认为MII模式。
DMA控制器
这里说的DMA是以太网模块中的专用DMA。在发送数据的时候,CPU将数据打包好,存放与内存中,DMA控制器控制通过DMA将内存中的数据发送至TXFIFO中等待发送。在数据接收的时候,DMA控制器通过DMA将RXFIFO中的数据搬运至内存中,然后通知CPU。这个DMA与CPU之间的数据交换通过寄存器和描述符列表来控制。寄存器,很好理解,就是用来配置DMA、查看的DMA状态的,是芯片外设自带的。**至于描述符列表,这个是我们用户自己申请的一个内存。你可以把描述符理解为一个结构体,这个结构体里的成员用来描述一段内存,包括了内存的地址、长度等信息。而被描述的这段内存就是用来存储待发送的数据或者待接收的数据。描述符列表就是多个描述符连在一起组成的一个表。这个表的结构有两种,一种是链结构(链表),一种是环结构(环形缓存区)。**结构如下图:
一般有两个描述符队列,一个用作发送,一个用作接收。当 DFM位为 0时(常规描述符),发送描述符由四个描述符字 TDES0-TDES3组成,也就是我们的结构体只有4个成员,当 DFM位为 1时,发送描述符由 8个描述符字 TDES0-TDES7组成(增强描述符),也就是我们的结构体有8个成员。同样的,当 DFM位为 0时,接收描述符由四个描述符字 RDES0-RDES3组成,当 DFM位为 1时,接收描述符由 8个描述符字 RDES0-RDES7组成。描述符的结构如下图所示
常规TXDMA描述符
增强TXDMA发送描述符
常规RXDMA描述符
增强RXDMA描述符
在常规描述符,如果描述符列表的结构为链结构,那么TDES和RDES3中的内容为下一个描述符的地址,如果是环结构,则存放的是缓存区2的地址,因此当描述符列表的结构为链结构的时候,一个描述符对应一个缓存;如果描述符结构是环结构的时候,一个描述符对应两个缓存。
在创建完描述符列表后,需要将描述符列表的首地址存储在相应寄存器中,DMA通过首地址一个一个去查看描述符。对于环结构的描述符列表,描述符的地址关系如下:
下个描述符地址 = 当前描述符地址 + 16 + DPSL * 4 这是常规描述符
下个描述符地址 = 当前描述符地址 + 32 + DPSL * 4 这是增强描述符
DPSL表示描述符跳跃长度,也就是两个描述符之间的间隔,一般都是相邻的,值为0,在ENET_DMA_BCTL中设置。
发送帧处理:发送数据时,CPU需要将发送数据打包封装成以太网数据帧,放置在缓存区;然后设置TXDMA的描述符,在TDES0中,一般需要设置FSG、LSG,这两个表示帧头与帧尾,因为有时候设置的缓存区太小,一个缓存区存不下一帧数据,数据就会被分散在多个缓存区中,FSG置位,表示当前描述符指向的缓存帧为帧头,LSG置为表示当前描述符指向的缓存帧为帧尾。一般我们设置的缓存帧都是足够大的(一帧以太网数据需要的缓存大概1518左右,不同标准可能有些差别),所以FSG、LSG会同时置位。CPU将描述符TDES0的DAV位为1,DMA查询到DAV为1,就将数据传输到TXFIFO中进行发送;如果查询的描述符中DAV为0,则说明数据还没准备好,DMA会先挂起,发送的时候需要软件向ENET_DMA_TPEN中写入任意数据恢复DMA。
接收帧处理:接收数据时,RXDMA会将RDES0中的FDES和LDES置位,表示一帧的帧头和帧尾,一般我们申请的缓存大小都可以完整的存储一个以太网帧的数据,所以FDES和LDES同时置位。RXDMA将RDES0的 DAV置0,表示CPU可以对该描述符所指向的地址进行操作。ENET_DMA_STAT寄存器中的 RS位将置位,如果使能了接收中断,则会触发中断,用户可以在通过中断来读取相应的数据。当接收到一个新的数据时,如果描述符的 DAV位为 ’ 则 DMA控制器进入挂起状态,需要软件向ENET_DMA_RPEN中写入任意数据恢复DMA。
4、以太网配置流程
- 使能以太网时钟(HCLK、以太网收发时钟)
- 配置通讯接口:配置 SYSCFG模块,选择接口模式 MII或 RMII,配置GPIO
- 等待复位完成:轮询ENET_DMA_BCTL寄存器直到 SWR位复位( SWR位在上电复位后或系统复位后默认置位) 。
- 获取并配置 PHY寄存器参数(如全双工、半双工、速率等),速度等等)。根据外部 PHY支持的模式,配置ENET_MAC_CFG寄存器使与 PHY寄存器信息一致 。
- 初始化以太网的DMA模块,完成 DMA模块初始化。
- 初始化用于存放描述符列表以及数据缓存的物理内存空间,将列表首地址写入ENET_DMA_RDTADDR和 ENET_DMA_TDTADDR寄存器中的地址,初始化发送描述符的DAV为0,接收描述符的DAV为1。
- 使能MAC和DMA模块开始发送和接收:置位ENET_MAC_CFG寄存器中的 TEN和 REN位,开启 MAC发送器和接收器。置位ENET_DMA_CTL寄存器中的 STE位和 SRE位,使能 DMA的 发送和 接收。
- 发送流程:获取发送描述符,打包数据写入描述符指向的缓存中,置位DAV,写入任意值到 ENET_DMA_TPEN寄存器中,使 TxDMA退出挂起模式,开始发送数据。如需等待数据发送完毕,有两种方法来确定当前帧是否发送完毕。第一种方法为轮询当前描述符的 DAV位直到其复位;第二种方法仅适用于当 INTC位为 1的况,应用程序可以轮询ENET_DMA_STAT寄存器的 TS位直到其置位。
- 接收流程:轮询方式:轮询查看描述符列表中的第一个接收描述符(其地址在 ENET_DMA_RDTADDR寄存器中配置);如果 RDES0的 DAV位复位,则说明描述符已被使用过,且接收缓存空间已存储了接收帧,处理接收帧数据;置位当前描述符的 DAV位,以复用当前描述符接收新的帧;继续查看列表中的下一个描述符。中断方式:在中断函数中,首先判断ENET_DMA_STAT中的RS是否置位,如果置位,则说明时接收完成中断,可以读取数据,读取数据后置位当前描述符的 DAV位,以复用当前描述符接收新的帧;两种接收方式在读取数据的过程中可以顺便检测一下DMA是否挂起了,如果挂起了就恢复一下。
5、其他
发送帧格式:一个正常的发送帧应该由以下及部分构成:前导码,帧首界定码SFD,目标地址 DA,源地址 SA QTAG前缀(可选),长度 /类型域 LT,数据 PAD填充域(可选),和帧校验序列 FCS。前导码和帧首界定码都是由MAC自动生成的,因此应用程序只需要存储目标地址,源地址,(若需要),长度 /类型,数据,填充域(若需要),帧校验序列(若需要)。DPAD位和 DCRC位用于配置填充位和帧校验序列的自动生成。
帧接收:MAC接收到的帧都会被送入RxFIFO中。MAC接收到帧后会剥离其前导码和帧首界定码,并从帧首界定码后的第一个字节(目标地址)开始向FIFO发送帧数据。
TXFIFO转发机制:在直通模式 Cut-Through 下,当 FIFO中的数据等于或超过了所设置的阈值时(或者在达到阈值之前写入了 EOF),数据会从 FIFO中取出并送入到 MAC控制器中。这个阈值可以通过 ENET_DMA_CTL寄存器的 TTHC位来设置;在存储转发模式 Store-and-Forward 下,只有当一 个完整的帧写入 FIFO之后, FIFO中的数据才会被送入 MAC控制器。但还有一种情况下,帧没有被完整写入 FIFO FIFO也会取出数据。这种情况为 TxFIFO的大小小于要发送的 以太网帧长度,那么在 TxFIFO即将全满时,数据会被送入到 MAC控制器。
RXFIFO转发机制:RxFIFO工作于直通模式时,如果 FIFO中的数据量大于门限值(可通过 ENET_DMA_CTL寄存器的 RTHC位设置),就开始从 FIFO中取出数据,并通知 DMA接收。当RxFIFO工作于存储转发模式(通过 ENET_DMA_CTL寄存器的 RSFD位设置)时, DMA只在RxFIFO完整地收到一帧后,才将其读出。此模式下,如果 MAC设置成将所有错误帧丢弃,那么 DMA只会读出合法的帧,并转发给应用程序。一旦
寄存器的 RSFD位设置)时, DMA只在RxFIFO完整地收到一帧后,才将其读出。此模式下,如果 MAC设置成将所有错误帧丢弃,那么 DMA只会读出合法的帧,并转发给应用程序。一旦
TDES0中有两种校验:一种是插入IP包头中的校验和校验,一种是以太网帧尾的CRC校验。
相关文章:
Ethercat学习-GD32以太网学习
文章目录1、GD32F4以太网简介2、以太网模框图简介3、以太网主要模块介绍SMI接口RMII接口与MII接口DMA控制器4、以太网配置流程5、其他1、GD32F4以太网简介 GD32F4系列以太网模块包含10/100Mbps以太网MAC,数据的收发都通过DMA进行操作,支持MII࿰…...
项目规模估算如何精准 4大注意事项
项目报价,需要首先进行项目规模估算,如何估算更精准,6大注意事项。 1、项目范围规划 在项目估算前,需要对项目范围进行规划,这包括所有活动以及开发可交付产品所需的流程。范围规划是前提,它明确定义了项目…...
低代码:助力乡村振兴事业开启“智慧模式”
伴随着脱贫攻坚目标任务的全面完成,我国“三农”工作重心历史性地转向全面推进乡村振兴,这也标志着我国农业农村工作迈上了一个新台阶。 什么是乡村振兴? 乡村振兴是新时代“三农”工作的总抓手,坚持农业农村优先发展,…...
Flutter——Isolate主线机制
简述 在DartFlutter应用程序启动时,会启动一个主线程其实也就是Root Isolate,在Root Isolate内部运行一个EventLoop事件循环。所以所有的Dart代码都是运行在Isolate之中的,它就像是机器上的一个小空间,具有自己的私有内存块和一个运行事件循…...
提取游戏《Limbus Company》(边狱公司)内素材
授人以鱼,不如授人以渔。 目录 注意事项 寻找音频文件 .bytes转为.fsb 必备工具 步骤 解决乱码 必备工具 步骤 提取.fsb文件 必备工具 可备工具 步骤 注意事项 文章关于出现乱码的处理方法和与编码相关的部分有误,已于2023/3/10更正。 相关…...
学生信息表
目录 一、功能说明 二、核心思想 三、所用知识回顾 四、基本框架 五、js功能实现部分 一、功能说明 (1)输入对应的信息,点击录入可以为下面的表格添加一条记录,注意当所填信息不完整时不允许进行提交。 (2&…...
FOTA在AUTOSAR中的应用
FOTA介绍 FOTA(Firmware Over-The-Air)移动终端的空中下载软件升级,指通过云端升级技术,为具有连网功能的设备:例如手机、平板电脑、便携式媒体播放器、移动互联网设备等提供固件升级服务,用户使用网络以按需、易扩展的方式获取智能终端系统升级包,并通过FOTA进行云端升…...
2023/3/10 Vue核心知识的学习- Vue - v-model双向绑定原理
https://www.jianshu.com/p/2682b5a26869 定义:vue中双向绑定就是指v-model指令,可以绑定一个响应式数据到视图,同时视图中变化能同步改变该值。 通过Object.defineProperty( )对属性设置一个set函数,当数据改变了就会来触发这个…...
面朝大海,春暖花开丨2023年Kaadas凯迪仕全国经销商大会成功召开
3月8日,We——2023年Kaadas凯迪仕全国经销商大会将在中国青岛星光岛会议中心隆重举行,盛会汇聚了超过1000名优秀合作伙伴,规模空前。Kaadas凯迪仕品牌创始人&集团总裁苏志勇先生、集团董事长苏祺云先生以及各高层领导均莅临现场。 大会伊…...
【ubuntu】安装cuda+anaconda的docker环境,并用Vscode远程访问
目录下载英伟达docker配置docker的基本安装环境为vscode安装ssh服务安装anaconda下载英伟达docker docker pull nvidia/cuda配置docker的基本安装环境 apt-get install sudo sudo apt-get update sudo apt-get install wget sudo ps -e|grep ssh为vscode安装ssh服务 sudo ap…...
Python(青铜时代)——容器类的公共方法
内置函数 内置函数:不需要使用 import 导入库,就可以直接使用的函数 函数描述备注len()计算容器中元素个数del( )删除变量max( )返回容器中元素最大值如果是字典,只针对key比较min( )返回容器中元素最小值如果是字典,…...
利用canvas给图片添加水印
前言前两天给个人网站添加了一个小功能,就是在文章编辑上传图片的时候自动给图片加上水印。给网页图片添加水印是个常见的功能,也是互联网内容作者保护自己版权的方法之一。本文简单记录一下借助canvas在前端实现图片添加水印的实现方法。canvas元素其实…...
保姆级使用PyTorch训练与评估自己的MobileViT网络教程
文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…...
Giscus,由 GitHub Discussions驱动的评论系统
在创建网站或博客时,许多人都希望能够为其内容提供评论功能,以与用户进行交流和互动。然而,实现这一点可能会非常复杂,需要处理许多不同的问题,如身份验证、反垃圾邮件、跨站脚本攻击等。为了帮助解决这些问题…...
【JSON文件解析】JSON文件
文章目录概要:本期主要介绍Qt解析JSON数据格式文件的方式。一、JSON数据格式1.JSON类似于XML,在JSON文件中,有且只有一个根节点2.JSON有两种主流包含型构造字符:{对象}、[数组]3.JSON的值主要包括:对象、数组、数字、字…...
OpenGL超级宝典学习笔记:纹理
前言 本篇在讲什么 本篇章记录对OpenGL中纹理使用的学习 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践,轻理…...
主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
不用费劲,这5款效率工具为你解决学习工作烦恼
今天我要向大家推荐5款超级好用的效率软件,无论是在学习还是办公中都能够极大地提高效率。这些软件可以帮助你解决许多问题,而且每个都是真正的神器。 1.键盘仿真鼠标——NeatMouse NeatMouse 是一个小型的工具能够使用鼠标光标控制指针。当你的鼠标不…...
PostgreSQL 数据库大小写规则
PostgreSQL 数据库对大小写的处理规则如下: 严格区分大小写默认把所有 SQL 语句都转换成小写再执行加双引号的 SQL 语句除外 如果想要成功执行名称中带有大写字母的对象,则需要把对象名称加上双引号。 验证如下: 想要创建数据库 IZone&…...
【springmvc】执行流程
SpringMVC执行流程 原理图 1、SpringMVC常用组件 DispatcherServlet:前端控制器,不需要工程师开发,由框架提供 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求 HandlerMa…...
什么是AIGC?
目录前言一、什么是AIGC?1、什么是PGC?2、什么是UGC?3、什么是PUCG?4、什么是AIGC?二、总结前言 很明显,ChatGPT的爆火,带动了AIGC(AI-Generated Content)概念的火热。 …...
【深度强化学习】(2) Double DQN 模型解析,附Pytorch完整代码
大家好,今天和大家分享一个深度强化学习算法 DQN 的改进版 Double DQN,并基于 OpenAI 的 gym 环境库完成一个小游戏,完整代码可以从我的 GitHub 中获得: https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model 1…...
【正则表达式】正则表达式语法规则
正则表达式语法规则1.普通字符 字符描述[ABC]匹配 […] 中的所有字符[^ABC]匹配除了 […] 中字符的所有字符[A-Z][A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母.匹配除换行符以外的任意字符[\s\S]匹配所有。\s 是匹配所有空白符…...
1636_isatty函数的功能
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 前面刚刚看完了一个函数和三个文件指针,一行代码懂了半行。但是继续分析我之前看到的代码还是遇到了困难,因为之前自己对于UNIX的一些基础知…...
基于Stackelberg博弈的光伏用户群优化定价模型(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
EXCEL职业版本(3)
Excel职业版本(3) 公式与函数 运算符 算数运算符 关系运算符 地址的引用 相对引用:你变它就变,如影随形 A2:A5 绝对引用:以不变应万变 $A$2 混合引用:识时务者为俊杰,根据时…...
查找Pycharm跑代码下载模型存放位置以及有关模型下载小技巧(model_name_or_path参数)
目录一、前言二、发现问题三、删除这些模型方法一:直接删除注意方法二:代码删除一、前言 当服务器连不上,只能在本地跑代码时需要使用***预训练语言模型进行处理 免不了需要把模型下载到本地 时间一长就会发现C盘容量不够 二、发现问题 正…...
JS学习笔记day04
今日内容 零、 复习昨日 一、事件 二、DOM操作 三、案例 零、 复习昨日 js 脚本语言,弱类型 引入方案: 3种 js的内容: 语法dombom 语法 变量 var 数据类型 引用类型 - 对象,JSON {key:value,key:value} 数组 var arr new Array();var arr [1,2];下标取值赋值pop() s…...
异步控制流程 遍历篇
文章目录基础方法onlyOnce 只执行一次,第二次报错once 只执行一次,第二次无效iteratorSymbol 判断是否具有迭代器并返回迭代器arrayEach 普通数组遍历baseEach 对象类型遍历symbolEach 具有迭代器类型遍历异步遍历each异步控制流程的目的: 对…...
ICASSP 2023论文模型开源|语音分离Mossformer
人类能在复杂的多人说话环境中轻易地分离干扰声音,选择性聆听感兴趣的主讲人说话。但这对机器却不容易,如何构建一个能够媲美人类听觉系统的自动化系统颇具挑战性。 本文将详细解读ICASSP2023本届会议收录的单通道语音分离模型Mossformer论文࿰…...
专业的设计网站建设/微博关键词排名优化
2019独角兽企业重金招聘Python工程师标准>>> 1、常见的日志 日志是一个系统管理员,一个运维人员,甚至是开发人员不可或缺的东西,系统用久了偶尔也会出现一些错误,我们需要日志来给系统排错,在一些网络应用服…...
安徽省房地产开发项目管理系统/seo推广方式是什么呢
现象:16gu盘。分了两个区,一个exfat放数据。另外一个做成了u盘linux。结果以后想格式化成16g盘,win7找不到linux的分区。 解决:1.打开cmd2.命令行:diskpart3.查看所有硬盘:list disk4.假设你的优盘为disk1&…...
文化集团网站模板/网络营销渠道策略
基于SQL Server的事务示例,该事务首先查询名为"myTable"的表以检索其ID,然后使用该ID更新表中的行。如果在更新期间出现错误,则会回滚整个事务。 BEGIN TRANSACTION;DECLARE tableID INT; SELECT tableID ID FROM myTable;UPDATE…...
织梦做中英文网站/百度seo优化推广
夜光序言: 生命是盛开的花朵,它绽放得美丽,舒展绚丽多资。 正文: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.T…...
十大高端网站建设/微博关键词排名优化
通过 IPV4 连接一起正常,使用IPV6连接提示 failed to connect to ‘suroy.cn:port’: Connection refused 在stackoverflow找到相关问题 You will not be able to use IPV6 to connect to the adbd on the device until you upgrade it to Android 7.0 adbd in all…...
集团网站建设制作费用/朋友圈推广广告
一、为什么要做无状态化和容器化 很多应用拆分成微服务,是为了承载高并发,往往一个进程扛不住这么大的量,因而需要拆分成多组进程,每组进程承载特定的工作,根据并发的压力用多个副本公共承担流量。 将一个进程变成多组…...