AVR USB spikker

Allikas: Digilabor

USB suhtluse implemeteerimine Atmegal osutus meie jaoks arvatust keerulisemaks. Et teised jõuaksid kiiremini ja kaugemale, kui mina, siis kirjutan siia mõned viited, et saaks enamvähem kohe asja kallale.

Sisukord

Hetkeseis

Info natuke vana. Kasutasin Teensy näidet lõpuks. Kõige võiksem ja kiirem. To be updated. ---Johu 14. märts 2011, kell 21:25 (UTC)

Teensy koodi kasutamiseks U2 seeriaga on kõige lihtsam viis lihtsalt valida Makefilest Teensy 1.0 jaoks kompileerimine. Ehk siis kivi at90usb162. Mis on sisuliselt 1:1 sama mis atmega16u2. Kui uskuda app notet siis on tegemist "drop in replacementiga".

Päris viis

Kui soovid USBist midagi reaalselt teada ka ja kasutada seda ka hilisemates projektides siis loe edasi.

LUFA

See on lihtsamini mõistetav ja ilusam kui AVR'i stack. Samas on ta omajagu massiivsem... aga seda kõike mõistes on seda võimalik pügada küll. Et otsa peale saada, tee nii

  1. Tiri LUFA
  2. Otsi üles
    LUFA 100807\Demos\Device\ClassDriver\VirtualSerial
  3. Vaata üle conf võimalused makefiles. Seal tuleb näiteks prose sagedus ja kivi nimi ära muuta
  4. Seal on vaja häkkida natuke... kui sa ei viitsi veel plaadi driverite kirjutada LUFALE (võin seda pärast ise teha) siis tuleb kõik LED'ide ja rõõmupulga osad ära varjata koodis (see kood mõeldud standardsete devboardide jaoks... saab confida kenast ka meie lauale).
  5. Failis virtualserial.c vms on funktsioon, mis saadab datat USB'i üles. Asenda see mingi tavalise tekstiga, et koguaeg saadaks. Kui viitsid, võid LED'i kah vilkuma panna.
  6. Debugi enda tehtud soperdused ja proge kivi ära. Mugav on kompiilida make-ga. (cmd -> cd to_path -> make -> debug -> make -> make flip)
  7. Nüüd bootloaderist väljudes peaks arvuti hakkama sult uue usb seadme driverit küsima. Et Win paremini teaks, mida teha, siis näita talle kätte see sama katalog... seal on fail õpetustega windowsile ja selle lõpuks peaks sul olema USB virtuaalne com port. Device manageris ilusti näha.
  8. Proovi see enda saadetud signaal mõne programmiga (Putty, x-Ctu) arvutist ära kuulata vastavast com pordist. (minul see ei õnnestunud... nägin ainult vaikust)... aga peaks töötama.

Johu 24. oktoober 2010, kell 14:57 (UTC)

Sain siiski tööle

Kasulikud allikad

Atmega

Mõned asjad, mis on juba Atmega poolt olemas.

AVR USB library template

Atmega kodulehelt saab asja nimega "AVR USB Series6&7software library template". See series seal nime sees sõltub sinu kivist. Meie kivi (AT90USB647) peaks kuuluma 7-dasse seeriasse. Teistel USB kontrolleriga kividel on sardnased asjad olemas. Sealt lehelt leiab muudki kasulikku.

Selles pakis on mingis hullus struktuuris kõik need failid. Olen seda natuke uurinud ja tundub, et hakkab vaikselt koitma.

  • /lib_mcu/usb/ tundub sisaldavat kõige vajalikumat asja. Muu on ka ise aretatav. (Update: tundub siiski väga lowlevel)
  • /lib_mcu/ sisaldab ka paari USB headerile analoogset headerit mõnede teiste vilede jaoks.
  • /modules/usb/ sisaldab päisfaile paljude konstantidega ja device_chap9/ kaustas on kõrgtaseme näide kasutamisest. Kas sellest midagi kasulikku võtta on, ei oska veel öelda.
  • /lib_board/ kausta sisu tundub olevat üsna kasutu, sest seal on valmis arendusplaatide spetsiifika. Samas võib sinna lisada meie plaadi spetsiifikat ja saame siis kogu lahenduse kasutusele võtta? (Update: proovisin... hullumaja on. Teoreetiliselt veel võimalik, aga minu üritatud hex ei meeli kivile ja uurin teist teeki.)
  • /demo/ kaustas peaks olema terviklik konfigureeritav demo

Atmega datasheet

Seal (AT90USB647 datasheet) on loodetavasti rohkem infot kirjas kui vaja... sest seal on seda päris palju. Seal on USB asi kolmes peatükis. 1. peatükk räägib väga madala taseme suhtlusevärgist, katkestustest ja erinevatest olukordadest. Teine peatükk peaks huvitama, sest see räägib seadme kasutamisest deviceina (ehk slave, mitte master). Kolmas peatükk räägib hostina kasutamise võimalustest.

Programmeerimine

Selleks et seadmeid programmeerida on vaja AVR Flip softi mille saab atmel ametlikult kodukalt.

Linuxi versioon on mõeldud Red Hat linuxile ja Ubuntus/Archis käima tõmbamiseks peab mudima.

Mõisteid ja standardi seletus

Ei maksa unustada, et USB seade on kas host või device. Kogu suhtlust juhib host enamvähem round-robin stiilis (igaühel oma aeg tsüklis). Kasusel on kolm standardit. 2.0 on kõige normaalsem, 1.0 on aeglane ja 3.0 on veel vähe kasutusel aga väga kiire. USB seadmel võivad olla alamseadmed moodustades puustruktuuri. Alamseadmel on andmetorude (pipe) jaoks mitu otsa, ehk endpointi. Iga endpoint saab olla eri tüüpi, vastvalt andmeedastusele esitatud nõuetele (väike latents, või palju ja kiirel).

Mõned mõisted, mis tulevad ette ja te ei pea ise googlema:

OTG - On-The-Go
ehk seadmed, mida saab kasutada nii slave kui master rollis. Näiteks printer, mis on arvutile slave aga mälupulgale master. Meil pole seda vaja
HID - Human interface device 
nagu hiired ja asjad, mis on mõeldud inimesega suhtlemiseks. See võib tulla kasuks, sest saab kasutada atmega näidet ja valmis default drivereid seda tüüpi seadmetele. Samas võivad olla liiga hullud piirangud, kui arvutile väita, et olme hiir vms :)
MS - massstorage 
mälupulga tüüpi seade
CDC - Communication Device Class 
tundub olevat üks meile sobiva põhimõttega asi
Personaalsed tööriistad
Navigeerimine
Käsitöö