2012-02-27 10 views
1

私はPIC32 ethernet evaluation boardを持っていて、簡単なUDPパケットを送信しようとしています。ここでPIC32イーサネットキットとUDP

私のコードは、これまでのところです:私はMPLAB IDEでコードをコンパイルして実行すると、ボードは二つのパケット、そして何を送るよう

/* 
* 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

この質問は、実際には電子的な交換やフォーラムである必要があります。私は問題は、最初の2秒かそこらのパケットがphyに到達しないか、またはそれを超えていないということです。理由は分かりませんが、最近私はこれを横断しました。あなたのコードは大丈夫だと思いますが、かなり遅れてMicrochip Appのライブラリがあると仮定して、UDPOpenExを使用します。数秒待つか、再送信してください。 NODE_INFOの代わりにIPとして接続すると、arpが最初に解決する必要があるため、arpが動作している可能性があります。

関連する問題