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.

AM3356: EtherNet/IP ACD function

Part Number: AM3356

Hi,

Let me talk about ACD of EtherNet/IP.

EtherNet/IP ACD function is necessary to keep track of "which status" for duplication detected.

① Active Phase: IP duplication detection at device activation timing
② Passive Phase: IP duplicate detection after IP address determination & connection connection
③ Semi-Active Phase: IP duplication detection during connection

I think this is defined in PRU-ICSS-SW for EtherNet/IP

○eip_types.h
C:\ti\PRU-ICSS-EthernetIP_Adapter_01.00.02.00\third_party\protocols\ethernetip_adapter\include

typedef struct _CLASS_TCP_LAST_CONFLICT_DETECTED
{
USINT AcdActivity;
USINT RemoteMAC[6];
USINT ArpPdu[28];
}CLASS_TCP_LAST_CONFLICT_DETECTED;

We could verify that the structure definition corresponding to "in which status" exists in the AcdActivity of the PRU-ICSS-SW source.

 
Does "status control" function to determine status and ARP transmission/reception function
depending on status include for these ①,②,③ ?

Best Regards
Hiroyasu

  • The RTOS team have been notified. They will respond here.
  • Hirayasu-san, my apology but I don't understand the question.. Are you asking if there is a function implementing a "status control"? if so, I see we have

    EIP_VOID EIPHAL_getInterfaceConfigACDStatus(DWORD *acdStatus)

    {

    *acdStatus |= ifConnfigACDStat;

    }

    where is defined as: extern DWORD ifConnfigACDStat, but I don't see it is used. I assume it is not implemented but, ready to be implemented by the application.

    thank you,

    Paula

     

     

  • Hi, Paula-san

    Thank you for your reply !

    I'm sorry.
    The point of my question is whether the user needs to set up in user's application code for
    Active/Passive/Semi-Active Phase.
    Do you mean user call only EIPHAL_getInterfaceConfigACDStatus() for these?

    Best Regards
    Hiroyasu
  • Hiroyasu-san, I will double check with the developers, but from code inspection, I think EIPHAL_getInterfaceConfigACDStatus() is a good candidate to implement user's application code for Active/Passive/Semi-Active Phase

    thank you,
    Paula
  • Hi, Paula-san

    Thank you so much for your reply.
    O.K. I wait for your answer.

    Best Regards
    Hiroyasu

  • Hi Hiroyasu-san, a comment I got from our developers for your information.
    ACD bit toggle is currently being implemented for our next EIP release. Here, API EIPHAL_setACDEnable() is used, and user will be able to choose : 0 : disable | 1 : enable it via UART menu.

    Thank you,
    Paula
  • Hi, Paula-san

    Thank you for your reply !

    I saw EIPHAL_setACDEnable() of Source code in current released SDK.
    I understand This API store data to Flash memory.
    ACD function should be set and enabled after read from Flash.

    /* Read ACD Conflict detectd bit from SPI Flash*/
    Board_flashRead(flashHandle, SPI_EEPROM_ACD_CONFLICT_OFFSET,
    (uint8_t *)& eipDevInitConfig.acdConflictDetails,
    sizeof(CLASS_TCP_LAST_CONFLICT_DETECTED), NULL);


    If this set is done, ARP transmission/reception should be O.K. for Active/Passive/Semi-Active Phase

    This understanding is correct ??

    Best Regards
    Hiroyasu

  • Hi Hiroyasu, from codec inspection in our latest EIP (from GIT) I see:

    EIP_VOID EIPHAL_setACDEnable(EIP_WORD *acdEnable)

    {

    uint32_t blockNum, pageNum;

    Board_flashOffsetToBlkPage(flashHandle, SPI_EEPROM_ACD_OFFSET,

    &blockNum, &pageNum);

    Board_flashEraseBlk(flashHandle, blockNum);

    Board_flashWrite(flashHandle, SPI_EEPROM_ACD_OFFSET,

    (uint8_t *)acdEnable, sizeof(EIP_WORD), NULL);

    }

    This is a little bit different to yours but I assume you are in ISDK 2.1, right?, In any case, yes, this function writes to flash..

    Thank you,

    Paula

  • Hi, Paula-san

    Thank you for your reply.
    I got it.

    and Sorry, Where does AM335x set parameter of AcdActivity in PSDK ?
    I do not see this source code.
    It means This source code should be set for Active Phase face in EIPAPP_getInitParams().

    Board_flashRead(flashHandle, SPI_EEPROM_ACD_CONFLICT_OFFSET,
    (uint8_t *)& eipDevInitConfig.acdConflictDetails,
    sizeof(CLASS_TCP_LAST_CONFLICT_DETECTED), NULL);

    But I do not see source code for Passive/Semi-Active phase.

    Best Regards
    Hiroyasu
  • Hiroyasu-san, as I see it, ACD conflict detection and action, should be implemented by user in the application. But, I will check with our developers it I am missing something or if my understanding is correct, and come back to you.

    Paula
  • Hi Hiroyasu-san, I checked with our developers our understanding, let me summarize it here

    -  API EIPHAL_setACDEnable is used to disable/enable the ACD mechanism. IIRC  this comes to effect once the dut is restarted


    - ACD conflict is store in Flash memory. This information can be obtained by calling EIPHAL_getLastConflictDetails() function in hal.c


    - EIPHAL_getLastConflictDetails() uses CLASS_TCP_LAST_CONFLICT_DETECTED struct, this struct gives the AcdActivity using below values:

    0  - No conflict detected

    1 – Conflict detected during probe phase

    2 – Conflict detected during ongoing detection phase

    3 - Conflict detected during semi-active probe phase

    Hope this helps to clarify, thank you,

    Paula

  • Hi, Paula-san

    Thank you for your great support.

    I understand AcdActivity should be get status EIPHAL_getLastConflictDetails() function in hal.c
    Does it include ARP transmission / reception function according to status?
    Since I could not find the setting part of AcdActivity, I ask you a question.

    Best Regards
    Hiroyasu
  • Hiroyasu-san, no it doesn't. Only the status values I sent before. We know some EIP API's are not correctly documented. We will work on improving this in future releases.

    thank you,

    Paula

  • Hi, Paula-san

    Thank you for your reply.
    I got it.

    Best Regards
    Hiroyasu
  • Part Number: AM3356

    Hi,

    Let me talk about ACD of EtherNet/IP for AM3356.

    ACD status should be send to Master for EtherNet/IP certification.
    Could you tell me your advice how to implement to send ACD status to master ?

    I understand TI does not release this SDK including ACD implement.
    But My customer need this for their certification.

    I need your help. 

    Best Regards
    Hiroyasu