This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DRA726: NIMU example for DRA726

Part Number: DRA726
Other Parts Discussed in Thread: TDA2E

Hello!
I try start ethernet communication on J6ECO / TDA2E EVM board. But it did not start, and UART show the next messages:

ENETPHY_FindingState: PhyNum: 3
ENETPHY_DisablePhy(3)
Enable Phy to negotiate external connection
NWAY Advertising: FullDuplex-1000 FullDuplex-100 HalfDuplex-100 FullDuplex-10 HalfDuplex-10
Negotianted connection: Fullduplex 1000 Mbs

What does it means? What is happend or not happend? where are these messages generated and how do they get into UART? I tried to find this message in ti folder, but I can't.

Was CPSW and NIMU for CPSW configured correctly?Where I can see source function CpswEmacInit()?

Software is used:
pdk_dra7xx_1_0_10
ndk_2_26_00_08
bios_6_76_02_02

/* ========================================================================== */
/*                             Include Files                                  */
/* ========================================================================== */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <xdc/std.h>
#include <xdc/runtime/Error.h>
#include <xdc/runtime/System.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>

#include <ti/ndk/inc/netmain.h>
#include <ti/ndk/inc/stkmain.h>
#include "ti/ndk/inc/os/osif.h"

/* EMAC Driver Header Files */
#include <ti/drv/emac/emac_drv.h>
#include <ti/drv/emac/src/v4/emac_drv_v4.h>

/* UART Driver Header Files */
#include <ti/drv/uart/UART.h>
#include <ti/drv/uart/UART_stdio.h>

/* I2C Driver Header Files */
#include <ti/drv/i2c/I2C.h>
#include <ti/drv/i2c/soc/I2C_soc.h>

/* Board Level Header Files */
#include <ti/board/board.h>



// UDP data streaming tasks
static void sendclient();
extern int dtask_udp_hello();
/* Enable the below macro to have prints on the IO Console */
/* #define IO_CONSOLE */
#ifndef IO_CONSOLE
#define NIMU_log                UART_printf
#else
#define NIMU_log                printf
#endif

/* Number of MAC ports and their PHY addresses */
#if defined(evmDRA72x)
#define EMAC_CPSW_PORT0_PHY_ADDR_EVM     3 // was 3
#define EMAC_CPSW_PORT1_PHY_ADDR_EVM     0 /* Not populated */
#define DRA7XX_EVM_NUM_PORTS             1
#elif defined(evmDRA75x)
#define EMAC_CPSW_PORT0_PHY_ADDR_EVM     2
#define EMAC_CPSW_PORT1_PHY_ADDR_EVM     3
#define DRA7XX_EVM_NUM_PORTS             2
#define NIMU_DUAL_MAC_MODE
#elif defined(evmDRA78x)
#define EMAC_CPSW_PORT0_PHY_ADDR_EVM     0
#define EMAC_CPSW_PORT1_PHY_ADDR_EVM     1 /* Not populated */
#define DRA7XX_EVM_NUM_PORTS             1
#endif

/* NDK max table entries */
#define MAX_TABLE_ENTRIES                3

NIMU_DEVICE_TABLE_ENTRY NIMUDeviceTable[MAX_TABLE_ENTRIES];

extern char *LocalIPAddr;

#ifdef NIMU_DUAL_MAC_MODE
/* Static IP Address settings for interface 2 */
const char *ip2Addr    = "192.168.2.4";
const char *ip2Mask    = "255.255.255.0";
const char *ip2Gateway = "192.168.2.1";
#endif

extern int CpswEmacInit(STKEVENT_Handle hEvent);

/**
 *  \name main
 *  \brief Main Function
 *  \param none
 *  \return none
 *
 */

EMAC_OPEN_CONFIG_INFO_T open_cfg;


int main()
{
    EMAC_HwAttrs_V4 cfg;
    int index = 0;

    /* Set pinmux, IRQ crossbar */
    Board_init(BOARD_INIT_PINMUX_CONFIG |
               BOARD_INIT_UART_STDIO | BOARD_INIT_ETH_PHY);

    /* Update PHY addresses */
    EMAC_socGetInitCfg(0, &cfg);
    cfg.numPorts = DRA7XX_EVM_NUM_PORTS;
    cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_EVM;
    cfg.port[1].phy_addr = EMAC_CPSW_PORT1_PHY_ADDR_EVM;
    cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX | EMAC_CPSW_CONFIG_MODEFLG_GIGABIT;
    EMAC_socSetInitCfg(0, &cfg);

    NIMUDeviceTable[index++].init = &CpswEmacInit;
#ifdef NIMU_DUAL_MAC_MODE
    NIMUDeviceTable[index++].init = &CpswEmacInit;
#endif
    NIMUDeviceTable[index].init = NULL;
    BIOS_start();

    return -1;
}

void netOpenHook(void)
{
    NIMU_log("netOpenHook: SYS/BIOS Ethernet/IP (CPSW) Sample application, EVM IP address: %s\n\n", LocalIPAddr);
    NIMU_log("TaskCreate\n");
    Task_sleep(100);
#ifdef NIMU_DUAL_MAC_MODE
    NIMU_log("netOpenHook: SYS/BIOS Ethernet/IP (CPSW) Sample application, EVM IP address 2: %s\n", ip2Addr);
#endif

    //Create the Send Client Task
TaskCreate( sendclient, "SendClient", OS_TASKPRINORM, 0x1400, 0, 0, 0 );

   NIMU_log("!!! TaskCreate Done! \n");
}

void netCloseHook(void)
{
    NIMU_log("netCloseHook\n");
}

/* Called from ti_nkd_config_Global_stackThread() to run user setup code */
void stackInitHook(HANDLE hCfg)
{
    NIMU_log("\n\n stackInitHook \n");
#ifdef NIMU_DUAL_MAC_MODE
    CI_IPNET ipnet;
    CI_ROUTE route;

    /* Add IP address for interface 2 */
    ipnet.IPAddr = inet_addr(ip2Addr);
    ipnet.IPMask = inet_addr(ip2Mask);
    CfgAddEntry(hCfg, CFGTAG_IPNET, 2, 0, sizeof(CI_IPNET), (UINT8 *)&ipnet, 0);

    /* Add gateway for interface 2 */
    bzero(&route, sizeof(route));
    route.IPDestAddr = 0;
    route.IPDestMask = 0;
    route.IPGateAddr = inet_addr(ip2Gateway);
    CfgAddEntry(hCfg, CFGTAG_ROUTE, 0, 0, sizeof(CI_ROUTE), (UINT8 *)&route, 0);
#endif
}

//
// UDP Send Client
//
int sizeBaseFrame = 1024;   // размер передаваемого фрейма
int endless_send  = 1;
int send_unsuccsessful = 0;

#define REMOTE_IPADDR_STRING "192.168.1.60" // адрес компьютера
#define PORTVALUE  4231

void sendclient()
{
    SOCKET              sudp = INVALID_SOCKET;
    struct sockaddr_in  sin1;
    int                           i, tmp;
    int                    statusPackage;
    int I;
    static int                 sizeFrame;
    static int                  Base = 0;
    int                         sizeData;
    static int                  flagTx = 0;
    // Raise priority to transfer data & wait for the link to come up.
    TaskSetPri(TaskSelf(), 1);
    int frameData[1000];

    NIMU_log("!!! Task start work - sendclient()\n");

 Task_sleep(20000);
    for(;;){
        // Allocate the file environment for this task
        fdOpenSession( TaskSelf() );
        Task_sleep(1000);
        // Create the main UDP listen socket
        sudp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

        if( sudp == INVALID_SOCKET )
        {
            NIMU_log("\nINVALID_SOCKET\n");
            return;
        }
        //NIMU_log("SOCKET_OK\n");
        // Set Port = PORTVALUE, IP address = REMOTE_IPADDR_STRING
        bzero( &sin1, sizeof(struct sockaddr_in) );
        sin1.sin_family         = AF_INET;
        sin1.sin_addr.s_addr    = inet_addr(REMOTE_IPADDR_STRING);
        sin1.sin_port           = __htons(PORTVALUE) ;//NDK_htons(PORTVALUE);
        for (i = 0; i < 8; i++){
            sin1.sin_zero[i] = 255;
        }

        tmp = sizeof( sin1 );
        // Connect socket
        I = connect( sudp, (struct sockaddr *)&sin1, tmp );
        if ( I < 0 )
        {
            fdCloseSession( TaskSelf() );
        }

        sizeData = sizeof(frameData);
        /* Before we send the data send out a packet; this gets ARP out of the
         * way. */
        while(1){
            // statusPackage = send(sudp, (char *)&buffer, TESTSIZE, 0);
            // statusPackage = sendto( sudp, (char *)&buffer, TESTSIZE, 0, (struct sockaddr *)&sin1, sizeof(sin1) );
            for (;;){
                if (sizeData - Base < sizeFrame)
                {
                    sizeFrame = sizeData - Base;
                    flagTx = 1;

                } else{
                    sizeFrame = sizeBaseFrame;
                }
                //statusPackage = sendto( sudp, (void *)&frameData[Base], sizeFrame, 0, (struct sockaddr *)&sin1, sizeof(sin1) );
                statusPackage = send( sudp, (void *)&frameData[Base], sizeFrame, 0 );
                Base = Base + sizeFrame;

                if ( statusPackage < 0 ){
                    send_unsuccsessful++;
                    flagTx = 0; // reset Tx
                    Base = 0;
                    break;
                }

                if (flagTx == 1) {
                    flagTx = 0; // reset Tx
                    Base = 0;
                    //break;
                }
            } // end for(;;)

            if( statusPackage < 0 )
            {
               break;
            }
        }

        fdCloseSession( TaskSelf() );
        /* Close the socket. */
        fdClose( sudp );
    } // end for(;;)

    NIMU_log("!!! Close sendclient()\n");
}

Thank

George


  • /* ========================================================================== */ /* Include Files */ /* ========================================================================== */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <xdc/std.h> #include <xdc/runtime/Error.h> #include <xdc/runtime/System.h> #include <ti/sysbios/BIOS.h> #include <ti/sysbios/knl/Task.h> #include <ti/ndk/inc/netmain.h> #include <ti/ndk/inc/stkmain.h> #include "ti/ndk/inc/os/osif.h" /* EMAC Driver Header Files */ #include <ti/drv/emac/emac_drv.h> #include <ti/drv/emac/src/v4/emac_drv_v4.h> /* UART Driver Header Files */ #include <ti/drv/uart/UART.h> #include <ti/drv/uart/UART_stdio.h> /* I2C Driver Header Files */ #include <ti/drv/i2c/I2C.h> #include <ti/drv/i2c/soc/I2C_soc.h> /* Board Level Header Files */ #include <ti/board/board.h> // UDP data streaming tasks static void sendclient(); extern int dtask_udp_hello(); /* Enable the below macro to have prints on the IO Console */ /* #define IO_CONSOLE */ #ifndef IO_CONSOLE #define NIMU_log UART_printf #else #define NIMU_log printf #endif /* Number of MAC ports and their PHY addresses */ #if defined(evmDRA72x) #define EMAC_CPSW_PORT0_PHY_ADDR_EVM 3 // was 3 #define EMAC_CPSW_PORT1_PHY_ADDR_EVM 0 /* Not populated */ #define DRA7XX_EVM_NUM_PORTS 1 #elif defined(evmDRA75x) #define EMAC_CPSW_PORT0_PHY_ADDR_EVM 2 #define EMAC_CPSW_PORT1_PHY_ADDR_EVM 3 #define DRA7XX_EVM_NUM_PORTS 2 #define NIMU_DUAL_MAC_MODE #elif defined(evmDRA78x) #define EMAC_CPSW_PORT0_PHY_ADDR_EVM 0 #define EMAC_CPSW_PORT1_PHY_ADDR_EVM 1 /* Not populated */ #define DRA7XX_EVM_NUM_PORTS 1 #endif /* NDK max table entries */ #define MAX_TABLE_ENTRIES 3 NIMU_DEVICE_TABLE_ENTRY NIMUDeviceTable[MAX_TABLE_ENTRIES]; extern char *LocalIPAddr; #ifdef NIMU_DUAL_MAC_MODE /* Static IP Address settings for interface 2 */ const char *ip2Addr = "192.168.2.4"; const char *ip2Mask = "255.255.255.0"; const char *ip2Gateway = "192.168.2.1"; #endif extern int CpswEmacInit(STKEVENT_Handle hEvent); /** * \name main * \brief Main Function * \param none * \return none * */ EMAC_OPEN_CONFIG_INFO_T open_cfg; int main() { EMAC_HwAttrs_V4 cfg; int index = 0; /* Set pinmux, IRQ crossbar */ Board_init(BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_UART_STDIO | BOARD_INIT_ETH_PHY); /* Update PHY addresses */ EMAC_socGetInitCfg(0, &cfg); cfg.numPorts = DRA7XX_EVM_NUM_PORTS; cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_EVM; cfg.port[1].phy_addr = EMAC_CPSW_PORT1_PHY_ADDR_EVM; cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX | EMAC_CPSW_CONFIG_MODEFLG_GIGABIT; EMAC_socSetInitCfg(0, &cfg); NIMUDeviceTable[index++].init = &CpswEmacInit; #ifdef NIMU_DUAL_MAC_MODE NIMUDeviceTable[index++].init = &CpswEmacInit; #endif NIMUDeviceTable[index].init = NULL; BIOS_start(); return -1; } void netOpenHook(void) { NIMU_log("netOpenHook: SYS/BIOS Ethernet/IP (CPSW) Sample application, EVM IP address: %s\n\n", LocalIPAddr); NIMU_log("TaskCreate\n"); Task_sleep(100); #ifdef NIMU_DUAL_MAC_MODE NIMU_log("netOpenHook: SYS/BIOS Ethernet/IP (CPSW) Sample application, EVM IP address 2: %s\n", ip2Addr); #endif //Create the Send Client Task TaskCreate( sendclient, "SendClient", OS_TASKPRINORM, 0x1400, 0, 0, 0 ); NIMU_log("!!! TaskCreate Done! \n"); } void netCloseHook(void) { NIMU_log("netCloseHook\n"); } /* Called from ti_nkd_config_Global_stackThread() to run user setup code */ void stackInitHook(HANDLE hCfg) { NIMU_log("\n\n stackInitHook \n"); #ifdef NIMU_DUAL_MAC_MODE CI_IPNET ipnet; CI_ROUTE route; /* Add IP address for interface 2 */ ipnet.IPAddr = inet_addr(ip2Addr); ipnet.IPMask = inet_addr(ip2Mask); CfgAddEntry(hCfg, CFGTAG_IPNET, 2, 0, sizeof(CI_IPNET), (UINT8 *)&ipnet, 0); /* Add gateway for interface 2 */ bzero(&route, sizeof(route)); route.IPDestAddr = 0; route.IPDestMask = 0; route.IPGateAddr = inet_addr(ip2Gateway); CfgAddEntry(hCfg, CFGTAG_ROUTE, 0, 0, sizeof(CI_ROUTE), (UINT8 *)&route, 0); #endif } // // UDP Send Client // int sizeBaseFrame = 1024; // размер передаваемого фрейма int endless_send = 1; int send_unsuccsessful = 0; #define REMOTE_IPADDR_STRING "192.168.1.60" // адрес компьютера #define PORTVALUE 4231 void sendclient() { SOCKET sudp = INVALID_SOCKET; struct sockaddr_in sin1; int i, tmp; int statusPackage; int I; static int sizeFrame; static int Base = 0; int sizeData; static int flagTx = 0; // Raise priority to transfer data & wait for the link to come up. TaskSetPri(TaskSelf(), 1); int frameData[1000]; NIMU_log("!!! Task start work - sendclient()\n"); Task_sleep(20000); for(;;){ // Allocate the file environment for this task fdOpenSession( TaskSelf() ); Task_sleep(1000); // Create the main UDP listen socket sudp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if( sudp == INVALID_SOCKET ) { NIMU_log("\nINVALID_SOCKET\n"); return; } //NIMU_log("SOCKET_OK\n"); // Set Port = PORTVALUE, IP address = REMOTE_IPADDR_STRING bzero( &sin1, sizeof(struct sockaddr_in) ); sin1.sin_family = AF_INET; sin1.sin_addr.s_addr = inet_addr(REMOTE_IPADDR_STRING); sin1.sin_port = __htons(PORTVALUE) ;//NDK_htons(PORTVALUE); for (i = 0; i < 8; i++){ sin1.sin_zero[i] = 255; } tmp = sizeof( sin1 ); // Connect socket I = connect( sudp, (struct sockaddr *)&sin1, tmp ); if ( I < 0 ) { fdCloseSession( TaskSelf() ); } sizeData = sizeof(frameData); /* Before we send the data send out a packet; this gets ARP out of the * way. */ while(1){ // statusPackage = send(sudp, (char *)&buffer, TESTSIZE, 0); // statusPackage = sendto( sudp, (char *)&buffer, TESTSIZE, 0, (struct sockaddr *)&sin1, sizeof(sin1) ); for (;;){ if (sizeData - Base < sizeFrame) { sizeFrame = sizeData - Base; flagTx = 1; } else{ sizeFrame = sizeBaseFrame; } //statusPackage = sendto( sudp, (void *)&frameData[Base], sizeFrame, 0, (struct sockaddr *)&sin1, sizeof(sin1) ); statusPackage = send( sudp, (void *)&frameData[Base], sizeFrame, 0 ); Base = Base + sizeFrame; if ( statusPackage < 0 ){ send_unsuccsessful++; flagTx = 0; // reset Tx Base = 0; break; } if (flagTx == 1) { flagTx = 0; // reset Tx Base = 0; //break; } } // end for(;;) if( statusPackage < 0 ) { break; } } fdCloseSession( TaskSelf() ); /* Close the socket. */ fdClose( sudp ); } // end for(;;) NIMU_log("!!! Close sendclient()\n"); }

  • Can you download the below SDK?

    http://software-dl.ti.com/processor-sdk-vision/esd/TDAx/vision-sdk/latest/index_FDS.html

    Please follow the user guide in NSP to build the example for Ethernet.

    ~[SDK_Installation_path]/ti_components/networking/nsp_gmacsw_4_16_01_01/docs/nsp_gmacsw_4_16_01_01_user_guide.html

    Regards,
    Stanley