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.

AM6422: DP83620 driver

Part Number: AM6422
Other Parts Discussed in Thread: DP83620, , SYSCONFIG

Tool/software:

Hello!

I use the AM6422 CPU and the DP83620 chip to connect to the ICSSG Ethernet in RTOS. Use  MII mode,there is currently no corresponding PHY driver,Can you provide a corresponding PHY driver? Is the general PHY driver applicable? How to add a new PHY driver?

Thanks!

  • Hi ,

    Thanks for connecting with TI.

    How to add a new PHY driver?

    Please follow below documentation for custom PHY integration.

    AM243x MCU+ SDK: Ethernet PHY Integration Guide

    AM243x MCU+ SDK: Enet Integration Guide

    Let me know if you need further help.

    Regards

    Ashwani

  • Thanks for your answers!

    I also have an problem。

    1、Can you provide the corresponding DP83620 driver source code?

    2、I am using CCS development environment to configure sysconfig. When configuring ICSSG, pin configuration crossover occurs (hardware design issue). PR0_MII0_MR0_CLK, PR0_MII0_MT0_CLK, PRG0_MDIO0_MDC, PRG0_MDIO0_MDIO belong to the ICSSG-1 device, but the other signals are on ICSSG-0. Is this correct?

    3、When I use the ICSSG0 pin, some error occurs after compiling,like“ICSSG_DUALMAC_PORT_1_HOST_POOL_SIZE  Undeclared”

    Could you help me identify where my problem is?

    Thanks!

    /**
     * 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();
    
    /**
     * 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.mdioMode                              = "MDIO_MODE_MANUAL";
    enet_icss1.PktInfoOnlyEnable                     = true;
    enet_icss1.mode                                  = "DUAL MAC";
    enet_icss1.LargePoolPktCount                     = 32;
    enet_icss1.customBoardEnable                     = true;
    enet_icss1.GigabitSupportEnable                  = false;
    enet_icss1.mdioMdcEnable                         = false;
    enet_icss1.dualMacPortSelected                   = "ENET_MAC_PORT_2";
    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_IEP.EDC_LATCH_IN0.$used    = false;
    enet_icss1.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$used    = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_COL.$used    = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_CRS.$used    = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_RXD0.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_RXD1.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_RXD2.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_RXD3.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_RXDV.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_RXER.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_RXLINK.$used = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_TXD0.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_TXD1.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_TXD2.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_TXD3.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII0_TXEN.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_COL.$used    = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_CRS.$used    = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_RXD0.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_RXD1.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_RXD2.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_RXD3.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_RXDV.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_RXER.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_RXLINK.$used = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_TXD0.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_TXD1.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_TXD2.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_TXD3.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII1_TXEN.$used   = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII_MR0_CLK.$used = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII_MR1_CLK.$used = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII_MT0_CLK.$used = false;
    enet_icss1.PRU_ICSSG1_MII_G_RT.MII_MT1_CLK.$used = false;
    
    pruicss1.$name                                                                            = "CONFIG_PRU_ICSS1";
    enet_icss1.icss                                                                           = pruicss1;
    pruicss1.AdditionalICSSSettings[0].$name                                                  = "CONFIG_PRU_ICSS_IO1";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO.create(1);
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].$name                                 = "CONFIG_PRU_ICSS_MII_G_RT_IO0";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_COL.$used    = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_CRS.$used    = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD0.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD1.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD2.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD3.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXDV.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXER.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXLINK.$used = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD0.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD1.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD2.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD3.$used   = true;
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXEN.$used   = true;
    
    const udma         = scripting.addModule("/drivers/udma/udma", {}, false);
    const udma1        = udma.addInstance({}, false);
    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_MII_G_RT.$suggestSolution                                                      = "PRU_ICSSG1_MII_G_RT";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.$suggestSolution             = "PRU_ICSSG0_MII_G_RT";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_COL.$suggestSolution    = "ball.W6";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_CRS.$suggestSolution    = "ball.AA5";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD0.$suggestSolution   = "ball.Y1";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD1.$suggestSolution   = "ball.R4";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD2.$suggestSolution   = "ball.U2";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXD3.$suggestSolution   = "ball.V2";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXDV.$suggestSolution   = "ball.AA2";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXER.$suggestSolution   = "ball.R3";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_RXLINK.$suggestSolution = "ball.T2";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD0.$suggestSolution   = "ball.Y3";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD1.$suggestSolution   = "ball.AA3";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD2.$suggestSolution   = "ball.R6";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXD3.$suggestSolution   = "ball.V4";
    pruicss1.AdditionalICSSSettings[0].PruMii_g_rtIO[0].PRU_ICSSG0_MII_G_RT.MII0_TXEN.$suggestSolution   = "ball.T5";
  • MCU_PLUS_SDK_AM64x@08.06.00

    Can you check with latest MCUSDK release MCU-PLUS-SDK-AM64X Software development kit (SDK) | TI.com and confirm you are facing problem there as well ?

    Can you provide the corresponding DP83620 driver source code?

    You can create a separate thread and we will connect you with PHY team for this.

    Regards

    Ashwani

  • Thank you very much!I will try it with the latest SDK。I also create a separate thread about DP83620 driver source code,hope to receive relevant replies。

  • Hi ,

    Thanks for update.

    Regards

    Ashwani

  • HI,

    I have updated the new MDK, and the previous compilation error problem has been solved. There are two more questions I need to confirm with you: 

    1. On the updated MDK, CPSW and ICSSG still cannot be used at the same time, is that right?

    2. Is there a MII mode Ethernet configuration example for ICSSG that I can refer to?

    Regards

  • Hi ,

    As the original problem is solved here can you please raise separate thread for each query.

    It will help us and wide audience to track the issues.

    Regards

    Ashwani