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.

[参考译文] TMS320F28388D:当为以太网选择100Mbps 时、会发生 CRC 错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1137980/tms320f28388d-crc-error-occurs-when-100mbps-is-selected-for-ethernet

器件型号:TMS320F28388D
主题中讨论的其他器件: DP83822IC2000WARETMDSCNCD28388DTMDSHSECDOCK

我正在使用 TMS320F28388D 开发以太网。
所规范的 PHY 为 dp83822i。

(配置如下所述)

我正在使用 C2000ware 驱动程序进行初始以太网设置。 当我设置为"10Mbps"时、发送和接收都成功、但当我设置为"100Mbps"时、接收时会出现许多错误。

查看 Statistic、错误的原因似乎是"rxCRCrorPackets"。 10Mbps 不会导致此问题。

PHY BMCR 选择正确、因此我认为 PHY 侧没有问题。 自动导航在关闭状态下检查、但在打开状态下观察到相同的行为。

测试环境由两个具有上述环境的电路板和一个仅更改了 MAC 地址的程序组成。

TMS320F28388D <-(RMII)->dp83822i <-(full/100m)->dp83822i <-(RMII)->TMS320F28388D

使用"100Mbps"时、我是否忘记设置任何内容?

    Ethernet_InitInterfaceConfig initInterfaceConfig;
    Ethernet_InitConfig *pInitCfg;

    initInterfaceConfig.ssbase = EMAC_SS_BASE;
    initInterfaceConfig.enet_base = EMAC_BASE;
    initInterfaceConfig.phyMode = ETHERNET_SS_PHY_INTF_SEL_RMII;
    initInterfaceConfig.clockSel = ETHERNET_SS_CLK_SRC_EXTERNAL; // PHY : RMII Master mode. PHY output 50Mhz clock. EMAC input.

    initInterfaceConfig.ptrPlatformInterruptDisable = &Platform_disableInterrupt;
    initInterfaceConfig.ptrPlatformInterruptEnable = &Platform_enableInterrupt;
    initInterfaceConfig.ptrPlatformPeripheralEnable = &Platform_enablePeripheral;
    initInterfaceConfig.ptrPlatformPeripheralReset = &Platform_resetPeripheral;

    initInterfaceConfig.peripheralNum = SYSCTL_PERIPH_CLK_ENET;
    initInterfaceConfig.interruptNum[0] = INT_EMAC;
    initInterfaceConfig.interruptNum[1] = INT_EMAC_TX0;
    initInterfaceConfig.interruptNum[2] = INT_EMAC_TX1;
    initInterfaceConfig.interruptNum[3] = INT_EMAC_RX0;
    initInterfaceConfig.interruptNum[4] = INT_EMAC_RX1;
    pInitCfg = Ethernet_initInterface(initInterfaceConfig);

    Ethernet_getInitConfig(pInitCfg);
    
    pInitCfg->pktMTU      = 1536;
    pInitCfg->numChannels = 2;

    for ( i = 0U; i < pInitCfg->numChannels; i++ ) {
        pInitCfg->chInfo[ETHERNET_CH_DIR_TX][i].numBD = 1;
        pInitCfg->chInfo[ETHERNET_CH_DIR_TX][i].chNum = i;
        pInitCfg->chInfo[ETHERNET_CH_DIR_RX][i].numBD = 8;
        pInitCfg->chInfo[ETHERNET_CH_DIR_RX][i].dmaBufferSize = 384; // dmaBuffSize <<= 2 ; // RX Only
        pInitCfg->chInfo[ETHERNET_CH_DIR_RX][i].chNum = i;
    }

    pInitCfg->emacSSConfig.phyIntfSel = ETHERNET_SS_CTRLSTS_PHY_INTF_SEL_RMII;
    pInitCfg->emacSSConfig.clkSrcSel  = ETHERNET_SS_CTRLSTS_CLK_SRC_SEL_EXTERNAL;
    pInitCfg->emacSSConfig.LoopBackModeClkSel = ETHERNET_SS_CTRLSTS_LMCLKSEL_NORMAL;
    pInitCfg->emacSSConfig.flowControlEn = ETHERNET_SS_CTRLSTS_FLOW_CTRL_EN_DISABLED;

    pInitCfg->loopbackMode = ETHERNET_MAC_CONFIGURATION_LM_LOOPBACK_DISABLED;
    pInitCfg->maxPacketLengthRxBuffer = 1536;

    pInitCfg->dmaMode.TxRxArbitration  = ETHERNET_DMA_OPERATION_MODE_DA_ROUND_ROBIN; // DA    //
    pInitCfg->dmaMode.TransmitPriority = 0;                                          // TXPR  // Priority Rx
    pInitCfg->dmaMode.PriorityRatio    = ETHERNET_DMA_OPERATION_MODE_PR_TX4_RX1;     // PR    // Rx4:Tx1

    pInitCfg->linkMode  = ETHERNET_MAC_CONFIGURATION_DM_FULL_DUPLEX;

    pInitCfg->pfcbGetPacket  = &func_CB_pfcbGetPacket; // self
    pInitCfg->pfcbRxPacket   = &func_CB_pfcbRxPacket;  // self
    pInitCfg->pfcbFreePacket = &func_CB_pfcbFreePacket;// self

    /* Since the buffer for descriptors is managed and operated by the user,
       pInitCfg->rxBuffer is not necessary. */

    Ethernet_getHandle((Ethernet_Handle)1, pInitCfg, &etHandel);
    
    Ethernet_clearMACConfiguration( EMAC_BASE, 0x2 ); // TX Disable
    Ethernet_clearMACConfiguration( EMAC_BASE, 0x1 ); // RX Disable
    
    (void)Interrupt_enableInProcessor();
    Interrupt_registerHandler(INT_EMAC_TX0, Ethernet_transmitISR);
    Interrupt_registerHandler(INT_EMAC_TX1, Ethernet_transmitISR);
    Interrupt_registerHandler(INT_EMAC_RX0, Ethernet_receiveISR);
    Interrupt_registerHandler(INT_EMAC_RX1, Ethernet_receiveISR);
    Interrupt_enable(INT_EMAC_TX0);
    Interrupt_enable(INT_EMAC_TX1);
    Interrupt_enable(INT_EMAC_RX0);
    Interrupt_enable(INT_EMAC_RX1);

    /* MAC Address Set */
    uint32_t mac[2] = {0};
    device->emacMACaddrCfg.channelNum = 0; // instanseNUM  0 = ETHERNET_O_MAC_ADDRESS0, 1 = ETHERNET_O_MAC_ADDRESS1, 2... 0-7
    mac[0] = ((uint32_t)m_MAC.addr[4]  <<  8 | m_MAC.addr[5]);
    mac[1] = ((uint32_t)m_MAC.aaddr[0] << 24 | m_MAC.addr[1] << 16 |
                        m_MAC.aaddr[2] <<  8 | m_MAC.addr[3]);
    Ethernet_setMACAddr( EMAC_BASE,           // Base Address
                         0,                   // InstansNum 0-7
                         mac[0],              // MAC Address HIGH
                         mac[1],              // MAC Address LOW
                         ETHERNET_CHANNEL_0); // CHANNEL0 or CHANNEL1
    
    /* Change Speed, Duplex */
    uint16_t mdio_reg = PHY_MdioRegRead( 0x0010 );
    /* linkSpeed ( MAC_Configuration Register "FES" ) */
    if ( (mdio_reg & 0x2) != 0 ) Ethernet_clearMACConfiguration( EMAC_BASE, ((uint32_t)1 << 14) ); // EMAC 100Mbps
    else                         Ethernet_setMACConfiguration( EMAC_BASE, ((uint32_t)1 << 14) );   // EMAC 10Mbps
    /* linkMode ( MAC_Configuration Register "DM" ) */
    if ( (mdio_reg & 0x4) != 0 ) Ethernet_setMACConfiguration( EMAC_BASE, ((uint32_t)1 << 13) );   // EMAC Full Duplex
    else                         Ethernet_clearMACConfiguration( EMAC_BASE, ((uint32_t)1 << 13) ); // EMAC Half Duplex

    Ethernet_setMACConfiguration( EMAC_BASE, 0x2 ); // TX Enable
    Ethernet_setMACConfiguration( EMAC_BASE, 0x1 ); // RX Enable

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

    您好!

    我们将 查看您的代码、并在几天内返回。

    此致

    Siddharth  

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

    MDIO 设置值。

    0x0000:00100001 00000000
    0x0001:01111000 01001101
    0x0004:00000001 11100001
    0x0005:00000000 00000000
    0x0009:00000000 00100000
    0x000A:00000001 00000000
    0x000B:00010000 00000000
    0x0010:01100110 00000101
    0x0012:00000000 00100000
    0x0013:00000000 00000000
    0x0016:00000001 00000000
    0x0017:00000000 01100101
    0x0019:10000100 00000001
    0x001A:00000000 00000000

    用于以太网的 GPIO 的设置值。

    静态空 gpioInitSet (uint32_t 引脚、GPIO_Direction pinIO、GPIO_CoreSelect 内核、GPIO_QualificationMode Qual、uint32_t pinType、 uint32_t pinConfig)

      GPIO_setDirectionMode (pin、pinIO);
        GPIO_setMasterCore( pin、core );
        GPIO_setQualificationPeriod( pin、qual );
        GPIO_setPadConfig( pin、pinType );
        GPIO_setPinConfig( pinConfig );

    gpioInitSet (38、GPIO_DIR_MODE_IN、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_38_ENET_MII_RX_DV);
    gpioInitSet (39、GPIO_DIR_MODE_IN、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_39_ENET_MII_RX_ERR );
    gpioInitSet (42、GPIO_DIR_MODE_OUT、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_42_ENET_MDIO_CLK );
    gpioInitSet (43、GPIO_DIR_MODE_OUT、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_43_ENET_MDIO_DATA);
    gpioInitSet (53、GPIO_DIR_MODE_IN、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_53_ENET_MII_RX_Data1);
    gpioInitSet (56、GPIO_DIR_MODE_OUT、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_56_ENET_MII_TX_EN );
    gpioInitSet (59、GPIO_DIR_MODE_OUT、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_59_ENET_MII_TX_DATA0 );
    gpioInitSet (66、GPIO_DIR_MODE_IN、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_66_ENET_MII_RX_DATA0 );
    gpioInitSet (73、GPIO_DIR_MODE_IN、GPIO_CORE_CM、GPIO_QUAL_SYNC、GPIO_PIN_TYPE_STD、 GPIO_73_ENET_RMII_CLK );

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

    您好!  

    我在下周一整周都不在办公室。 我回到办公室后会回到这里。

    此致

    Siddharth

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

    那怎么样?

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

    您好!  

    您是否使用 CRC 校验和卸载引擎来计算 CRC?  

    您能否共享整个 CCS 项目以供查看?

    此致

    Siddharth

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

    你(们)好

    除了基本说明外、我没有更改 EMAC 设置。
    特遣队所属装备的内容如下

    - MAC_Configuration 寄存器(0x400C0000)
    IPC = 0 (默认值)  
    - MAC_HW_Feature0寄存器(0x400C011C)
    RXCOESEL = 1 (默认值)
    TXCOESEL = 1 (默认值)

    SRC 代码随附提取的必要器件。
    使用的 GPIO 来自我的环境、需要更改。

    PHY 设置由 dp83822i 使用。
    每个开关都位于收割台中。

    最恰当的考虑。

    e2e.ti.com/.../20221014_5F00_TIQuery_5F00_Ethernet.zip

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

    您好!

    请看并返回给您。

    此致

    Siddharth

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

    Gouki On,您好。

    您是否使用定制板进行测试? 为了排除硬件相关问题、您是否已经使用 F2838x controlCARD 板(TMDSCNCD28388D)进行了测试? 在 Siddharth 检查您的软件时、这可能是需要并行检查的内容。

    此外、您是否使用100BASE-TX (标准 RJ45/CATx 电缆)或100BASE-FX (光纤)?

    最棒的

    Kevin

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

    大家好、Kevin。

    我正在使用定制板进行测试。 使用100BASE-TX。 "5e 类"

    我有一个 TMDSCNCD28388D (修订版上没有任何内容)、实际上已经通过点亮 LED 等来检查了它
    我没有在测试板上检查它、因为我在运行以太网时遇到了问题。

    - TMDSCNCD28388D "MCU063B"?
    TMDSHSECDOCK  "MCU047A"?

    我有这个环境、当我使用我在答复中传递的项目时(除了 GPIO 外几乎没有任何变化)
    由于 DMA 不是空闲状态、发送和接收似乎都发生了故障。

    在调查内容后、似乎无法获取 PHY 的 MDIO、并且未进行配置。
    定制板上的 PHY 是 DP83822i、因此似乎与测试板没有区别。

    首先、J4端口似乎不工作。
    LED 也无法正常工作。
    我是否需要配置任何内容?
    连接了两个板、并从坞站侧的 J17供电。

    我将在运行时对其进行设置、因此我不知道寄存器是否设置正确。
    与上面的项目相比、基础知识没有太大变化。

    -我将 MII 设置更改为"RMII->MII"。
    initInterfaceConfig.phyMode = Ethernet_SS_PHY_INTF_SEL_MII;

    我已按如下方式配置以太网 GPIO、但是
    您能否检查这是否正确、因为我没有找到任何清晰的文档?

    ======================================================
    // GPIO - Ethernet(MII)
    GPIO_writePin(108,1); // PHY out of Power Down
    GPIO_writePin(119,1); // PHY out of Reset
    
    gpioInitSet( 44, GPIO_DIR_MODE_IN,   GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_44_ENET_MII_TX_CLK );    // TX_CLK
    gpioInitSet( 75, GPIO_DIR_MODE_OUT,  GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_75_ENET_MII_TX_DATA0 );  // TX_D0
    gpioInitSet( 105, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_105_ENET_MDIO_CLK );     // MDC
    gpioInitSet( 106, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_106_ENET_MDIO_DATA );    // MDIO
    gpioInitSet( 108, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_PULLUP, GPIO_108_ENET_MII_INTR );  // INT/PWDN
    gpioInitSet( 109, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_109_ENET_MII_CRS );      // CRS/CRS_DV/LED_CFG
    gpioInitSet( 110, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_110_ENET_MII_COL );      // COL/PHYAD0/MLED
    gpioInitSet( 111, GPIO_DIR_MODE_IN,  GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_111_ENET_MII_RX_CLK );   // RX_CLK
    gpioInitSet( 112, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_112_ENET_MII_RX_DV );    // RX_DV/MII_MODE
    gpioInitSet( 113, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_113_ENET_MII_RX_ERR );   // RX_ER/AMDIX_EN
    gpioInitSet( 114, GPIO_DIR_MODE_IN,  GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_114_ENET_MII_RX_DATA0 ); // RX_D0/PHYAD1
    gpioInitSet( 115, GPIO_DIR_MODE_IN,  GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_115_ENET_MII_RX_DATA1 ); // RX_D1/PHYAD2
    gpioInitSet( 116, GPIO_DIR_MODE_IN,  GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_116_ENET_MII_RX_DATA2 ); // RX_D2/PHYAD3
    gpioInitSet( 117, GPIO_DIR_MODE_IN,  GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_117_ENET_MII_RX_DATA3 ); // RX_D3/PHYAD4/CLKOUT
    gpioInitSet( 118, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_118_ENET_MII_TX_EN );    // TX_EN
    gpioInitSet( 119, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_PULLUP, GPIO_119_ENET_MII_TX_ERR );// RESET
    gpioInitSet( 122, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_122_ENET_MII_TX_DATA1 ); // TX_D1
    gpioInitSet( 123, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_123_ENET_MII_TX_DATA2 ); // TX_D2
    gpioInitSet( 124, GPIO_DIR_MODE_OUT, GPIO_CORE_CM, GPIO_QUAL_SYNC, GPIO_PIN_TYPE_STD, GPIO_124_ENET_MII_TX_DATA3 ); // TX_D3
    ======================================================

    最恰当的考虑。

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

    Gouki On,您好。

    我们在 C2000WARE 项目中提供了许多以太网软件示例。 您以前是否在 TMDSCNCD28388D 硬件上运行过这些功能? 它们位于下面的安装目录位置。

    • C:\ti\c2000Ware_4_01_00_00\driverlib\f2838x\examples\cm\ethernet

    这些示例旨在与您拥有的 TMDSCNCD28388D 硬件一起运行。 'Ethernet_C28x_config'项目需要首先在 C28内核上运行、从而初始化 GPIO 和器件时钟。 您可以查看该项目以进行正确的 GPIO 初始化。

    下面还提供了一些第三方协议/堆栈支持示例:

    • C:\ti\c2000Ware_4_01_00_00\libraries\communications\ethernet/third_party

    最棒的

    Kevin

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

    大家好、Kevin。

    我知道样本。
    使用样片、创建了一个以"10Mbps-满"工作的定制板。
    我在上面的回复中附加了工作项目。 请确认。
    正如您在内部看到的、以太网设置的内容几乎相同。

    我尚未在测试板上对其进行测试。 不能这么做的原因
    如果您在此项目中更改 GPIO 和 MII 并按原样使用 TMDSCNCD28388D 的其余内容、
    来自 MDIO 的数据为'0xFFF'、看起来不能正确读取。

    这个问题刚刚得到解决。 测试板的问题再次出现在 GPIO 中。
    问题是引脚109和119分配的功能不正确。
    我能够修复此问题并确认收到 MDIO、因此我计划使用测试板进行检查。

    最恰当的考虑。

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

    大家好、Kevin。

    我确认了测试板上的操作。
    因此、测试板以"100-full"运行。 (100Full MII 环回工作正常)

    关于测试板和定制板之间的差异,“PHY<->EMAC”的通信是“MII 或 RMII”。

    由于 MII 在测试板上可靠工作、我们认为当前的以太网配置是正确的。

    测试结果
    ===================================================================================================================================
    Testboard TX --(MII)->dp83822i --(100m/全)->dp83822i --(RMII)->Customboard RX
    "10000 cnt、10000正常"

    定制板 TX --(RMII)->dp83822i -(100m/全)->dp83822i -(MII)->Testboard RX
    "10000 cnt、2276正常"

    测试板 TX <-(MII)->dp83822i (MII 环回)
    "10000 cnt、10000正常"

    定制板 TX <-(RMII)->dp83822i (MII 环回)
    "10000 cnt、1950 OK (10000 cnt、1950正常)"
    ===================================================================================================================================

    结果得出的。
    测试板上的 MII 似乎工作正常。
    此外、当定制板设置为接收、且测试板设置为发送时、它将正确接收。

    相反、当定制板设置为传输时、会出现许多错误。

    假设"RMII 接收"成功。
    我认为"在 RMII 期间发送"是错误的。
    您是否曾在此处检查过该操作?
    任何想法都将不胜感激。

    注------------------------------
    测试板具有用于 MII 的 GPIO 布线、但如果我们更改为用于 RMII 的 GPIO 布线、测试板是否可以工作?
    如果它可以工作、我们将对其进行更改并进行检查。
    --------------------------------------

    最恰当的考虑。

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

    Gouki On,您好。

    最好能在您的身边听到这一进展。 如果现在只有 RMII 模式无法100%工作、我还有一些其他想法。

    1. DP83822I 器件寄存器是否针对具有适当计时的 RMII 模式进行了正确配置? 我甚至可能建议在 TI 接口 E2E 论坛上创建新帖子、以便 DP83822I 专家可以帮助确定要检查的内容。
    2. 您可以尝试使用 C2000 50MHz 内部时钟吗? 我们的 SW 示例似乎使用内部生成的时钟、而不是通过 ENET_RMII_CLK 引脚使用外部时钟。 如果有一些差异、可以快速尝试。

    [引用 userid="421456" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1137980/tms320f28388d-crc-error-occurs-when-100mbps-is-selected-for-ethernet/4372016 #4372016]note----------------------
    测试板具有用于 MII 的 GPIO 布线、但如果我们更改为用于 RMII 的 GPIO 布线、测试板是否可以工作?
    如果它可以正常工作、我们将对其进行更改并进行检查。

    我认为、如果您使用内部时钟、这应该起作用、因为 RMII 信号似乎是 MII 信号的子集。

    最棒的

    Kevin

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

    大家好、Kevin。

    我在100满/RMII 配置中检查了测试板。
    因此、测试板上的 PHY 环回的成功率为100%。
    定制板和测试板上的通信也与 MII 具有相同的行为。

    我们拥有的定制板很可能设计不当。
    我计划让硬件设计人员检查脉冲漂移。

    我认为没有问题、但我想确保没有设置错误。
    我可以有100个满设置的样本吗?

    感谢您的合作。
    最恰当的考虑

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

    大家好、Kevin。

    在测试板上重新组装电源和 LAN 电缆后、PHY 可能会在 MDIO 读取时返回"11111111"。
    同时、即使链接配置正确、也无法识别。
    由于可以建立链路、因此配置似乎是正确的。

    RJ45或电路板可能存在问题。
    我还在测试板上尝试了"MII/RMII PHY 环回"、但它会提供 CRC 错误以及定制板。

    新的测试板将在下周末送达。
    我将使用它重新检查 MII/RMII。

    此致。

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

    Gouki On,您好。

    [报价 userid="421456" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1137980/tms320f28388d-crc-error-occurs-when-100mbps-is-selected-for-ethernet/4374074 #4374074"]我是否可以获得100个完整设置的样本?

    100倍的全双工意味着什么? 我还不知道我们是否准备好了一些配置来共享。

    [引用 userid="421456" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1137980/tms320f28388d-crc-error-occurs-when-100mbps-is-selected-for-ethernet/4380660 #4380660"]

    由于可以建立链路、因此配置似乎是正确的。

    RJ45或电路板可能存在问题。
    我还在测试板上尝试了"MII/RMII PHY 环回"、但它会提供 CRC 错误以及定制板。

    新的测试板将在下周末送达。
    我将使用它重新检查 MII/RMII。

    [/报价]

    我认为您已经在测试板(TMDSCNCD28388D)上运行了 PHY 回送、并且之前的成功率为100%。 您现在是否遇到了一些问题?

    让我们知道您如何进一步测试。

    最棒的

    Kevin

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

    大家好、Kevin。

    这是我们请求的样片。

    这是一个使用 C2000Ware 的"Ethnet.c/ethernet/h"在100BASE-Tx (100Mbps/full-Duplex)上工作的示例。
    (在测试板上运行的配置)。

    如果您可以环回 EMAC、则没有问题。
    除此之外、任何其他函数都没有问题。
    我想知道、"我的设置是否错误、我的通信是否不良?" 我想检查一下、因此我要申请样片。


    我拥有一个测试板、起初它在100Mbps/全双工模式下工作正常。
    但是、它现在处于以下状态。
    -来自 PHY 的 MDIO 有时返回异常值(0x11111111)
    -有时甚至在输入 PHY 回送设置后也不会返回任何数据
    -即使输入了必要的链接设置,也不会出现链接。 当电源打开和关闭时、可能会发生链路连接。

    当测试板以太网部分的源代码被移植到定制板时、不会出现上述现象。
    当我在此状态下以100Mbps/全双工速率执行 PHY 回送时、成功率为91%。

    在100Mbps/全双工模式下正常运行的时间太短了、我不确定自己是否确实正常工作。
    当新的测试板到达时、我想再次检查它是否确实起作用。

    此致

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

    大家好、Kevin。


    我刚刚收到了一个新的基板、并在相同的条件下对其进行了测试。
    测试结果如下:每5ms 发送/接收1518字节的 Ether。


    测试结果
    ===================================================================================================================================
    Testboard TX --(MII)->dp83822i --(100m/全)->dp83822i --(RMII)->Customboard RX
    "10000 cnt、10000成功"

    Testboard TX --(RMII)->dp83822i --(100m/全)->dp83822i --(RMII)->Customboard RX
    "10000 cnt、10000成功"

    定制板 TX -(RMII)->dp83822i -(100M/全)->dp83822i -(MII)->Testboard RX
    "10000 cnt、2291成功"

    定制板 TX -(RMII)->dp83822i -(100M/全)->dp83822i -(RMII)->测试板 RX
    "10000 cnt、2275成功"


    PHY 环回
    ===================================================================================================================================
    测试板 TX <-(MII)->dp83822i (MII 环回)
    "10000 cnt、9011成功"

    测试板 TX <-(RMII)->dp83822i (MII 环回)
    "10000 cnt、8969成功"

    定制板 TX <-(RMII)->dp83822i (MII 环回)
    "10000 cnt、1950成功"
    ===================================================================================================================================


    根据我上次编写的结果、如果测试板正在发送、而定制板正在接收、则成功达10000次。

    上次测试板的 PHY 回送是"10000 cnt、10000成功"、但这种确认可能是错误的。
    新电路板的环回结果显示、成功率为90%、故障率为10%。

    这是 TI 对回送结果的期望吗?
    如果不是、源代码中可能仍然存在错误。
    请给我一个示例代码。

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

    Gouki On,您好。

    通过测试板、您是指控制卡还是也是定制板?  

    此外、您运行的是哪一个环回示例? 它是'Ethernet_ex1_basic_TX_Rx_loopback'示例吗?

    此致

    Siddharth  

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

    大家好、Siddharth。

    您看不到上面的 Replay 吗?
    您是否不了解如何写入(100M/Full)?

    测试板是控制卡。
    如上述 Replay 中所述、它是 MCU063B 和 TMDSHSECDOCK (Rev.F)的组合。
    我说的问题是、在这个使用"100Base-Tx"的回送测试环境中、失败率为10%。

    它不是任何环回的示例。
    正如我写过很多次的、TI 的 C2000ware 中没有单个100Base-Tx (全双工)环回样本。
    因此、我反复请求了一个"采样在100Base-Tx 通信"。
    我还提供了一整套我的项目。
    示例位置"C:\ti\c2000Ware_4_01_00_00\driverlib\f2838x\examples\cm\ethernet"

    这个问题需要一个月的时间来回答。
    您是否在提供通过100Base-Tx 进行通信/回路的样本?

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

    已在测试板的其他设置中研究 PHY 环回。 除了相应的设置部分、源未更改。

    - 每5ms 一次、大小为1518字节、10Base-Tx、全双工、PHY 回送、  控制卡。
    10000Cnt、10000Success.

    - 每5ms 一次、大小为1518字节 、任意速度、半双工、PHY-Loopback、  控制卡。
    10000Cnt、0成功。

    我尝试过它、因为该规范具有以下描述。
    -不要回送大数据包。 大数据包可能会在回送 FIFO 中损坏。

    每5msec 一次、大小为500字节、100Base-Tx、全双工、PHY 环回、  控制卡。
    10000 cnt、9300成功。

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

    您好!  

    请尝试使用随附的代码。  将此文件替换为 C2000Ware 的 Ethernet_ex1_basic_TX_Rx_loopback 示例中的文件。

    已尝试使用控制卡进行回送(MII)、并且未发现任何数据包丢失。  

    e2e.ti.com/.../ethernet_5F00_ex1_5F00_basic_5F00_tx_5F00_rx_5F00_loopback.c

    此致

    Siddharth

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

    感谢您的回答。

    我检查了您提供的源代码、它显示 EMAC 环回已启用、这似乎只是 EMAC 内部的100%成功环回、而不是 PHY 环回的确认。

    //Configure the Loopback mode
    //pInitCfg->loopbackMode = ETHERNET_MAC_CONFIGURATION_LM_LOOPBACK_ENABLED;
    pInitCfg->loopbackMode = ETHERNET_MAC_CONFIGURATION_LM_LOOPBACK_DISABLED; // need

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

    您好!  

    我通过禁用 EMAC 环回尝试了它。 在这种情况下、必须增加发送数据包函数调用之间的延迟才能获得100%成功。  

    将 延迟更改为"sysctl_delay (5000000);"

    此致

    Siddharth

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

    必须使用500字节和16个或更多 RX 缓冲区执行上述测试。

    #define PACKET_LENGTH 500
    //#define PACKET_LENGTH 132
    
    //#define ETHERNET_NO_OF_RX_PACKETS   2U
    #define ETHERNET_NO_OF_RX_PACKETS   16U

    我使用上述设置进行了测试。
    [500byte]========================================
    stats.tx1024toMaxOctetsPacketsGood = 500500
    stats.txPacketCountGoodBad = 500500
    stats.rx1024toMaxOctetsPacketsGood = 294
    stats.rxPacketCountGoodBad = 294
    ========================================================================

    因为 Etherframe 的最大值为1518字节
    您实际上需要的是1504字节的测试。

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

    测试详细信息
    ・用于以太网接收的缓冲器数量全部由以太网.h 决定
    ・对于库标准、EMAC 接收需要16个缓冲器。 (以太网描述符 NUM_RX)
    ・在库的接收中、"在接收完成时请求下一个缓冲区的描述符"、因此如果您希望在接收完成后执行某项操作、只允许接收过程进行判断、以便不停止 DMA 中断、并在其他位置点按缓冲区注册额外的缓冲区以实现形状。 因此、您需要的 RX 缓冲器数量是指定的两倍。 (如果您计划在 DMA 中断中处理1500字节、则16个字节是可以的。)

    设置上述内容时、缓冲区大小超出 RAM 容量、因此请在存储器映射中设置额外的 RAM。
    .bss 位置。

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

    一个附加说明。
    我不认为控制卡上的"PHY 回送不会100%成功"是个问题。
    我提出这一问题是因为我不确定这是否是 TI 的预期行为。

    该规范还规定了以下内容、并考虑到该规范没有具体说明
    实际上、500字节回送也可能属于"大数据包"类别。
    -回送 FIFO 中的大数据包可能会损坏。

    在 TI 看来、如果1500字节的回送"总是失败"、则不会有问题。
    (如果您有两个单元、并且发送和接收数据包丢失10%、则这是一个问题。)

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

    您好!  

    我在500字节数据包长度和16个 Rx 缓冲区的情况下尝试了相同的测试。   在这种情况下、必须增加发送数据包函数调用之间的延迟才能获得100%成功。   将 延迟更改为"sysctl_delay (6000000);"

    我认为电池组之间必须有足够的时间延迟才能成功发送和接收数据包。  

    此致

    Siddharth

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

    正如我在上次重播中确认的那样。
    我用示波器检查了"sysctl_delay (5000000);"的时间、发现为160msec。

    通过以太网发送132个字节通常需要160毫秒的间隔。
    请停止调查以增加时间并对图书馆进行基本调查。

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

    您好!  

    请您提供以下信息

    • PHY 从0x0000到0x001E 的寄存器转储, 用此操作多次读取这些寄存器(至少5次)
    • 如果链路伙伴中还包含 DP83822 PHY、请提供与上述请求类似的寄存器转储

    这将有助于确定 PHY 配置是否存在任何问题/。  

    除此之外。 我们正在分析缓冲区管理 (数据包长度和 RX 缓冲区/描述符的数量),并将返回给您。

    此致

    Siddharth

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

    此请求涉及什么?

    您是否在谈论控制卡的回送失败?
    您是否在谈论"100MHz/自定义电路板上的完全通信失败"?

    借助环回、您无需另一个器件。
    我假设您正在讨论定制板上的 PHY 寄存器。

    ================================================================================================

    e2e.ti.com/.../mdio.zip

    ================================================================================================

    通信期间的随机采样。

    电源
    我们有两个定制板、但只有一个板连接到 UART、因此发送器/接收器是同一台机器。

    基本来说、结构和软件都是相同的。

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

    您好!

    感谢您共享该文件。 是的、它适用于100MHz/与定制板的完全通信。

    PHY 上很少有状态寄存 器指示链路状态和其他有助于缩小此问题原因范围的信息。

    此致

    Siddharth

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

    您好、Gouki、

    感谢您共享寄存器转储文件、我介绍 了发送器和接收器的寄存器转储文件。

    这两个都处于 RMII 模式、并且基准时钟为25MHz。

    在对上述寄存器转储进行采样时、接收器端是否遇到丢包问题?

    查看 DP83822的接收器寄存器0x0017位[2]、RMII 下溢状态位被触发。 这表示 RMII RX FIFO 下溢检测。

    RMII 包括一个可编程的弹性缓冲器来调整基准时钟和恢复接收时钟之间的频率差异。 可编程弹性缓冲器可根据预期的最大数据包大小和时钟精度最大限度地减少内部传播延迟。

    下表说明了如何根据预期的最大数据包大小和时钟精度对 FIFO 缓冲器(寄存器0x0017、位[1:0])进行编程:

    有关该寄存器的更多详细信息、请参阅数据表:

    https://www.ti.com/lit/ds/symlink/dp83822i.pdf?ts=1670368178757&ref_url=https%253A%252F%252Fwww.google.com%252F

    请尝试调整此 FIFO 缓冲区值、并查看您是否仍注意到正在触发任何 RMII 上溢/下溢状态(寄存器0x0017)。

    此致、
    Rahul

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

    你(们)好,Rahul。

    抱歉、解决错误。

    默认设置"B01"会导致下溢。
    检查后、"B10"既不会导致上溢、也不会导致下溢、因此我决定设置"B10"。


    我们尝试了以下四种通信模式。
    ========================================================================
    发送10、000次、接收10、000次

    0x0017:00000000 01100011
    (EMAC 统计)
    rxPacketsCountGoodBad = 8989
    rxCRCrorPackets = 7520
    rxUnicastPacketsGood = 1469

    0x0017:00000000 01100010
    (EMAC 统计)
    rxPacketsCountGoodBad = 8892
    rxCRCrorPackets = 7495
    rxUnicastPacketsGood = 1397

    0x0017:00000000 01100101
    (EMAC 统计)
    rxPacketsCountGoodBad = 8959
    rxCRCErrorPackets = 7476
    rxUnicastPacketsGood = 1483Hi。

    0x0017:00000000 01100000
    (EMAC 统计)
    rxPacketsCountGoodBad = 8942
    rxCRCrorPackets = 7472
    rxUnicastPacketsGood = 1470
    ========================================================================

    遗憾的是、这似乎不能解决接收问题。

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

    我想删除已解决的...

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

    目前的情况是什么?

    在我获得一些信息之前、我无法解释您的查询。 请给我一些关于是否正在测试的信息。

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

    您好!  

    我们仍在研究它。  我们研究了您通过电子邮件发送的波形、其中 RX_D1和 REF_CLK 之间存在同步问题、这可能会导致此问题。   请 您尝试使用 RMII 的内部50MHz 时钟,而不是使用外部时钟。  

    以下快照来自以太网模块和 RMII 模式的 TRM

      

    Rahul、  

    如果需要进行任何其他 PHY 配置、请告知。

    此致

    Siddharth

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

    您好 Siddharth。

    被确认正在调查中。

    我以前曾与您联系过、但当内部时钟设置为 RMII 时、大约70%的时间成功。 但是、我们已确定30%的数据包丢失不可用于通信。

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

    您好!  

    即使在使用内部时钟时、您是否也会看到时钟同步问题?  

    Rahul、  

    如果有任何其他需要完成或检查的 PHY 配置、请告知。

    此致

    Siddharth

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

    我不确定使用 CPU 的内部时钟是否会导致相同的现象、因为无法检查 CLK、因此无法检查它们是否同步。

    但是、正如我在上面提到的、即使在使用内部时钟运行时、100M 满接收也只有大约70%的成功。

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

    您好!  

    需要对您的回复进行澄清。  您提到了30%的数据包丢失- 是 CRC 错误还是根本没有收到数据包?

    此致

    Siddharth

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

    使用内部时钟运行 EMAC 时的统计信息。
    ================================================================================================
    测试条件是
    -发出10 000次,收到10 000次
    - 100base_Tx
    -1518字节
    -全双工
    -每5ms 一次

    rxPacketsCountGoodBad = 9296
    rxOctetCountGoodBad = 14109777
    rxOctetCountGood = 9271944
    rxCRCrorPackets = 1657
    rxAlignmentErrorPackets = 1531
    rx1024toMaxOctetsPacketsGoodBad = 9296
    rxUnicastPacketsGood = 6108
    ================================================================================================


    以下是为了使内部时钟工作而更改的源代码。
    ================================================================================================
    Ethernet_InitInterfaceConfig initInterfaceConfig;
    Ethernet_initconfig *pInitCfg;

    initInterfaceConfig.clockSel = Ethernet_SS_CLK_SRC_INTERNAL;
    pInitCfg->emacSSConfig.clkSrcSel = Ethernet_SS_CTRLSTS_CLK_SRC_SEL_INTERNAL;
    ================================================================================================

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

    您好!  

    如果数据包大小较小、您是否会看到相同的行为?  您是否观察到数据包大小较小的 CRC/对齐错误?

    请求您在 发送大尺寸数据包和小尺寸数据包时共享 RX_D1和 REF_CLK 波形。

    此致

    Siddharth

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

    发送和接收的200字节统计信息。
    ================================================================================================
    测试条件是
    -发出10 000次,收到10 000次
    - 100Base-Tx 全双工
    -200字节
    - RMII
    - EMAC 时钟=输出 PHY 时钟50MHz
    -每5ms 一次

    rxPacketsCountGoodBad = 9038
    rxOctetCountGoodBad = 1843752
    rxOctetCountGood = 1623228
    rxCRCerorPackets = 1081
    rx128to255OctetsPacketsGoodBad = 9038
    rxUnicastPacketsGood = 7957
    ================================================================================================

    请等待波形输出

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

    这是成功接收200字节的波形。

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

    您好!  

    与 PHY 专家分享了波形、以查看并提供他的输入。

    此致

    Siddharth