usb host на avr mega 32


В поисках всякой всячины, на просторах был найден этот студенческий проэкт :

SIAM32 USB HC ( Software Implemented Atmel Mega32 Universal Serial Bus Host Controller )

Как уверяют его создатели - это полнофункциональный низко скоростной usb-host, написанный на С99. Логика последовательного интерфейса содержит ~ строк ассемблерного кода.. исключительно из-за нехватки времени! что в принципе доставляет.

С технической стороны всё вообще очень просто, подключение требует минимум деталей :

Линии Rx могут быть подключены напрямую к D+/D- в то время, как Tx пины требуется изолировать для уменьшения наводок\мусора. Линии  D+/D- согласно спецификации подтянуты к земле 15k резисторами.

По словам разработчиков,их целью было создание библиотеки для всего ряда микроконтроллеров AVR, и прозрачного доступа к USB приблудам.





Как видно из рисунка, прием\передача данных происходит в несколько шагов.
  • Клиент - формируются данные для передачи.
  • Транзакция - происходит формирование пакета.
    • Token
    • Data
    • Tandshake
  • USB интерфейс - формирование валидного USB трафика :
    • NRZI
    • Bit stuffing
    • Differential Encoding
  • Последовательный интерфейс (SIE) - активно дрыгаем ногами

Исходные коды можно посмотреть тут : source.  Оригинал статьи в личку.
Советую так же подсмотреть в аппноты к at90usb, но это конечно совсем другая история.






Комментарии