В общем я понял суть моей проблемы...
при обработке подтверждения приема я забыл одну деталь... менять направление передачи данных контрольной точки...
Код
//---Обработка подтверждения приема пакета хостом-------------------------------
if ((AT91C_BASE_UDP -> UDP_CSR[i]) & AT91C_UDP_TXCOMP) //Если пришел пакет подтверждения от хоста доставленых ему байтов
{
while (!((AT91C_BASE_US0 -> US_CSR) & AT91C_US_TXRDY));
AT91C_BASE_US0 -> US_THR = 0xF7;
AT91C_BASE_UDP -> UDP_CSR[i] &= (~AT91C_UDP_TXCOMP) & (~0x30); //сбрасываем бит TXCOMP
if (TX_BYTE_COUNT > 0)
{
AT91C_BASE_UDP -> UDP_CSR[i] |= AT91C_UDP_DIR; //меняем направление передачи к хосту
USB_TRANSMIT_EP(); //если оставшиеся байты не переданы то передаем
}
}
Из за отсутствия этой строчки
Код
AT91C_BASE_UDP -> UDP_CSR[i] |= AT91C_UDP_DIR;
ниче не работало в общем...
после этого весь дескриптор устройства отправляется хост его подверждает и присылает далее запрос конфигурации
80 06 00 02 00 00 09 00
))) надеюсь все написанное в этой теме поможет начинающим осваивать USB с нуля