这里以太网接口驱动程序主要是CP2200的初始化配置和收发配置。

(1) CP2200复位初始化

CP2200复位初始化过程可以确保设备正常工作。复位开始时,首先要等待复位引脚升高,然后等待振荡器初始化完成,振荡器初始化完成后会发送一个中断信号。之后是CP2200自身初始化,可以通过检测INT0中断状态寄存器确定自身初始化的完成。由于系统默认的是允许所有的中断,通过设置INT0EN和INT1EN关闭哪些不被主处理器处理的中断事件。初始化过程还包括物理层(PHY)的初始化,以及媒体访问层(MAC)的初始化。最后配置接收过滤器,系统复位后,过滤器允许广播包和组播包,通过设置RXFILT寄存器可以决定是接收还是忽略诸如广播、组播、短帧(帧长度小于64字节)或者CRC错误的帧等。初始化完成后,接收缓冲区为空,CP2200开始准备发送或接收数据。

(2) 数据的接收和发送

单片机C8051F020通过使用CP2200的直接和间接寄存器来控制CP2200,直接寄存器可

以访问RAM缓冲区,FLASH存储区,间接的MAC配置寄存器及其它的状态和控制寄存器。CP2200具有2K(0x0000–0x07FF)字节的发送缓冲区和4K(0x0000–0x0FFF)字节的接收缓冲区,它们共享相同的地址空间,都使用RAMADDRH:RAMADDRL指针访问,每个缓冲区都有一个专门的数据寄存器。其中CP2200发送数据的流程图如图3所示:

使用随机储存器访问方法将该包装入发送缓冲区:

a.将RAMADDRH:RAMADDRL设为0x0000。

b.将第一个字节写入 RAMTXDATA。

c.将RAMADDRH:RAMADDRL加1。

d.将另一个数据字节写入 RAMTXDATA.

e.重复步骤c和d直到整个包全部装入发送缓存区。

f.长度小于64字节的帧需要填充为至少64字节。

g.将TXENDH:TXENDL设置为最后一个字节的地址。该地址值必须大于等于0x0040。

4.2 TCP/IP协议栈的设计

我们结合项目的实际需要,自行开发了简化的TCP/IP协议,实现的协议包括UDP协议、IP协议、ARP协议、ICMP协议、TCP协议以及一个简单的HTTP协议。各协议自成一个模块,可以根据实际需要,选择使用全部的协议或部分协议,由于本应用主要使用UDP协议传输数据,因此,TCP部分和HTTP部分可以不使用,去掉这两个模块不会影响系统的正常工作。

在实现时,每种协议的格式都定义为一个结构体,发送数据时,只需将应用数据由高层传递到下一层,每层协议会自动添加本层协议所需的报首内容,如,发送UDP数据时,将数据传给UDP层,UDP层会在数据之前加入源目的端口号和目的端口号以及数据报长度和校验和等8个字节的UDP报首信息,然后交给IP层处理,IP同样地在UDP报文前加入IP报首信息,然后发送给下一层。IP层发送时先从ARP Cache中查询目的IP地址对应的MAC地址,如果有,则将该MAC地址放入相应位置,然后发送;如果找不到目的MAC地址则需要发送ARP请求包,广播请求拥有该IP地址的MAC地址,收到ARP回复包后,再将该IP数据发送到下一层,在IP报之前再封装上源MAC和目的MAC地址以及帧类型后,就可以由CP2200进行数据的发送,CP2200会自动添加帧首用于帧同步的8字节前导符和最后的帧校验序列,真正将数据发送到网络上。