ИМХО Я использую для проверки CYPRESS Control Panel и свое ПО (драйвер и приложение).
Приложение посылает 512 байт в устройство, на что устройство отдает 512 байт (в устройстве реализован FIFO на 1К, т.о. туда помещаются два пакета). Все это дело повторяю 1000000 раз. Получаю сбой после 30000 раз (код 31), при этом в устройстве данные есть - 64 байта в памяти EP, и (512-64) в FIFO. Но их получить нельзя.
Если использую CYPRESS Control Panel, то ошибка получается быстрее.
Когда в устройстве нет данных, то при попытке читать данные из него получаю - Read IOCTL passed (что в принципе не должно происходить). Т.е. точку прочитали, но данные = 0. По идее, модуль USB, должен выдавать NAK, на все попытки прочитать пустую точку. Если данные в точке есть, то тоже можно получить такую ситуацию, но за один или два запроса данные все забираются из устройства.