目录:
1:概述
2:enc28j60寄存器描述和SPI指令
3:读写寄存器函数
4:缓冲器描述和读写缓冲器函数
5:发送和接受数据包函数
1、概述:
1.1:以太网是实现LAN的一种技术,它允许嵌入式系统连接到一个LAN中,并可通过使用网关经Internet连接到外部世界,以太网的主要目的是向LAN发送和从LAN接收以太网帧,在TCP/IP协议族中,不包括以太网协议,可以理解它为TCP/IP中的网络接口层(物理层和数据链路层),为TCP/IP中的上层协议(比如:IP协议和ARP协议)提供服务;
1.2:ENC28J60是带SPI接口的以太网控制器,支持IEEE802.3协议,当然,也兼容Ethernet第二版的协议,此协议帧结构简单,被大量使用;
1.3:以太网帧结构:目的mac地址+源mac地址+协议类型+数据;
1.4:本篇编写ENC28J60驱动,实现以太网控制,将我们的嵌入式设备连接到LAN中,并使用ping命令进行测试;
1.5:enc28j60驱动实现需完成三步:(1)读写缓冲区函数实现;(2)发送和接受缓冲器实现;(3)enc28j60初始化,本篇实现先两步;
1.6:参考项目:AVRNET项目
1.7:开发板:STM32F103ZERT 奋斗开发板V5 软件环境:KEIL MDK5
2、Enc28j60寄存器描述和SPI指令
2.1:寄存器描述:enc28j60寄存器主要分2类,控制寄存器和PHY寄存器;
控制寄存器:存储空间分为四个存储区(bank),可使用ECON1中的BSEL1:BSEL0进行选择,可以使用2个bit进行指定。每个bank都是32字节长,可以使用5个bit进行寻址。控制寄存器常被分为三类,ETH、MAC、MII三组寄存器,MAC和MII寄存器的读指令协议和ETH寄存器的有区别,可以用1个bit来标识,所以可以用一个字节来描述寄存器的地址、分组、类别,定义是:bit0:bit4表示寄存器的地址,bit5:bit6表示寄存器分组,bit7最高位表示寄存器类别,所有寄存器在enc28j60.h中定义,如下:
// Bank 2 registers
#define MACON1 (0x00|0x40|0x80)
#define MACON2 (0x01|0x40|0x80)
#define MACON3 (0x02|0x40|0x80)
#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