Hi,
There are several possible reasons for a fail.
...(besides PCB layout) bad wiring, wrong cables, wrong termination, too big noise, insufficient filtering, ground loops, bad timing, power supply and so on.
Indeed I tend to say there is no 100.000% reliable communcation interface.
So either live with these errors,
or check on errors (CRC, hash...) and do error handling (dismiss data, re send data...)
That´s one reason why we have protocols.
for a test:
I recommend for sending packets with random data and a hash. So you are able to detect wheter there is a problem with send or receive.
Klaus