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.

[参考译文] RTOS/AM3352:Nimu ioctl 问题

Guru**** 2538950 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/678635/rtos-am3352-nimu-ioctl-issue

器件型号:AM3352
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

你(们)好、Paula。

https://e2e.ti.com/support/arm/sitara_arm/f/791/p/2493623/reply?ReplyToContentTypeID=1

根据下面的帖子,我已经修改了有关此 API 的代码:=>NIMUIoctl

e2e.ti.com/.../reply

但是、API 仍为我提供-22。

请帮助解决。

谢谢。

BR RIO

CCCCCCCC μ A
StarterWare 引导加载程序
BOARDInit 状态[0x0]
SoC:[AM335X]
磁芯:[A8]
检测到电路板:[GPEVM]
基板版本:[未知]
子卡版本:[未知]
将应用程序映像从 MMC/SD 卡复制到 RAM
跳转到 StarterWare 应用程序...

SetPhyMode:000021e1自动:1、FD10:64、HD10:32、FD100:256、HD100:128、 FD1000:8192 LPBK:0

SYS/BIOS EtherNet/IP (CPSW)示例应用、EVM IP 地址:192.168.1.4
SetPhyMode:000021e1自动:1、FD10:64、HD10:32、FD100:256、HD100:128、 FD1000:8192 LPBK:0

Rio Debug => MAC 地址错误代码=-22
ENETPHY_FindingState:PhyNum:0
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_DisablePhy (0)
使能 PHY 协商外部连接
Nway 广播:FullDuplex-1000 FullDuplex-100 HalfDuplex-100 FullDuplex-10 HalfDuplex-10
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!
ENETPHY_FindingState:Timed out Finding for a PHY!

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

    我提供了更多详细信息、我将修改此项目:
    NIMU_FtpExample_evmAM335x_armExampleproject


    我的代码位于此处:
    RET_CODE = NIMUIoctl (NIMU_GET_NUM_NIMU_OBJ、NULL、&num_device、sizeof (num_device));
    如果(RET_CODE <0)
    UART_printf ("\n Rio Debug => NIMU_GET_NUM_NIMU_obj 错误代码=%d \n"、RET_code);
    其他
    UART_printf ("\n Rio Debug => MAC NIMU_GET_NUM_NIMU_OBJ num_device =%d\n"、num_device);

    /*为设备表分配内存*/
    DEV_TABLE = mmAlloc (num_device * sizeof (uint16));


    /*获取所有设备索引的列表。 *
    RET_CODE = NIMUIoctl (NIMU_GET_ALL_INDEX、NULL、DEV_TABLE、num_device*sizeof (uint16));
    如果(RET_CODE <0)
    UART_printf ("\n Rio Debug => NIMU_GET_All_INDEX 错误代码=%d \n"、RET_CODE);

    if_req.index = DEV_TABLE [0];

    RET_CODE = NIMUIoctl (NIMU_GET_DEVICE_MAC、&if_req、&mac_address、sizeof (mac_address));

    #endif
    如果(RET_CODE <0)
    UART_printf ("\n Rio Debug => MAC 地址错误代码=%d \n"、ret_code);
    其他
    UART_printf ("\n Rio Debug => MAC 地址:0x%x-0x%x-0x%x-0x%x-0x%x-0x%x-0x%x%x\n\n"、
    Mac_address[0]、Mac_address[1]、Mac_address[2]、
    mac_address[3]、mac_address[4]、mac_address[5]);
    #endif





    ----------------------------------------------------
    无论我说什么、它都会返回-22。

    SetPhyMode:000021e1自动:1、FD10:64、HD10:32、FD100:256、HD100:128、 FD1000:8192 LPBK:0

    SYS/BIOS EtherNet/IP (CPSW)示例应用、EVM IP 地址:192.168.1.4
    SetPhyMode:000021e1自动:1、FD10:64、HD10:32、FD100:256、HD100:128、 FD1000:8192 LPBK:0

    Rio Debug => NIMU_GET_NUM_NIMU_obj 错误代码=-22

    Rio Debug => NIMU_GET_All_INDEX 错误代码=-22


    ----------------------------------------------------



    这是我的 cfg、我永远不会更改它。

    /*********
    * *
    *版权所有(c) 2015 Texas Instruments Incorporated - http://www.ti.com/ *
    * 保留所有权利 *
    * *
    秘书长的报告 /

    /*********
    *文件名:nimu_evm.cfg
    *此文件包含在以太网交换机示例中
    *
    秘书长的报告 /

    /*========================= 常规配置=================== *

    VAR enableStaticIP = 1;

    VAR 默认值= xdc.useModule('xdc.runtime.Defaults');
    VAR 诊断= xdc.useModule('xdc.runtime.Diags');
    VAR 错误= xdc.useModule('xdc.runtime.Error');
    VAR Main = xdc.useModule('xdc.runtime.Main');
    VAR 内存= xdc.useModule('xdc.runtime.Memory')
    VAR SysMin = xdc.useModule('xdc.runtime.SysMin');
    VAR 系统= xdc.useModule('xdc.runtime.System');
    var text = xdc.useModule('xdc.runtime.Text');
    VAR 时钟= xdc.useModule('ti.sysbios.knl.Clock');
    VAR 任务= xdc.useModule('ti.sysbios.knl.Task');
    VAR 信标= xdc.useModule('ti.sysbios.knl.Semaphore');
    VAR Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
    VAR 计时器= xdc.useModule('ti.sysbios.hal.Timer');
    VAR HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    VAR SemihostSupport = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');

    /*
    * Program.argSize 设置.args 段的大小。
    *示例不使用命令行参数,因此 argSize 设置为0。
    *
    program.argSize = 0x0;

    /*系统堆栈大小(由 ISR 和 Swi 使用)*/
    program.stack = 0x10000;

    /*
    *取消注释此行以全局禁用断言。
    *所有模块继承'库'模块的默认值。 您
    *可以使用 Module.common$按模块覆盖这些默认值。
    *禁用断言将节省代码空间并提高运行时性能。
    Defaults.common$.diags_ASSERT = Diags.always_off;
    *
    Defaults.common$.diags_ASSERT = Diags.always_off;

    /*
    *取消注释此行以防止模块名称加载到目标上。
    *模块名称字符串放置在.const 段中。 设置此值
    *将参数设置为 false 将节省.const 段中的空间。 误差和
    *断言消息将包含"未知模块"前缀
    实际模块名称的*。
    Defaults.common$.namedModule = false;
    *
    Defaults.common$.namedModule = false;

    /*
    *最小化系统中的 EXIT 处理程序数组。 系统模块包括
    *向 System_atexit()注册的函数数数组
    *由 System_exit()调用。
    *
    System.maxAtexitHandlers = 4;

    /*
    *取消注释此行以禁用错误打印功能。
    *禁用此功能时,我们会丢失错误信息,因为错误是这样
    *未打印。 如果禁用 raiseHook、则会节省一些代码空间
    *由于 Error_print()函数,您的应用程序未使用 System_printf()
    *调用 System_printf()。
    error.raiseHook =空;
    *
    error.raiseHook =空;
    /*
    *取消注释此行以防止 Error、Assert 和 Log 字符串成为字符串
    *加载到目标上。 这些字符串放置在.const 段中。
    *将此参数设置为 false 将节省.const 段中的空间。
    *错误、断言和日志消息将打印原始 ID 和 args 而不是
    *格式化的邮件。
    text.isLoaded = false;
    *
    text.isLoaded = false;
    /*
    *取消注释此行以禁用 SysMin 的字符输出
    *程序退出时。 SysMin 向循环缓冲区写入字符。
    *可以使用 ROV 中的 SysMin Output 视图查看该缓冲器。
    *
    SysMin。flushAtExit = false;

    System_printf()的/*循环缓冲区大小*/
    SysMin。bufSize = 0x200;

    System.SupportProxy = SysMin;

    clock.tickPeriod = 500;
    VAR Global = xdc.useModule('ti.ndk.config.Global');
    VAR IP = xdc.useModule('ti.ndk.config.Ip');

    Global.netSchedulerPri = Global. nc_priority_high;
    Global.debugAbortLevel = Global. DBG_error;
    Global.debugPrintLevel = Global. DBG_NONE;

    var ti_SysBIOS_hal_Timer = xdc.useModule('ti.sysbios.hal.Timer');

    /* Global. stackThreadUser ="&NDKACD_stackThread";*/

    VAR TCP = xdc.useModule('ti.ndk.config.Tcp');
    VAR UDP = xdc.useModule('ti.ndk.config.Udp');

    if (enableStaticIP)

    /*静态 IP 配置的设置*/
    ip.ResolveIP = false;
    ip.CallByIP = false;
    Ip.autoIp = false;
    ip.address ="192.168.1.4";
    ip.mask ="255.255.255.0;
    ip.gatewayIpAddr ="192.168.1.1";

    其他

    ip.dhcpClientMode = ip.CIS_FLG_IFIDXVALID;


    global.ndkTickPeriod = 200;
    global.kernTaskPriLevel = 11;
    Global.serviceReportHook =空;
    global.ipv6 = false;
    global.pktNumFrameBufs=384;

    tcp.transmitBufSize = 16384;
    tcp.receiveBufSize = 65536;
    tcp.receiveBufLimit=65536;


    Program.sectMap[".c_int00"]= new Program.SectionSpec ();
    Program.sectMap[".c_int00"].loadAddress = 0x8000000;

    /*========================= BIOS 配置=================== *

    VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
    BIOS.libType = BIOS.LibType_Custom;
    bios.customCCOpts = bios.customCCopts.replace("-g "、"");
    BIOS.sertsEnabled = false;
    BIOS.logsEnabled = false;
    BIOS.swiEnabled = true;

    /*
    * BIOS 模块将为系统创建默认堆。
    *指定此默认堆的大小。
    *
    BIOS.heapSize = 0x155000;

    Task.defaultStackSize = 4096;
    task.idleTaskStackSize = 4096;

    /*========================= 驱动程序配置=================== *
    VAR socType ="AM335x";
    /*使用 CSL 封装*/
    VAR_l = XDC.loadPackage ('ti.CSL');
    Csl.Settings.deviceType = socType;

    /*加载 OSAL 封装*/
    var osType ="tirtos"
    VAR OSAL = xdc.useModule('ti.osal.Settings');
    OSAL.osType = osType;

    /*加载电路板封装*/
    VAR 板= XDC.loadPackage ('ti.board');
    board.Settings.boardName ="evmAM335x";
    /*加载 UART 软件包*/
    VAR UartPackage = XDC.loadPackage ('ti.drv.UART');


    /*加载 UART 软件包*/
    VAR I2cPackage = XDC.loadPackage ('ti.drv.i2c');

    /*加载 UART 软件包*/
    VAR GpioPackage = XDC.loadPackage ('ti.drv.GPIO');


    /*加载 EMAC 软件包*/
    VAR EMAC = XDC.loadPackage ('ti.drv.emac');
    emac.Settings.socType = socType;

    /*加载 NIMU 封装*/
    VAR Nimu= XDC.loadPackage ('ti.transport.NDK.Nimu');
    Nimu.Settings.socType = socType;


    /*========================= 高速缓存和 MMU 配置=================== *

    VAR Cache = xdc.useModule('ti.sysbios.family.arm.a8.Cache');
    cache.enableCache = true;

    VAR MMU = xdc.useModule('ti.sysbios.family.arm.a8.Mmu');
    MM4.enableMMU = true;

    /*强制外设部分为不可高速缓存的严格排序存储器*/
    VAR 外设 Attrs ={
    键入:MMU.FirstLevelDesc_section,//段描述符
    TEX:0、
    可缓冲:false, //可缓冲
    可高速缓冲:false, //可缓存
    可共享:false, //可共享
    NoExecute:true, //不可执行
    };

    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x40300000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x44e00000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x48000000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x48100000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x48200000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x48300000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x49000000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x4a100000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);


    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x4a300000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    peripheralAttrs);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    里约、大家好、我有几个问题、看看我是否可以在我的身边重现。 您使用的是哪种电路板? TI 电路板还是定制电路板? 另外、您能否告诉我、您从哪里获得了 Nimu FTP 示例?  最后、问题、您提到您的应用是 EtherNet/IP、这是您使用的是在 CPSW 上运行的自己的协议栈吗? 或者您是否正在使用 PRU-ICSS EtherNet/IP? 我认为这是第一个选择、但我想确认。

    谢谢、

    Paula

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rio、如果您解决了问题、我们可以关闭此主题、或者您需要任何其他帮助、请告知我们。

    谢谢、
    Paula