Сниффер сделал, ошибку нашёл. Спасибо всем за участие и идеи
Движок энумерации делался для MSD, а поскольку MSD не использует всех возможностей шины, то для экономии места в нём были сделаны некоторые упрощения, за ненадобностью. Когда я подставил в движок дескрипторы CDC, то он в тех местах где "упрощено" - стал слать пустые пакеты, типа просто подтверждать приём. За что от Хоста получил Suspend
В общем буду переписывать движок, чтоб был совсем уж универсальный.
Что нового узнал при снятии логов.
1. Suspend в процессе энумерации и работы сам по себе не возникает. Т.е. всё-таки,
это ситуация неправильная. Проверил на PL2303, CP2102, FT232R и AVR-CDC (на ATMega48). Даже к бездействующему устройству непрерывно шлются Sync-пакеты. Только и разницы, что для Low Speed это каждые 8ms, а для Full Speed каждую 1ms.
2. Программа Saleae Logic научилась расшифровывать USB Low Speed и Full Speed, что радует
3. PL2303, CP2102 и FT232R, хоть и USB-COM переходники, но дескрипторы у них не стандартные для CDC (нет функциональных дескрипторов, о которых пишет Агуров, и которые в спецификации CDC), и потому без специально написанного под них драйвера работать напрямую с Windows они не могут.
Зато на Android-смартфоне, все вышеназванные переходники (включая AVR-CDC на Mega48) работают без дополнительных драйверов. Такой вот парадокс