Цитата(lepert @ Jan 25 2009, 20:31)

И разбор железа практически ничего не даст,
Нет. Самое важное - именно изучение железа. Примеры от атмеля я лично даже и смотреть не собираюсь...
Меня у AT90USB напрягает как-раз слишком жёсткая привязка железа к спецификации USB (см. далее). Хотя, конечно, только вчера изучать начал.
А код, совместимый с остальным миром, я собираюсь как-нибудь сам написать... И опыт показывает, что самописный код получше будет. Если с железом и протоколами хорошо разобраться конечно.
Пример: Если компьютер по кнопке усыпить и снова разбудить, то все фирменные USB устройства принтеры, сканеры и т.д (кроме мыши и клавы) пропадут. Для того, чтобы ими пользоваться начать - придётся их переткнуть. А вот мои самописные USB девайсы в таких условиях не теряются.
Теперь касательно TXINI. Судя по описанию данный бит нардварно установится после получения ACK от хоста в ответ на посланный ему (хосту) пакет данных. Если пакет данных был хосту отправлен, а ответ от него ACK от хоста не получен (то-ли пакет по пути к хосту разрушен, то-ли ACK от хоста к нам не дошёл), то эта ситуация никакими битами не отражается (так мне кажется), а хотелось бы. Или я не прав? И как-то это узнать можно?
А насчёт посылки дескрипторов хосту и обработки запросов от него - я пока только 2 варианта знаю:
1. По контрольному каналу. Там всегда один механизм. Его в любом случае реализовывать нужно.
2. Через бульки (устройства типа MassStorage). Там подругому. Но один раз реализовав этот механизм дальше просто пользуешься.
А м.б. вы к.л. запросы ещё знаете? Откуда возьмётся немерянное кол-во неисследованных вопросов?
ЗЫ
У меня тут интернет не работал - поэтому м.б. несинхронно ответил.
Цитата(harper @ Jan 26 2009, 15:25)

Уважаемый lepert! Наверное, Вы правы. Просто я дотошный и хочу это знать. И так как разработка ПО не моя профессия, а хобби, я не теряю на этом время, а развиваю мозги. Думаю, скоро дойду и до "обработки запросов хоста для устройств разных классов".
+1 Я тоже дотошный.
И AT90USBxx мне интересен. У него в отличие от многих других EP 0 буфер на 64 байта имеет. Это решающее преимущество (особенно в случае HID через контрольный канал). Хотя и недостатки имеются. Например, нельзя номер EP изменять. Но так у всех современных девайсов... И вообще, чем устройство новее, тем меньше простора для фирмваря, всё аппаратно в нём делается и изменить ничего не можешь.
Цитата(harper @ Jan 26 2009, 15:25)

Код исследую в Proteus, в котором, вроде, очень неплохо работают примеры с USB. Хочу, для тех кому интересно, поправить мои предыдущие утверждения.
Я писал: " Так вот, в случае RXSTPI и RXOUTI сброс бита сразу отсылает ACK...". Получается, что это не так. SETUP request is always ACK’ed, как написано в Datasheet и это происходит без нашего участия, несмотря на сбивающую с толку фразу RXSTPI is set when a new SETUP is received. It shall be cleared by firmware to acknowledge the packet and to clear the endpoint bank. Что здесь подразумевается под to acknowledge the packet не понятно.
Тут видимо подразумевается, что от хоста 2 (или больше) SETUP-а подряд прийти может (это нормально, так бывает если SETUP-ы без фазы данных). Т.к. NAK-овать на SETUP нельзя, то обычно аппаратное FIFO SETUP-ов организуется (хотя-бы 2 уровня). Прочли вы первый SETUP (8 байт данных), бит сбросили, и у вас уже следующий SETUP в буфере. Хотя физически он уже давно принят был (и ACK в ответ на него хосту послан). Без этого SETUP-ы терятся будут (если их своевременно прочесть не получилось - процессор другим занят был).
Цитата(harper @ Jan 26 2009, 15:25)

То же самое происходит с ответом на OUT. Обнуление нами RXOUTI не приводит к мгновенной посылке ACK. Посылка ACK, по аналогии с TXINI для In Tocken, происходит только по приходу OUT Tocken от хоста.
Совершенно верно. ACK шлётся только
В ОТВЕТ на OUT1/0 с данными (м.б. и 0 байт) от хоста.
Ведущий всегда хост.
Я пока, к сожалению, другими делами на работе занят и много времени посвятить AT90USB не могу. Но вот освобожусь и активно к вам присоединюсь. Но вопросы возникают уже. Вот кстати - не могли-бы вы проверить на протеусе как поведёт себя девайс при приёме 2-х SETUP-ов подряд (см. выше).