Сам когдато около месяца пытался заставить работать usb-контроллер

И заставил - так что и у вас получится

Настройку конечных точек проводил только по запросу
Код
case SET_CONFIGURATION:
{
switch (wValue)
{ case unconfigure_device: Configuration_flag=0;
OFF_all_endpoints();
ZeroLenthPacket(ControlIN);
break;
case configure_device: Configuration_flag=1;
Endpoints_ini();
ZeroLenthPacket(ControlIN);
break;
};
В Endpoints_ini() настраиваю все используемые конечные точки в порядке их нумерации (control out, control in, ep1, ep2 и т.д.), и выключаю все неиспользуемые (в isp1181a их всего 16)!!!
Когдато читал что после этого микросхема распределит память и конечные точки будут доступны.
При приёме данных читал регистр прерываний, определял источник (ер2), проверял на заполненость буффера ер2. Если в одном из них были данные то считывал их и очищал буффер конечной точки. Если были прерывания но буффера был пустые то просто подавал команду очистки.
При передаче данных записывал в буффер данные и подтверждал их. После этого проводил опрос статуса конечной точки. Если обнаруживал что буффера пусты то передача завершена. Если это был последний пакет размера=размеру конечной точки то подавал пакет нулевой длины.
В таком исполнении мне удалось наладить передачу данных.
В вашем случае все эти действия можно выполнять не опросом а по прерываниям.
Вообще если вы говорите что при одинарной буферизации всё работает а при двойной нет то нужно смотреть в сторону настроек конечной точки

Или тщательней проводить анализ буфферов

Цитата(ArkZel @ Feb 26 2009, 17:20)

После того как я принимаю прерывание от контроллера что приняты новые данные. Данные не забираю, но флаг прерывания сбрасываю. После этого хост ничего мне не передает (т.к. нового прерывания по этой конечной точке мне не приходит). Пробовал выставлять ACK после приема первого прерывания результат тот же. А двойную буферизацию я включаю еше до того как устанавливаю бит ENABLE = 1 в регистре Endpoint Type). Так что судя по всему хост следующие 512 байт мне не передает, до тех пор пока я не заберу предыдущие данные. А если я их забираю то новые данные поступают мне опять в BUF0, а не в BUF1 как бы этого не хотелось.
По симптомам похоже что у вас нет двойной буферизации.
А хост не может послать в заполненый буффе данные (иначе он слал-бы их во второй буффер)
У вас чото с настройками ЕР не то