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:

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).
Świetna wiadomość.
Jak tylko o tym przeczytałem postanowiłem zabrać się za testy z wykorzystaniem Megi 2560. Po zrobieniu mostka i wgraniu szkicu pojawia mi się następujący komunikat:
Circuits At Home 2011
USB Host Shield Quality Control Routine
Reading REVISION register… Die revision invalid. Value returned: 00
Unrecoverable error – test halted!!
0x55 pattern is transmitted via SPI
Press RESET to restart test
Wiem, że MISO, MOSI, SS i SCK są w medze na innych pinach dlatego zrobiłem połączenia według schematów odginając odpowiednie goldpiny (10, 11, 12, 13) na „usb szildzie” i poprowadziłem połączenia odpowiednio do 10->53, 11->51, 12->50, 13->52.
W czym może tkwić problem? Jako ciekawostkę dodam, że udało się uruchomić poprzednią wersję tej biblioteki i podłączane urządzenia były poprawnie identyfikowane.
Sprobuje tego shielda z 2560, zobaczę jaki będzie rezultat
Rozumiem, że ten układ komunikuje się przez SPI.
Ta biblioteka używa biblioteki SPI? http://arduino.cc/en/Reference/SPI
Bo jeśli nie to mogła coś pokręcić z ustawianiem pinów na wejście/wyjście dla interfejsu. Może trzeba poszukać czy ma „pinMode” i przepisać na właściwe :)
netmaniac czekam z niecierpliwością na wyniki testów. Dodatkowo jestem przekonany, że połączenie wspomnianych pinów jest zrealizowane przez sprawne kabelki.
Nie mam dobrych wiadomości – nie udało mi się na razie nic zwalczyć, taki sam objaw.
Biblioteka USB Host 2.0 jest dla wersji 2.0 shielda z C@H Ten różni się od sparkfunowego tym, że SPI bierze z ICSP, tak jak np Ethernet Shield. Dzięki temu działa to zarówno na mega jak i UNO.
Biorąc Mega mamy SPI na innym miejscu, ale definicje w usbhost.h i Usb.h dają radę jak sądzę, i w wypadku Mega nie powinno nic być uaktualniane jeżeli chodzi o MOSI, MISO i SCK. (zobacz usbhost.h linie 26-48). Jedyne 'podejrzane miejsce’ to SS. I tutaj kod w Usb.h w liniach 50-60 dawał nadzieję, że prosta zmiana 10 na 53 da rezultat, ale nie…
Jeszcze coś pogrzebię ale nie wiem czy dziś… Jeżeli coś się uda zrobić na pewno napiszę tutaj
W takim razie może zakup UNO rozwiąże problem. Trzymam kciuki za pozytywne wyniki testów i szacunek dla wiedzy jaką posiadasz. Będę tutaj od czasu do czasu zaglądał z nadzieją na rozwiązanie.
Jeszcze jedno pytanie. Czy UNO R3 będzie kompatybilne z tą przeróbką?
Jeszcze jedno pytanie: wszędzie znajduję informacje dotyczące gotowych bibliotek i podłączonych urządzeń. Ale może znaleźliście jakiś toturial lub umiecie wyłożyć zasadę podłączenia i komunikacji z danym urządzeniem. może być np podłączenie karty wifi na usb lub kamery internetowej. Bardzo dziękuję za wszelkie informacje.