Когда USB-хостам требуется пакет IN нулевой длины в конце передачи Control Read?

Я пишу код для устройства USB. Предположим, что USB-хост запускает передачу управляющего чтения для чтения некоторых данных с устройства, а количество запрашиваемых данных (wLength в пакете установки) кратно максимальному размеру пакета Endpoint 0. Затем, после того как хост получит все данные (в форме нескольких транзакций IN с пакетами данных максимального размера), он инициирует еще одну транзакцию IN, чтобы посмотреть, есть ли еще данные, хотя их не может быть больше?

Вот пример последовательности событий, о которой мне интересно:

Процесс перечисления USB: максимальный размер пакета в конечной точке 0 равен 64.Транзакция SETUP-DATA-ACK запускает передачу управляющего чтения, wLength = 128.Транзакция IN-DATA-ACK доставляет хосту первые 64 байта данных.Транзакция IN-DATA-ACK доставляет хосту последние 64 байта данных.IN-DATA-ACK с пакетом данных нулевой длины? Эта транзакция когда-либо случается?Транзакция OUT-DATA-ACK завершает фазу статуса передачи; передача окончена

Я проверил это на своем компьютере (Windows Vista, если это имеет значение), и ответ былнет: хост был достаточно умен, чтобы знать, что с устройства больше нельзя получить данные, даже если все пакеты, отправленные устройством, были заполнены (максимальный размер разрешен в конечной точке 0). Мне интересно, есть ли хосты, которыене достаточно умен, и попытается выполнить другую транзакцию IN и ожидать получения пакета данных нулевой длины.

Я думаю, что прочитал соответствующие части спецификаций USB 2.0 и USB 3.0 с usb.org, но я не нашел эту проблему решенной. Я был бы признателен, если бы кто-нибудь указал мне правильный раздел в любом из этих документов.

Я знаю, что пакет нулевой длины может быть необходим, если устройство решит отправить меньше данных, чем запрашиваемый хост в wLength.

Я знаю, что мог бы сделать свой код достаточно гибким, чтобы справиться с любым случаем, но я надеюсь, что нет необходимости.

Спасибо всем, кто может ответить на этот вопрос!

Ответы на вопрос(4)

Ваш ответ на вопрос