УРА за АКАло.. Может кому то будет полезно...
Регистр USBCTRL в котором устанавливается режим чтения и записи. Эти биты снимаются если при записи записал все байты, или при чтении все прочитал. Но если эти биты оставить (получить длину пакета и выйти, или выйти с ошибкой до окончания чтения), ЛПЦ генерит при запросах какие-то ошибки и мигом происходит Ресет шины.
Команда Сет адрес действительно для насильной установке адреса требует двойного вызова. Потому как при одинарном вызове адрес присвоится только после удачной статус фазы сетап запроса. Что гарантирует ответ АСК по старому адресу и только после этого смену адреса как требует стандарт.
Последний вопрос который меня еще терзает, это очистка клеар регистров. Кто может внести ясность?
вот из мануала
For example, if VICSoftInt = 0x0000 0005 and bit 0 has to be
cleared, VICSoftIntClear = 0x0000 0001 will accomplish this. Before the new clear
operation on the same bit in VICSoftInt using writing into VICSoftIntClear is performed in
the future, VICSoftIntClear = 0x0000 0000 must be assigned. Therefore writing 1 to any
bit in Clear register will have one-time-effect in the destination register
Это верно только про этот регистр, или любой клиар регистр надо очищать, то есть делать вот так
DEVINTCLR = (USB_DEV_CDFULL|USB_DEV_CCEMPT); //clear all command int bits
DEVINTCLR = 0x00; //restore clr register
DEVINTCLR = (USB_DEV_CDFULL|USB_DEV_CCEMPT); //clear all command int bits
иначе повторный вызов не произведет никакой очистки...
Ну и вопрос, есть какой-нибудь усб-снифер, при помощи которого можно прослушать обмен с еще несконфигуренными устройствами? До того как виндоус зарегистрировал устройство? На шине проходит один лишний ресет, хочу понять чем он вызван... а мой снифер не видит подключаемые устройства, только опознанные виндусом

((
П.С Всем спасибо кто учувствовал в дискуссии...