USB Host Shield od SparkFun i biblioteka od CircuitsAtHome

W ofercie Nettigo już od dłuższego czasu znajduje się USB Host Shield. Shield ten pozwala zamienić Arduino w USB hosta. Normalnie Arduino jest urządzeniem USB – czyli da się podłączyć do hosta (np komputer) ale do niego nie można podłączyć innego urządzenia USB. Począwszy od UNO można wgrać nowy firmware zmieniający obsługę USB, ale to co można osiągnąć to zmiana rodzaju urządzenia, którym jest Arduino po podłączeniu do hosta (czyli nie jako port szeregowy ale np klawiatura).

Aby móc obsłużyć inne urządzenia USB niezbędny jest właśnie USB Host Shield. Shield ten jest produkowany przez SparkFun na podstawie projektu wykonanego przez CircuitsAtHome. Autor shielda utrzymuje też bibliotekę go obsługującego. Sęk w tym, że ta wersja bibliotki jest przeznaczona dla nieco zmodyfikowanej płytki sprzedawanej przez CircuitsAtHome. Wersja SparkFun (i sprzedawana przez Nettigo) wymaga drobnej modyfikacji aby działało oprogramowanie:

USB Host shield działający z wersją biblioteki 2.0
USB Host shield działający z wersją biblioteki 2.0

Wystarczy połączyć cyfrowe wyjście D7 z RST (obok zasilania 3.3V) i od tego momentu test płytki (board_qc w Examples) działa poprawnie:

Circuits At Home 2011
USB Host Shield Quality Control Routine
Reading REVISION register... Die revision 03
SPI long test. Transfers 1MB of data. Each dot is 64K................
SPI long test passed
GPIO test. Connect GPIN0 to GPOUT7, GPIN1 to GPOUT6, and so on
Test failed. Value written: 00 Value read: FF
Press any key to continue...
GPIO test passed.
PLL test. 100 chip resets will be performed
Resetting oscillator Reset number 0 Time to stabilize - 445 cycles Reset
number 1 Time to stabilize - 446 cycles Reset number 2 Time to stabilize
- 446 cycles Reset number 3 Time to stabilize - 446 cycles Reset number
4 Time to stabilize - 446 cycles Reset number 5 Time to stabilize - 456
cycles Reset number 6 Time to stabilize - 476 cycles Reset number 7 Time
to stabilize - 476 cycles Reset number 8 Time to stabilize - 477 cycles
Reset number 9 Time to stabilize - 476 cycles Reset number 10 Time to
stabilize - 476 cycles Reset number 11 Time to stabilize - 476 cycles
Reset number 12 Time to stabilize - 476 cycles Reset number 13 Time to
stabilize - 477 cycles Reset number 14 Time to stabilize - 476 cycles
Reset number 15 Time to stabilize - 477 cycles Reset number 16 Time to
stabilize - 476 cycles Reset number 17 Time to stabilize - 477 cycles
Reset number 18 Time to stabilize - 476 cycles Reset number 19 Time to
stabilize - 477 cycles Reset number 20 Time to stabilize - 476 cycles
Reset number 21 Time to stabilize - 476 cycles Reset number 22 Time to
stabilize - 476 cycles Reset number 23 Time to stabilize - 476 cycles
Reset number 24 Time to stabilize - 477 cycles Reset number 25 Time to
stabilize - 476 cycles Reset number 26 Time to stabilize - 477 cycles
Reset number 27 Time to stabilize - 476 cycles Reset number 28 Time to
stabilize - 477 cycles Reset number 29 Time to stabilize - 476 cycles
Reset number 30 Time to stabilize - 478 cycles Reset number 31 Time to
stabilize - 476 cycles Reset number 32 Time to stabilize - 476 cycles
Reset number 33 Time to stabilize - 476 cycles Reset number 34 Time to
stabilize - 476 cycles Reset number 35 Time to stabilize - 478 cycles
Reset number 36 Time to stabilize - 476 cycles Reset number 37 Time to
stabilize - 477 cycles Reset number 38 Time to stabilize - 476 cycles
Reset number 39 Time to stabilize - 477 cycles Reset number 40 Time to
stabilize - 476 cycles Reset number 41 Time to stabilize - 478 cycles
Reset number 42 Time to stabilize - 476 cycles Reset number 43 Time to
stabilize - 476 cycles Reset number 44 Time to stabilize - 476 cycles
Reset number 45 Time to stabilize - 476 cycles Reset number 46 Time to
stabilize - 477 cycles Reset number 47 Time to stabilize - 476 cycles
Reset number 48 Time to stabilize - 478 cycles Reset number 49 Time to
stabilize - 476 cycles Reset number 50 Time to stabilize - 477 cycles
Reset number 51 Time to stabilize - 476 cycles Reset number 52 Time to
stabilize - 478 cycles Reset number 53 Time to stabilize - 476 cycles
Reset number 54 Time to stabilize - 476 cycles Reset number 55 Time to
stabilize - 476 cycles Reset number 56 Time to stabilize - 476 cycles
Reset number 57 Time to stabilize - 478 cycles Reset number 58 Time to
stabilize - 476 cycles Reset number 59 Time to stabilize - 477 cycles
Reset number 60 Time to stabilize - 476 cycles Reset number 61 Time to
stabilize - 477 cycles Reset number 62 Time to stabilize - 476 cycles
Reset number 63 Time to stabilize - 477 cycles Reset number 64 Time to
stabilize - 476 cycles Reset number 65 Time to stabilize - 477 cycles
Reset number 66 Time to stabilize - 477 cycles Reset number 67 Time to
stabilize - 476 cycles Reset number 68 Time to stabilize - 478 cycles
Reset number 69 Time to stabilize - 476 cycles Reset number 70 Time to
stabilize - 477 cycles Reset number 71 Time to stabilize - 476 cycles
Reset number 72 Time to stabilize - 477 cycles Reset number 73 Time to
stabilize - 476 cycles Reset number 74 Time to stabilize - 477 cycles
Reset number 75 Time to stabilize - 476 cycles Reset number 76 Time to
stabilize - 476 cycles Reset number 77 Time to stabilize - 476 cycles
Reset number 78 Time to stabilize - 476 cycles Reset number 79 Time to
stabilize - 477 cycles Reset number 80 Time to stabilize - 476 cycles
Reset number 81 Time to stabilize - 477 cycles Reset number 82 Time to
stabilize - 476 cycles Reset number 83 Time to stabilize - 477 cycles
Reset number 84 Time to stabilize - 476 cycles Reset number 85 Time to
stabilize - 477 cycles Reset number 86 Time to stabilize - 476 cycles
Reset number 87 Time to stabilize - 476 cycles Reset number 88 Time to
stabilize - 476 cycles Reset number 89 Time to stabilize - 476 cycles
Reset number 90 Time to stabilize - 477 cycles Reset number 91 Time to
stabilize - 476 cycles Reset number 92 Time to stabilize - 477 cycles
Reset number 93 Time to stabilize - 476 cycles Reset number 94 Time to
stabilize - 477 cycles Reset number 95 Time to stabilize - 476 cycles
Reset number 96 Time to stabilize - 476 cycles Reset number 97 Time to
stabilize - 476 cycles Reset number 98 Time to stabilize - 476 cycles
Reset number 99 Time to stabilize - 476 cycles Reset number 100 Time to
stabilize - 476 cycles
Checking USB device communication.

Device connected. Resetting Reset complete. Waiting for the first SOF...
Getting device descriptor
Descriptor Length:	12
Descriptor type:	01
USB version:		0110
Device class:		00
Device Subclass:	00
Device Protocol:	00
Max.packet size:	40
Vendor  ID:		055F
Product ID:		021D
Revision ID:		0100
Mfg.string index:	00
Prod.string index:	01
Serial number index:	00
Number of conf.:	01

All tests passed. Press RESET to restart test

GPIO na shieldzie są nie podłączone więc test ma prawo się nie udać. Do portu USB na shieldzie podłączyłem skaner Musteka (vendorID 055F).