奇怪了!ENC28J60为什么有时PING得通,有时PING不通!
为什么ENC28J60有时PING得通,有时PING不通?刚上电时PING得通,过段时间就PING不通了,要重启才能又PING通!主程序如下:(是不是主程序的问题?)
while(1)
{ wdt();
plen = enc28j60_packet_receive(BUFFER_SIZE, buffer);
//USART_DMASendData(USART1,buf,plen);
/*plen will ne unequal to zero if there is a valid packet (without crc error) */
if(plen==0)
{
continue;
}
// arp is broadcast if unknown but a host may also
// verify the mac address by sending it to
// a unicast address.
if(eth_type_is_arp_and_my_ip(buffer,plen))
{
make_arp_answer_from_request(buffer);
//USART_DMASendText(USART1,"make_arp_answer_from_request\n");
continue;
}
// check if ip packets are for us:
if(eth_type_is_ip_and_my_ip(buffer,plen)==0)
{
continue;
}
if(buffer==IP_PROTO_ICMP_V && buffer==ICMP_TYPE_ECHOREQUEST_V)
{
// a ping packet, let's send pong
make_echo_reply_from_request(buffer, plen);
//USART_DMASendText(USART1,"make_echo_reply_from_request\n");
continue;
}
if (buffer==IP_PROTO_UDP_V&&buffer==0x17&&buffer==0x70)
{ make_udp_reply_from_request(buffer,rdata,5,mydk);
}
//make_udp_reply_from_request(buffer,rdata,5,mydk);
} 有可能是程序问题
也可能是硬件问题,ENC28J60发热比较厉害,时间长了就会出点小问题。 ENC28J60发热比较厉害,要怎么解决呢? 严重感冒~哈哈,路过帮顶 之前有讨论过,如果是中断驱动的方式,可能的原因是由于某次中断请求没有被响应,造成了数据阻塞。如果是查询的方式,那有可能是程序出错,篡改了某些寄存器的值,导致数据传输问题,定期重新初始化芯片就能解决了。
至于说发热的问题,一般是调整偏置电阻降低工作电流能起到一定的改善作用,一般2k的电阻换成2.7k的就差不多了。 芯片底部双面覆铜,再用十几个开窗过孔打通,热量就小了。SPI在收发的时候,禁止其他中断,能降低错误概率。 谢谢你们! 低速少量数据间隔传输。 我也遇到这种问题,请问解结了没有?怎么解结的? 我也是呀不知怎样解决 我也遇到了这个问题,上电工作几分钟就ping不通了,一定要重新上电才能ping通,几分钟后又不通了,摸了一下很烫,前几个月天气冷的时候好像就很好 我认为是驱动写的问题
页:
[1]