
Re: Атмел - софтуерен пакет за SAM3S
Има разни книжки, но проблемът е че самото USB е изключително ЗЛЕ измислено... към това добави, че и тия дето проектират перифериите не са наясно какво правят, добави и че тия дето пишат стековете са индийци и ще получиш някаква бегла представа колко зле са всъщност нещата.
В това число и аз не съм изключение, дотук съм написал стекове за device на 3 производителя и хост на 2 от тях и не мога да кажа че знам всичко
Иначе накратко, като ръчнеш кабела първо устройството вижда 5-те волта. Като ги види може да реши да си побъбри, за целта прави "session request". Ако контролера е с вградени пулъпи обикновено има битче дето го сетваш. Ако е с външен пулът просто го активираш с gpio или както там е схемата. В зависимост на коя линия е пулъпа (D+/D-) хоста разбира дали си има работа с бързо или бавно устройство. И след като види заявката за сесия, хостът пъро прави ресет на бъса (при девайса идва интеръпт, при който трябва да се ресетне). След ресета хоста почва по контролния ендпоинт (ендпоинт 0) да си говори. Това става с размяна на едни пакетчета напред-назад. Едно от първите неща е да сетне адрес. Това е стандартна завка, след ресет устройствата са на адрес 0 и могат да имат само минимална функционалност, затова хоста им задава някакви адреси (ако имаш хъб може да имаш много устройства).
И те така... после чете device descriptor (може и преди адреса да се прочете) там пише колко конфигурации има, обикновено е една. След това се чете configuration descriptor-a там пише евентуално какъв е класа на устройството и колко интерфейса има. Често обаче в конфигурацията се казва, че класът е дефиниран в интерфейсите. Но дескрипторите за интерфейсите, както и за това какви ендпоинти има също в конфигурационния дескриптор. Та хоста чете, анализира, вижда какво е устройството след това ако иска го пуска. За целта му сет-ва конфигурация и интерфейс и това е на глобално ниво.
В зависимост от класа, може да се пуснат още ендпоинт. Примерно за CDC (серийни) имаш един ендоинт за TX, един за RX и един контролен. По Rx/Tx си текат данните на серийния порт, няма нищо особено. А по контролния на CDC-то хоста може да ти праща заявки да смениш баудрейт, да клати хендшейкове и разни такива...
Те това е накратко... тук има повече:
http://www.usbmadesimple.co.uk/index.htmlhttp://www.beyondlogic.org/usbnutshell/usb1.shtml