Цитата(sonycman @ Feb 27 2012, 11:20)

Конечно получилось, но на самом деле всё это работает не совсем так, как описано в документации.
Большое спасибо за ответ и пример кода - Вы вселили в меня уверенность

Cегодня утром сделал свой вариант "программной" двойной буферизации. Используется тоже два буфера, только по готовности передатчика "тоглится" не SW_BUF (RX_DTOG) , а статус передатчика (NAK->VALID), ну и при этом предварительно записывается дескриптор второго буфера (это единственный недостаток по сравнению с аппаратным DBL_BUF - запись двух дополнительных слов). Вообще, таким программным методом можно сделать и "тройную" и "квадро" буферизацию - насколько локальной памяти контроллера хватит.
Потом еще покопался с аппаратной буферизацией. В-общем, дело оказалось в том, что первая транзакция - она не такая как все, и это написано в документации (читать просто нужно было очень внимательно). После первой транзакции передатчик не переходит VALID->NAK если DTOG_TX==SW_BUF и, соответственно не останавливается, - шурует еще следующий буфер и еще один (если SW_BUF не изменить).
В-общем, сейчас получилось два работающих варианта - двойная аппаратная и N-кратная софтверная буферизации. Анализатор, кстати, отличий на шине не показывает - все транзакции ACK-аются сразу, то есть контроллер и вышележащие слои USB-стека успевают все обработать.