Добрый день.
Есть вопросы с работой PDIUSBD12 из микроконтроллера.
Есть устройство с 4-мя bulk EP. Написан свой драйвер для Win 2000/XP.
Не замечал ли кто-нибудь, что контроллер PDIUSBD12 после перевода его в режим DMA и активной работы по EP2 (Main EP) 8 Кбайт в одну сторону и 8 Кбайт в другую, при работе с EP1 отказывается отправлять пакеты?
Ситуация странная, т.к. до начала циклов передачи/отправки по EP2 логика работы с EP1 работает просто замечательно.
Также замечательно проходит обмен и по EP2, причем достигается заявленная инженерами philips/nxp? скорость передачи USB-устройство --> хост и наоборот в 1 Мбайт/cек.
Общая процедура приема пакетов следующая:
void EP1_ReceiveAndSend()
{
unsigned short status;
unsigned short buffer[8]; //заполняется словами
SELECT_EP1OUT(status);
if( status^2 ) //EP1 Out stalled?
{
if( status&1 ) //EP1 buffer full?
{
ReceiveEP1(buffer); //receive buffer, clear buffer
//пакет получен
EP1_Logic(buffer); //процедура анализа и выдачи результата
SELECT_EP1IN(status);
//проверяем, есть ли заполненный и не отправленный буфер у PDIUSBD12 в EP1 Out
if( status&2 )return ; //EP1 In stalled? Да - выход.
while( status&1 ){
//буфер занят? Ждем.
//здесь после активной работы в режиме DMA - проблема
//бит full статуса EP контроллер PDIUSBD12 не сбрасывает - и бесконечное ожидание в цикле
SELECT_EP1IN(status);
if( status&2 )return ; //EP1 In stalled? Да - выход.
}
//отправка данных
SendEP1(buffer); //send buffer, validate buffer
}
}
}
Схема подключения приблизительно такая же как на странице 7 документации PDIUSBD12 (Fig 3. Example of parallel interface to an 80C51 microcontroller). DMACK, DMREQ, EOT = '0'.
Детальную схему подключения к сожалению не могу привести, т.к. есть жадные к успеху конкуренты. (Дело дошло даже до воровства компьютеров

.)
Буду благодарен за разумные предложения.