AM2434: [AM243x] EtherCAT 3-Buffer Swap Sequence Issue in DC Mode upon Packet Loss (SDK 09.02.00.24)

Part Number: AM2434

Hi TI Experts,

We are experiencing a 3-buffer swapping sequence issue on the AM243x EtherCAT slave when running in DC Mode under a noisy environment.

Background: We have upgraded our SDK to ind_comms_sdk_am243x_09_02_00_24, which includes the fix for PINDSW-8246 (referenced from this E2E thread). However, we observed another buffer swap anomaly when a packet is dropped due to noise.

Our Test Configuration:

Parameter Configuration / Value
Operation Mode DC Mode
Sync0 Interval 2 ms
SM2 Packet Frequency 2 SM2 packets between Sync0 signals (500 us interval)
Payload Data A WatchDog (WD) counter (0~15 cycle) incrementing at each interpolation time.

 

Observation & Test Results:

We monitored the received SM2 packets and their payload (WD values) across two different environments.

Sync0 Cycle Normal Environment (No Noise) Noisy Environment (Packet Loss Occurs)
Cycle N 2 packets (WD: 1, 1) 2 packets (WD: 1, 1)
Cycle N+1 2 packets (WD: 2, 2) 2 packets (WD: 2, 2)
Cycle N+2 2 packets (WD: 3, 3) 2 packets (WD: 3, 3)
Cycle N+3 2 packets (WD: 4, 4) 1 packet (WD: 4, X) -> Packet Drop
Cycle N+4 2 packets (WD: 5, 5) 2 packets (WD: 3, 5) -> Stale Data!
Cycle N+5 2 packets (WD: 6, 6) 2 packets (WD: 6, 6)

 

Technical Finding (Root Cause Analysis): Under the noisy environment, when an SM2 packet is dropped (Cycle N+3), the first SM2 packet in the subsequent cycle (Cycle N+4) reads stale data (WD=3 instead of WD=5), while the second packet reads correctly (WD=5).

We tracked the 3-buffer index returned by bsp_get_process_data_address() (mapped to 0~2):

  • Normal Index Sequence: 2 -> 1 -> 0 -> 2 -> 1 -> 0

  • Error Index Sequence (when WD=3 reappears): 2 -> 1 -> 0 -> 2 -> 0 -> 1


image.png
Questions:

  1. Is this buffer index swapping failure (2->0->1) a known issue when an SM2 packet is missed in DC Mode?

  2. Are there any workaround configurations or patch updates in the EtherCAT HAL/driver to force a correct buffer pointer reset/resync upon packet loss, thereby preventing the application from reading stale data?

Thanks for your support.