Разрушенное Квитирование ACK
Передатчик последний и единственный, кто знает наверняка, была ли транзакция успешной, что обеспечивается получением квитирования ACK. Потерянное или разрушенное квитирование ACK может вызвать временную потерю синхронизации между передатчиком и приемником как показано на Рисунок 8-18. Здесь передатчик выдает пакет достоверных данных, который успешно принят приемником; в то время как квитирование ACK разрушено.
Рисунок 8-18. Разрушенное Квитирование ACK с Повторением
В конце транзакции <i>, имеется временно теряется согласованность между передатчиком и приемником, из-за несоответствия их бит последовательности. Приемник получил "хорошие" данные, но передатчик не знает, были ли данные успешно посланы. В следующей транзакции, передатчик снова пошлет предыдущие данные, используя предыдущий PID DATA0. Бит последовательности приемника и PID данных не совпадут, и приемник узнает, что он уже принял эти данные. Следовательно, он отбрасывает входящий пакет данных и не переключает бит последовательности. Приемник затем выдает ACK, чтобы передатчик считал повторенную транзакцию успешно принятой. Получение ACK заставляет передатчик переключать бит последовательности. В начале транзакции <i+1>, биты последовательности переключены и снова синхронизированы.
Передатчик данных должен гарантировать, что все повторно переданные пакеты данных, имеют ту же длину что и первоначальная транзакция. Если передатчик данных неспособен на это, из-за таких проблем как условие переполнения буфера, он должен прерывать транзакцию, генерируя нарушение вставки бит. Это вызывает обнаруживаемую ошибку в приемнике и гарантирует, что частичный пакет не будет интерпретироваться как хороший пакет. Передатчик не должен пытаться вызывать ошибку в приемнике, посылая заранее известный плохой CRC. Комбинация плохого пакета с “плохим” CRC может интерпретироваться приемником как хороший пакет.