Есть RTL-код USB функции, зашиваемый в FPGA, при подключении к хосту начинается процесс енумерации. Выполняется следующая последовательность: 1. setup-data0(get_descriptor)-ack 2. in-data1-ack 3. out-data1(null packet)-ack 4. reset line 5. setup-data0(set_address)-ack 6. in-data1(null packet)-ack 7. setup(по присвоенному адресу 0x3)-data0(get_descriptor)-ack
На следующем шаге начинаются проблемы 8. in(address-0x3)-data1 - ... Хост не отвечает подтверждением на отправленный ему дескриптор. Смотрел на осциллографе - пакет правильный, PID на месте, CRC сходится, межпакетный интервал - тоже. При этом, если вместо дескриптора отправить ему нулевой пакет данных, то подтверждение появится и перейдем к шагу 9.
9. out-data1(null packet)-ack
Из этого возникают следующие вопросы: 1. точно ли в п.8 нужно отправлять дескриптор 2. зачем хост отвечает подтверждением на нулевой пакет и продолжает процесс енумерации, если требовал дескриптор 3. зачем вообще нужно два раза отправлять дескриптор?
Ответьте, пожалуйста, если кто-нибудь сталкивался с чем-нибудь подобным или знает в чем тут дело.
|