TI专家好。

我有个项目需要同时用到AM437x的CPSW网口(千兆)和两个PRU-ICSS网口(100M,当做普通网口使用),目前我已经根据NIMU_BasicExample和NIMU_ICSS_BasicExample两个例程合并修改,现已实现三个网口的配置和IP地址分配,每个网口单独均可ping通,但是现在有一个比较奇怪的现象,还请各位专家多多指教。

PRU-ICSS1网口配置代码如下

/*ICSS-EMAC Port 1 initializations*/

emacHandle1 = (ICSS_EmacHandle)malloc(sizeof(ICSS_EmacConfig));

switchEmacCfg1 = (ICSS_EmacInitConfig*)malloc(sizeof(ICSS_EmacInitConfig));

switchEmacCfg1->phyAddr[0]=0;

switchEmacCfg1->phyAddr[1]=0;

switchEmacCfg1->portMask = ICSS_EMAC_MODE_MAC1;

switchEmacCfg1->ethPrioQueue = ICSS_EMAC_QUEUE1;

switchEmacCfg1->halfDuplexEnable = 1;

switchEmacCfg1->enableIntrPacing = ICSS_EMAC_ENABLE_PACING;

switchEmacCfg1->ICSS_EmacIntrPacingMode = ICSS_EMAC_INTR_PACING_MODE1;

switchEmacCfg1->pacingThreshold = 100;

switchEmacCfg1->learningEn = 0;

switchEmacCfg1->rxIntNum = 52; //PRU_ICSS1_EVTOUT0

switchEmacCfg1->linkIntNum=58; //PRU_ICSS1_EVTOUT6

SOCCtrlGetPortMacAddr(1,MacAddr1); //获取MAC地址

switchEmacCfg1->macId = MacAddr1;

ICSSEmacDRVInit(emacHandle1, 1);

((ICSS_EmacObject*)emacHandle1->object)->pruIcssHandle = pruIcssHandle;

((ICSS_EmacObject*)emacHandle1->object)->emacInitcfg = switchEmacCfg1;

//中断及EMAC模式配置

PRUICSS_IntcInitData pruss_intc_initdata = PRUSS_INTC_INITDATA;

ICSS_EmacInit(emacHandle1,&pruss_intc_initdata,ICSS_EMAC_MODE_MAC1|ICSS_EMAC_MODE_DUALMAC);

//创建Rx接收事件

Task_Params taskParams;

Task_Params_init(&taskParams);

taskParams.priority = 10;

taskParams.instance->name = (char*)"port1_rxTaskFnc";

taskParams.stackSize = 0x1000;

taskParams.arg0 = (UArg)emacHandle1;

((ICSS_EmacObject*)emacHandle1->object)->rxTaskHandle = Task_create(ICSS_EMacOsRxTaskFnc, &taskParams, NULL);

PRU-ICSS2网口配置代码如下:

/*ICSS-EMAC PORT2 Initializations*/

emacHandle2 = (ICSS_EmacHandle)malloc(sizeof(ICSS_EmacConfig));

switchEmacCfg2 = (ICSS_EmacInitConfig*)malloc(sizeof(ICSS_EmacInitConfig));

switchEmacCfg2->phyAddr[0]= 1;

switchEmacCfg2->phyAddr[1]= 0;

switchEmacCfg2->portMask = ICSS_EMAC_MODE_MAC2;

switchEmacCfg2->ethPrioQueue = ICSS_EMAC_QUEUE3;

switchEmacCfg2->halfDuplexEnable = 1;

switchEmacCfg2->enableIntrPacing = ICSS_EMAC_DISABLE_PACING;

switchEmacCfg2->pacingThreshold = 100;

switchEmacCfg2->learningEn = 0;

switchEmacCfg2->rxIntNum = 53; //PRU_ICSS1_EVTOUT1

switchEmacCfg2->linkIntNum=59; //PRU_ICSS1_EVTOUT7

SOCCtrlGetPortMacAddr(2,MacAddr2); //获取MAC地址

switchEmacCfg2->macId = MacAddr2;

ICSSEmacDRVInit(emacHandle2,1);

((ICSS_EmacObject*)emacHandle2->object)->pruIcssHandle = pruIcssHandle;

((ICSS_EmacObject*)emacHandle2->object)->emacInitcfg = switchEmacCfg2;

//中断及EMAC模式配置

PRUICSS_IntcInitData pruss_intc_initdata = PRUSS_INTC_INITDATA;

ICSS_EmacInit(emacHandle2,&pruss_intc_initdata,ICSS_EMAC_MODE_MAC2|ICSS_EMAC_MODE_DUALMAC);

//创建Rx接收事件

Task_Params taskParams;

Task_Params_init(&taskParams);

taskParams.priority = 10;

taskParams.instance->name = (char*)"port2_rxTaskFnc";

taskParams.stackSize = 0x1000;

taskParams.arg0 = (UArg)emacHandle2;

((ICSS_EmacObject*)emacHandle2->object)->rxTaskHandle = Task_create(ICSS_EMacOsRxTaskFnc, &taskParams, NULL);

三个网口与NIMUDeviceTable对应关系如下:

//设置NIMUDeviceTable入口

OSDRV_addNetifEntry((NIMUInitFn)&EmacInit,emacHandle1);   //PRU-ETH0

OSDRV_addNetifEntry((NIMUInitFn)&EmacInit,emacHandle2);  //PRU-ETH1

OSDRV_addNetifEntry((NIMUInitFn)&CpswEmacInit,0);  //CPSW

//TCP

void netOpenHook()

{

// Create our local servers

hEcho = DaemonNew( SOCK_STREAMNC, 0, 502, dtask_tcp_echo,

OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );

}

问题在于:上述配置完成后,虽然可以ping通,但无法进行TCP通讯,dtask_tcp_echo无任何响应。如果将CPSW入口删除则dtask_tcp_echo执行正常,单独运行NIMU_BasicExample例程也没有问题。

还请TI各位专家帮忙解答,问题出在哪里?应如何查找?

ndk 的emac_RTOS|AM437x 多网口(CPSW和PRU-ICSS)NDK TCP通讯问题相关推荐

  1. winpcapp配置c++网口通讯_(经验)西门子PLC的Modbus TCP通讯的一些经验

    Modbus是一种协议公开的工业通讯,被广泛使用.通过串口的是Modbus-RTU协议,通过以太网的是Modbus TCP通讯.现在的PLC都开始支持以太网通讯,因此,Modbus TCP也越来越重要 ...

  2. Android Location specified by ndk.dir (D:\AndroidSDK\ndk-bundle) did not contain a valid NDK

    前言 今天在编译小票打印的demo时 android studio 报了一个异常 Exception Location specified by ndk.dir (D:\AndroidSDK\ndk- ...

  3. TI AM5728 SDK升级之 linux设备树解析,以网口cpsw为例

    如果一个结点描述的设备有地址,则应该给出@unit-address.多个相同类型设备结点的name可以一样,只要unit-address不同即可,如本例中含有cpu@0.cpu@1以及serial@1 ...

  4. Android NDK开发之旅29 云服务器Ubuntu下搭建NDK环境,并编译FFmpeg

    ###前言 因为在Linux环境下编译FFmpeg生成库和头文件下比较方便,所以接下来主要操作在Linux环境下进行.但是对于Android NDK 开发新手来说,自己电脑配置Ubuntu Linux ...

  5. 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )

    文章目录 I . 创建 NDK 项目 II . NDK 项目 相关配置 III . NDK 中获取 Android 版本号 IV . 使用 __system_property_get 可获取的参数 I ...

  6. python界面编程和网口通信_Python—网络通信编程之tcp通信编程

    服务端代码 import socket # 1.创建流式套接字实例 # server = socket.socket() server = socket.socket(socket.AF_INET, ...

  7. Halcon TCP通讯例程(网口通讯)详解

    *最近在TCP连接中遇到Halcon做服务器 无法运行的问题.卡在open_socket_accept这个算子.最终发现少了一个address. 算子参数解释为 The generic paramet ...

  8. Android:JNI 与 NDK到底是什么

    前言 在Android开发中,使用 NDK开发的需求正逐渐增大 但很多人却搞不懂 JNI 与 NDK 到底是怎么回事 今天,我将先介绍JNI 与 NDK & 之间的区别,手把手进行 NDK的使 ...

  9. NDK JNI 安装与配置(一)(UBUNTU16.04 )

    1.下载Android NDK自解压包, 官方地址: https://developer.android.com/ndk/downloads/index.html#download 下载: $ wge ...

最新文章

  1. Spring注解@Component和@resource的使用
  2. CF476D Dreamoon and Sets (数学/思维)
  3. 算法---------二叉树的后序遍历
  4. VS2005设计智能客户端(二)使用clickonce部署应用程序
  5. web python php golang_python go 语言完成最简单的web应用
  6. [Leetcode] Populating next right pointer in each node ii 填充每个节点的右指针
  7. 手机丢了,支付宝和微信里面的钱该怎么办?
  8. [转载]HTTP的幂等性
  9. css权威指南 读书笔记
  10. VS2019+DCMTK3.6.6环境配置
  11. 微信小程序引入 vant UI组件库
  12. MySqL数据库监听命令_Mysql数据库监听binlog
  13. 【教程】如何批量将记事本文件或word文本转换成简体/繁体中文,下面教你方法
  14. MySQL数据库、表常用命令
  15. 增程式电动汽车建模与仿真(一)
  16. nodejs 安装模块失败 解决方法
  17. IDEA 不同系统中 新建 快捷键 Ctrl+Insert
  18. 联通5G卡插到手机显示3G
  19. 亚马逊云科技北京区域第二个EC2可用区帮助客户构建高可用架构
  20. 论文阅读笔记:《一种改进的图卷积网络半监督节点分类》

热门文章

  1. EDGE速度如何,跟GPRS的比较
  2. android VideoView的使用例程
  3. 千斤顶装配图怎么画_工程制图习题集千斤顶装配图
  4. 微信企业号开发—通讯录
  5. 分钟换算成时分秒格式
  6. 小学校园IP网络广播-基于校园局域网的小学IP数字广播系统设计
  7. MFC多语言实现的两种方法
  8. python中继承是什么意思,解释一下python中的继承
  9. 英语常考知识点汇总笔记
  10. 两个一维数组相加求和