И аппаратный может терять несколько байт. Ты посмотри, как сделан аппаратный UART, и все поймешь. Называется это "самосинхронизация" - принудительный сброс конечного автомата при несоблюдении условий обмена (старт и данные + стоп)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)