Author Topic: MLVDS Issues  (Read 514 times)

0 Members and 1 Guest are viewing this topic.

Offline jjensonTopic starter

  • Newbie
  • Posts: 2
  • Country: us
MLVDS Issues
« on: May 23, 2026, 06:33:26 am »
It probably goes without saying looking at my designs, but I am new to designing boards and working with microcontrollers so if there is anything I should be asking that I'm not I'll take those answers too! With that being said, I am working on an series of boards that talk to each other via a shared MLVDS bus with UART. The chips being used are STM32s and when I test my UART code on NUCLEO boards the commands work very reliably. When I try them on my development boards I get incorrect data. When I use the UART pin headers with the MLVDS chips disconnected from each other, I get 00 no matter what I send though the timing of the received message does match the timing of the sent message. When I use the MLVDS chips, I get somewhat consistently the same incorrect data that moves with what I am sending. Since my code works fine on the NUCLEOs I don't want to get too much into the code since I am assuming its a hardware issue. So all that being said, is there something that jumps out in my schematic and layout that would be causing this behavior? For reference, the bottom layers of the two layer boards are ground and are hidden in the pictures. Any assistance is greatly appreciated!


 

Offline KrudyZ

  • Frequent Contributor
  • **
  • Posts: 340
  • Country: us
Re: MLVDS Issues
« Reply #1 on: May 23, 2026, 05:03:05 pm »
A few things to look into:
It looks like you are using IDC ribbon cable for the link.
Your pinout shows ground, data_h, unused wire, data_l, unused wire, etc.
This will not give you a 100 Ohm differential impedance and your common mode impedance to data_h will be much lower than to data_l.
Additionally you do not mention end termination. Since this is a bi-directional link you will need to have termination on both ends.
This will still leave little stubs for each board, but they look to be about 1 inch, so are likely OK.
Signal integrity will definitely be a thing, since your transceivers are rated at 200 Mbps. The UARTs will do some filtering, if they are designed correctly, but you can't feed them complete garbage.
Running LVDS between boards is doable, but you have relatively low common mode range for the receivers, in this case -1 to 3.4V which is actually pretty good.
Nonetheless, any ground shift between boards can generate false data reception.
Best practices would be to transformer couple, but that requires an encoding scheme like 8B10B. Common mode chokes could be used instead, but are not as effective with multi-drop, since you can't put termination behind every single one.
If this needs to run in a very noisy environment, you might want to switch to RS485 transceivers.
To debug this, I would suggest taking a direct measurement on the UART lines and if you see something unexpected, look at the LVDS lines.
Probing needs to be good, i.e. fast enough probe and scope with low impedance grounding of the probe. Throw away the 6 inch ground lead...

Edit: I just noticed the analog switch you use to connect a termination resistor. Assuming that you only have the last one turned on, you should be OK. However, this further reduces your common mode range as the chip will clip negative excursions.
« Last Edit: May 23, 2026, 05:15:57 pm by KrudyZ »
 

Offline jjensonTopic starter

  • Newbie
  • Posts: 2
  • Country: us
Re: MLVDS Issues
« Reply #2 on: May 27, 2026, 04:55:10 am »
Thank you for your recommendations. The issue ended up being in the code/config after all. The fix was that at some point I had set the HSI calibration to 16 rather than it's default which was causing baud rate issues. In future revision of the boards I will definitely incorporate your feedback. Thanks again.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf

 

- - -
-->