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.

TMDS243EVM: How to add a Internet configure in Sysconfig based on INDUSTRIAL COMMUNICATION SDK?

Part Number: TMDS243EVM
Other Parts Discussed in Thread: SYSCONFIG

Tool/software:

I want to add a TCP server in industrial_comms\ethercat_slave_beckhoff_ssc_demo, there is no Enet (CPSW) item under TI NETWORKINGS in .syscfg file, but EtherNet/IP item under TI INDUSTRIAL COMMS TOOLKIT, should I add a Internet configuration to EtherNet/IP? 

  • Hi Hongkai,

    EtherCAT network is not compatible with standard ethernet, so it is not possible to have both of them accessible simultaneously. Ma I know what is the use case hereyou're trying to achieve ?

    Regards,
    Aaron

  • Hi Aaeon,

    I want to use both Internet and EtherCat on TMDS243EVM. Internet port is used for TCP connection, EtherCat port is used for EtherCat connection.
    Just as before what I said, I want to add a TCP connection based on industrial_comms\ethercat_slave_beckhoff_ssc_demo, but this demo only has EtherCat connection, so I think I have to add a Enet (CPSW) in .syscfg.

  • Hi all,

    I believe I've hit the same issue. I guess what Hongkai is saying that when using the industrial comms. SDK (I'm using 09.02.00.15) SysConfig doesn't show "Enet (CPSW)" or "Enet (ICSS)", only "ICSS-EMAC". When importing one of the Enet based examples (e.g. icssg_layer2_dualmac_am64x-evm_r5fss0-0_freertos_ti-arm-clang) the example builds (after fixing an issue with linked resources and include paths), but when opening the sysconfig file in the UI edtior the Enet settings are not visible.

    This issue was previously described here https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1420167/am6442-industrial-communications-sdk-9-2-missing-configurations-in-sysconfig?tisearch=e2e-sitesearch&keymatch=enet%2525252520sysconfig%2525252520missing# and here https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1412093/processor-sdk-am64x-ti-networking-with-enet-cpsw-is-not-available-along-with-ti-industrial-toolkit/5452236#5452236

    In the second thread there is a workaround from that worked for me. I'm not sure how "clean" that workaround is, as it disables some validations if I understood the change correctly. Maybe Tushar could comment on that (the other thread is locked, so can't comment there)?

    Regards,

    Dominic

  • Hi Hongkai,

    As Dominic mentioned, please try the workaround from the above thread (second).

    Regards,
    Aaron

  • Hi Aaron,

    My case is a little different with it, I want to run TCP server and EtherCat Slave on the same core(r5fss0-0). I tried the workaround from the above thread by .

    My project is based on ethercat_slave_beckhoff_ssc_demo of ind_comms_sdk_am243x_09_02_00_15. After updating example.projectspec file, building project successed, then I tried to configure Enet(CPSW) according to ind_comms_sdk_am243x_09_02_00_15\mcu_plus_sdk\examples\networking\lwip\enet_cpsw_tcpserver for adding a Internet port, but it failed, see the capture.

  • Hi Hongkai,

    I believe the failure on adding ENET instance is due to resource (pin) conflicts. If you scroll down, you will see which all pins are getting conflicted with that of EtherCAT. So in the AM243x-EVM, there are a total of 3 ethernet ports, 1 is configured for ICSS, 1 is configured for CPSW and 1 port is shared among both. Since you're using both the ports (1 ICSS + 1 ICSS/CPSW ) for EtherCAT, there will be a conflict when CPSW is configuring the shared port for itself.

    May I know how are you trying to configure your example? Do you need 2 ports for EtherCAT and 2 ports for Enet(CPSW)? Based on your use case, we can provide the suggestion.

    Resolving the conflicts should fix the current issue.

    Regards,
    Aaron

  • Hi Aaron,

    Below picture is my request, thanks!

  • This should be possible by disabling the shared port from the TCP server example. I'll check on this internally and get back to you by Monday.

    Regards,
    Aaron

  • Hi Aaron,

    Have you had any results from your internal disscussions?

  • Hi Hongkai,

    To get the above configuration, you can keep EtherCAT pin configuration as it is and for ENET(CPSW) module, you can configure such that Mac Port 2 [Enet(CPSW) -> MAC Port Config -> MAC Port 2 Config -> Disable Mac Port 2] is disabled.

    Since you're running EtherCAT and TCP server on the same core, recommend to lower the priority of the EtherCAT task.

    Regards,
    Aaron

  • Hi Aaron,

    I did as what you said (Port 2 [Enet(CPSW) -> MAC Port Config -> MAC Port 2 Config -> Disable Mac Port 2] is disabled), but it still doesn't work, see below capture and my example.syscfg

    /**
     * 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 "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "r5fss0-0" --product "INDUSTRIAL_COMMUNICATIONS_SDK_AM243x@09.02.00"
     * @versions {"tool":"1.20.0+3587"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const eeprom          = scripting.addModule("/board/eeprom/eeprom", {}, false);
    const eeprom1         = eeprom.addInstance();
    const flash           = scripting.addModule("/board/flash/flash", {}, false);
    const flash1          = flash.addInstance();
    const led             = scripting.addModule("/board/led/led", {}, false);
    const led1            = led.addInstance();
    const led2            = led.addInstance();
    const led3            = led.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 ethercat        = scripting.addModule("/industrial_comms/ethercat/ethercat", {}, false);
    const ethercat1       = ethercat.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 default_linker  = scripting.addModule("/memory_configurator/default_linker", {}, false);
    const default_linker1 = default_linker.addInstance();
    const general         = scripting.addModule("/memory_configurator/general", {}, false);
    const general1        = general.addInstance();
    const region          = scripting.addModule("/memory_configurator/region", {}, false);
    const region1         = region.addInstance();
    const section         = scripting.addModule("/memory_configurator/section", {}, false);
    const section1        = section.addInstance();
    const section2        = section.addInstance();
    const section3        = section.addInstance();
    const section4        = section.addInstance();
    const section5        = section.addInstance();
    const section6        = section.addInstance();
    const section7        = section.addInstance();
    const section8        = section.addInstance();
    const section9        = section.addInstance();
    const section10       = section.addInstance();
    const section11       = section.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    eeprom1.$name = "CONFIG_EEPROM0";
    
    flash1.$name                  = "CONFIG_FLASH0";
    flash1.peripheralDriver.$name = "CONFIG_OSPI0";
    
    led1.name  = "TPIC2810";
    led1.$name = "CONFIG_LED_DIGITAL_OUTPUT";
    
    led2.$name = "CONFIG_LED_RUN";
    
    led3.name    = "Ioexp";
    led3.ioIndex = 16;
    led3.$name   = "CONFIG_LED_ERROR";
    
    gpio1.$name                    = "CONFIG_GPIO0";
    led2.peripheralDriver          = gpio1;
    gpio1.pinDir                   = "OUTPUT";
    gpio1.useMcuDomainPeripherals  = true;
    gpio1.MCU_GPIO.$assign         = "MCU_GPIO0";
    gpio1.MCU_GPIO.gpioPin.$assign = "MCU_SPI1_CS0";
    
    i2c1.$name               = "CONFIG_I2C0";
    eeprom1.peripheralDriver = i2c1;
    i2c1.I2C.$assign         = "I2C0";
    i2c1.I2C.SCL.$assign     = "I2C0_SCL";
    i2c1.I2C.SDA.$assign     = "I2C0_SDA";
    i2c1.I2C_child.$name     = "drivers_i2c_v0_i2c_v0_template1";
    
    i2c2.$name            = "CONFIG_I2C1";
    led1.peripheralDriver = i2c2;
    led3.peripheralDriver = i2c2;
    i2c2.I2C.$assign      = "I2C1";
    i2c2.I2C.SCL.$assign  = "I2C1_SCL";
    i2c2.I2C.SDA.$assign  = "I2C1_SDA";
    i2c2.I2C_child.$name  = "drivers_i2c_v0_i2c_v0_template2";
    
    ethercat1.$name              = "CONFIG_ETHERCAT0";
    ethercat1.instance           = "ICSSG1";
    ethercat1.ethphy[0].$name    = "CONFIG_ETHPHY0";
    ethercat1.ethphy[1].$name    = "CONFIG_ETHPHY1";
    ethercat1.ethphy[1].mdioPort = 3;
    
    pruicss1.iepSyncMode                     = scripting.forceWrite(true);
    ethercat1.icss                           = pruicss1;
    pruicss1.$name                           = "CONFIG_PRU_ICSS1";
    pruicss1.AdditionalICSSSettings[0].$name = "CONFIG_PRU_ICSS_IO0";
    
    debug_log.enableUartLog        = true;
    debug_log.enableCssLog         = false;
    debug_log.uartLog.$name        = "CONFIG_UART0";
    debug_log.uartLog.UART.$assign = "USART0";
    
    const uart_v0_template  = scripting.addModule("/drivers/uart/v0/uart_v0_template", {}, false);
    const uart_v0_template1 = uart_v0_template.addInstance({}, false);
    uart_v0_template1.$name = "drivers_uart_v0_uart_v0_template0";
    debug_log.uartLog.child = uart_v0_template1;
    
    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              = 21;
    
    mpu_armv75.$name    = "CONFIG_MPU_REGION4";
    mpu_armv75.baseAddr = 0x80000000;
    mpu_armv75.size     = 31;
    
    default_linker1.$name = "memory_configurator_default_linker0";
    
    general1.$name        = "CONFIG_GENERAL0";
    general1.stack_size   = 32768;
    general1.linker.$name = "TIARMCLANG0";
    
    region1.$name                               = "MEMORY_REGION_CONFIGURATION0";
    region1.memory_region.create(9);
    region1.memory_region[0].type               = "TCMA_R5F";
    region1.memory_region[0].$name              = "R5F_VECS";
    region1.memory_region[0].size               = 0x40;
    region1.memory_region[0].auto               = false;
    region1.memory_region[1].type               = "TCMA_R5F";
    region1.memory_region[1].$name              = "R5F_TCMA";
    region1.memory_region[1].size               = 0x7FC0;
    region1.memory_region[2].type               = "TCMB_R5F";
    region1.memory_region[2].$name              = "R5F_TCMB0";
    region1.memory_region[2].size               = 0x8000;
    region1.memory_region[3].$name              = "NON_CACHE_MEM";
    region1.memory_region[3].auto               = false;
    region1.memory_region[3].manualStartAddress = 0x70060000;
    region1.memory_region[3].size               = 0x8000;
    region1.memory_region[4].$name              = "MSRAM";
    region1.memory_region[4].auto               = false;
    region1.memory_region[4].manualStartAddress = 0x70080000;
    region1.memory_region[4].size               = 0x80000;
    region1.memory_region[5].type               = "FLASH";
    region1.memory_region[5].$name              = "FLASH";
    region1.memory_region[5].auto               = false;
    region1.memory_region[5].manualStartAddress = 0x60100000;
    region1.memory_region[5].size               = 0x80000;
    region1.memory_region[6].$name              = "USER_SHM_MEM";
    region1.memory_region[6].auto               = false;
    region1.memory_region[6].manualStartAddress = 0x701D0000;
    region1.memory_region[6].size               = 0x180;
    region1.memory_region[6].isShared           = true;
    region1.memory_region[6].shared_cores       = ["m4fss0-0","r5fss0-1","r5fss1-1"];
    region1.memory_region[7].auto               = false;
    region1.memory_region[7].manualStartAddress = 0x701D0180;
    region1.memory_region[7].size               = 0x3E80;
    region1.memory_region[7].$name              = "LOG_SHM_MEM";
    region1.memory_region[7].isShared           = true;
    region1.memory_region[7].shared_cores       = ["m4fss0-0","r5fss0-1","r5fss1-1"];
    region1.memory_region[8].auto               = false;
    region1.memory_region[8].manualStartAddress = 0x701D4000;
    region1.memory_region[8].size               = 0xC000;
    region1.memory_region[8].$name              = "RTOS_NORTOS_IPC_SHM_MEM";
    region1.memory_region[8].isShared           = true;
    region1.memory_region[8].shared_cores       = ["m4fss0-0","r5fss0-1","r5fss1-1"];
    
    section1.$name                        = "Vector Table";
    section1.load_memory                  = "R5F_VECS";
    section1.group                        = false;
    section1.output_section.create(1);
    section1.output_section[0].$name      = ".vectors";
    section1.output_section[0].palignment = true;
    
    section2.$name                        = "Text Segments";
    section2.load_memory                  = "MSRAM";
    section2.output_section.create(5);
    section2.output_section[0].$name      = ".text.hwi";
    section2.output_section[0].palignment = true;
    section2.output_section[1].$name      = ".text.cache";
    section2.output_section[1].palignment = true;
    section2.output_section[2].$name      = ".text.mpu";
    section2.output_section[2].palignment = true;
    section2.output_section[3].$name      = ".text.boot";
    section2.output_section[3].palignment = true;
    section2.output_section[4].$name      = ".text:abort";
    section2.output_section[4].palignment = true;
    
    section3.$name                        = "Code and Read-Only Data";
    section3.load_memory                  = "MSRAM";
    section3.output_section.create(2);
    section3.output_section[0].$name      = ".text";
    section3.output_section[0].palignment = true;
    section3.output_section[1].$name      = ".rodata";
    section3.output_section[1].palignment = true;
    
    section4.$name                        = "Data Segment";
    section4.load_memory                  = "MSRAM";
    section4.output_section.create(1);
    section4.output_section[0].$name      = ".data";
    section4.output_section[0].palignment = true;
    
    section5.$name                                   = "Memory Segments";
    section5.load_memory                             = "MSRAM";
    section5.output_section.create(3);
    section5.output_section[0].$name                 = ".bss";
    section5.output_section[0].palignment            = true;
    section5.output_section[0].output_sections_start = "__BSS_START";
    section5.output_section[0].output_sections_end   = "__BSS_END";
    section5.output_section[1].$name                 = ".sysmem";
    section5.output_section[1].palignment            = true;
    section5.output_section[2].$name                 = ".stack";
    section5.output_section[2].palignment            = true;
    
    section6.$name                                    = "Stack Segments";
    section6.load_memory                              = "MSRAM";
    section6.output_section.create(5);
    section6.output_section[0].$name                  = ".irqstack";
    section6.output_section[0].output_sections_start  = "__IRQ_STACK_START";
    section6.output_section[0].output_sections_end    = "__IRQ_STACK_END";
    section6.output_section[0].input_section.create(1);
    section6.output_section[0].input_section[0].$name = ". = . + __IRQ_STACK_SIZE;";
    section6.output_section[1].$name                  = ".fiqstack";
    section6.output_section[1].output_sections_start  = "__FIQ_STACK_START";
    section6.output_section[1].output_sections_end    = "__FIQ_STACK_END";
    section6.output_section[1].input_section.create(1);
    section6.output_section[1].input_section[0].$name = ". = . + __FIQ_STACK_SIZE;";
    section6.output_section[2].$name                  = ".svcstack";
    section6.output_section[2].output_sections_start  = "__SVC_STACK_START";
    section6.output_section[2].output_sections_end    = "__SVC_STACK_END";
    section6.output_section[2].input_section.create(1);
    section6.output_section[2].input_section[0].$name = ". = . + __SVC_STACK_SIZE;";
    section6.output_section[3].$name                  = ".abortstack";
    section6.output_section[3].output_sections_start  = "__ABORT_STACK_START";
    section6.output_section[3].output_sections_end    = "__ABORT_STACK_END";
    section6.output_section[3].input_section.create(1);
    section6.output_section[3].input_section[0].$name = ". = . + __ABORT_STACK_SIZE;";
    section6.output_section[4].$name                  = ".undefinedstack";
    section6.output_section[4].output_sections_start  = "__UNDEFINED_STACK_START";
    section6.output_section[4].output_sections_end    = "__UNDEFINED_STACK_END";
    section6.output_section[4].input_section.create(1);
    section6.output_section[4].input_section[0].$name = ". = . + __UNDEFINED_STACK_SIZE;";
    
    section7.$name                        = "Initialization and Exception Handling";
    section7.load_memory                  = "MSRAM";
    section7.output_section.create(3);
    section7.output_section[0].$name      = ".ARM.exidx";
    section7.output_section[0].palignment = true;
    section7.output_section[1].$name      = ".init_array";
    section7.output_section[1].palignment = true;
    section7.output_section[2].$name      = ".fini_array";
    section7.output_section[2].palignment = true;
    
    section8.$name                       = "User Shared Memory";
    section8.type                        = "NOLOAD";
    section8.load_memory                 = "USER_SHM_MEM";
    section8.group                       = false;
    section8.output_section.create(1);
    section8.output_section[0].$name     = ".bss.user_shared_mem";
    section8.output_section[0].alignment = 0;
    
    section9.$name                       = "Log Shared Memory";
    section9.load_memory                 = "LOG_SHM_MEM";
    section9.type                        = "NOLOAD";
    section9.group                       = false;
    section9.output_section.create(1);
    section9.output_section[0].$name     = ".bss.log_shared_mem";
    section9.output_section[0].alignment = 0;
    
    section10.$name                       = "IPC Shared Memory";
    section10.type                        = "NOLOAD";
    section10.load_memory                 = "RTOS_NORTOS_IPC_SHM_MEM";
    section10.group                       = false;
    section10.output_section.create(1);
    section10.output_section[0].$name     = ".bss.ipc_vring_mem";
    section10.output_section[0].alignment = 0;
    
    section11.$name                       = "Non Cacheable Memory";
    section11.load_memory                 = "NON_CACHE_MEM";
    section11.group                       = false;
    section11.type                        = "NOLOAD";
    section11.output_section.create(1);
    section11.output_section[0].$name     = ".bss.nocache";
    section11.output_section[0].alignment = 0;
    
    /**
     * 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.
     */
    flash1.peripheralDriver.OSPI.$suggestSolution                = "OSPI0";
    flash1.peripheralDriver.OSPI.CLK.$suggestSolution            = "OSPI0_CLK";
    flash1.peripheralDriver.OSPI.CSn0.$suggestSolution           = "OSPI0_CSn0";
    flash1.peripheralDriver.OSPI.DQS.$suggestSolution            = "OSPI0_DQS";
    flash1.peripheralDriver.OSPI.D7.$suggestSolution             = "OSPI0_D7";
    flash1.peripheralDriver.OSPI.D6.$suggestSolution             = "OSPI0_D6";
    flash1.peripheralDriver.OSPI.D5.$suggestSolution             = "OSPI0_D5";
    flash1.peripheralDriver.OSPI.D4.$suggestSolution             = "OSPI0_D4";
    flash1.peripheralDriver.OSPI.D3.$suggestSolution             = "OSPI0_D3";
    flash1.peripheralDriver.OSPI.D2.$suggestSolution             = "OSPI0_D2";
    flash1.peripheralDriver.OSPI.D1.$suggestSolution             = "OSPI0_D1";
    flash1.peripheralDriver.OSPI.D0.$suggestSolution             = "OSPI0_D0";
    ethercat1.PRU_ICSSG1_MDIO.$suggestSolution                   = "PRU_ICSSG1_MDIO0";
    ethercat1.PRU_ICSSG1_MDIO.MDC.$suggestSolution               = "PRG1_MDIO0_MDC";
    ethercat1.PRU_ICSSG1_MDIO.MDIO.$suggestSolution              = "PRG1_MDIO0_MDIO";
    ethercat1.PRU_ICSSG1_IEP.$suggestSolution                    = "PRU_ICSSG1_IEP0";
    ethercat1.PRU_ICSSG1_IEP.EDC_LATCH_IN0.$suggestSolution      = "PRG1_PRU0_GPO18";
    ethercat1.PRU_ICSSG1_IEP.EDC_LATCH_IN1.$suggestSolution      = "PRG1_PRU0_GPO7";
    ethercat1.PRU_ICSSG1_IEP.EDC_SYNC_OUT0.$suggestSolution      = "PRG1_PRU0_GPO19";
    ethercat1.PRU_ICSSG1_IEP.EDC_SYNC_OUT1.$suggestSolution      = "PRG1_PRU0_GPO17";
    ethercat1.PRU_ICSSG1_IEP.EDIO_DATA_IN_OUT28.$suggestSolution = "PRG1_PRU0_GPO9";
    ethercat1.PRU_ICSSG1_IEP.EDIO_DATA_IN_OUT29.$suggestSolution = "PRG1_PRU0_GPO10";
    ethercat1.PRU_ICSSG1_IEP.EDIO_DATA_IN_OUT30.$suggestSolution = "PRG1_PRU1_GPO9";
    ethercat1.PRU_ICSSG1_IEP.EDIO_DATA_IN_OUT31.$suggestSolution = "PRG1_PRU1_GPO10";
    ethercat1.PRU_ICSSG1_MII_G_RT.$suggestSolution               = "PRU_ICSSG1_MII_G_RT";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_RXD0.$suggestSolution     = "PRG1_PRU0_GPO0";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_RXD1.$suggestSolution     = "PRG1_PRU0_GPO1";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_RXD2.$suggestSolution     = "PRG1_PRU0_GPO2";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_RXD3.$suggestSolution     = "PRG1_PRU0_GPO3";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_RXDV.$suggestSolution     = "PRG1_PRU0_GPO4";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_RXER.$suggestSolution     = "PRG1_PRU0_GPO5";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_RXLINK.$suggestSolution   = "PRG1_PRU0_GPO8";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_TXD0.$suggestSolution     = "PRG1_PRU0_GPO11";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_TXD1.$suggestSolution     = "PRG1_PRU0_GPO12";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_TXD2.$suggestSolution     = "PRG1_PRU0_GPO13";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_TXD3.$suggestSolution     = "PRG1_PRU0_GPO14";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII0_TXEN.$suggestSolution     = "PRG1_PRU0_GPO15";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_RXD0.$suggestSolution     = "PRG1_PRU1_GPO0";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_RXD1.$suggestSolution     = "PRG1_PRU1_GPO1";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_RXD2.$suggestSolution     = "PRG1_PRU1_GPO2";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_RXD3.$suggestSolution     = "PRG1_PRU1_GPO3";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_RXDV.$suggestSolution     = "PRG1_PRU1_GPO4";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_RXER.$suggestSolution     = "PRG1_PRU1_GPO5";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_RXLINK.$suggestSolution   = "PRG1_PRU1_GPO8";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_TXD0.$suggestSolution     = "PRG1_PRU1_GPO11";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_TXD1.$suggestSolution     = "PRG1_PRU1_GPO12";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_TXD2.$suggestSolution     = "PRG1_PRU1_GPO13";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_TXD3.$suggestSolution     = "PRG1_PRU1_GPO14";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII1_TXEN.$suggestSolution     = "PRG1_PRU1_GPO15";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII_MR0_CLK.$suggestSolution   = "PRG1_PRU0_GPO6";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII_MR1_CLK.$suggestSolution   = "PRG1_PRU1_GPO6";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII_MT0_CLK.$suggestSolution   = "PRG1_PRU0_GPO16";
    ethercat1.PRU_ICSSG1_MII_G_RT.MII_MT1_CLK.$suggestSolution   = "PRG1_PRU1_GPO16";
    debug_log.uartLog.UART.RXD.$suggestSolution                  = "UART0_RXD";
    debug_log.uartLog.UART.TXD.$suggestSolution                  = "UART0_TXD";
    

  • Since you're running EtherCAT and TCP server on the same core, recommend to lower the priority of the EtherCAT task.

    Why lower the priority of the EtherCAT task? In order to ensure real time and synchronous response, we used DC-Synchronous and give the EtherCAT task the highest priority. Can I understand that you don't recommend running EtherCat and TCP server on the same core? Would it be better if they ran on the different core?

  • Hi Hongkai,

    I did as what you said (Port 2 [Enet(CPSW) -> MAC Port Config -> MAC Port 2 Config -> Disable Mac Port 2] is disabled), but it still doesn't work, see below capture and my example.syscfg
    • Can you show the pins which has the conflicts? You will need to manually make sure the pins and peripherals are configured correctly, avoiding overlaps.
    Why lower the priority of the EtherCAT task? In order to ensure real time and synchronous response, we used DC-Synchronous and give the EtherCAT task the highest priority.
    • You are correct but I was referring to the fact that EtherCAT main loop has no sleeps and hence, it will be running continuously. When PRU is busy with EtherCAT processing, The R5F will be preempted by EtherCAT's higher priority and hence TCP/IP processing/interrupts will be delayed until the EtherCAT (PRU) task completes or is idle.
    Would it be better if they ran on the different core?
    • If the above timing constraint is fine for your use case, then you can use the same core. You will need to make sure that the EtherCAT task doesn't block the TCP/IP task for long periods. The RTOS should ensure that while EtherCAT dominates the execution time, the TCP/IP task still gets enough CPU cycles when PRU is idle or not processing EtherCAT frames. 

    Regards,
    Aaron

  • Can you show the pins which has the conflicts? You will need to manually make sure the pins and peripherals are configured correctly, avoiding overlaps.

  • Okay, I believe you will have to pick the correct pin from the list of pins available for the CPSW example. Right now it is set to 'Any'. Fix this manually and then you should be able to resolve the conflicts.

    Regards,
    Aaron

  • Could you give me a right choice based on TMDS243EVM? that way, I can move on, many thanks!

  • Hi Hongkai,

    I'll check this internally and get back to you.

    Regards,
    Aaron

  • Hi,

    Could you give me a right choice based on TMDS243EVM? that way,

    You can drop down the conflict pin and select pin not used by other IP/instance.

    Do you need RGMII1 and RGMII2 as per my understanding of your use case, it should be

    CPSW-RGMII

    ICSSG1-Port-1-RMII

    ICSSG1-Port-2-RMII

    (+) [FAQ] What Ethernet pinmux combinations are valid on AM64x processors? - Processors forum - Processors - TI E2E support forums

    Regards

    Ashwani

  • Hi Ashwani,

    I tried to config the pins, but there are many conflicts, see the captures. I am not sure if TMDS243EVM can be configured as my case,  

    CPSW-RGMII

    ICSSG1-Port-1-RMII

    ICSSG1-Port-2-RMII

  • Hi,

    Can you quickly try to configure resources here and then take changes in your project ?
    SysConfig

    Regards

    Ashwani

  • Yes, I configured ICSS-EMAC as your picture, but pin conflicts persist. 

    I wondered if it's possible to implement our requirements on the TMDS243EVM.

    If necessary, I can send you my SDK and example.syscfg.

  • If necessary, I can send you my SDK and example.syscfg.

    Can you please connect with TI-FAE ?

    Regards

    Ashwani

  • Hongkai -

     since you have both Ethernet/IP and EtherCAT involved, perhaps you should contact TI Freising Germany's (+) Thomas Leyrer's Profile - Thomas Leyrer - TI E2E support forums from the applications perspective.

  • Thanks Jim!