SLUUDO2 September   2026 AM2611 , AM2612 , AM2612-Q1 , AM2631 , AM2631-Q1 , AM2632 , AM2632-Q1 , AM2634 , AM2634-Q1 , AM263P2 , AM263P2-Q1 , AM263P4 , AM263P4-Q1

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Acronyms
  5. 2Introduction
  6. 3Introduction to CPSWSS and ENET-LLD
    1. 3.1 Hardware
    2. 3.2 Software
    3. 3.3 Application Software
      1. 3.3.1 Board and Peripherals Initialization (SYSCFG)
      2. 3.3.2 CPSW Configuration (ENET-LLD)
      3. 3.3.3 Operating System (FreeRTOS or NoRTOS)
      4. 3.3.4 Middleware Stack (LwIP, Arm® Mbed™ Platform TLS, TSN)
      5. 3.3.5 Application Layer
  7. 4Debugging Hardware and Software
    1. 4.1 Hardware Debugging
      1. 4.1.1 Schematic Review Checklist
        1. 4.1.1.1 Management Data Input/Output (MDIO and MDC)
        2. 4.1.1.2 RGMII Interface
      2. 4.1.2 PHY Debug
        1. 4.1.2.1 PHY Bootstrap Settings
        2. 4.1.2.2 Trace Length
        3. 4.1.2.3 Clock Configuration
        4. 4.1.2.4 Mode Settings
        5. 4.1.2.5 IO MUX and SW Switch Settings
        6. 4.1.2.6 PHY Troubleshooting Guides
        7. 4.1.2.7 Custom Pin MUX Settings
      3. 4.1.3 Test Setup
      4. 4.1.4 Software Debugging
        1. 4.1.4.1 Using GEL Scripts in CCS
          1. 4.1.4.1.1 Statistics Using GEL Scripts
          2. 4.1.4.1.2 Statistics Using Expressions
      5. 4.1.5 Debugging Custom Ethernet Software
        1. 4.1.5.1 Debugging Initialization Sequence
        2. 4.1.5.2 PHY Debugging
        3. 4.1.5.3 MAC Port Debugging
        4. 4.1.5.4 TX Path Debugging
        5. 4.1.5.5 Systematic Debugging Checklist
          1. 4.1.5.5.1 RX Path Debugging
          2. 4.1.5.5.2 Multicast or Broadcast Does Not Work, But Unicast Works
    2. 4.2 Custom Hardware Bring-Up Process
      1. 4.2.1 Example 1: CPSW PHY Loopback
        1. 4.2.1.1 Failure: PHY Not Detected or MDIO Bus Not Alive
        2. 4.2.1.2 Failure: TX Packets Transmitted But RX Count = 0
      2. 4.2.2 Example 2: CPSW MAC Loopback Example
        1. 4.2.2.1 Failure: MAC Loopback Initialization Fails
        2. 4.2.2.2 Failure: TX Packets Increase But RX = 0
        3. 4.2.2.3 Failure: Nonzero Error Counters
      3. 4.2.3 Example 3: Enet_Layer2_CPSW and Enet_Layer2_cpsw_switch
        1. 4.2.3.1 Hardware Setup
        2. 4.2.3.2 Failure: Link Never Comes UP
        3. 4.2.3.3 Failure: Link is Up But No Frames Are Received or Transmitted
        4. 4.2.3.4 Failure: RX and TX Counters Increase But Error Rates Are High
      4. 4.2.4 Example 4: Enet_lwip_cpsw_example
        1. 4.2.4.1 Failure: Link Never Comes Up
        2. 4.2.4.2 Failure: Links Up But No IP Address Is Assigned
        3. 4.2.4.3 Failure: Ping Fails Despite Link and IP Address
    3. 4.3 Debugging Packet Forwarding Issues (ALE and Statistics)
      1. 4.3.1 CPSW Statistics Architecture
        1. 4.3.1.1 What Each Block Measures
        2. 4.3.1.2 Counter Reference Tables
          1. 4.3.1.2.1 MAC Port – RX Counters
          2. 4.3.1.2.2 MAC Port – TX Counters
          3. 4.3.1.2.3 MAC Port and Host Port – ALE and FIFO Drop Counters
          4. 4.3.1.2.4 Host Port – ALE Flood and Overrun Counters
          5. 4.3.1.2.5 MAC Port RX Issues
          6. 4.3.1.2.6 MAC Port TX Issues
          7. 4.3.1.2.7 Host Port RX Issues
          8. 4.3.1.2.8 Host Port TX Issues
    4. 4.4 Custom Board Enablement in SYSCFG
    5. 4.5 LwIP Debug Guide
      1. 4.5.1 LwIP Stack Configuration
      2. 4.5.2 lwip_stats
  8. 5Conclusion
  9. 6References

Debugging Initialization Sequence

This section describes the sequence for initializing debugging.

Note:

The CPSW initialization sequence involves multiple steps, each of which can fail silently if return codes are not checked.

  1. Step 1: Initialization failures prevent all subsequent operations, so start here first.
    1. Set the first breakpoint at the Enet_open() function in the SYSCFG-generated code. This is typically called from the EnetApp_driverOpen() function.
    2. Step through and capture the return value when this breakpoint hits.
      Note: If the Enet_open() function returns NULL instead of a valid handle, the initialization has failed.

      Common causes of failure include invalid clock configuration in SYSCFG, resource allocation failure, or a mismatch between the peripheral instance ID and what is available on your device.


  2. Step 2: The next critical checkpoint is the EnetApp_enableHostPort() function.
    1. Set a breakpoint at the EnetApp_enableHostPort() function and verify both IOCTL operations return ENET_SOK.
      Note: The first IOCTL sets the ALE port state to forwarding mode (CPSW_ALE_IOCTL_SET_PORT_STATE). If this fails with ENET_EINVALIDPARAMS, the ALE configuration structure is corrupt or was not properly initialized by SYSCFG.

      The second IOCTL (ENET_HOSTPORT_IOCTL_ENABLE) activates the individual host port. Failure here typically means the Enet_open() function did not complete successfully, even though the function returned a non-NULL handle, which indicates internal resource exhaustion.


  3. Step 3: After host port enablement, Each MAC port must be opened using the EnetApp_enableMacPort() function.
    1. Set a breakpoint at the ENET_PER_IOCTL_OPEN_PORT_LINK IOCTL call and examine the input structure.
    2. Verify the MAC interface type (RGMII, RMII, MII) matches your hardware schematic.
      Note: A common mistake is configuring RGMII when the board uses RMII, which causes the MAC to expect signals on pins that are not connected.

    3. Check the PHY address in the configuration structure matches the hardware strapping.
      Note: If this IOCTL returns ENET_ETIMEOUT, the PHY is not responding on the MDIO bus at the specified address, indicating either a wrong address configuration or a hardware problem.

  4. Step 4: The final initialization checkpoint is DMA channel opening.
    1. Set breakpoints at the EnetAppUtils_openTxCh() and EnetAppUtils_openRxCh() functions and verify both return non-NULL channel handles.
      Note: Check the MAC address pool configuration in ti_enet_init.c if the EnetAppUtils_openRxCh() function succeeds but the MAC address allocation step fails.

      Note: An exhausted address pool prevents the application from obtaining addresses to add to the ALE table, which silently breaks RX filtering.