As we can see, the packets are lost during a half duplex test.
Hmm... I'm not sure I can see.
Experiment #1 looks like you are testing simultaneous sending and receiving. You could call that "full duplex", except that usually means there is only one "wire" between the two devices. There are two wires in your system.
Experiment #2 only receives.
Are you saying the results { 89, 64, 64 } from #1 are not what you expected: { 101, 0, 3, 0, 255, 255, 255 }?
That would make sense, because SoftwareSerial can only do one thing at a time: RX or TX.
NeoSWSerial works with half-duplex. But the last bytes (0xFF) perceives differently. I think so I didn't work display.
Ok, it looks like Experiment #3 tests simultaneous sending and receiving, and that works correctly.
The 0xFF bytes may be a subtle bug in NeoSWSerial. Try changing line 234 in NeoSWSerial.cpp from this:
char c = rxBuffer[rxTail];
...to this:
uint8_t c = rxBuffer[rxTail];
If this works, it means the char sign extension of 255 to -1 is incorrect. I'll fix that on github too.
I think so I didn't work display.
I don't understand.
Cheers,
/dev