收藏 分享(赏)

毕业论文——基于AVR+ENC28J60的互联网基本协议栈实现.doc

上传人:wo7103235 文档编号:5863875 上传时间:2019-03-20 格式:DOC 页数:77 大小:4.18MB
下载 相关 举报
毕业论文——基于AVR+ENC28J60的互联网基本协议栈实现.doc_第1页
第1页 / 共77页
毕业论文——基于AVR+ENC28J60的互联网基本协议栈实现.doc_第2页
第2页 / 共77页
毕业论文——基于AVR+ENC28J60的互联网基本协议栈实现.doc_第3页
第3页 / 共77页
毕业论文——基于AVR+ENC28J60的互联网基本协议栈实现.doc_第4页
第4页 / 共77页
毕业论文——基于AVR+ENC28J60的互联网基本协议栈实现.doc_第5页
第5页 / 共77页
点击查看更多>>
资源描述

1、毕业设计(论文)(20XX 届)题 目:基于 AVR+ENC28J60 的互联网基本协议栈实现专业名称: 通信工程 姓 名: 学 号: 班 级: 通信技术 指导教师: 年 月 日摘 要物联网是新一代信息技术的重要组成部分。其英文名称是“The Internet of things”。由此,顾名思义, “物联网就是物物相连的互联网” 。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。物联网就是“物物相连的互联网” 。物联网通过智能感知、识别技术与普适计算、泛在网络的融合应用,被称为继计算机

2、、互联网之后世界信息产业发展的第三次浪潮。物联网是互联网的应用拓展,与其说物联网是网络,不如说物联网是业务和应用。因此,应用创新是物联网发展的核心,以用户体验为核心的创新 2.0 是物联网发展的灵魂。因此,发展微控制下的联网方案非常必要,所以必须开发出一套基本协议,这起始包括物理层,电气规则决定了整个系统的其他部件的设计,直到传输层 TCP/UDP,高层协议预留开发接口,或使得互联网设备成为从机,方便更多的开发。虽然网上有著名的 UIP 协议栈,但模块没有分离,使用 FS 进行数据交换,不方便二次开发,所以,开发这个项目,就非常必要了。这里将从基础开发到实际应用,完全解释物联网的应用和基础内核

3、开发。关键词:物联网,内核开发,通信协议目录第一章 平台选型 61.1 MCU 平台分析 .61.1.1 MSP430 超低功耗微控制器 61.1.2 STC89C5x 系列 51 传统单片机 .61.1.3 STC90L5x 低电压 51 单片机 .61.1.4 宽电压 PicPower 技术 AVR 61.1.5 Tiva 新型 ARM 微控制器 71.1.6 Cypress 最容易开发的微控制器 .71.2 为什么选择 ENC28J60 .71.2.1 W5100 的优劣势分析 .71.2.2 工业以太网现状分析 .71.2.3 ENC28J60 价廉物美 81.2.4 总体成本分析 .

4、81.3 调试 SPI 接口 91.3.1 串行外设接口基础 .91.3.2 串行外设接口配置实践 101.3.3 串行外设 SS 引脚详解 .121.3.4 串行外设接口寄存器 131.3.5 串行外设接口数据模式 141.4 电气设计 .141.4.1 焊接测试 141.4.2 引脚参考 151.4.3 路由配置 17第二章 硬件内核开发 .192.1 实现基本初始化通信 .192.1.1 SPI 调试 192.1.2 ENC28J60 的寄存器的详细配置 .242.1.3 ENC28J60 寄存器汇总 .292.1.4 ENC28J60 基本上电初始化 .312.2 实现基本数据包发送接

5、收 .332.2.1 发送数据包 332.2.1 接收数据包 342.3 IP 协议的实现 352.3.1 协议分析 352.3.2 代码实现 362.4 UDP 协议的实现 .382.4.1 协议分析 392.4.2 代码实现 392.5 ARP 协议的实现 .402.5.1 协议分析 402.5.2 代码实现 412.6 ICMP 协议的实现 442.6.1 协议分析 442.6.2 代码实现 452.7 DHCP 协议的实现 462.7.1 协议分析 462.7.2 过程实现 472.7.3 代码实现 492.8 其他功能 .512.8.1 校验和计算 512.8.2 函数整合和文件分离

6、 52第三章 基于 Arduino 开源硬件的移植 .543.1 从 AVR 到 Arduino 平台 .543.1.1 为什么选用 Arduino 543.1.2 从 C 语言到 C+ 543.1.3 从 C+ 到 Arduino .553.1.4 从 Arduino 到 AVR 563.1.5 附加函数概览 573.2 从 Arduino 开始实践 .583.2.1 ICMP 回显 .583.2.2 使用 DHCP .593.2.3 作为 Web 客户端 603.2.4 WOL.613.2.5 Web 服务器 623.2.6 DDNS633.2.7 LED 灯控制 633.2.8 LED

7、灯图片按钮控制 643.2.9 LED 灯大图片按钮控制 653.2.10 NTP 时间同步 663.2.11 开发方法总结 .673.2.12 基于底层的二次开发 68第四章 其他开发思想 .694.1 低功耗开发思想 .694.1.1 使用 MSP430 进行设备唤醒 .694.1.2 使用 RTC 进行设备唤醒 694.2 实际项目开发思想 .694.2.1 使用 WDT 保证程序稳定性 694.2.2 最迷你的硬件焊接与实际项目 69第五章 总结 .715.1 遇到的问题与解决 .715.1.1 DNS 屏蔽 715.1.2 TCP 连接数过大 715.1.3 生成 HEX 文件批量生

8、成 715.1.4 DHCP 无法使用 .725.1.5 DNS 无法使用 725.1.6 Arduino + Visual Studio 开发 725.1.7 程序调试 725.1.8 程序烧写到 AVR 上无法运行 735.1.9 ENC28J60 无法启动 .735.1.10 SPI 无效 735.1.11 Timer 定时器计数 735.2 应用解决方案 .735.2.1 串口转以太网 735.2.2 家用物联网 745.2.3 黑客设备 74附录 参考文献 .75第一章 平台选型1.1MCU 平台分析1.1.1 MSP430 超低功耗微控制器德州仪器的超低功耗 16 位 RISC 混

9、合信号处理器的 MSP430 微处理器平台为各种低功耗和便携式应用提供了最终解决方案。TI 为 MSP430 微处理器提供了包括技术文档、培训、工具和软件在内的功能强大的设计支持。但笔者们接入有线网络,考虑的应该不是高度节能,一句话说,MSP430 是一个很省吃,但也干不了什么大活,是给一些便携的移动设备提供的。既然是便携式设备,怎么不考虑接入无线网络呢?另外 F5/F6 系列会非常贵,大概普通售价 100 元人民币一颗,TQFP 封装.1.1.2 STC89C5x 系列 51 传统单片机虽然 51 单片机价格很便宜,而且 STC 的 51 单片机也支持 IDLE 模式,但就算是 C58 也不

10、能满足需要的空间支持,速度也很慢,在以前的项目中知道,十二分频,或者六分频,都是慢得足以让系统认为网络设备超时,而且传统 51 单片机的供电电压也不满足大多数芯片的 3.3V 逻辑,还不如多花几毛钱买 MSP430Gx 系列呢,当然,几百字节的 SRAM 远远不足,虽然可以跑外部的 RAM,但是成本也就提上去了.1.1.3 STC90L5x 低电压 51 单片机虽然 51 核心也有低压系列,但是速度就更加慢了,以至于笔者们无法忍受,而且功耗这个嘛,虽然长期供电,但是价格竟然比 MSP430 还贵。这么说来好像 MSP430 真是个不错的平台,可是他的内存大小实在无法忍受,虽然模拟思绪也能读取外

11、部 RAM,但是这毕竟性能和开发难度问题,也就只好用不选择了.1.1.4 宽电压 PicPower 技术 AVR宽电压 AVR 支持 1.8V 5.5V 逻辑,速度也能达到 25MIPS,实测超频时候可以到达40MIPS,如果轮询数据包,那是效率非常高,虽然被人抛弃,被 Cortex-M3 遗弃,但也不表明他什么用途都没有,AVR 虽然偏贵一点,但是对比 ARM 来说,那算什么呢?而且 AVR 是 Atmel 生产的,稳定性也非常不错的说。1.1.5 Tiva 新型 ARM 微控制器32 位 ARM,基于 Cortex-M4F,问题是,笔者不涉及浮点运算,是不是有点浪费呢?所以,这个被忽略了,

12、虽然你有专用定时器用于跑操作系统,但也不是笔者们想玩的。如果做的是主机芯片,那么还是非常有可能的。不过,笔者们小项目,用这个可能会出现严重的性能浪费.1.1.6 Cypress 最容易开发的微控制器不可否认,一行代码都不用写,就能写 Cypress 的程序,问题是,笔者们这里的程序逻辑这么复杂,他能满足吗?而且出了 BUG 还不能让笔者自己来修补,怎么能放心选用呢。1.2 为什么选择 ENC28J601.2.1 W5100 的优劣势分析W5100 这个产品是硬件 TCP/IP 协议栈+MAC+PHY,也就是 W5100 里面用硬件逻辑电路实现了TCP/IP 的协议栈结构,不需要向 ENC28J

13、60 这样的网络控制器那样还需要一个资源较大的 MCU跑软件协议栈。你直接把 W5100 当外部 RAM 使用,MCU 初始化一下 I/O,寄存器等就能使用了。是一种简易快速拓展 Ethernet 的方案,在稳定性及高效性方面表现也非常突出。 ” W5100 是很多厂商以太网扩展板的选择,各种库文件都很齐全规范,使用起来也很容易。大多数人选择W5100 的一个很大的原因在于 W5100 能有效释放主控单片机有限的内存资源,并且嵌入了经过市场验证的、成熟的硬件协议栈。关于价格的问题,因为高度集成了以太网协议栈,所以价格会偏高,不是笔者们需要的价廉物美,而且,如果协议开发得妥当,结构合理,还是很简

14、单的说。1.2.2 工业以太网现状分析现在工业以太网一般是 10Mbps 左右,温度范围-20 - 85。只要 MCU 和以太网控制芯片不结露,看门狗正常,一般不会出任何问题。W5100 完全满足,只是价格太高,批量生产的话,划不过来,W5100 的价格是 ENC28J60 价格的 2 3 倍。如图 1-2-2-1.图 1-2-2-1如果选择 ENC28J60 虽然要自己设计电路,但其实便宜很多了。SOP 的 ENC228J60 图 1-2-2-2。图 1-2-2-21.2.3 ENC28J60 价廉物美上面已经说明了 ENC28J60 的廉价,因为他没有集成任何协议,所以可以开发出更多的东西

15、,比如现在的 IPv6,本文会稍有说明的,虽然 ENC28J60 开发的失误随时能造成网络风暴等很多不可预知的事件,不过,不用担心,本论文将一步一步说明协议的开发。另外 ENC28J60一样可以兼容 HR911105A 变压器(带 RJ45 头),还有内置的 MAC+PHY,一样省了不少元器件。1.2.4 总体成本分析笔者们的微控制器是 Atmel AVR,虽然看起来很贵,但是稳定性很好,之前已经分析过了,计算式 Atmel MEGA2560 也就是 100 元以内,加上 ENC28J60 都很便宜,这里做的是伴随嘛,选的比较低配的 Atmel Mega8 或者低压的 Atmel Mega8L

16、,开发测试为了方便使用 Atmel Mega16嘛,编程器也可以自己制作,一点压力都没有。如果后期笔者还可以走 Atmel Mega328P,容量大体积小各种优势。而且可以封装 Arduino 库文件,这样就可以在 Atmel Mega328 上跑一些类似操作系统的东西玩了,当然,那不是操作系统,但是这样将可以让 Arduino 使用 ENC28J60,此前,所有 Arduino 接入互联网都是使用 W5100 的。虽然,Arduino 比较便宜,或者说不太适合底层开发,但是在底层做好库文件,然后上层提高快速建模,也是非常方便的。1.3 调试 SPI 接口1.3.1 串行外设接口基础接口 SP

17、I 允许 ATmega 和外设或其他 AVR 器件进行高速的同步数据传输。 他有很多常规的特性,如下: 全双工,三线同步。 主机或从机操作。 LSB/MSB 操作 可编程比特率 传输结束置位中断 写碰撞检测 可以进入 IDLE 模式 具有倍速模式图 1-3-1-1主机和从机之间的 SPI 连接如 SPI 主从互连逻辑图所示,系统包括两个移位寄存器和一个主机时钟发生器。通过将需要的从机的 SS 引脚拉低,主机启动一次通讯过程。主机和从机将需要发送的数据放入相应的移位寄存器。主机在 SCK 引脚上产生时钟脉冲以交换数据。主机的数据从主机的 MOSI 移出,从从机的 MOSI 移入;从机的数据从从机

18、的 MISO 移出,从主机的MISO 移入。主机通过将从机的 SS 拉高实现与从机的同步。配置为 SPI 主机时, SPI 接口不自动控制 SS 引脚,必须由用户软件来处理。 对 SPI 数据寄存器写入数据即启动 SPI 时钟,将 8 比特的数据移入从机。传输结束后 SPI 时钟停止,传输结束标志 SPIF 置位。如果此时SPCR 寄存器的 SPI 中断使能位 SPIE 置位,中断就会发生。主机可以继续往 SPDR 写入数据以移位到从机中去,或者是将从机的 SS 拉高以说明数据包发送完成。最后进来的数据将一直保存于缓冲寄存器里。配置为从机时,只要 SS 为高,SPI 接口将一直保持睡眠状态,并

19、保持MISO 为三态。在这个状态下软件可以更新 SPI 数据寄存器 SPDR 的内容。即使此时 SCK 引脚有输入时钟,SPDR 的数据也不会移出,直至 SS 被拉低。一个字节完全移出之后,传输结束标志 SPIF 置位。如果此时 SPCR 寄存器的 SPI 中断使能位 SPIE 置位,就会产生中断请求。在读取移入的数据之前从机可以继续往 SPDR 写入数据。最后进来的数据将一直保存于缓冲寄存器里。图 1-3-1-2SPI 系统的发送方向只有一个缓冲器,而在接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束后才能对 SPI 数据寄存器执行写操作。而在接收数据时,需要在下一个字符移

20、位过程结束之前通过访问 SPI 数据寄存器读取当前接收到的字符。否则第一个字节将丢失。工作于 SPI 从机模式时,控制逻辑对 SCK 引脚的输入信号进行采样。为了保证对时钟信号的正确采样, SPI 时钟不能超过 fosc/4。SPI 使能后,MOSI、MISO、SCK 和 SS 引脚的数据方向将按照引脚映射表所示自动进行配置。引脚 SPI 主机 SPI 从机MOSI 用户定义 输入MISO 输入 用户定义SCK 用户定义 输入SS 用户定义 输入1.3.2 串行外设接口配置实践下面的例程说明如何将 SPI 初始化为主机,以及如何进行简单的数据发送。例子中DDR_SPI 必须由实际的数据方向寄存

21、器代替;DD_MOSI、DD_MISO 和 DD_SCK 必须由实际的数据方向代替。比如说, MOSI 为 PB5 引脚,则 DD_MOSI 要用 DDB5 取代,DDR_SPI 则用 DDRB 取代。汇编语言:SPI_MasterInit:; 设置MOSI 和SCK 为输出,其他为输入ldi r17,(15);Enc28j60Bank = (address 理所当然地设置寄存器了,这个才是真正的寄存器读写函数。读控制寄存器(Read Control Register,RCR )命令允 许主控制器随意读取 ETH、 MAC 和 MII 寄存器。将 CS 引脚拉为低电平启动 RCR 命令。然后将

22、 RCR 操 作码和随后的 5 位寄存器地址 (A4 到 A0)发送给 ENC28J60。5 位地址决定将使用当前存储区中 32 个控制寄存器中的哪一个。如果 5 位地址指向的是一个 ETH 寄存器,那么选定寄存器中的数据会立即开始从 SO 引 脚移出,最高位在前。图 4-3 显示了这些寄存器的读取 序列。如果地址指向了一个 MAC 或 MII 寄存器,则首先从 SO 引脚移出一个无效数据字节,随后从 SO 引脚移出数据, 最高位在前。通过拉高 CS 引脚的电平可结束 RCR 操 作。unsigned char enc28j60Read(unsigned char address)enc28j

23、60SetBank(address);return enc28j60ReadOp(ENC28J60_READ_CTRL_REG, address);写控制寄存器(Write Control Register,WCR)命令允 许主控制器以任何次序写入 ETH、 MAC 和 MII 控制寄 存器。将 CS 引脚拉为低电平启动 WCR 命令。然后将 WCR 操作码及随后的 5 位地址 (A4 到 A0)发送给 ENC28J60。5 位地址决定要使用当前存储区中 32 个控 制寄存器中的哪一个。在发送 WCR 命令和地址后,发 送要实际写入的数据,首先发送最高位。 在 SCK 的上 升沿,数据被写入目

24、标寄存器。拉高 CS 引脚的电平可结束 WCR 操作。 如果在装载 8 个位前, CS 线变为高电平,则将中止这个数据字节的 写操作。void enc28j60Write(unsigned char address, unsigned char data)enc28j60SetBank(address);enc28j60WriteOp(ENC28J60_WRITE_CTRL_REG, address, data);还有 PHY 寄存器呢,他是很特别的,读取顺序很特别。 把 PHY 寄存器地址写入 MIREGADR 置位 MICMD 的 MIIRD 寄存器 等待 MISTAT 的 MIIRD 寄

25、存器完成 将 MICMD 清零 读取 MIRDL 寄存器 读取 MIRDH 寄存器虽然看起来很麻烦,程序也不过是几行的事情。unsigned short enc28j60PhyRead(unsigned char address)unsigned short data;enc28j60Write(MIREGADR, address);enc28j60Write(MICMD, MICMD_MIIRD);while(enc28j60Read(MISTAT) enc28j60Write(MICMD, 0x00);data = enc28j60Read(MIRDL);data |= enc28j60R

26、ead(MIRDH);return data;写 PHY 寄存器时,将一次写入全部的 16 位数据,不能对位进行写操作。 如果只需要重新编程寄存器中的某几位,控制器必须首先读 PHY 寄存器,修改读到的数据,然后将数据写回PHY 寄存器。 将要写入的 PHY 寄存器的地址写入 MIREGADR 寄存器。 将数据的低 8 位写入 MIWRL 寄存器。 将数据的高 8 位写入 MIWRH 寄存器。 对 MIWRH 寄存器的写操作会自动启动 MII 事务,所以必须在写入 MIWRL 后才能写入该寄存器。 MISTAT.BUSY 位置 1。 在 MII 操作完成后写 PHY 寄存器,用时 10.24

27、s。当写操作完成后,BUSY 位将自动清零。 在忙时主控制器不应开始 MIISCAN 或 MIIRD 操作。void enc28j60PhyWrite(unsigned char address, unsigned short data)enc28j60Write(MIREGADR, address);enc28j60Write(MIWRL, data);enc28j60Write(MIWRH, data8);while(enc28j60Read(MISTAT) 2.1.2 ENC28J60 的寄存器的详细配置莫名奇妙的多了很多寄存器的名字,当然,他们不是凭空产生的。所以,笔者整理了一下,做了

28、个头文件。/ All-bank registers#define EIE 0x1B#define EIR 0x1C#define ESTAT 0x1D#define ECON2 0x1E#define ECON1 0x1F/ Bank 0 registers#define ERDPTL (0x00|0x00)#define ERDPTH (0x01|0x00)#define EWRPTL (0x02|0x00)#define EWRPTH (0x03|0x00)#define ETXSTL (0x04|0x00)#define ETXSTH (0x05|0x00)#define ETXNDL

29、(0x06|0x00)#define ETXNDH (0x07|0x00)#define ERXSTL (0x08|0x00)#define ERXSTH (0x09|0x00)#define ERXNDL (0x0A|0x00)#define ERXNDH (0x0B|0x00)#define ERXRDPTL (0x0C|0x00)#define ERXRDPTH (0x0D|0x00)#define ERXWRPTL (0x0E|0x00)#define ERXWRPTH (0x0F|0x00)#define EDMASTL (0x10|0x00)#define EDMASTH (0x1

30、1|0x00)#define EDMANDL (0x12|0x00)#define EDMANDH (0x13|0x00)#define EDMADSTL (0x14|0x00)#define EDMADSTH (0x15|0x00)#define EDMACSL (0x16|0x00)#define EDMACSH (0x17|0x00)/ Bank 1 registers#define EHT0 (0x00|0x20)#define EHT1 (0x01|0x20)#define EHT2 (0x02|0x20)#define EHT3 (0x03|0x20)#define EHT4 (0

31、x04|0x20)#define EHT5 (0x05|0x20)#define EHT6 (0x06|0x20)#define EHT7 (0x07|0x20)#define EPMM0 (0x08|0x20)#define EPMM1 (0x09|0x20)#define EPMM2 (0x0A|0x20)#define EPMM3 (0x0B|0x20)#define EPMM4 (0x0C|0x20)#define EPMM5 (0x0D|0x20)#define EPMM6 (0x0E|0x20)#define EPMM7 (0x0F|0x20)#define EPMCSL (0x1

32、0|0x20)#define EPMCSH (0x11|0x20)#define EPMOL (0x14|0x20)#define EPMOH (0x15|0x20)#define EWOLIE (0x16|0x20)#define EWOLIR (0x17|0x20)#define ERXFCON (0x18|0x20)#define EPKTCNT (0x19|0x20)/ Bank 2 registers#define MACON1 (0x00|0x40|0x80)#define MACON2 (0x01|0x40|0x80)#define MACON3 (0x02|0x40|0x80)

33、#define MACON4 (0x03|0x40|0x80)#define MABBIPG (0x04|0x40|0x80)#define MAIPGL (0x06|0x40|0x80)#define MAIPGH (0x07|0x40|0x80)#define MACLCON1 (0x08|0x40|0x80)#define MACLCON2 (0x09|0x40|0x80)#define MAMXFLL (0x0A|0x40|0x80)#define MAMXFLH (0x0B|0x40|0x80)#define MAPHSUP (0x0D|0x40|0x80)#define MICON

34、 (0x11|0x40|0x80)#define MICMD (0x12|0x40|0x80)#define MIREGADR (0x14|0x40|0x80)#define MIWRL (0x16|0x40|0x80)#define MIWRH (0x17|0x40|0x80)#define MIRDL (0x18|0x40|0x80)#define MIRDH (0x19|0x40|0x80)/ Bank 3 registers#define MAADR1 (0x00|0x60|0x80)#define MAADR0 (0x01|0x60|0x80)#define MAADR3 (0x02

35、|0x60|0x80)#define MAADR2 (0x03|0x60|0x80)#define MAADR5 (0x04|0x60|0x80)#define MAADR4 (0x05|0x60|0x80)#define EBSTSD (0x06|0x60)#define EBSTCON (0x07|0x60)#define EBSTCSL (0x08|0x60)#define EBSTCSH (0x09|0x60)#define MISTAT (0x0A|0x60|0x80)#define EREVID (0x12|0x60)#define ECOCON (0x15|0x60)#defin

36、e EFLOCON (0x17|0x60)#define EPAUSL (0x18|0x60)#define EPAUSH (0x19|0x60)PHY 也有自身的寄存器:/ PHY registers#define PHCON1 0x00#define PHSTAT1 0x01#define PHHID1 0x02#define PHHID2 0x03#define PHCON2 0x10#define PHSTAT2 0x11#define PHIE 0x12#define PHIR 0x13#define PHLCON 0x14一些重要的寄存器位也要配置:/ ENC28J60 EIE R

37、egister Bit Definitions#define EIE_INTIE 0x80#define EIE_PKTIE 0x40#define EIE_DMAIE 0x20#define EIE_LINKIE 0x10#define EIE_TXIE 0x08#define EIE_WOLIE 0x04#define EIE_TXERIE 0x02#define EIE_RXERIE 0x01/ ENC28J60 EIR Register Bit Definitions#define EIR_PKTIF 0x40#define EIR_DMAIF 0x20#define EIR_LINK

38、IF 0x10#define EIR_TXIF 0x08#define EIR_WOLIF 0x04#define EIR_TXERIF 0x02#define EIR_RXERIF 0x01/ ENC28J60 ESTAT Register Bit Definitions#define ESTAT_INT 0x80#define ESTAT_LATECOL 0x10#define ESTAT_RXBUSY 0x04#define ESTAT_TXABRT 0x02#define ESTAT_CLKRDY 0x01/ ENC28J60 ECON2 Register Bit Definition

39、s#define ECON2_AUTOINC 0x80#define ECON2_PKTDEC 0x40#define ECON2_PWRSV 0x20#define ECON2_VRPS 0x08/ ENC28J60 ECON1 Register Bit Definitions#define ECON1_TXRST 0x80#define ECON1_RXRST 0x40#define ECON1_DMAST 0x20#define ECON1_CSUMEN 0x10#define ECON1_TXRTS 0x08#define ECON1_RXEN 0x04#define ECON1_BS

40、EL1 0x02#define ECON1_BSEL0 0x01/ ENC28J60 MACON1 Register Bit Definitions#define MACON1_LOOPBK 0x10#define MACON1_TXPAUS 0x08#define MACON1_RXPAUS 0x04#define MACON1_PASSALL0x02#define MACON1_MARXEN 0x01/ ENC28J60 MACON2 Register Bit Definitions#define MACON2_MARST 0x80#define MACON2_RNDRST 0x40#de

41、fine MACON2_MARXRST0x08#define MACON2_RFUNRST0x04#define MACON2_MATXRST0x02#define MACON2_TFUNRST0x01/ ENC28J60 MACON3 Register Bit Definitions#define MACON3_PADCFG20x80#define MACON3_PADCFG10x40#define MACON3_PADCFG00x20#define MACON3_TXCRCEN0x10#define MACON3_PHDRLEN0x08#define MACON3_HFRMLEN0x04#

42、define MACON3_FRMLNEN0x02#define MACON3_FULDPX 0x01/ ENC28J60 MICMD Register Bit Definitions#define MICMD_MIISCAN 0x02#define MICMD_MIIRD 0x01/ ENC28J60 MISTAT Register Bit Definitions#define MISTAT_NVALID 0x04#define MISTAT_SCAN 0x02#define MISTAT_BUSY 0x01/ ENC28J60 PHY PHCON1 Register Bit Definit

43、ions#define PHCON1_PRST 0x8000#define PHCON1_PLOOPBK 0x4000#define PHCON1_PPWRSV0x0800#define PHCON1_PDPXMD0x0100/ ENC28J60 PHY PHSTAT1 Register Bit Definitions#define PHSTAT1_PFDPX0x1000#define PHSTAT1_PHDPX0x0800#define PHSTAT1_LLSTAT 0x0004#define PHSTAT1_JBSTAT 0x0002/ ENC28J60 PHY PHCON2 Regist

44、er Bit Definitions#define PHCON2_FRCLINK0x4000#define PHCON2_TXDIS 0x2000#define PHCON2_JABBER 0x0400#define PHCON2_HDLDIS 0x0100/ ENC28J60 Packet Control Byte Bit Definitions#define PKTCTRL_PHUGEEN 0x08#define PKTCTRL_PPADEN 0x04#define PKTCTRL_PCRCEN 0x02#define PKTCTRL_POVERRIDE 0x01ENC28J60 的控制寄

45、存器通常被分为 ETH、MAC 和 MII 三组寄存器。名称由 “E”开头的寄存器属于 ETH 组。 同样,名称由“MA”开头的寄存器属于 MAC 组,名称 由 “MI”开头的寄存器属于 MII 组。第 0 组寄存器有ERDPTL,ERDPTH,EWRPTL,EWRPTH,ETXSTL,ETXSTH,ETXNDL ,ETXNDH ,ERXSTL ,ERXSTH,ERXNDL,ERXNDH,ERXRDPTL,ERXRDPTH ,ERXWRPTL,ERXWRPTH,EDMASTL,EDMASTH ,EDMANDL,EDMANDH,EDMADSTL ,EDMADSTH,EDMACSL ,EDMACS

46、H ,EIE,EIR,ESTAT,ECON2, ECON1。第 1 组寄存器有EHT0,EHT1 ,EHT2,EHT3,EHT4,EHT5 ,EHT6,EHT7,EPMM0,EPMM1,EPMM2,EPMM3,EPMM4,EPMM5,EPMM6,EPMM7,EPMCSL , EPMCSH,EPMOL,EPMOH,EWOLIE ,EWOLIR,ERXFCON,EPKTCNT,EIE,EIR,ESTAT ,ECON2,ECON1。第 2 组寄存器有MACON1,MACON2,MACON3,MACON4,MABBIPG,MAIPGL ,MAIPGH,MACLCON1,MACLCON2,MAMXFLL

47、 ,MAMXFLH,MAPHSUP,MICON,MICMD,MIREGADR,MIWRL,MIWRH,MIRDL,MIRDH,EIE,EIR,ESTAT ,ECON2,ECON1。第 3 组寄存器有MAADR1,MAADR0,MAADR3,MAADR2,MAADR5,MAADR4 ,EBSTSD ,EBSTCON ,EBSTCSL,EBSTCSH,MISTAT,EREVID,ECOCON,EFLOCON,EPAUSL,EPAUSH ,EIE,EIR,ESTAT,ECON2,ECON1。当然,切换到任何组寄存器都没关系,都可以最终连接到通用寄存器的。PHY 寄存器更是不受他们的干扰。2.1.3

48、ENC28J60 寄存器汇总这里是部分寄存器说明表,x = 未知, u = 不变, = 未用, q = 取值视情况而定, r = 保留,不能修改。CLKRDY 在上电复位时复位为 0,而在其他复位时不受影响。EREVID 是只读寄存器。ECOCON 在上电复位时为 “- -100” ,但在其他复位时为 “- -uuu” 。寄存器名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值EIE INTIE PKTIE DMAIE LINKIE TXIE WOLIE TXERIE RXERIE 0000 0000EIR PKTIF DMAIF LI

49、NKIF TXIF WOLIF TXERIF RXERIF -000 0000ESTAT INT r r LATECOL RXBUSY TXABRT CLKRDY(1) 0000 -000ECON2 AUTOINC PKTDEC PWRSV VRPS 100- 0-ECON1 TXRST RXRST DMAST CSUMEN TXRTS RXEN BSEL1 BSEL0 0000 0000ERDPTL 读指针低字节 ERDPT) 1111 1010ERDPTH 读指针高字节 (ERDPT) -0 0101EWRPTL 写指针低字节 (EWRPT) 0000 0000EWRPTH 写指针高字节 (EWRPT ) -0 0000ETXSTL 发送起始低字节 (ETXST) 0000 0000ETXSTH 发送起始高字节 (ETXST) -0 0000ETXNDL 发送结束低字节 (ETXND) 000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报