ENC28J60学习

article/2025/11/5 13:48:50

ENC28J60符合IEEE802.3的全部规范,采用了一系列包过滤机制以对传入数据包进行限制,内部有一个NMA模块,与主控制器通过两个中断脚和SPI实现通信。

寄存器:

共有三种不同形式的寄存器—控制寄存器,以太网寄存器 和PHY寄存器。主控制器通过SPI口对ENC芯片控制寄存器进行读写。以太网寄存器包含一个供以太网控制器发送和接收存储空间,主控制器使用SPI接口对该存储的空间的容量进行编程。只能通过读缓冲器和写缓冲器的SPI指令来访问以太网缓冲器。PHY寄存器用于对PHY模块配置、控制和状态获取,不能通过SPI接口直接访问,只可通过MAC中的MII访问。

控制寄存器:

控制寄存器一共分配在四个bank中,所以有些寄存器地址相同但是分区不同,使用时要先选择分区。

所有bank的最后五个单元1Bh-1Fh都指向同一组寄存器:EIE、EIR、ESTAT、ECON2、ECON1。它们是控制和监事器件工作的关键寄存器,所以可以不切换bank的情况下访问它们。

寄存器被定义成8位长度,而这8位长度包含了三个部分,地址bit7(最高位)用以区分PHY和MAC寄存器,PHY寄存器的操作最为特殊;地址bit6和bit5用以区分BANK,2位空间正好区分4个BANK;地址的最后5位才是寄存器的地址。通过这种方式就可以区分所有的寄存器了。ENC28J60的控制寄存器通常被分为ETH(E开头),MAC(MA),MII(MI)三种.

比较特殊的5个寄存器器:

ECON1:控制ENC的主要功能,包含接收使能,发送请求DMA控制和存储区选择。


BSEL1和BSEL0是对bank的选择。

ECON2:也是控制ENC28J60的其他主要功能

AUTOINC:自动缓冲器指针递增使能:1=自动递增ERDPT和EWPRT。PKTDEC:数据包递减位:1=EPKTCNT寄存器减1.

PWRSV:节能使能位,VRPS:稳压器节能使能位。

以太网缓冲器:


包含以太网使用的发送和接收存储器。缓冲器大小为8K
接收缓冲器由衣蛾硬件管理的循环FIFO缓冲器构成,寄存器对
ERXSTH:ERXSTL和ERXNDH:ERXNDL作为指针,定义缓冲器的容量和在存储器的位置。ERXST和REXND指向的字节均包含在FIFO缓冲器中。接收数据写入缓冲时当写入ERXND指向的存储单元后,硬件会自动将接收的字节写入由ERXST指向的存储单元。因此接收硬件将不会写入FIFO以外的单元(所以数据接收肯定是在这个区域循环)。编辑ERXST和ERXND时要先禁止接收逻辑,不然不能修改。
ERXWRPTH:ERXWRPTL寄存器定义硬件向FIFO中的那个位置写入接收到的字节。指针可以用于判断FIFO剩余大小。
ERXRDPT:定义禁止写入FIFO中的某个位置,正常操作中数据顺序写入直到ERXRDPT所指位置。
如果FIFO满了数据不会覆盖。而是丢弃新收的数据。每次读取时必须明确该次操作时的读指针位置。ENC28J60读缓冲区时,被读取的内容并不全是以太网负载,在以太网负载之前还有下一个数据包的地址指针(占两个字节),接收状态向量(占4个字节),之后才是包括目标MAC地址,源MAC地址,数据包类型等等
发送缓冲区
出去接收的空间,剩余的都可设为发送。主控制器决定发送数据时,ETXST和ETXND指针将被编程指向发送缓冲内待发送数据包的地址。写发送缓冲器是有EWRPT来完成,使用写命令时EWRPT会不断增长遇到结束地址会返回到七尺地址。
总结这个缓冲区其实主要4个参数就是ERXST、ERXND、ETXST和ETXND,由于ENC28J60的寄存器是8位,而缓冲区为8K,所以要把单个地址分为高8位和低8位。

PHY寄存器:

提供PHY模块的配置和控制功能,以及操作的状态信息,所有PHY寄存器都是16位,共32个地址但只能用9个PHY不能用SPI操作是通过一组MIIM的特殊MAC控制寄存器来访问的。称为MII寄存器。
读PHY:1.将要读的地址写入MIREGADR寄存器,2.将MICMD.MIIRD置位,开始读操作,同时MISTAT.BUSY自动置位。3.等待至少10.24us,查询MISTAT.BUSY确定操作是否完成,当BUSY时不应该做任务MIISCAN或写MIWRH操作,4.完成后清零MICMD.MIIRD,然后可以从MIRDL和MIRDH中读取所需数据。
写PHY:写PYH时一次写入全部16位数据,1.将数据写入MIREGADR寄存器2.将数据低8位写入MIWRL,高8位写入MIWRH,这个操作完后会自动启动MII事务,BUSY位置1。4.查BUSY位看完成没

SPI操作指令集:


读写寄存分两步:1选定寄存器的BANK编号,2发送读写命令
所以操作就是片选CS拉低,然后发送相应的命令,如果读取控制寄存器是ETH寄存器,数据马上回从SO脚返回,如果是MAC或MII寄存器,SO会先移出一个无效数据字节,随后再引出数据,片选拉高结束。
读取缓冲寄存器命令运行主控制器从8K发送和缓冲储存器(整个缓冲区)中读取字节。设置ECON2中的AUTOINC为1则每次读完后,ERDPT指针将会自动地递增到下一个地址。要注意如果读取了接收缓冲器中最后的衣蛾字节ERDPT = ERXND,ERDPT会指向起始单元。
在拉低CS脚,然后发送命令后,数据马上出SO引脚移出。高位先出。写缓冲存储器与读相似只是命令不同。

以太网数据包发送操作:

1.设置发送缓冲区的大小(就是起始地址和结束地址),结束地址与长度有关2.开始向缓冲区写数据,发送ENC28J60_WRITE_BUF_MEM命令,3开始向缓冲写要发送的数据 4.启动ECON1_TXRTS位开始网卡发送。
以太网卡读操作:
1先通过寄存器查看是否存在以太网数据包 2若存在以太网数据包则设定读指针的地址(在读缓冲区的位置)3执行缓冲区读取操作。以太网数据包中前两个字节为下一个数据包的起始地址(16位),先读出来要马上保存,紧接的两个字节是数据包的长度,读出来后然后减掉最后4为的CRC校验结构 4读取数据到某个数组。5.通过操作ECON2的ECON2_PKTDEC位递减了以太网数据包个数 6.移动接收缓冲区 读指针将ERXRDPT设为下一个数据包的地址(正常操作中数据顺序写入直到ERXRDPT所指位置也就是到尾部结束返回头部


http://chatgpt.dhexx.cn/article/AfF0A6vp.shtml

相关文章

STM32开源代码——ENC28J60程序

正点原子精英开发板 模块化封装,入口函数简明,易上手操作 展示main.c代码,完整代码请下载 网路调试工具与库函数讲解已放在压缩包中 点击下载代码 开机检测ENC28J60,如果检测不成功,则提示报错。在成功检测到ENC2…

51单片机 ENC28J60 TCP/IP通信

转载地址 https://blog.csdn.net/a_a666/article/details/78277628 51单片机 ENC28J60 TCP/IP通信 单片机:STC90C516RDENC28J60模块:mini(3.3V供电)设备:PC、开发板、两个网线、路由器 首先先介绍一下本文的移植针对于单片机做…

STM32+ENC28J60+UIP协议栈实现WEB服务器示例

一、环境介绍 MCU: STM32F103ZET6 网卡: ENC28J60 协议栈: UIP 开发软件: Keil5 二、功能介绍 完整项目源码下载链接:https://download.csdn.net/download/xiaolong1126626497/18617694 STM32控制ENC28J60UIP协议栈创建TCP服务器(WEB服务器),支持…

ENC28J60+STM32F103在STM32CubeIDE上移植lwIP2.1.2

ENC28J60STM32F103在STM32CubeIDE上移植lwIP2.1.2 为了学习lwIP,网购了一块正点原子的Mini STM32开发板和一个ENC28J60以太网模块,发现正点原子所给的示例代码是基于lwIP1.4.1的,有点偏老,最新版本的lwIP是2.1.2,使用的…

RT-Thread—STM32—enc28j60

!!! 本文已同步到码云 - 点击此链接获取最新 - 可进入码云提交修改 !!! 概述 本教程主要是讲解如何使用ENC28J60模块介入以太网 本例程的模板使用通用模板环境搭建里面的模板RT-Thread—STM32—环境搭建 文末也有我移植好的例程,不过建议大家从头开始移植&#xf…

GD32F4xx 以太网芯片(enc28j60)驱动移植

1、enc28j60 简介 ENC28J60 是带有行业标准串行外设接口(SPI)的独立以太网控制器。 主要特性: (1)SPI最高通信速率:10Mb/s。只支持SPI的模式0,0,且SPI端口要求SCK在空闲状态时为低电平。 (2)支持全双工和半双工模式。 (3)8KB 发送/接收数据包双端口RAM.,可配置发送…

enc28j60 linux 驱动_linux enc28j60网卡驱动移植(硬件spi和模拟spi)

本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因。。。刚好手上有一个enc28j60的网卡模块,于是就着手移植enc28j…

lwip-2.1.3在STM32F103ZE+ENC28J60有线网卡上无操作系统移植(使用STM32 HAL库)

程序下载链接:百度网盘 请输入提取码(提取码:k6tz) 【重要说明】 连接方式一(推荐): 电脑有线网卡断开,无线网卡连无线路由器,无线网卡配置成自动获取IP地址。 板子的E…

enc28j60是带SPI接口的独立以太网控制器(即网卡),兼容IEEE 802.3,集成MAC和10 BASE-T PHY.而KSZ8081只是PHY芯片和网口扫盲三:以太网芯片MAC和PHY的关系

百度百科中介绍以太网控制器也称以太网适配器,就是我们通常称的“网卡”。电脑中网卡通过PCI和CPU相连,网卡上RJ45插网线水晶头。教程中的ENC28J60通过SPI和单片机相连,ENC28J60模块的RJ45插网线的水晶头 以太网控制器_百度百科 1.概述 enc2…

基于enc28j60的学习心得

1.概述 enc28j60是带SPI接口的独立以太网控制器,兼容IEEE 802.3,集成MAC和10 BASE-T PHY,最高速度可达10Mb/s。基于enc28j60控制器的理解可阅读文章: ENC28J60学习笔记,在该文章内详细介绍控制器的使用方法&#xff0c…

单片机学习:手把手教你移植LWIP(ENC28J60)

这里只是移植,所以LWIP那么多的协议都不需要管,只要知道哪里需要我们修改,为什么修改就可以了。 上图就是整个移植的基本思路,非常清晰的三个层次。其实想想,本质上就是收发数据,只是LWIP协议通过对数据的…

单片机 STM32 HAL 网络模块 ENC28J60

文章目录 一、 简介二、特性三、示例代码 一、 简介 ENC28J60 是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。它可作为任何配备有 SPI 的控制器的以太网接口。ENC28J60 符合IEEE 802.3的全部规范&#x…

ENC28J60 简介

单片机以太网方案 单片机想要使用以太网的话,通常有以下几种方案: 如果 MCU 内部集成 MAC 控制器,则只需外接一个 PHY 芯片就可以了如果 MCU 内部没有 MAC 控制器,需要外接 MAC 芯片和 PHY 芯片,这两颗芯片可以分立也…

c语言程序设计 国外教材,标准C程序设计(第7版国外计算机科学经典教材)

导语 内容提要 E.巴拉古路萨米著李周芳译的《标准C程序设计(第7版国外计算机科学经典教材)》专门用于满足渴望成为程序员的学生,最新版按照Bloom分类法所定的学习目标来呈现主题,支持基于学习的成果。本书解释了基本概念和高级内容,且主要关注…

学习C语言的教材

作者: 阮一峰 日期: 2011年9月18日 我的C语言是自学的,这些年看过不少教材。 下面,我对其中一些教材做个点评。 1. How to Think Like a Computer Scientist: C version 这是我读过最易懂的C语言教材。 虽然它只讲解最基本的语法&…

新概念c语言周二强07答案,新概念C语言能力教程(普通高等教育十二五规划教材)...

导语 内容提要 周二强编写的《新概念C语言能力教程(普通高等教育十二五规划教材)》以先进的教学理念为指导,以培养编程能力与学习能力为目标,从全新的角度解析了C语言,高屋建瓴地阐释了C语言学习中的诸多难点,对序列点、指针等概念…

计算机程序c语言教材,全国计算机等级考试二级C语言程序设计教材(2018年版)...

2018年计算机二级教材:C语言程序设计 简介 书名:全国计算机等级考试二级教程——C语言程序设计(2018年版) 作者:教育部考试中心 出版社:高等教育出版社 出版时间:2017年11月 ISBN:9787040488524 定价&#…

树莓派(0)C语言教材学习

学习日记的功能主要是记录学习C语言的知识还有难上手的地方,之后会记录配置树莓派环境还有设计linux环境下C语言的实验题目 目前在K&R的《C语言程序设计》教材学习,前面的内容没有难度,基本上和高级程序设计语言的学习思路一样&#xff0…

国内C语言教材中几种值得商榷的说法

作者:巨同升 “C语言程序设计”这门课程在国内高校普遍开设已有近三十年,课程的建设和研究取得了长足的进步,涌现出了数量众多、各具特色的C语言教材。尽管如此,在许多C语言教材中还或多或少地存在着一些不准确甚至是值得商榷的说…

既然谭浩强的C语言教材不好,那应该选什么书作C语言教材?

易道云学院C语言/C语法学习不在于你看了多少书,而在于你实实在在写了多少有效代码。易道云学院 回到这个问题,其实我个人认为,看什么样的书,也是需要应对不一样的场景易道云学院去有目的地涉猎。我暂时想到了几种情况,…