板子处于复位状态时,先做好一系列的准备工作。
1、从EEROM中读取板子的MAC 地址(事先已经写在地址0xFA to 0xFF 中了)。
2、配置PHY 寄存器,并读取该寄存器的值,检查一下,此时的寄存器配置时候是合理的(全双工,自协商等)。
3、等待片刻,使以太网稳定。随后,启动DHCP 协议,获取该电路板的IP地址。其中,PC 机是服务机,板子是客户机。
4、获得板子的IP地址之后,就可以正常通信了。在发送数据之前,首先确认是否ARP(IP地址和MAC地址绑定)和ping(ICMP协议,确定网络是否链接成功)是否请求成功。如果成功,就可以传输我们真正关心的数据了。
以太网协议 MAC 层
前导帧 : 55
帧开始: 5D
长度或类型:0x0800 表示以IP帧 ; 0x0806 表示以ARP帧 ;
以太网IP协议
版本:4 ; 头部长:5;服务类型:00;总长: UDP data + 8 UDP header + 20 IP header; time to live :80; 协议:11--UDP/IP,10--ICMP/PINGN ;
以太网校验和:在运算的时候,先设置该处的值为0,等运算结果出来之后,再把结果添加进去。
以太网UDP格式
UDP端口有几个特殊的:68 --BOOT客户端,同时用于DHCP ,67--BOOT 服务,同时用于DHCP; 校验和:UDP 的校验和可以设置为0,如果要计算的话,比较麻烦。
动态主机设置协议 DHCP
1. DHCP的报文格式
我们来介绍一下DHCP的报文格式,如图1,
OP(1) |
Htype(1) |
Hlen(1) |
Hops(1) |
Transaction ID(4) |
|||
Seconds(2) |
Flags(2) |
||
Ciaddr(4) |
|||
Yiaddr(4) |
|||
Siaddr(4) |
|||
Giaddr(4) |
|||
Chaddr(16) |
|||
Sname(64) |
|||
File(128) |
|||
Options(variable) |
(图1 DHCP的 报文格式)
l OP:若是client送给server的封包,设为1,反向为2;
l Htype:硬件类别,ethernet为1;
l Hlen:硬件长度,ethernet为6;
l Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;
l Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
l Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
l Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
l Ciaddr:用户IP地址;
l Yiaddr:客户IP地址;
l Siaddr:用于bootstrap过程中的IP地址;
l Gi