Уже не удобно заводить топики на эту тему, потому что я копаюсь с USB VCP+Mass Storage уже почти год(!), периодически кажется что всё работает как надо, но каждый раз вылезает новая проблема.
Суть в следующем: VCP работает некоторое время. Т.е. программа на стороне ПК открывает порт, засылает данные, получает ответ, и закрывает порт. Но через некоторое кол-во таких транзакций - обмен прекращается. ПК перестает забирать данные из End Point (EP) устройства. При этом регистры USB устройства находятся в правильном состоянии (EP_TX_Status=VALID и EP_TX_Count>0 в ), т.е. устройство хочет передать данные, а Windows не хочет почему-то их забирать. При этом порт продолжает нормально открываться и закрываться. Данные уходят в VCP, их видит USB сниффер, данные уходят в устройство, но конечная точка устройства не опрашивается. После программного перезапуска устройства (перезапуска драйвера устройства на стороне ПК), - не принятые данные дочитываются хостом (USB сниффер показывает что от устройства приняты данные, которые должны были придти в ответ на запрос, до перезапуска).
В устройстве есть следующие особенности : 1. Асинхронно с операциями USB, в устройстве выполняются другие задачи на время активности которых прерывания от USB отключаются. 2. Как написано выше - в устройстве кроме интерфейса VCP есть интерфейс MASS STORAGE. ( Есть ощущение, что сбои возникают чаще, кода Mass Srorage находится в состоянии "Диск откючен/NO Media In Device", но это не подтверждено).
Не сталкивался ли кто либо с ситуацией, что драйвер перестаёт опрашивать конечные точки, которые казалось бы должен опрашивать? Знает ли кто либо какие времена задержек допустимы для VCP и Mass Srorage, т.е. на какое кол-во времени программа в контроллере может задерживать обработку запросов от Хоста, чтобы не провоцировать тем самым какие либо Soft Reset?
|