上篇文章已经简单介绍了W5100S,并且和W5500进行了对比分析。
上篇文章链接 - W5100S--全新一代高性能全硬件TCP / IP协议栈以太网芯片(可以了解下W5100S的基本参数情况)
本篇则主要讲解W5100S特有的新功能——SOCKET - less功能。通过对其相关寄存器进行配置,完成W5100S硬件主动PING外部设备。
首先我们需要了解关于SOCKET - less中与PING功能相关的寄存器。
1.SLRTR(SOCKET - less 重传超时时间寄存器)
重传超时时间寄存器:配置PING的超时重传时间基本单位是100us的的的,当过了时间则会启动重传机制。
2.SLRCR(SOCKET - less 重传次数寄存器)
重传次数寄存器:设定重传次数,若当前重传次数 >= 重传次数 + 1时,则判定为TIMEOUT。
3.SLPIPR(SOCKET - less 目标IP地址寄存器)
SOCKET - less 目标IP地址寄存器:硬件PING的目标IP。
4.PINGSEQR(PING序列号寄存器)
PING序列号寄存器:PING请求数据包的报头序列号。
5.PINGIDR(PING ID寄存器)
PING ID寄存器:PING请求数据包的报头数据包ID。
6.SLIMR(SOCKET - less 中断屏蔽寄存器)
SOCKET - less 中断屏蔽寄存器:选择开启/关闭PING与TIMEOUT中断
7.SLCR(SOCKET-less控制寄存器)
SOCKET - less 控制寄存器:发送相关请求的使能寄存器。
SOCKET - less 相关的寄存器还有很多,这里仅介绍几个关于硬件PING的寄存器。
详细W5100S信息欢迎前往www.w5100s.com浏览下载。
上述寄存器功能描述还是很直白的,我们使用硬件PING时也仅需要设置这几个相关寄存器即可。具体流程如下代码:
void hw_ping_init(void)
{
setSLRTR(0x03E8); // 重传超时时间设置:1000 * 100us
setSLRCR(3); // 重传次数设置:3次
/* 使用中断时可开启该配置 */
setSLIMR(0x05); // 中断开启 PING & TIMEOUT
setPINGSEQR(0x03E8); // 请求数据包序列号设置:1000
setPINGIDR(0x0100); // 请求数据包ID:100
}
上述代码相当于使用硬件PING时无特殊要求可设置一次即可。先后顺序不作要求。
void hw_ping(void)
{
setSLPIPR(hw_ping_ip); // 目标IP设置:PING对象IP
setSLCR(0x01); // 发送PING请求
}
这部分代码在需要使用一次硬件PING时,进行一次调用即可。
而我们判断PING的结果,我使用了中断进行判断,超时还是响应都会发生次中断,具体如下:
void EXTI9_5_IRQHandler(void)
{
uint8 temp;
if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line9);
temp = getSLIR();
switch(temp)
{
case 0x01:
setSLIR(0x01);
printf("\r\n收到对端PING回应.");
break;
case 0x04:
setSLIR(0x04);
printf("\r\n对端PING回应超时.");
break;
default:break;
}
}
}
W5100S 中断是管脚电平触发外部中断,再判断具体哪种中断进行处理。
上述的代码,均是www.w5100s.com内16.HW_PING例程内的,该例程已经过实测,硬件PING功能正常使用。
例程是中断方式判断结果,也可写成轮询形式均可。
W5100S目前已经到货,炜世已经正式调通并将配套的资料例程补充完毕。
相关资料炜世已经整理上传至www.w5100s.com网址内,欢迎各位前往浏览。
WIZnet W5100S技术交流群:579842114,群内有“大神”为大家答疑解惑。
后续我将会陆续发布关于W5100S各类功能测试博文,有兴趣的朋友欢迎关注。
炜世是WIZnet的的的官方代理商,W5100S可提供模块/评估板供客户测试。
如需详细资料/样品申请/技术支持等,欢迎与我们联系。
炜世为客户提供全程的技术支持与优异的价格优势。
网址:深圳炜世科技 - 物联网系统解决方案提供商&WIZnet授权代理商
电话:0755-86568556
QQ:2571856470