это может быть глупый вопрос,
Я отлаживал USB-накопитель на платформе ARM-CortexM4 (серия STM32F4), на которой работает встроенный Linux. ARM работает как USB-хост и пытается обмениваться данными с флэш-накопителем на полной скорости USB (12 Мбит / с).
Теперь вот в чем проблема. После успешного перечисления и нескольких команд SCSI через BULK передачи, емкость и все данные могут быть прочитаны правильно. Однако примерно через 15 секунд, когда я снова пытаюсь отправить эти SCSI-команды (при тех же условиях), хост-контроллер USB просто возвращает «Transaction Error», что выглядит так, будто устройство больше не отвечает на BULK-передачи (не ACKing), и время ожидания хост-контроллера истекло. Вопрос в том, существует ли какой-либо механизм тайм-аута для класса запоминающих устройств USB или системы SCSI, такой, что после тайм-аута система должна быть повторно перечислена или повторно проверена, иначе она больше не будет отвечать?
Я понимаю, что это может быть из-за глупой ошибки в моей программе или из-за некоторых ограничений на конкретное оборудование. Однако, когда я использовал модуль usbmon в Linux на ПК для захвата передач на одном и том же флэш-накопителе, я вижу, что операционная система фактически отправляет команду проверки последовательности (Read-max-Lun, а затем Test-unit-ready) каждые 5 сек, что может быть причиной того, что флешка не выходит из строя на моем ПК.
Спасибо! Я с нетерпением жду ответов.