STM32F407通过SPI带载W5100S-L网络芯片,将socket配置为UDP模式时:
1、先收紧接着后发,无论发送间隔时间,全部OK;
2、主动只发送,间隔20s以内也都OK;
3、主动只发送,间隔25s,刚开始时OK,大约发四五次后,间隔变为50s,或75s,即中间有一两次不执行发送;
找来找去没办法,后来用wireshark抓包,观察到如果用网络调试助手主动UDP发送时,大概每50s会发送一个ARP包,应该是确定对端是否存在以及对方的MAC地址。受此启发,看到W5100S-L芯片可以强制UDP发送ARP,也就是会在每次UDP发送之前先发送ARP确定对端IP及MAC。
在芯片初始化中加入FARP位使能后,该问题解决!至于为啥会这样,貌似是W5100S芯片的ARP缓存对端MAC地址有效时间的问题,但芯片手册中未找到相关说明~~