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:DRA726的 Nimu 示例

Guru**** 2540720 points
Other Parts Discussed in Thread: TDA2E

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/896884/dra726-nimu-example-for-dra726

器件型号:DRA726
主题中讨论的其他器件:TDA2E

您好!
我尝试在 J6ECO/TDA2E EVM 板上启动以太网通信。 但它没有启动、UART 会显示接下来的消息:

ENETPHY_FindingState:PhyNum:3
ENETPHY_DisablePhy (3)
启用 PHY 以协商外部连接
Nway 广播:FullDuplex-1000 FullDuple-100 HalfDuplex-100 HalfDuplex-10 HalfDuplex-10
Nerted 连接:FullDuplex 1000 Mbs 

这意味着什么? 发生或不发生什么? 这些消息是在哪里生成的、如何进入 UART? 我尝试在 ti 文件夹中找到此消息、但无法找到。

CPSW 和 NIMU 是否正确配置 CPSW?在哪里可以看到源函数 CpswEmacInit()?

使用的软件:
pdk_dra7xx_1_0_10
NDK_2_26_00_08
BIOS_6_76_02_02

/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== */
* 包含文件 /*
==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include "ti/ndk/inc/os/osif.h"

/* EMAC 驱动程序头文件*/
#include 
#include 

/* UART 驱动程序头文件*/
#include 
#include 

/* I2C 驱动程序头文件*/
#include 
#include 

/*板级头文件*/
#include 



// UDP 数据流任务
static void sendclient();
extern int dtask_udp_hello();
//启用以下宏以在 IO 控制台上打印*/
//*#define IO_console */
#ifndef IO_console
#define NIMU_log UART_printf
#else
#define NIMU_log printf
#endif

/* MAC 端口的数量及其 PHY 地址*/
#if defined (evmDRA72x)
#define EMAC_CPSW_PORT0_PHY_ADDR_EVM 3 //为3
#define EMAC_CPSW_Port1_PHY_ADDR_EVM 0 /*未组装*/
#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 /*未组装*/
#define DRA7XX_EVM_NUM_PORTS 1
#endif

/* NDK 最大表条目*/
#define MAX_TABLE 条目 3

NIMU_DEVICE_TABLE_Entry NIMUDeviceTable[MAX_TABLE_ENCELESS];

extern char * LocalIPAddr;

#ifdef NIMU_DUAL_MAC_MODE
//接口2的静态 IP 地址设置*/
const char * ip2Addr ="192.168.2.4";
const char * ip2Mask ="8.2";
convendipt ="enchar * Ent ="enchar * Ent 1;enchar Ent =


"Ent ="Ent 1 Entinchar *

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

emac_open_config_info_T open_cfg;


int main()
{
EMAC_HwAttrs_V4 cfg;
int 索引= 0;

/*设置 pinmux、IRQ 交叉开关*/
BOARD_INIT (BOARD_INIT_PINMUX_CONFIG |
BOARD_INIT_UART_STDIO | BOARD_INIT_ETH_PHY);

/*更新 PHY 地址*/
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 =空;
BIOS_start();

返回-1;
}

void netOpenHook (void)
{
NIMU_log ("netOpenHook:SYS/BIOS EtherNet/IP (CPSW)示例应用、EVM IP 地址:%s\n"LocalIPAddr);
Nimu_log ("TaskCreate\n");
Task_sleep (100);
#ifdef NIMU_DUAL_MAC_MODE
NIMU_log ("netOpenHook:SYS/BIOS EtherNet/IP (CPSW)示例应用、EVM IP 地址2:%s\n"、ip2Addr);
#endif

//创建发送客户端任务
TaskCreate( sendclient、"SendClient"、OS_TASKPRINORM、0x1400、0、 0、0);

Nimu_log (!!! 任务创建完成! \n");
}

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

//从 ti_nkd_config_Global_stackThread ()调用以运行用户设置代码*/
void stackInitHook (handle hCfg)
{
NIMU_log ("\n\nstackInitHook \n");
#ifdef NIMU_DUAL_MAC_MODE
CI_IPNet IPNet;
CI_route;

/*为接口2添加 IP 地址*/
IPNet.ipaddr = inet_addr (ip2Addr);
IPNet.IPMask = inet_addr (ip2Mask);
CfgAddEntry (hCfg、CFGTAG _IPNet、2、0、sizeof (CI_IPNet)、 (uint8 *)&IPNet、0);

/*为接口2添加网关*/
bzero (路由、sizeof (路由));
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 发送客户端
//
int sizeBaseFrame = 1024;//размер передаваемого фрейма
int lunderse_send = 1;
int send_unesssuccessful = 0;

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

sendclient (
{void client)
插座 sudp = invalid_socket;
struct sockaddr_in sin1;
内部 i、tmp;
内部 statusPackage;
int i;
静态 int sizeFrame;
静态 int 基址= 0;
内部 sizeData;
静态 int flagTx = 0;
//提高传输数据的优先级并等待链路出现。
TaskSetPri (TaskSelf ()、1);
int frameData[1000];

NIMU_LOG (!!! 任务开始工作- sendclient ()\n");

Task_sleep (20000);
for (;;){
//为此任务分配文件环境
fdOpenSession( TaskSele());
Task_sleep (1000);
//创建主 UDP 侦听套接字
sudp = socket (AF_iNet、SOCK_DGRAM、IPPROTO_UDP);

if (sudp =inval_socket)
{
NIMU_log ("\n 无效的套接字\n");
返回;
}
//Nimu_log ("socket_OK\n");
//设置端口= PORTVAUE、IP 地址= REMOLE_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 (PORTVAUE);//NDK_htons (PORTVAUE);
对于(i = 0;i < 8;i++){
sin1.sin_zero[i]= 255;
}

tmp = sizeof (sin1);
//连接套接字
i = connect( sudp,(struct sockaddr *)&sin1, tmp );
如果(I < 0)
{
fdCloseSession( TaskSele());}


sizeData = sizeof (frameData);
/*在发送数据包之前,这将从中获取 ARP
*路。 *
while (1){
// statusPackage = SEND (sudp、(char *)&buffer、TESTSIZE、0);
// statusPackage = sendto (sudp、(char *)&buffer、TESTSIZE、0、(struct sockaddr *)&sin1、 sizeof (sin1));
对于(;;){
if (sizeData - Base < sizeFrame)
{
sizeFrame = sizeData - Base;
flagTx = 1;

} 否则{
sizeFrame = sizeBaseFrame;
}
//statusPackage = sendto (sudp、(void *)&frameData[Base]、sizeFrame、0、(struct sockadr *)&sin1、 sizeof (sin1));
statusPackage = SEND (sudp、(void *)&frameData[Base]、sizeFrame、0);
基址=基址+ sizeFrame;

if (statusPackage < 0){
send_unsessful ++;
标志 Tx = 0;//重置 Tx
基址= 0;
中断;
}

if (flagTx = 1){
标志 Tx = 0;//重置 Tx
基址= 0;
//break;
}
}//结束 for (;);)

if (statusPackage < 0)
{
中断;
}
}

fdCloseSession( TaskSele());
/*关闭插座。 *
fdClose (sudp);
} //结束(;);)

NIMU_LOG (!!! 关闭 sendclient()\n");}


谢谢

乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    /*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== */ * 包含文件 /* ==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== */ #include #include #include #include #include #include #include #include #include #include #include "ti/ndk/inc/os/osif.h" /* EMAC 驱动程序头文件*/ #include #include /* UART 驱动程序头文件*/ #include #include /* I2C 驱动程序头文件*/ #include #include /*板级头文件*/ #include // UDP 数据流任务 static void sendclient(); extern int dtask_udp_hello(); //启用以下宏以在 IO 控制台上打印*/ //*#define IO_console */ #ifndef IO_console #define NIMU_log UART_printf #else #define NIMU_log printf #endif /* MAC 端口的数量及其 PHY 地址*/ #if defined (evmDRA72x) #define EMAC_CPSW_PORT0_PHY_ADDR_EVM 3 //为3 #define EMAC_CPSW_Port1_PHY_ADDR_EVM 0 /*未组装*/ #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 /*未组装*/ #define DRA7XX_EVM_NUM_PORTS 1 #endif /* NDK 最大表条目*/ #define MAX_TABLE 条目 3 NIMU_DEVICE_TABLE_Entry NIMUDeviceTable[MAX_TABLE_ENCELESS]; extern char * LocalIPAddr; #ifdef NIMU_DUAL_MAC_MODE //接口2的静态 IP 地址设置*/ const char * ip2Addr ="192.168.2.4"; const char * ip2Mask ="8.2"; convendipt ="enchar * Ent ="enchar * Ent 1;enchar Ent = "Ent ="Ent 1 Entinchar * /** *\name main *\brief Main Function *\param none *\return none * // emac_open_config_info_T open_cfg; int main() { EMAC_HwAttrs_V4 cfg; int 索引= 0; /*设置 pinmux、IRQ 交叉开关*/ BOARD_INIT (BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_UART_STDIO | BOARD_INIT_ETH_PHY); /*更新 PHY 地址*/ 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 =空; BIOS_start(); 返回-1; } void netOpenHook (void) { NIMU_log ("netOpenHook:SYS/BIOS EtherNet/IP (CPSW)示例应用、EVM IP 地址:%s\n"LocalIPAddr); Nimu_log ("TaskCreate\n"); Task_sleep (100); #ifdef NIMU_DUAL_MAC_MODE NIMU_log ("netOpenHook:SYS/BIOS EtherNet/IP (CPSW)示例应用、EVM IP 地址2:%s\n"、ip2Addr); #endif //创建发送客户端任务 TaskCreate( sendclient、"SendClient"、OS_TASKPRINORM、0x1400、0、 0、0); Nimu_log (!!! 任务创建完成! \n"); } void netCloseHook (void) { Nimu_log ("netCloseHook\n"); } //从 ti_nkd_config_Global_stackThread ()调用以运行用户设置代码*/ void stackInitHook (handle hCfg) { NIMU_log ("\n\nstackInitHook \n"); #ifdef NIMU_DUAL_MAC_MODE CI_IPNet IPNet; CI_route; /*为接口2添加 IP 地址*/ IPNet.ipaddr = inet_addr (ip2Addr); IPNet.IPMask = inet_addr (ip2Mask); CfgAddEntry (hCfg、CFGTAG _IPNet、2、0、sizeof (CI_IPNet)、 (uint8 *)&IPNet、0); /*为接口2添加网关*/ bzero (路由、sizeof (路由)); 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 发送客户端 // int sizeBaseFrame = 1024;//размер передаваемого фрейма int lunderse_send = 1; int send_unesssuccessful = 0; #define REMOTE_IPADDR_string "192.168.1.60"//адрес компьютера #define PORTVAUE 4231 sendclient ( {void client) 插座 sudp = invalid_socket; struct sockaddr_in sin1; 内部 i、tmp; 内部 statusPackage; int i; 静态 int sizeFrame; 静态 int 基址= 0; 内部 sizeData; 静态 int flagTx = 0; //提高传输数据的优先级并等待链路出现。 TaskSetPri (TaskSelf ()、1); int frameData[1000]; NIMU_LOG (!!! 任务开始工作- sendclient ()\n"); Task_sleep (20000); for (;;){ //为此任务分配文件环境 fdOpenSession( TaskSele()); Task_sleep (1000); //创建主 UDP 侦听套接字 sudp = socket (AF_iNet、SOCK_DGRAM、IPPROTO_UDP); if (sudp =inval_socket) { NIMU_log ("\n 无效的套接字\n"); 返回; } //Nimu_log ("socket_OK\n"); //设置端口= PORTVAUE、IP 地址= REMOLE_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 (PORTVAUE);//NDK_htons (PORTVAUE); 对于(i = 0;i < 8;i++){ sin1.sin_zero[i]= 255; } tmp = sizeof (sin1); //连接套接字 i = connect( sudp,(struct sockaddr *)&sin1, tmp ); 如果(I < 0) { fdCloseSession( TaskSele());} sizeData = sizeof (frameData); /*在发送数据包之前,这将从中获取 ARP *路。 * while (1){ // statusPackage = SEND (sudp、(char *)&buffer、TESTSIZE、0); // statusPackage = sendto (sudp、(char *)&buffer、TESTSIZE、0、(struct sockaddr *)&sin1、 sizeof (sin1)); 对于(;;){ if (sizeData - Base < sizeFrame) { sizeFrame = sizeData - Base; flagTx = 1; } 否则{ sizeFrame = sizeBaseFrame; } //statusPackage = sendto (sudp、(void *)&frameData[Base]、sizeFrame、0、(struct sockadr *)&sin1、 sizeof (sin1)); statusPackage = SEND (sudp、(void *)&frameData[Base]、sizeFrame、0); 基址=基址+ sizeFrame; if (statusPackage < 0){ send_unsessful ++; 标志 Tx = 0;//重置 Tx 基址= 0; 中断; } if (flagTx = 1){ 标志 Tx = 0;//重置 Tx 基址= 0; //break; } }//结束 for (;);) if (statusPackage < 0) { 中断; } } fdCloseSession( TaskSele()); /*关闭插座。 * fdClose (sudp); } //结束(;);) NIMU_LOG (!!! 关闭 sendclient()\n");}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以下载以下 SDK 吗?

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

    请按照 NSP 中的用户指南构建以太网示例。

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

    此致、
    斯坦利