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.

DS32ELX0124: Lost Link with DS32ELX0421

Part Number: DS32ELX0124
Other Parts Discussed in Thread: DS32ELX0421

Hi Experts

I have a weird link loss issue between DS32ELX0124 and DS32ELX0421.

Sometimes the link between the DS32ELX0124 and the DS32ELX0421 goes down and cannot be re-established.

If I'm lucky the lock is lost and Register 0x3b changes from 0x61 to 0x70.
I was able to make register dumps of the serializer/deserializer.
There are expected changes in the documented registers but also changes in reserved registers in the deserializer.

If i'm unlucky the lock is still there and no communication takes place.
Receiving only Idle and there is no indication that there is an issue.
Hopefully I can make the register dump in this case soon but this case is even more rare than losing the link with lock lost.

I've tried the following to re-establish the link:
- Reset via RESET# pin on both IC -> No change
- Reset via Reset register on both IC -> No change

Unfortunately I'm unable to re-establish the link in the field other than powering down the serializer (DS32ELX0421) ?!?

The major difficulty is that this issue only occurs in the field with a complete Machine and even then the issue occurs only few times per day.
Multiple unsuccessful attempts were made during the recent years to reproduce this in the lab.

The setup is:
[FPGA] - [DS32ELX0421] - [RJ45 connector] - [RJ45 Cable*] - [RJ45 connector] - [DS32ELX0124] - [FPGA]
With RJ45 cables with different lengths (1m to 10m) and quality (CAT6, 7 and 8).

We were able to reduce the occurrence of the issue with better cables but it still sometimes happen.

It looks like the environment is somehow part of the issue but I'm out of ideas what to do and what to try.

A working reset sequence without powering off the the serializer (which also power off other parts which then require to restart the machine) would be good enough.

Best Regards,
Philipp

Register dump (Serializer)

There are no changes in the DS32ELX0421 between working / not working.

**** DS32ELX 0421 Register Dump ****
      0x_0 0x_1 0x_2 0x_3 0x_4 0x_5 0x_6 0x_7 0x_8 0x_9 0x_a 0x_b 0x_c 0x_d 0x_e 0x_f
0x0_: 0xae 0x00 0x05 0x05 0x04 0x00 0x00 0x01 0x00 0xbc 0x01 0x1c 0x01 0xbc 0x01 0xbc  
0x1_: 0x01 0xbc 0x01 0x00 0x00 0xbc 0x01 0x62 0x00 0x00 0x00 0x00 0x00 0xe0 0x04 0x00  
0x2_: 0x07 0x00 0x00 0x00 0x00 0x00 0x3f 0x00 0x04 0x00 0x0f 0x01 0x00 0x80 0x00 0x38  
0x3_: 0x62 0x02 0x00 0x58 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x4_: 0x55 0x00 0x00 0x37 0x10 0x0f 0x38 0x40 0x02 0x7d 0xc4 0x1a 0x80 0x03 0x19 0x8c  
0x5_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x6_: 0x0c 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0x20 0x03 0x00 0x00 0x00 0x00 0x00 0x00  
0x7_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x8_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x9_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xa_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xb_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xc_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xd_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xe_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xf_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  

Register dump Deserializer

Link up and running

**** DS32ELX 0124 Register Dump ****
      0x_0 0x_1 0x_2 0x_3 0x_4 0x_5 0x_6 0x_7 0x_8 0x_9 0x_a 0x_b 0x_c 0x_d 0x_e 0x_f
0x0_: 0xb0 0x00 0x05 0x05 0x04 0x00 0x00 0x01 0x08 0x7c 0x01 0xd2 0x00 0x83 0x02 0x7c  
0x1_: 0x01 0xbc 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xc0 0x02 0x00  
0x2_: 0x00 0x00 0x00 0x80 0x00 0x00 0x00 0x00 0x28 0x00 0x00 0x09 0x00 0x00 0x10 0x00  
0x3_: 0x00 0x00 0x84 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x61 0x3a 0x00 0x00 0x00  
0x4_: 0x00 0x00 0x11 0x00 0x00 0x00 0x00 0x05 0x50 0x16 0x00 0x00 0x00 0xac 0x8b 0x04  
0x5_: 0xf8 0x7e 0x1f 0x87 0x94 0x9a 0x66 0x97 0x00 0x50 0x97 0x40 0x24 0x88 0x00 0x00  
0x6_: 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x7_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x8_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x9_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xa_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xb_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xc_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xd_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xe_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xf_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  

Link with lost lock

register 0x3b changes toggles between 0x61 / 0x70.

**** DS32ELX 0124 Register Dump ****
      0x_0 0x_1 0x_2 0x_3 0x_4 0x_5 0x_6 0x_7 0x_8 0x_9 0x_a 0x_b 0x_c 0x_d 0x_e 0x_f
0x0_: 0xb0 0x00 0x05 0x05 0x04 0x00 0x00 0x01 0x08 0x7c 0x01 0xd2 0x00 0x83 0x02 0x7c  
0x1_: 0x01 0xbc 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xc0 0x02 0x00  
0x2_: 0x00 0x00 0x00 0x80 0x00 0x00 0x00 0x00 0x28 0x00 0x00 0x09 0x00 0x00 0x10 0x00  
0x3_: 0x00 0x00 0x84 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x70 0x02 0xff 0x0b 0x00  
0x4_: 0x00 0x00 0x11 0x00 0x00 0x00 0x00 0x05 0x50 0x16 0x00 0x00 0x00 0xac 0x8b 0x14  
0x5_: 0xf8 0x7e 0x1f 0x87 0x94 0x9a 0x66 0x97 0x00 0x50 0x97 0x40 0x24 0x88 0x00 0x00  
0x6_: 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x7_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x8_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0x9_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xa_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xb_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xc_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xd_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xe_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  
0xf_: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00  

CDR Event count: 2
Data Event count: 255
Data error count: 11

Schematics

DS32_rx.pdfDS32_tx.pdf

  • Hi Philipp,

    If the issue only happens in the field and you're not able to replicate it in the lab it does seem like the environment is part of the issue (as you mentioned). Is the setup exactly the same between the lab and the field? 

    Also, does the issue improve if you use the shorter cables compared to the longer? What about cables <1 m? Does decreasing the frequency have any effect? There are no other ways to reset the device other than what you've already tried, but have you tried powering down the clock, disabling TxCLKIN, and then toggling them (bits 6 and 5 in register 0x26)?

    Regards,

    I.K. 

  • Hi I.K.

    The Lab setup is data path only. There is no "noise" from high power equipment like drives and dryers.
    I have access to a fully assembled test machine and there I can sometimes reproduce the issue.

    Shorter/other cables were attempted but the results are inconclusive due to machine size.
    I know that in another machine "better" quality cables were required due to longer distances.
    I'll try shorter cables in the same machine/environment next time I'm on site.

    A propos cable length. I have seen that in the software the only register which changes with cable length is Serializer / Register 0x20 / De-Emphasis: 00 / No de-emphasis for cable < 1m to 11 / High for longer cables.
    Do you think it is worth to try also other register settings in Serializer/Deserializer? And if yes which?

    Modifying the frequency is not implemented. It always runs at full speed (312.5 MHz / 3.125 GBps).
    Running in production at decreased frequency is not possible due to bandwidth requirement.
    But do you think it is worth the test anyway?

    I have tried resetting by using reset pin, reset register and power down.
    Disabling the clock is not yet possible. I'm working on implementing it.
    Do I need to send Idle after disabling the clock until lock is acquired or is a specific amount of idles enough to lock?
    I do not have a direct feedback from the deserializer. Is there any feedback available from the serializer side? Remote sense?

    Regards,
    Philipp

  • Hi Phillip,

    If it's indeed a noisy environment that's causing the loss in lock then there aren't any other registers that will help with that. I suspect a lower data rate (just to confirm) and/or smaller cables would help though.

    The only other option I see other than power-cycling the serializier is to try disabling/enabling the clock so that the devices can cycle through the link detect states again. Since you have remote sense enabled, you do not need to send idles as the serializer will automatically send a training pattern to the deserializer. There is some feedback available on the serializer side in registers 0x29 and 0x2A.

    Regards,

    I.K.