我正在尝试使用UDP从ENC28J60模块发送和接收数据。为此,我获得了AVR ATmega8的this sample code。此代码工作正常,但它只将数据发送到服务器。所以,我对代码进行了一些小改动,并检查ENC28J60的接收缓冲区中是否有任何数据,它将发送" aaaaaaaaaaaa"到服务器,否则它将发送" Hello world"。
这是我的新代码: -
int main(void) {
//=====setup eth interface
uint16_t plen = 0, dat_p = 0;
//initialize enc28j60
enc28j60Init(mymac);
_delay_ms(100);
// Magjack leds configuration, see enc28j60 datasheet, page 11
// LEDB=yellow LEDA=green
// 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
// enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
enc28j60PhyWrite(PHLCON,0x476);
_delay_ms(100);
//init the ethernet/ip layer:
init_ip_arp_udp_tcp(mymac,myip);
//output for a led
DDRC|=(1<<4);
while(1){
dat_p=enc28j60PacketReceive(BUFFER_SIZE, buf);
if(dat_p != 0){
buf[UDP_DATA_P]='a';
buf[UDP_DATA_P+1]='a';
buf[UDP_DATA_P+2]='a';
buf[UDP_DATA_P+3]='a';
buf[UDP_DATA_P+4]='a';
buf[UDP_DATA_P+5]='a';
buf[UDP_DATA_P+6]='a';
buf[UDP_DATA_P+7]='a';
buf[UDP_DATA_P+8]='a';
buf[UDP_DATA_P+9]='a';
buf[UDP_DATA_P+10]='a';
}
else{
buf[UDP_DATA_P]='H';
buf[UDP_DATA_P+1]='E';
buf[UDP_DATA_P+2]='L';
buf[UDP_DATA_P+3]='L';
buf[UDP_DATA_P+4]='O';
buf[UDP_DATA_P+5]=' ';
buf[UDP_DATA_P+6]='W';
buf[UDP_DATA_P+7]='O';
buf[UDP_DATA_P+8]='R';
buf[UDP_DATA_P+9]='L';
buf[UDP_DATA_P+10]='D';
}
send_udp_prepare(buf,5001,dis_ip,5001,dis_mac);
send_udp_transmit(buf,11);
_delay_ms(200); //must be short enough to prevent ping requests to be timed-out
PORTC^=(1<<4); // toggle a led
}
return (0);
}
现在我手动将一些数据从服务器发送到客户端(ENC28J60),但我仍然总是得到#34; Hello world&#34;在服务器端。所以,很明显我无法在我的客户端上收到数据。 那么,任何人都可以告诉我在ENC28J60模块上接收UDP数据的正确方法。