以太网控制器ENC28J60及其接口技术
ENC28J60与微控制器MCU的连接是通过SPI实现的,支持10 Mbps。对于没有SPI接口的芯片可通过用I/O口模拟SPI接口的方式实现。ENC28J60仅支持SPI模式0,0。
微控制器可通过SPI接口发送命令,访问ENC28J60的寄存器或读写接收/发送缓冲区,完成相关操作。复位也可通过SPI接口由软件实现,软件复位不影响RESET引脚的状态。
ENC28J60有两个中断输出,分别用于事件中断触发和网络唤醒主机。
CPU采用LPC2138用宏定义实现SPI口读写操作。SOSPDR为SPI数据寄存器,该双向寄存器为 SPI提供发送和接收的数据,发送数据通过写该寄存器提供,SPI接收的数据可从该寄存器读出。SOSPSR为SPI状态寄存器。在对SPI接口进行操作之前需对其初始化。下面给出读/写SPI接口的源代码。
#define READSPI( Val )
{
S0SPDR = 0x00;
while( 0 == (S0SPSR 0x80));
Val = S0SPDR;
}
#define WRITESPI( Val )
{
if ( 0 == (S0SPSR 0x40) ) {
S0SPDR = Val;
while( 0 == (S0SPSR 0x80) );
}
}
亦可用LPC2138的SSP来连接ENC28J60,需将其设置为SPI模式。应当注意到SSP有8帧的收/发 FIFO,如果处理不当将造成读/写错误。因为缓冲区的存在可能破坏读/写ENC28J60的时序。
对于没有SPI接口的单片机可采用普通I/O口模拟的方法实现SPI主机。此时须注意静态时时钟的无效状态和相位,以及输出数据位出现的时间;对ENC28J60操作期间片选必须保持有效(低电平),操作结束后返回低电平。根据ENC28J60的读/写波形很容易写出模拟SPI主机的程序。笔者曾在AT89S51上实现了模拟SPI主机读/写MCP2515的操作。
4 结论
笔者在LPC2138+ENC28J60+HR901170A平台上实现了以太网通信。相对于其他方案,该系统极为精简。对于没有开放总线的单片机,虽然有可能采用模拟并行总线的方式连接其他以太网控制器,但不管从效率还是性能上,都不如用SPI接口或采用通用I/O口模拟SPI接口连接ENC28J60的方案。
可以看出,ENC28J60是极具特色的独立以太网控制器:SPI接口使得小型单片机也能具有网络连接功能;集成MAC和PHY无需其他外设;具有可编程过滤功能,可自动评价、接收或拒收多种信息包,减轻了主控单片机的处理负荷;内部继承可编程的8 KB双端口SRAM缓冲器,操作灵活方便。不足之处为仅支持10BASET。
参考文献
[1] Microchip Technology Inc. ENC28J60 StandAlone Ethernet Controller with SPI Interface. http://www.microchip.com/.
[2] Philips Semiconductors. LPC213x User Manual. http://www.philipsmcu.com/.
[3] 周立功,张华,等. 深入浅出ARM7——LPC213x/LPC214x(上册). 北京:北京航空航天大学出版社,2005.
评论