Про END_BUS_RES не знал, добавил но ситуация такая же.
1 получаю установочный пакет, разбираю его, хост просит девайс дескриптор.
2 проверяю бит AT91C_UDP_TXPKTRDY и AT91C_UDP_RXSUSP
Код
while(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXPKTRDY){if( AT91C_BASE_UDP->UDP_ISR & AT91C_UDP_RXSUSP ) return;}
3 заполняю буфер , проверяю бит AT91C_UDP_TXCOMP , сбрасываю если надо.
Код
if (AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP) {
AT91C_BASE_UDP->UDP_CSR[EP] &= ~(AT91C_UDP_TXCOMP);
while (AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP);
}//end if
4 устанавливаю AT91C_UDP_TXPKTRDY
Код
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_TXPKTRDY;
5 жду подтверждения получения хостом данных, или сброс, если сброс то вызываю функцию сброса.
Код
while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP)){
if (AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_RX_DATA_BK0) {
AT91C_BASE_UDP->UDP_CSR[EP] &= ~(AT91C_UDP_RX_DATA_BK0);
return;
}//end if
if (AT91C_BASE_UDP->UDP_ISR & AT91C_UDP_ENDBUSRES){
reset_status = 1;
return;
}//end bus reset
}//end while
Ситуации в итоге такая: размер дескриптора конфигурации 18 байт, первые 8 он забирает с подтверждением,
следующие 8 байт не берет (подтверждения на них нет AT91C_UDP_TXCOMP) иногда присылает _ENDBUSRES,
но после сброса ситуация не меняется, берет первые 8 байт а вторую посылку нет подтверждения.
Работа с usb, что то вроде кота в мешке, что там происходит, установил монитор но он позволяет наблюдать
только после успешной конфигурации, может есть программы которые позволяет просмотреть что там происходит?