Цитата(VslavX @ Jul 1 2009, 18:08)

А передача по EP прекращается после успешного/ошибочного OUT или результативного IN. NAK на IN не считается ни ошибкой ни результативным, поэтому такой вводной TD не изменяется и остается в списке ED.
Как работает хост - есть Periodic List - это interrupt + isochronous (строго говоря это группа из 32 пересекающихся списков), и есть два списка Bulk List и Control List. Сначала хост обрабатывает Bulk+Control, при достижении времени фрейма некоторого программируемого порога (Periodic Limit) начинается однократная обработка Periodic List. Когда периодический список закончился снова начинается обработка bulk+control. Когда эти списки заканчиваются - их обработка начинается снова/сначала (если не пустые) - и так до самого конца фрейма. Где это явно написано в OHCI-спецификации я не нашел, но фактически это так - иначе оставшуюся bandwidth использовать не получится. Поэтому, если в bulk/control endpoint есть запрос на IN и на него получен NAK - то это не считатся ошибкой, трансфер дескриптор не изменяется и при следующем заходе на список (возможно, в этом же фрейме) IN будет повторен.
Ну с IN`ами вроде разобрались - если девайс занят и данных на передачу нет - сразу после отправки токена IN хост получает токен NAK и повторяет запрос снова. То есть имеем минимальный обмен данными на шине.
А как обстоят дела с OUT транзакциями?
Хост отправляет токен OUT, затем передаёт пакет данных, и только потом получает NAK? Будет ли он сразу же повторять этот OUT снова?
В любом случае, OUT и затем NAK это совершенно пустая трата времени и уменьшение пропускной способности шины.
Это относится к Full Speed USB.
В High Speed вроде этой проблемы можно избежать...