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/PROCESSOR-SDK-AM335X:第二个以太网端口不能正常工作

Guru**** 2952510 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/672817/rtos-processor-sdk-am335x-second-ethernet-port-doesn-t-work

器件型号:PROCESSOR-SDK-AM335X
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

当我对双 Mac 型号使用 enetlwip_SYSBIOS 时、可以为两个端口分配 IP 地址(链路和 Netif 均已启动)。

但只能成功使用第一个端口。 第二个端口既不能 发送数据包(发送 中断可以触发、但 PC 不能接收任何数据包)也不能接收数据包(不触发接收中断)。

该示例在 startwarer 上运行良好。 两个端口都可以正常工作。

我认为 原因是 pinmux、因为当我在 startwarer 上配置错误的 pinmux 时、会发生相同的问题。

但是、当我在 SYS/BIOS 上配置相同的 pinmux 时、只有第一个端口工作正常。

cpsw 引脚多路复用器的代码 如下:

空 CPSWPinMuxSetup (空)
{
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (0))=   
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (1))=   
                     CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (2))=   
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (3))=   
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (4))=   
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (5))=   
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (6))=   
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (7))=   
                     CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (8))=   
                     CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (9))=   
                     CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (10))=   
                     CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_A (11))=   
                     CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_COL)=
                    CONTRAL_CONF_MII1_COL_CONF_MII1_COL_RXACTIVE
                    | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_CRS)=
                    CONTRAL_CONF_MII1_CRS_CONF_MII1_CRS_RXACTIVE
                    | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_RXERR)=
                    CONTRAL_CONF_MII1_RXERR_CONF_MII1_RXERR_RXACTIVE
                    | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_TXEN)=   
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_RXDV)=  
                     CONTRAL_CONF_MII1_RXDV_CONF_MII1_RXDV_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_TXD3)=  
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_TXD2)=  
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_TXD1)=  
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_TXD0)=  
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_TXCLK)=  
                     CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_RXCLK)=
                     CONTRAL_CONF_MII1_RXCLK_CONF_MII1_RXCLK_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_RXD3)=
                     CONTRAL_CONF_MII1_RXD3_CONF_MII1_RXD3_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_RXD2)=
                     CONTRAL_CONF_MII1_RXD2_CONF_MII1_RXD2_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_RXD1)=  
                     CONTRAL_CONF_MII1_RXD1_CONF_MII1_RXD1_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MII1_RXD0)=  
                     CONTRAL_CONF_MII1_RXD0_CONF_MII1_RXD0_RXACTIVE
                     | CPSW_RGMII_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_RMII1_REFCLK)=  
                     CONTRAL_CONF_RMII1_REFCLK_CONF_RMII1_REFCLK_RXACTIVE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MDIO_DATA)=
                     CONTRAL_CONF_MDIO_DATA_CONF_MDIO_DATA_RXACTIVE
                     | CONTRAL_CONF_MDIO_DATA_CONF_MDIO_DATA_PUTYPESEL
                     | CPSW_MDIO_SEL_MODE;
   HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_MDIO_CLK)=
                     CONTRAL_CONF_MDIO_CLK_CONF_MDIO_CLK_PUTYPESEL
                     | CPSW_MDIO_SEL_MODE;
}

有人有什么好主意吗? 或者、成功使用 AM335x+sys/BIOS+lwip+dual Mac 的任何人都可以提供一些建议。  如果有人能提供一些帮助、我将不胜感激。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、日志是:

    88:C2:55:72:AB:55、Mac
    88:C2:55:72:AB:57、mac2

    获取端口1的 IP 地址
    在实例0的端口2的地址6处找到 PHY。
    正在执行自动协商...
    自协商成功。
    传输模式:100 Mbps 全双工。
    已针对实例0的端口2验证 PHY 链路。
    已获取 IP 地址:192.168.2.10

    获取端口2的 IP 地址
    在实例0的端口1的地址4处找到 PHY。
    正在执行自动协商...
    自协商成功。
    传输模式:1000 Mbps。
    已针对实例0的端口1验证 PHY 链路。
    已获取 IP 地址:192.168.1.11
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Zewei、

    您在哪里接收 enetlwip_SYSBIOS 项目? 您是否将 enetlwip 从 Starterware 移植到 ProcessorSDK RTOS?
    您使用的是哪款 AM335x 板? 和 Processor SDK RTOS 版本?
    对于 pinmux 配置,您应该调用 Board_init()而不是 CPSWPinMuxSetup(),以使用电路板库中的 pinmux,

    boardCfg = Board_init_PINMUX_CONFIG |
    Board_init_module_clock | Board_init_uart_stdio;
    board_init (boardCfg);

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

    Garrett、
    感谢您的回复。
    我正在使用'AM335x_SYSBIOS_IND_SDK_01.03.03'中的 enetlwip_SYSBIOS 示例、并调整文件'lwipopts.h'()和'enetlwip.c'以使用双 Mac 模型。
    'lwipopts.h'中的更改为:
    #define CPSW_DUAL_MAC_MODE
    #define STATIC_IP_ADDRESS_Port1 0xc0a8020A
    #define static_ip_address_port2 0xc0a8010B

    在"enetlwip.c"中:

    从中删除

       CPSWPinMuxSetup_Ind();
       
       if (AM335X_Board_type_ICE_V2 =板类型)
          UTILsInitCpswIcsPorts (CPSW_switch);
       
       CPSWClkEnable();
       
       MDIOInit (SOC_CPSW_MDIO_regs、400、5);
       
       MDIOPhyAutoMDIXEnable (SOC_CPSW_MDIO_REGS、1);
       /*芯片配置 MII/RMII 选择*/
       PortModeSelect_Ind();
       if (AM335X_Board_type_ICE_V2 =板类型)
       {
          RMIClock_setup();
       }

    更改为


    CPSWPinMuxSetup();
    CPSWClkEnable();
    EVMPortRGMIIModeSelect();

    并为端口2添加以下代码:
    lwipIfPort2.instNum = 0;
    lwipIfPort2.slvPortNum = 2;
    lwipIfPort2.ipaddr = static_ip_address_port2;
    lwipIfPort2.netMask = 0;
    lwipIfPort2.gwAddr = 0;
    lwipIfPort2.ipMode = IPADDR_USE_STATIC;
    ipAddr1 = lwIPInit (&lwipIfPort2);

    我的董事会类型是来自一家名为 Embest 的公司的 sbc8600。 我使用的是'AM335x_SYSBIOS_IND_SDK_01.03.03'

    对于'Board_init'、我找不到该函数。 请告诉我它位于哪个头文件中?
    非常感谢。

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

    不再支持"AM335x_SYSBIOS_IND_SDK_01.03.03"、请参阅此处的公告- e2e.ti.com/.../580869

    您需要将 enetlwip 移植到可从此处获取的 ProcessorSDK RTO - software-dl.ti.com/.../index_FDS.html

    Board_init()函数来自处理器 SDK PDK 中的电路板库。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Garrett、
    感谢您的回复。
    但我仍有疑问。 我应该移植哪个 enetlwip 项目? 来自 starterware 或来自'AM335x_SysBIOS_ind_SDK_01.03.03'的'enetlwip_SysBIOS'? 安装 Processor SDK 后,我没有从'c:/ti"中找到任何 lwip 示例。
    换言之,我应该使用哪个 lwip 库? 由于这两个示例之间存在一些差异,例如,starterware 使用函数 IP_input(),但项目 enetlwip_SYSBIOS 使用 TCPIP_input。
    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Zewei、

    其中任何一个(ind_sdk、starterware)都可以正常工作。 但是、您为什么必须使用 enetlwip 而不是 TI NDK? 我们还在 AM572x 处理器 SDK (PDK) software-dl.ti.com/.../index_FDS.html 中提供了基于 NDK 的双 Mac 示例工程 、您可以参阅。

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

    感谢您的回复。
    我在我的项目中使用了 lwip 将近一年,因此我需要做很多工作才能将项目移植到使用 NDK。
    我将尝试 NDK。 但我在 AM335x 处理器 SDK 或 PDK 中找不到使用 NDK 的示例、在 ind_SDK 文件夹中、只有一个名为'EtherNetIP_ADAPTER'的示例使用 NDK。 这是否意味着我需要安装 AM572x 处理器 SDK 以查找双 Mac NDK 示例项目、或者示例项目'EtherNetIP_ADAPTER'仅适用于双 Mac 型号?

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

    Zewei、

    要为 AM572x 创建/编译双 Mac 工程、您需要安装 AM572x 处理器 SDK。 由于 AM335x 和 AM572x 共享相同的驱动程序源,因此您可以在 AM335x 处理器 SDK 中找到项目文件,请参阅 pdk_am335x_1_0_9\packages/ti\transport \ndk\Nimu\examples\am572x\armv7\BIOS\NIMU_DualMacExample_idkAM572x_armExampleproject.txt。

    此致、Garrett

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

    还可以! 非常感谢。
    我将尝试该示例。
    如果我遇到其他问题,我稍后会在这里发布。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Garrett、

    很抱歉再次打扰你。
    我已经在 SYS/BIOS 项目中尝试过 PDK 和 lwip、使用以下代码进行引脚多路复用设置和 RGMII 模型选择:

    boardCfg =
    BOARD_INIT_PINMUX_CONFIG |
    Board_init_module_clock |
    Board_init_uart_stdio;

    状态= Board_init (boardCfg);
    /*芯片配置 MII/RMII 选择*/
    SOCCtrlCpswPortMacModeSelect (1、Ethernet_MAC_TYPE_RGMII);
    SOCCtrlCpswPortMacModeSelect (2、Ethernet_MAC_TYPE_RGMII);

    但问题仍然存在。 只有端口1工作正常。

    我发现当我使用 starterware 时,即使我没有使用 dual_mac_model,我也可以通过 port1和 port2 ping 分配给 port1的 IP。 但是、当我使用 SYS/BIOS 时、我无法通过端口2 ping 分配的 IP。 这意味着问题与 dual_mac_model 无关。 PORT2只是在 SYS/BIOS 中不起作用。

    我已将寄存器从 CONTROL_CONF_GPMC_A (0)读取到 CONTROL_CONF_GPMC_A (11)、并使用值0x2或0x22 (即 rgmii2)正确分配它们。

    现在,我真的不知道问题是什么,我下一步应该做什么。

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

    您可以在 pdk_am335x_1_0_9\packages/ti\transport\ndk\nimu\examples\src\main_am57xx.c 中搜索'nimu_dual_MAC_mode'、以查找启用第二个端口的源代码差异、然后合并到您的 am335x 项目。 其他更改位于 packages/ti\translation_NDK\Nimu\examples\am572x\armv7\BIOS\Nimu_dual_mac_idk.cfg 中、例如 ip.ifIdx = 2;

    此致、
    Garrett