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