Autor Wątek: Tworzenie sprzętu USB i sterownika do niego  (Przeczytany 7151 razy)

Offline Xirdus

  • Redaktor

# Marzec 25, 2013, 23:39:50
Wpadłem na genialny (hie, hie) pomysł, by stworzyć takie urządzenie, które pozwalałoby na przesyłanie plików przez USB między komputerami. Jak ja to sobie wyobrażam:

Urządzenie ma dwa porty: wejście i wyjście. Do wejścia podłącza się komputer z moim oprogramowaniem (1), do wyjścia dowolne urządzenie obsługujące pamięci USB (2). Na komputerze 1 wybrany katalog byłby, dzięki mojemu genialnemu urządzonku, widziany na komputerze 2 jako zwyczajny pendrive. Sterownik pozwalałby na wybranie, który katalog zmapować, ustawić limit pojemności oraz wybrać poziom uprawnień (odczyt/zapis/usuwanie). Ponieważ zarówno w elektronice, jak i w pisaniu sterowników jestem totalnym laikiem, pytam się:
  • Jak trudno jest skonstruować urządzenie USB działające jak pendrive? (Ogólnie, jakiekolwiek; takie, które działa bez dodatkowych sterowników, czyli m.in. zadziała z moim no-name'owym odtwarzaczem DVD)
  • Jakie podzespoły i parametry sprzętowe powinno to ustrojstwo mieć, i jaki byłby orientacyjny koszt?
  • Szybki gugiel dał mi takiego linka: http://msdn.microsoft.com/en-us/library/ff538930(v=vs.85).aspx. Pisze w nim coś USB Driver Stack i Windows Driver Framework. Czy te technologie są słuszną, współczesną techniką? Czy ktoś tych bajerów używał i mógłby się podzielić wrażeniami?
  • Jakie są pułapki związane z obsługą USB, czy pisaniem sterowników ogólnie? O czym trzeba szczególnie pamiętać - rzeczach, na które pisząc normalne aplikacje nie zwraca się uwagi? (Nie uwierzę, że nie ma kruczków :P)
  • Jak już skończę prototyp, kto zamawia sztukę dla siebie? ^^

Z góry dziękuję za jakąkolwiek pomoc. Jak ma ktoś jakieś ciekawe linki na ten lub podobne tematy, też bym nie pogardził.

Pozdrawiam.

Aha, planuję wpierw zrobić wersję na Windowsa 7, potem postarać się (jeśli będzie się dało), by chodził na reszcie Windowsów, a na koniec zająć się Linuksem, jak mi życia jeszcze starczy.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline ShadowDancer

  • Redaktor

# Marzec 26, 2013, 00:08:06
Zanim zaczniesz się bawić z usb upewnij się, że twój mbrd ma bezpieczniki, albo sprawdzaj wszystko 20x (najpierw na sucho, bez podłączonego kompa) - bo zwarcie na usb oznacza upalenie całego huba, jak nie mbrda.
Łap, może się przyda:
http://www.obdev.at/products/vusb/index.html

No i nie bardzo widzę zastosowania dla takiego czegoś - jak masz internet to dropbox/lan, a jak nie to pendrive. Czas stracony na nauczenie się i wykonanie takiego czegoś prawdopodobnie nigdy się nie zwróci.
« Ostatnia zmiana: Marzec 26, 2013, 00:09:56 wysłana przez ShadowDancer »

Offline Xion

  • Redaktor
    • xion.log

# Marzec 26, 2013, 00:13:39
Jesteś pewien że nie chodzi ci o zwykły kabel Ethernetowy i NFS/sshfs? :)

Offline Xirdus

  • Redaktor

# Marzec 26, 2013, 00:14:33
Zanim zaczniesz się bawić z usb upewnij się, że twój mbrd ma bezpieczniki, albo sprawdzaj wszystko 20x (najpierw na sucho, bez podłączonego kompa) - bo zwarcie na usb oznacza upalenie całego huba, jak nie mbrda.
Dzięki za ostrzeżenie, będę o tym pamiętał.

Łap, może się przyda:
http://www.obdev.at/products/vusb/index.html
To jest o USB 1.1, co jest stanowczo nie wystarczające jak dla mnie. Ale dzięki za linka - może się przydać, jakbym chciał np. przejrzeć ich kod źródłowy i podejrzeć jakieś rozwiązania.

No i nie bardzo widzę zastosowania dla takiego czegoś - jak masz internet to dropbox/lan, a jak nie to pendrive. Czas stracony na nauczenie się i wykonanie takiego czegoś prawdopodobnie nigdy się nie zwróci.
Tu nie chodzi tylko o praktyczne zastosowanie, ale głównie o naukę. Zawsze jakieś ciekawe doświadczenie, a i można się pochwalić potencjalnemu pracodawcy ;) Nigdy nie wiesz co ci się w przyszłości przyda.

Offline Xender

  • Użytkownik

# Marzec 26, 2013, 00:23:09
Ja bym najpierw poszukał prostszego sposobu - rozumiem, że celem jest emulacja pendrive w różnych urządzeniach (klientach) - ale link z hostem można puścić po czymś sympatyczniejszym, niż USB, chyba, że naprawdę odczuwasz potrzebę kodzenia driverów (i to najpierw na Windowsa, potem na Linuxa? Jesteś masochistą?).

Konkretniej, gdybyś puścił link z hostem po Ethernecie, napisanie aplikacji na hosta byłoby łatwe, a hardware chyba porównywalny.

Prototyp można zrobić na dowolnym urządzeniu Androidowym - ma WiFi, montuje się jako pamięć masowa, system jest Open Source - nic, tylko haczyć.

A jeśli to taki challenge tak po prostu - hmm, powodzenia...

Offline ShadowDancer

  • Redaktor

# Marzec 26, 2013, 00:25:48
Skoro do nauki to 1.1 powinno wystarczyć, taki procek jak w tym artykule to za piątkę można dostać. 2.0 to już więcej MHz, więc i procek lepszy i pieniążki lepsze (do usb 2.0 potrzebowałbyś czegoś śmigającego z prędkością 50MHz, albo co bardziej prawdopodobne jakiś scalak do obsługi usb 2.0).

Zapytaj może na forum elektroda.pl - znajdziesz tam pewnie kogoś kto już coś takiego zrobił ;)

EDIT:
http://www.atmel.com/Images/doc7799.pdf
Wbudowany fullspeed usb 2.0 controller - ale nie wiem czy to można gdzieś dostać ;) Gdybyś miał problem z poskładaniem układu to pisz na priv.
« Ostatnia zmiana: Marzec 26, 2013, 00:27:36 wysłana przez ShadowDancer »

Offline laggyluk

  • Użytkownik
    • twitter

# Marzec 26, 2013, 00:29:50
kiedyś też mi się śniły wynalazki. zbudowanie tego shitu zajeło mi chyba z rok http://www.youtube.com/watch?v=xxduAI8M7pk  było tam międzyinnymi połączenie usb z kompem.
w tamtym czasie wybór scalaka w zasadzie ograniczał siędo wyboru między atmelem a microchipem.
będziesz potrzebował do tego też programatora. płytkę pod prototyp można zrobić samemu albo kupić za $$$.
sterownik to jeszcze insza para kaloszy ale jakiś tam w przykładach microchipa można wygrzebać

też zaczynałem jako laik i nim pozostałem. generalnie to dosyć epickie w rozmachu przedsięwzięcie, podobnie jak pisanie gier ;p

Offline Avaj

  • Użytkownik

# Marzec 26, 2013, 07:28:13
może po prostu pobaw się z Raspberry Pi? Model B ma dwa porty USB, więc mógłbyś wysyłać na jeden port, coś robić i przetworzone puszczać na drugi, bez brudzenia się elektroniką.

Offline Xender

  • Użytkownik

# Marzec 26, 2013, 08:56:57
@up: Magiczna zamiana USB hosta w guesta gratis?...

Offline empe

  • Użytkownik

# Marzec 26, 2013, 09:29:30
@Xender: to się nazywa USB OTG

@Xirdus: Nie potrzebujesz pisać żadnego sterownika, wystaczy, że na uC masz stacka USB. Ustawiasz mu klase Mass Storage i komunikacje PC<->uC z wysylaniem plików masz za darmo.

Offline Veldrin

  • Użytkownik

# Marzec 26, 2013, 14:11:46
Jak interesuje Cię tematyka sterownikow do poszukać materiałów z przedmiotu STER realizowanego na PW EiTI. Na wykładzie możesz sobie nawet pochodzić.

No i zapomnij o jakichś Windowsach w tym kontekście  ;). To sie nadaje do grania i Excela :).

Offline dynax

  • Użytkownik

# Marzec 26, 2013, 16:24:06
Lol, taki program nazywa się openssh a taki kabel nazywa się ethernet.

Offline kubx

  • Użytkownik
    • Kanał YT

# Marzec 26, 2013, 23:58:18
Takie coś już istnieje: http://allegro.pl/kabel-do-transferu-danych-pc-pc-z-km-pip-usb-2-i3076004787.html

  • Jak trudno jest skonstruować urządzenie USB działające jak pendrive? (Ogólnie, jakiekolwiek; takie, które działa bez dodatkowych sterowników, czyli m.in. zadziała z moim no-name'owym odtwarzaczem DVD)
Bierzesz przykładowy projekt od producenta mikrokontrolerów których używasz i modyfikujesz pod siebie. Nie ma sensu pisać deskryptora USB samemu, łatwo o błędy.
USB ma zdefiniowane różne klasy takie jak Audio, Mass Storage, HID i kilka innych. Są one wykrywane przez system i nie ma potrzeby pisania sterowników. W szczególności HID, który po podłączeniu działa od razu (a jeżeli potrzeba to w prezencie dostajemy pisanie sterownika w User mode używając hid.dll, oczywiście gdy mamy customowy deskryptor) bez potrzeby babrania się w WDK)


Masz kilka możliwości:
- Tworzysz urządzenie typu mass storage, a całą obsługę zdarzeń obsługujesz po stronie urządzenia w firmware. Czyli np. system widzi to jako pendrive, a urządzenie tak naprawdę symuluje system plików i przesyła sektory na drugiego pcta.
- Tworzysz urządzenie HID (myszka, klawiatura albo customowa klasa), obsługę można napisać bez kernel mode, importujesz funkcje z HID.dll
- Skorzystać z libusb - urządzenie potrzebuje sterownika (takie uniwersalnego), który generujesz sobie programem. Następnie obsługę kodzisz za pomocą libusb w pythonie, c++ czy czym tam używasz - biblioteka jest bajecznie prosta w obsłudze, dodatkowo wieloplatformowa.
- Tworzysz customowe urządzenie i wtedy korzystasz w WDK - czyli piszesz sterownik w kernel mode. Nie musiałem nigdy tego robić, nic fajnego, łatwo zawiesić system, niski poziom.

  • Jakie są pułapki związane z obsługą USB, czy pisaniem sterowników ogólnie? O czym trzeba szczególnie pamiętać - rzeczach, na które pisząc normalne aplikacje nie zwraca się uwagi? (Nie uwierzę, że nie ma kruczków :P)
Przy urządzeniach HID pomylisz jeden bajt w deskryptorze i system nie rozpoznaje urządzenia. Dlatego warto używać programów, które wygenerują go za ciebie (są na stronie USB do ściągnięcia). Dobrze jest też modyfikować przykład, a nie pisać od początku - zaoszczędzimy godziny na szukaniu głupich błędów.


może po prostu pobaw się z Raspberry Pi? Model B ma dwa porty USB, więc mógłbyś wysyłać na jeden port, coś robić i przetworzone puszczać na drugi, bez brudzenia się elektroniką.
Jak było wspomniane wcześniej - RaspPi ma porty USB działające w trybie Host (czyli można podpiąć urządzenie jak pendrive, ale nie można go zmusić, aby go podpiąć do innego hosta jak komputer).
Są urządzenia które to potrafią (wynalazek zwany USB On-The-Go - taki Host i Device w jednym.)
« Ostatnia zmiana: Marzec 27, 2013, 00:12:16 wysłana przez kubx »

Offline Xender

  • Użytkownik

# Marzec 27, 2013, 00:32:01
@Xender: to się nazywa USB OTG
O, nie wiedziałem, że Raspi ma OTG - myślałem, że tylko zwykłego hosta.