PIC32 Ethernet комплект и UDP - PullRequest
       5

PIC32 Ethernet комплект и UDP

1 голос
/ 27 февраля 2012

У меня есть оценочная плата PIC32 Ethernet , и я пытаюсь заставить ее отправлять простой пакет 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;
        }
    }
}

Когда я компилирую и запускаю код в MPLAB IDE, похоже, что плата отправляет два пакета, а затем ничего. Я подключил плату непосредственно к ноутбуку с Wireshark, но Wireshark не смог обнаружить ни одного полученного пакета.

Мне удалось успешно получить плату для запуска демонстрации http-сервера, использующего TCP, поэтому я знаю, что это не проблема с оборудованием.

1 Ответ

0 голосов
/ 11 июля 2013

Этот вопрос действительно должен быть на электронном обмене стека или на форумах mc.Я думаю, что проблема состоит в том, что первые 2 секунды или около того после инициализации, что пакеты никогда не доходят до или за phy.Я не знаю почему, но я столкнулся с этим совсем недавно.Я думаю, что ваш код в порядке, хотя я бы использовал UDPOpenEx, если у вас довольно поздние библиотеки Microchip App.Попробуйте подождать несколько секунд или отправить заново.Если вы подключитесь как IP вместо NODE_INFO, он будет arp и, вероятно, будет работать, потому что arp должен будет сначала разрешиться.

...