A little while ago, a colleague of mine was working on an RFID driver that uses RS485. We used the Modbus.Net package to handle the communication. One issue we were having though, were what we called "phantom tags".
When reading the holding registers of the RFID panel, we would sometimes get valid register contents but the decoded tag was garbage. Things like no signal strength, a random country code or just a garbage string of numbers. We managed to track down that this was due to the panels sometimes sending some configuration data onto the Modbus line, but even after ignoring that we still sometimes got them.
After quite some searching, we figured out what the culprit was. The compiler had previously suggested to use Span<byte> as the datatype after reading the register contents of an RFID panel. We implemented this some time ago when writing the driver, so we weren't busy with phantom tags back then. We figured out that because we used the Span datatype, it would sometimes read a bit of the register that was still there after having read it before, like some sort of register overflow of some kind. We still haven't completely figured out what the problem was, but after we used a normal byte[] for storing the holding registers result, the phantom tags disappeared.
I can't tell you why the Span<byte> was the problem, all I know is if you are having problems with RFID panels in .NET, maybe check your data types.