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所指位置也就是到尾部结束返回头部)

ENC28J60学习相关推荐

  1. ENC28J60学习笔记——第1部分

    0.相关资料     相关资料中包括其他精彩博文和代码仓库     [嵌入式 TCP IP 资料汇总]     [ENC28J60学习笔记--索引] [第1部分][第2部分][第3部分][第4部分] ...

  2. ENC28J60学习笔记——第4部分

    0.相关资料     相关资料中包括其他精彩博文和代码仓库     [嵌入式 TCP IP 资料汇总]     [ENC28J60学习笔记--索引] [第1部分][第2部分][第3部分][第4部分] ...

  3. ENC28J60学习笔记——第2部分

    0.相关资料     相关资料中包括其他精彩博文和代码仓库     [嵌入式 TCP IP 资料汇总]     [ENC28J60学习笔记--索引] [第1部分][第2部分][第3部分][第4部分] ...

  4. ENC28J60学习笔记——第3部分

    0.相关资料     相关资料中包括其他精彩博文和代码仓库     [嵌入式 TCP IP 资料汇总]     [ENC28J60学习笔记--索引] [第1部分][第2部分][第3部分][第4部分] ...

  5. LwIP学习笔记——STM32 ENC28J60移植与入门

    0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一详解个别 ...

  6. 基于enc28j60的学习心得

    1.概述 enc28j60是带SPI接口的独立以太网控制器,兼容IEEE 802.3,集成MAC和10 BASE-T PHY,最高速度可达10Mb/s.基于enc28j60控制器的理解可阅读文章:EN ...

  7. 几种物联网实现方式之间的比较+转载

    这么长时间,自己项目没有一点的进步,而又来研究物联网,好累的说 http://www.open-open.com/lib/view/open1423887376154.html http://www. ...

  8. 以太网控制器学习(ENC28J60为例)

    一.以太网控制器 以太网控制器也叫以太网适配器,就是俗称的网卡,以太网控制器使用一个特定的物理层和数据链路层标准.文档1使用的是ENC28J60,自己项目中用的是W5200.之前没接触过,用到了也没有 ...

  9. AD入门学习—元件库(原理图库)的创建

    目录 1.1 电阻类.电容类.电感类元件创建 1.2 LED灯.按键类元件创建 1.3 IC芯片类元件创建 学习目录 创建一个PCB工程,原理图库,原理图. 1.1 电阻类.电容类.电感类元件创建 左 ...

最新文章

  1. 触发器实现两表之间的INSERT,DELETE,UPDATE
  2. SQL2005EXPRESS查询关键字出现次数的代码(比常规方法快5倍)
  3. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)
  4. python画日漫_不能错过的Python漫画
  5. 基于STM32CubeMX创建STM32L496ZGTx的工程
  6. 网站服务器需要定期重启吗,定期服务器重启的好处和障碍
  7. 第二轮冲次会议第六次
  8. Maven之pom.xml常用标签解析及镜像配置
  9. python 变量类型list_Python基础变量类型——List浅析-阿里云开发者社区
  10. 【GStreamer开发】GStreamer基础教程05——集成GUI工具
  11. [转]Flex是什么?flex和flash是什么关系 ?
  12. mysql native筛选_Navicat远程连接MySQL8,必知防坑策略
  13. VMware ESXi 7.0 U2 SLIC Unlocker USB 网卡驱动集成镜像
  14. matlab制作科学计算器,基于MATLAB科学计算器
  15. spark.reducer.maxReqsInFlight和spark.reducer.maxBlocksInFlightPerAddress
  16. 读书笔记-项目计划、进度与控制
  17. WeiRuan DaBing
  18. [附源码]计算机毕业设计springboot动物保护协会网站
  19. 平面设计零基础怎么设计出一个完美的名片
  20. python之pip常用命令

热门文章

  1. Unity3D教程笔记——unity初始03
  2. 限制百度地图拖动范围限制,当超如范围时自动返回
  3. 关于mysql的timestamp时间范围
  4. C语言中静态变量的概念和用法
  5. 高通滤波器与低通滤波器
  6. javascript原型图了解
  7. LeetCode340:至多包含 K 个不同字符的最长子串(python)
  8. django中request对象的属性和方法
  9. wpf入门第七篇 使用Squirrel自动更新应用
  10. Microsoft visio 2010之简单使用