ARP——地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的TCP/IP协议之一。
在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头。
但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。
使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行
一、使用Scoket-less命令流程
从上图我们可以看出,Socket - less 命令的使用,整体流程还是十分明了的。
开始,配置相关寄存器的数值,完成后启动Socket - less 命令,启动后则判断对端的回应与超时的判断。
而在这个整体流程中,最主要的难点在于寄存器配置部分。
二、关于Socket - less ARP 功能的寄存器
我们在使用Socket - less 命令时,只需要配置以下寄存器即可完成PING功能的调用。
1.SLRTR(SOCKET - less 重传超时时间寄存器)
配置ARP的超时重传时间基本单位是100us,当过了时间则会启动重传机制。
2.SLRCR(SOCKET - less 重传次数寄存器)
设定重传次数,若当前重传次数 >= 重传次数 + 1时,则判定为TIMEOUT。
3.SLPIPR(SOCKET - less 目标IP地址寄存器)
硬件ARP的目标IP。
4.SLIMR(SOCKET - less 中断屏蔽寄存器)
选择开启/关闭PING与TIMEOUT中断。
5.SLCR(SOCKET-less控制寄存器)
发送相关请求的使能寄存器。
对于使用SOCKET - less 命令,相关的寄存器还有很多,这里仅介绍几个关于硬件PING功能相关的寄存器。
更多详细的W5100S信息,欢迎前往www.w5100s.com浏览下载,资料例程我们会不断完善更新。
三、相关寄存器的配置及Socket - less 命令调用
使用硬件PING时仅需要设置这几个相关寄存器即可。具体配置流程如下代码:
void hw_arp_init(void) { setSLRTR(0x03E8); // 重传超时时间设置:1000 * 100us setSLRCR(3); // 重传次数设置:3次 /* 使用中断时可开启该配置 */ setSLIMR(0x06); // 中断开启 ARP & TIMEOUT }
上述代码使用硬件ARP功能时,无特殊要求那么设置一次即可。设置先后顺序不作要求。
void hw_arp(void) { setSLPIPR(hw_arp_ip); // 目标IP设置:ARP对象IP setSLCR(0x02); // 发送ARP请求 }
这部分代码在需要使用一次硬件ARP功能时,进行一次调用。
而判断ARP的结果,则可使用中断进行判断,超时还是响应都会发生次中断,具体如下:
switch(getSLIR()) { case 0x02: setSLIR(0x02); getSLPHAR(remote_mac); printf(" 已收到来自 %d.%d.%d.%d 的ARP回应,其MAC地址%x:%x:%x:%x:%x:%x。", hw_arp_ip[0],hw_arp_ip[1],hw_arp_ip[2],hw_arp_ip[3],remote_mac[0], remote_mac[1],remote_mac[2],remote_mac[3],remote_mac[4],remote_mac[5]); break; case 0x04: setSLIR(0x04); printf(" %d.%d.%d.%d 无回复。",hw_arp_ip[0],hw_arp_ip[1],hw_arp_ip[2] ,hw_arp_ip[3]); break; default:break; }
中断发生后,根据ARP的SLIR寄存器的数值,判断对方是给予反馈,还是已经超时。
上述代码,均是www.w5100s.com内18.HW_ARP例程内的,该例程已经过实测,硬件ARP功能正常使用。
注:提供的例程是中断方式判断结果,也可写成轮询形式,均可。
四、代码运行结果
电脑IP:192.168.1.100;MAC:54:E1:AD:E7:DF:C9
W5100S IP:192.168.1.233;MAC:00:08:DC:22:33:33
W5100S 与电脑连接在同一路由器下。
W5100S 硬件ARP 目标 IP:192.168.1.100
可以看到,W5100S自带的硬件ARP功能很及时获取目标回复情况,获取其对应的MAC地址。
利用这个功能,用户可以很及时的获取到目标设备的物理地址,更及时的进行数据传输。
注:无回复时,是我已将网线拔了。
五、Wireshark网络封包内容