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.

[参考译文] TMDS64EVM:enet_icssg_tcpserver 示例似乎与 MCU+ SDK v08.06.00.45损坏

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1244367/tmds64evm-enet_icssg_tcpserver-example-seems-to-be-broken-with-mcu-sdk-v08-06-00-45

器件型号:TMDS64EVM
主题中讨论的其他器件:DP83869SysConfig

我一直在尝试在 MCU+ SDK 中隔离运行 enet_icssg_tcpserver 示例的问题、我想它在 v08.06.00.45版本中已损坏。

这是输出

==========================
ICSSG LWIP TCP ECHO SERVER
==========================
Enabling clocks!
Enabling clocks!
Mdio_open: MDIO Manual_Mode enabled
EnetPhy_bindDriver: PHY 15: OUI:080028 Model:0f Ver:01 <-> 'dp83869' : OK
PHY 3 is alive
PHY 15 is alive
Mdio_open: MDIO Manual_Mode enabled
EnetPhy_bindDriver: PHY 3: OUI:080028 Model:0f Ver:01 <-> 'dp83869' : OK
PHY 3 is alive
PHY 15 is alive
Starting lwIP, local interface IP is dhcp-enabled
[LWIPIF_LWIP] NETIF INIT SUCCESS
Host MAC address-0 : 34:08:e1:80:b7:b3
[LWIPIF_LWIP] Enet has been started successfully
[0]Enet IF UP Event. Local interface IP:0.0.0.0
[LWIPIF_LWIP] NETIF INIT SUCCESS
EnetQueue_enq: NULL enq to the queue
Assertion @ Line: 111 in /nightlybuilds/mcupsdk_internal/jenkins/mcu_plus_sdk_am64x_08_06_00_45/source/networking/enet/core/src/core/enet_queue.c: node != NULL
                                                                               Icssg_handleLinkUp: icssg1-1: Port 1: Link up: 1-Gbps Full-Duplex
Icssg_handleLinkUp: icssg1-2: Port 2: Link up: 1-Gbps Full-Duplex

它随后不会处理 if up 事件、因此不会分配 IP 地址、因此该示例不会按设计运行。 这是一个已知问题吗? 有解决办法吗?

我目前已恢复到08.06.00.43 SDK (似乎可以正常工作)、但我想使用最新版本。

谢谢。

乔恩

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

    您好、Jon。

    我将尝试在结束时重现此问题。

    谢谢。此致、

    里米卡

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

    您好!

    是否有更新?

    谢谢。

    乔恩

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

    您好、Jon。

    这似乎不是驱动程序问题、而是配置问题。

    用户需要将数据包池配置设置为所需设置、即根据 DMA 配置中分配的数据包、将所有 Rx 数据包相加的值。

    您需要启用该选项 "仅启用数据包信息分配" 配置数据包池配置之前。

    默认配置应如下所示:  

    谢谢。此致、

    里米卡

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

    您好、Jon。

    这似乎不是驱动程序问题、而是配置问题。

    用户需要将数据包池配置设置为所需设置、即根据 DMA 配置中分配的数据包、将所有 Rx 数据包相加的值。

    您需要启用该选项 "仅启用数据包信息分配" 配置数据包池配置之前。

    默认配置应如下所示:  

    谢谢。此致、

    里米卡

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

    尊敬的 Rimika:

    谢谢你。 我已检查 SysConfig、可以确认、尽管 CONFIG_ENET_ICSS0的设置如上所示、但 CONFIG_ENET_ICSS1的设置不正确。 我已按照建议勾选"仅启用数据包信息分配"、然后将"大型池数据包计数"从48更改为32。 我可以确认 TCP 服务器现在可以与修改后的 MCU+ SDK 08.06.00.45配合使用。

    要修复的文件位于 C:\ti\mcu_plus_sdk_am64x_08_06_00_45\examples\networking\lwip\enet_icssg_tcpserver\am64x-evm\r5fss0-0_freertos\example.syscfg。 我已在下面添加了更新内容。

    您能否针对此问题提出内部问题报告并确认它将在 SDK 的下一版本中修复?

    非常感谢、

    乔恩

    /**
     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
     * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
     * @cliArgs --device "AM64x_beta" --package "ALV" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM64x@08.06.00"
     * @versions {"tool":"1.14.0+2667"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const eeprom     = scripting.addModule("/board/eeprom/eeprom", {}, false);
    const eeprom1    = eeprom.addInstance();
    const gpio       = scripting.addModule("/drivers/gpio/gpio", {}, false);
    const gpio1      = gpio.addInstance();
    const i2c        = scripting.addModule("/drivers/i2c/i2c", {}, false);
    const i2c1       = i2c.addInstance();
    const i2c2       = i2c.addInstance();
    const pruicss    = scripting.addModule("/drivers/pruicss/pruicss", {}, false);
    const pruicss1   = pruicss.addInstance();
    const debug_log  = scripting.addModule("/kernel/dpl/debug_log");
    const mpu_armv7  = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false);
    const mpu_armv71 = mpu_armv7.addInstance();
    const mpu_armv72 = mpu_armv7.addInstance();
    const mpu_armv73 = mpu_armv7.addInstance();
    const mpu_armv74 = mpu_armv7.addInstance();
    const mpu_armv75 = mpu_armv7.addInstance();
    const mpu_armv76 = mpu_armv7.addInstance();
    const mpu_armv77 = mpu_armv7.addInstance();
    const enet_icss  = scripting.addModule("/networking/enet_icss/enet_icss", {}, false);
    const enet_icss1 = enet_icss.addInstance();
    const enet_icss2 = enet_icss.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    eeprom1.$name = "CONFIG_EEPROM0";
    
    gpio1.$name                    = "CONFIG_GPIO0";
    gpio1.pinDir                   = "OUTPUT";
    gpio1.useMcuDomainPeripherals  = true;
    gpio1.MCU_GPIO.$assign         = "MCU_GPIO0";
    gpio1.MCU_GPIO.gpioPin.$assign = "ball.A7";
    
    i2c1.$name               = "CONFIG_I2C0";
    eeprom1.peripheralDriver = i2c1;
    i2c1.I2C.$assign         = "I2C0";
    i2c1.I2C.SCL.$assign     = "ball.A18";
    i2c1.I2C.SDA.$assign     = "ball.B18";
    
    i2c2.$name           = "CONFIG_I2C1";
    i2c2.I2C.$assign     = "I2C1";
    i2c2.I2C.SCL.$assign = "ball.C18";
    i2c2.I2C.SDA.$assign = "ball.B19";
    
    debug_log.enableUartLog = true;
    debug_log.enableCssLog  = false;
    debug_log.uartLog.$name = "CONFIG_UART0";
    
    mpu_armv71.$name             = "CONFIG_MPU_REGION0";
    mpu_armv71.size              = 31;
    mpu_armv71.attributes        = "Device";
    mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv71.allowExecute      = false;
    
    mpu_armv72.$name             = "CONFIG_MPU_REGION1";
    mpu_armv72.size              = 15;
    mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD";
    
    mpu_armv73.$name             = "CONFIG_MPU_REGION2";
    mpu_armv73.baseAddr          = 0x41010000;
    mpu_armv73.size              = 15;
    mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD";
    
    mpu_armv74.$name             = "CONFIG_MPU_REGION3";
    mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv74.baseAddr          = 0x70000000;
    mpu_armv74.size              = 23;
    
    mpu_armv75.$name             = "CONFIG_MPU_REGION4";
    mpu_armv75.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv75.baseAddr          = 0x80000000;
    mpu_armv75.size              = 31;
    
    mpu_armv76.$name             = "CONFIG_MPU_REGION5";
    mpu_armv76.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv76.baseAddr          = 0xA5000000;
    mpu_armv76.size              = 23;
    mpu_armv76.attributes        = "NonCached";
    
    mpu_armv77.$name    = "CONFIG_MPU_REGION6";
    mpu_armv77.size     = 27;
    mpu_armv77.baseAddr = 0x60000000;
    
    enet_icss1.$name                          = "CONFIG_ENET_ICSS0";
    enet_icss1.phyToMacInterfaceMode          = "RGMII";
    enet_icss1.mdioMode                       = "MDIO_MODE_MANUAL";
    enet_icss1.PktInfoOnlyEnable              = true;
    enet_icss1.mode                           = "DUAL MAC";
    enet_icss1.LargePoolPktCount              = 32;
    enet_icss1.txDmaChannel[0].$name          = "ENET_DMA_TX_CH0";
    enet_icss1.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH0";
    enet_icss1.rxDmaChannel[0].useDefaultFlow = true;
    enet_icss1.netifInstance.create(1);
    enet_icss1.netifInstance[0].$name         = "NETIF_INST_ID0";
    enet_icss1.PRU_ICSSG1_RGMII1.$assign      = "PRU_ICSSG1_RGMII1";
    
    enet_icss2.$name                          = "CONFIG_ENET_ICSS1";
    enet_icss2.mode                           = "DUAL MAC";
    enet_icss2.phyToMacInterfaceMode          = "RGMII";
    enet_icss2.mdioMdcEnable                  = false;
    enet_icss2.dualMacPortSelected            = "ENET_MAC_PORT_2";
    enet_icss2.PktInfoOnlyEnable              = true;
    enet_icss2.LargePoolPktCount              = 32;
    enet_icss2.txDmaChannel[0].$name          = "ENET_DMA_TX_CH1";
    enet_icss2.rxDmaChannel[0].$name          = "ENET_DMA_RX_CH1";
    enet_icss2.rxDmaChannel[0].useDefaultFlow = true;
    enet_icss2.netifInstance.create(1);
    enet_icss2.netifInstance[0].$name         = "NETIF_INST_ID1";
    
    enet_icss2.icss                          = pruicss1;
    enet_icss1.icss                          = pruicss1;
    pruicss1.$name                           = "CONFIG_PRU_ICSS1";
    pruicss1.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO0";
    pruicss1.intcMapping.create(2);
    pruicss1.intcMapping[0].$name            = "CONFIG_ICSS1_INTC_MAPPING0";
    pruicss1.intcMapping[0].event            = "41";
    pruicss1.intcMapping[0].channel          = "7";
    pruicss1.intcMapping[0].host             = "8";
    pruicss1.intcMapping[1].$name            = "CONFIG_ICSS1_INTC_MAPPING1";
    pruicss1.intcMapping[1].channel          = "7";
    pruicss1.intcMapping[1].host             = "8";
    pruicss1.intcMapping[1].event            = "53";
    
    const udma         = scripting.addModule("/drivers/udma/udma", {}, false);
    const udma1        = udma.addInstance({}, false);
    enet_icss2.udmaDrv = udma1;
    enet_icss1.udmaDrv = udma1;
    
    /**
     * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
     * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
     * re-solve from scratch.
     */
    debug_log.uartLog.UART.$suggestSolution                  = "USART0";
    debug_log.uartLog.UART.RXD.$suggestSolution              = "ball.D15";
    debug_log.uartLog.UART.TXD.$suggestSolution              = "ball.C16";
    enet_icss1.PRU_ICSSG1_MDIO.$suggestSolution              = "PRU_ICSSG1_MDIO0";
    enet_icss1.PRU_ICSSG1_MDIO.MDC.$suggestSolution          = "ball.Y6";
    enet_icss1.PRU_ICSSG1_MDIO.MDIO.$suggestSolution         = "ball.AA6";
    enet_icss1.PRU_ICSSG1_IEP.$suggestSolution               = "PRU_ICSSG1_IEP0";
    enet_icss1.PRU_ICSSG1_IEP.EDC_LATCH_IN0.$suggestSolution = "ball.V7";
    enet_icss1.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$suggestSolution = "ball.W7";
    enet_icss1.PRU_ICSSG1_RGMII1.RD0.$suggestSolution        = "ball.Y7";
    enet_icss1.PRU_ICSSG1_RGMII1.RD1.$suggestSolution        = "ball.U8";
    enet_icss1.PRU_ICSSG1_RGMII1.RD2.$suggestSolution        = "ball.W8";
    enet_icss1.PRU_ICSSG1_RGMII1.RD3.$suggestSolution        = "ball.V8";
    enet_icss1.PRU_ICSSG1_RGMII1.RXC.$suggestSolution        = "ball.AA7";
    enet_icss1.PRU_ICSSG1_RGMII1.RX_CTL.$suggestSolution     = "ball.Y8";
    enet_icss1.PRU_ICSSG1_RGMII1.TD0.$suggestSolution        = "ball.AA8";
    enet_icss1.PRU_ICSSG1_RGMII1.TD1.$suggestSolution        = "ball.U9";
    enet_icss1.PRU_ICSSG1_RGMII1.TD2.$suggestSolution        = "ball.W9";
    enet_icss1.PRU_ICSSG1_RGMII1.TD3.$suggestSolution        = "ball.AA9";
    enet_icss1.PRU_ICSSG1_RGMII1.TXC.$suggestSolution        = "ball.V9";
    enet_icss1.PRU_ICSSG1_RGMII1.TX_CTL.$suggestSolution     = "ball.Y9";
    enet_icss2.PRU_ICSSG1_RGMII2.$suggestSolution            = "PRU_ICSSG1_RGMII2";
    enet_icss2.PRU_ICSSG1_RGMII2.RD0.$suggestSolution        = "ball.W11";
    enet_icss2.PRU_ICSSG1_RGMII2.RD1.$suggestSolution        = "ball.V11";
    enet_icss2.PRU_ICSSG1_RGMII2.RD2.$suggestSolution        = "ball.AA12";
    enet_icss2.PRU_ICSSG1_RGMII2.RD3.$suggestSolution        = "ball.Y12";
    enet_icss2.PRU_ICSSG1_RGMII2.RXC.$suggestSolution        = "ball.U11";
    enet_icss2.PRU_ICSSG1_RGMII2.RX_CTL.$suggestSolution     = "ball.W12";
    enet_icss2.PRU_ICSSG1_RGMII2.TD0.$suggestSolution        = "ball.AA10";
    enet_icss2.PRU_ICSSG1_RGMII2.TD1.$suggestSolution        = "ball.V10";
    enet_icss2.PRU_ICSSG1_RGMII2.TD2.$suggestSolution        = "ball.U10";
    enet_icss2.PRU_ICSSG1_RGMII2.TD3.$suggestSolution        = "ball.AA11";
    enet_icss2.PRU_ICSSG1_RGMII2.TXC.$suggestSolution        = "ball.Y10";
    enet_icss2.PRU_ICSSG1_RGMII2.TX_CTL.$suggestSolution     = "ball.Y11";
    

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

    您好、Jon。

    感谢您的意见、我将报告此问题、以便在即将发布的版本中修复。

    谢谢。此致、

    里米卡

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

    这将是即将推出的 SDK 9.0版的一部分、

    谢谢。此致、

    里米卡

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

    尊敬的 Rimika:

    计划何时发布 SDK 9.0? 我目前正在使用08.06。

    非常感谢、

    乔恩

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

    您好、Jon。

    我将在获得任何更新后立即更新您的信息。

    谢谢。此致、

    里米卡