2012-02-27 5 views
1

나는 PIC32 ethernet evaluation board을 가지고 있으며 간단한 UDP 패킷을 보내려고합니다. 내가 컴파일 및 MPLAB IDE에서 코드를 실행하면 보드가 두 패킷 후 아무것도를 보내는 것 같습니다,PIC32 이더넷 키트 및 UDP

/* 
* This macro uniquely defines this file as the main entry point. 
* There should only be one such definition in the entire project, 
* and this file must define the AppConfig variable as described below. 
*/ 
#define THIS_IS_STACK_APPLICATION 

// Include all headers for any enabled TCPIP Stack functions 
#include "TCPIP Stack/TCPIP.h" 
#include "TCPIPConfig.h" 

#include <plib.h> 
#include <p32xxxx.h> 

// Declare AppConfig structure and some other supporting stack variables 
APP_CONFIG AppConfig; 
BYTE AN0String[8]; 

int main() 
{ 
    static enum 
    { 
     SM_OPEN, 
     SM_BROADCAST, 
    } smState = SM_OPEN; 
    typedef BYTE UDPSocket; 
    UDP_SOCKET s; 
    NODE_INFO myRemoteNode; 

    myRemoteNode.IPAddr.v[0]=169; 
    myRemoteNode.IPAddr.v[1]=254; 
    myRemoteNode.IPAddr.v[2]=2; 
    myRemoteNode.IPAddr.v[3]=2; 
    myRemoteNode.MACAddr.v[0]=0x01; 
    myRemoteNode.MACAddr.v[1]=0xA0; 
    myRemoteNode.MACAddr.v[2]=0xF0; 
    myRemoteNode.MACAddr.v[3]=0x7B; 
    myRemoteNode.MACAddr.v[4]=0xE5; 
    myRemoteNode.MACAddr.v[5]=0x45; 

    TRISD = 0xff00; // tri-state register for the LED ports 

    // Initialize UDP 
    UDPInit(); 

    while(1) 
    { 
     switch(smState) 
     { 
      case SM_OPEN: 

       // Talk to a remote DHCP server. 
       s = UDPOpen(68, &myRemoteNode, 67); 

       if (s == INVALID_UDP_SOCKET) 
       { 
        PORTD = 0x01; // Switch on the red LED on PIC32 ethernet starter kit to indicate an error 
        // Socket is not available 
        // Return error. 
       } 
       else 
        // Broadcast DHCP Broadcast message. 
        smState = SM_BROADCAST; 
       break; 

      case SM_BROADCAST: 

       PORTD = 0x02; // Switch on the yellow LED to indicate the connection 

       if (UDPIsPutReady(s)) 
       { 
        // Turn on yellow and green LED to indicate UDP is put ready 
        PORTD = 0x06; 

        // Socket is ready to transmit. Transmit the data... 
        // Note that there is DHCPSocket parameter in UDPPut. 
        // This UDPPut call will use active socket 
        // as set by UDPIsPutReady() - that is DHCPSocket. 
        UDPPut(0x55); 

        // Now transmit it. 
        UDPFlush(); 
       } 
       UDPClose(s);     
       break; 
     } 
    } 
} 

:

여기에 지금까지 내 코드입니다. Wireshark를 실행하는 노트북 PC에 직접 보드를 연결했지만 Wireshark는 수신 된 패킷을 감지하지 못했습니다.

TCP를 사용하는 http 서버 데모를 실행하기 위해 보드를 성공적으로 얻을 수 있었기 때문에 하드웨어 문제는 아닙니다.

답변

0

이 질문은 전자식 전자 메일 교환 또는 mc 포럼에 실제로 있어야합니다. 나는 문제가 초기화 후 2 초 정도 지나서 패킷이 결코 phy를 지나치지 않는다고 생각한다. 이유는 모르겠지만 최근에이 문제를 다뤘습니다. 나는 당신의 코드가 괜찮다고 생각하는데, UDPOpenEx를 사용 하겠지만 상당히 늦은 마이크로 칩 앱 라이브러리가 있다고 가정한다. 잠시 기다리거나 다시 보내보십시오. NODE_INFO 대신 IP로 연결하면 arp가 먼저 해결해야하기 때문에 arp가 작동하고 작동합니다.