logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna

elektronockaut 01 Wrz 2021 19:53 1284 28
  • #1 19591361
    elektronockaut
    VIP Zasłużony dla elektroda
    Witam,

    Chciał bym zrobić sobie nietypową/dedykowaną pod konkretne oprogramowanie klawiaturę USB działającą pod DOSem. W Windows klawiatura działa bez problemu. W DOSie nie jest wykrywana. Inne "sklepowe" klawiatury w DOSie działają. Próbowałem już zmienić VID i PID mojej klawiatury na taki jak ma jedna z moich klawiatur fabrycznych, ale nic się nie zmieniło - nadal BIOS jej nie obsługuje.

    Projekt powiązany z: https://www.elektroda.pl/rtvforum/topic3754939.html

    Aktualne pliki w załączniku.
  • #2 19591390
    ex-or
    Poziom 28  
    Jesteś pewien, że Twój DOS obsługuje USB? Inne sklepowe klawiatury działają bo może mają tryb PS2?
  • #3 19591398
    elektronockaut
    VIP Zasłużony dla elektroda
    Mam klawiaturę i mysz USB pod DOS. Sprawdzałem trzy klawiatury - wszystkie działają.

    Mysz i dwie klawiatury podłączone w jednym czasie też działają.
  • #4 19591508
    ex-or
    Poziom 28  
    No tak, istnieje driver USB dla MS-DOS,
    VUSB nie trzyma specyfikacji USB, może w tym tkwi problem. Zdecydowanie potrzebny jest spec od DOSa, z czym może być problem, bo to przecież antyczny system. Pewnie łatwiej będzie zastosować uC ze sprzętowym USB.
  • #5 19591748
    gaskoin
    Poziom 38  
    Bez przesady

    Cytat:
    Fully USB 1.1 compliant low-speed device, except handling of communication errors and electrical specifications.


    Potrzebny albo oscyloskop żeby sprawdzić co się dzieje z protokołem, albo systemowy debuger albo dodanie logowania np po rs-232 w komunikacji (o ile to możliwe w vusb). Z tego co czytam, to powinno się dać debugowować usb z dosowymi driverami, ale to zależy czego używasz
  • #6 19591794
    elektronockaut
    VIP Zasłużony dla elektroda
    Oscyloskop mam, ale co nam to powie.... Nie wiem jak by można to zinterpretować. Jesli chodzi o drivery, to nie uzywam żadnych. To DOS pochodzący z dyskietki startowej W98. Ma on już zaimplementowaną obsługę urządzeń HID, a nawet masowych urządzeń USB (pendrive).

    Porównywałem ze sobą parametry normalnej klawiatury i mojej VUSB, i w zasadzie są już podobne. PID i VID ten sam. Rewizja ta sama. Inne sa tylko parametry dotyczące zasilania D0 D1 D2 itp..... w V-USB jest ich mniej. Nie wiem gdzie je dodać/zmienić w kodzie bascom. Nie wiem też czy to może być tego właśnie wina.
    Nie mam już pomysłów.
  • #7 19591941
    gaskoin
    Poziom 38  
    elektronockaut napisał:
    Oscyloskop mam, ale co nam to powie.... Nie wiem jak by można to zinterpretować. Jesli chodzi o drivery, to nie uzywam żadnych. To DOS pochodzący z dyskietki startowej W98. Ma on już zaimplementowaną obsługę urządzeń HID, a nawet masowych urządzeń USB (pendrive).

    Powie nam to, czy host zaczyna w ogóle komunikację i gdzie ona zawodzi. Pewnie nie masz oscyloskopu z triggerem USB, ani analizatora stanów, ale możesz wrzucić tutaj screeny z przebiegami transmisji i to rozszyfrujemy. Ewentualnie kup jakiś tani analizator z możliwością rozszyfrowania USB.

    elektronockaut napisał:

    Porównywałem ze sobą parametry normalnej klawiatury i mojej VUSB, i w zasadzie są już podobne. PID i VID ten sam. Rewizja ta sama. Inne sa tylko parametry dotyczące zasilania D0 D1 D2 itp..... w V-USB jest ich mniej. Nie wiem gdzie je dodać/zmienić w kodzie bascom. Nie wiem też czy to może być tego właśnie wina.
    Nie mam już pomysłów.


    VID i PID to tylko ułamek całej komunikacji. Nie znam jakoś super bascoma (w zasadzie w ogóle), ale widzę, że masz tam miejsca żeby wstawić jakiś kod do debugu. Sprawdź, czy host wysyła reset, czy w ogóle jest jakaś próba komunikacji w jakąś stronę. Możesz skonfigurować uart i w odpowiednich miejscach wysłać wiadomość. Od biedy możesz też debugować diodami.

    Znalazłem też różne toole do sprawdzania urządzeń: hwinfo (jest wersja na DOS), usbview (jest cli, moze dziala pod dosem), pnputil. Jak poszukasz to pewnie więcej tego znajdziesz.
  • #8 19591966
    elektronockaut
    VIP Zasłużony dla elektroda
    Spróbuję po południu i się odezwę. Dzięki

    Dodano po 7 [godziny] 57 [minuty]:

    Próbowałem HVINFO, ale on nie wyświetla nic na temat urządzeń USB.
    Na razie udało mi się złapać komunikację oscyloskopem, ale nie bardzo mogę ją tu uchwycić, bo trwa zbyt długo. Zaraz poszukam jeszcze Saleae Logic.

    [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna
  • #9 19592676
    slx
    Poziom 19  
    DOS wcale nie musi obsługiwać USB HID, jak tu niektórzy piszą. Tym zajmuje się BIOS .
    Ale żeby to działało klawiatura musi obsługiwać protokół "boot".
    Klawiatury (i myszki też) na usb mogą działać na dwóch protokołach: report protocol i boot protocol. Domyślny jest ten pierwszy i tak są obsługiwane przez systemy operacyjne z pełnym stosem usb.
    https://www.usb.org/sites/default/files/documents/hid1_11.pdf
  • #10 19592755
    JacekCz
    Poziom 42  
    DOS nie jest samotną wyspą, siedzi na BIOS.

    A co BIOS ma w jakiej płycie, to nieco bardziej zróżnicowane opowieści
  • #11 19592909
    gaskoin
    Poziom 38  
    slx napisał:
    DOS wcale nie musi obsługiwać USB HID, jak tu niektórzy piszą. Tym zajmuje się BIOS.


    Normalnie tak, ale chciałem do tego dojść drogą okrężną i zobaczyć czy prosi o zmianę protokołu. Można też skonfigurować drivery do USB i wtedy DOS zyska wparcie dla HID. Jeżeli klawiatura ma działać gdziekolwiek to pokusiłbym się o implementację BP.
  • #12 19593261
    elektronockaut
    VIP Zasłużony dla elektroda
    slx napisał:
    Ale żeby to działało klawiatura musi obsługiwać protokół "boot".
    gaskoin napisał:
    Jeżeli klawiatura ma działać gdziekolwiek to pokusiłbym się o implementację BP.


    Panowie możecie więcej powiedzieć na ten temat ?
    Może ktoś potrafi znaleźć braki w kodzie bascom ?

    PS: Nie mogę znaleźć mojego analizatora... czy jest on konieczny do dalszych analiz ?
  • #13 19593517
    gaskoin
    Poziom 38  
    elektronockaut napisał:
    Panowie możecie więcej powiedzieć na ten temat ?


    Generalnie chodzi o to, że USB jest dość rozbudowanym tworem i jakieś małe systemiki (typu bios czy dos) nie implementują go w ogóle lub w bardzo ograniczonym zakresie - tylko żeby było wsparcie dla myszy i klawiatur. W dodatku implementują tylko uproszczony protokół - czyli boot.

    elektronockaut napisał:
    Może ktoś potrafi znaleźć braki w kodzie bascom ?


    Nie bardzo tu pomogę bo nie znam bascoma. Pod boot trzeba zmienić config descriptor żeby wskazywał subclass=boot. U Ciebie widzę coś takiego:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    _usb_ifsubclass powinno być ustawione na 1 (boot). Nie wiem gdzie u Ciebie są zdefioniowane te wartości. Powinien być też zmieniony _usb_hid_reportdescriptor, w dokumentacji USB jest załącznik z deksryptorem pod support boota. No i oczywiście sam raport musi być trochę inny, też masz w dokumentacji. Generalnie jest tam cały załącznik opisujący co musi wspierać klawiatura. Np. w przypadku urządzeń boot host wysyła żądanie Set_Protocol w którym wskazuje czy masz raportować jako hid czy jako boot itd.

    elektronockaut napisał:
    PS: Nie mogę znaleźć mojego analizatora... czy jest on konieczny do dalszych analiz ?


    Niekoniecznie, ale przydaje się właśnie w takich sytuacjach. Wiedziałbyś od razu co się stało. Teraz trochę zgadujemy :P Programy na kompa śledzące komunikacje też są przydatne jeśli nie ma się analizatora
  • #14 19593689
    bart-projects
    Poziom 29  
    Aż mam strach zapytać czy znajdziesz u siebie jakiś uC AVR z USB typu Arduino Leonardo lub Pro Micro (to te najprostsze) bo nie potrafisz znaleźć Saleae :D

    Mam USB addon do Bascom nawet na Xmegi i mogę skompilować kod pod taką klawiaturę na wybrane uC. Moglibyśmy sprawdzić czy to sprzętowe HID by to ożywiło (wtedy problemem okazałoby się softowe USB) czy potrzeba trybu boot.

    Tak samo mając Leonardo mógłbyś to oprogramować w Arduino IDE i tylko przetestować w czym leży problem - coś by można odhaczyć.

    Lepiej jak byś znalazł Saleae a jak nie to 35zł i wracasz do gry ;)
  • #15 19593775
    elektronockaut
    VIP Zasłużony dla elektroda
    Zmówiłem analizator ;)
    Nie mam w domu żadnych Arduino. Jednie gołe Atmegi i Tiny. Przyjdzie analizator to powrócę do tematu.
  • #16 19594827
    elektronockaut
    VIP Zasłużony dla elektroda
    Wróciłem do gry ;)
    Znalazłem mój Saleae (będę miał teraz dwa :D)

    Zrobiłem dwa podsłuchy. Jeden to najtańsza prosta klawiatura USB (klawiatura.csv), a drugi to moja zabawka V-USB (VUSB.csv). - Wszystko to na wspomnianym komputerku z DOSem. Sygnał dekodowałem dekoderem "USB LS and FS", w ustawieniach USB decode level: "Control transfers", "Low speed 1,5Mbps". Próbkowanie 24MB. Nasłuch podczas uruchamiania komputera. Raz była podłączona zwykła klawiaturka USB, kolejny raz VUSB.
    Szczerze powiedziawszy nie wiele mi mówią te logi, i nie wiem gdzie szukać problemu. Log z VUSB nagle się urywa i tyle, ale czemu ?
    Próbowałem kilka razy. Za każdym razem to samo.
  • Pomocny post
    #17 19595700
    gaskoin
    Poziom 38  
    Niestety w USB komunikacja jest "jednym" sygnałem w obie strony więc przy analizie trzeba wiedzieć kto co wysyła i co jest czym. W wolnym tłumaczeniu wygląda to tak, pominąłem zbędne info:

    Dla klawiatury:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    Teraz VUSB:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    I w zasadzie komunikacja się tu bez sensu urywa, czy to na pewno cała komunikacja? Powinno nastąpić tu ustawienie adresu i dalsze pytania o konfiguracje urządzenia. Mam wrażenie, że to nie cały plik. Jak wygląda po tym D+ i D- ? Możesz wysłać screena z saleae? Ze screenów widzę, że masz dość zakłócone te linie - koraliki, skrócenie kabla, transformatorek by coś pomogły. Może być ta, że biosowa implementacja USB jest mniej wybaczalna :)
  • #18 19595961
    elektronockaut
    VIP Zasłużony dla elektroda
    Pięknie to interpretujesz - szacun ;)

    Co do samego pliku - dwa albo trzy razy robiłem loga. Za każdym razem restartowałem program Saleae Logic dla pewności. Od początku dziwiły mnie dwa zupełnie różne rozmiary plików dla klawiatury i dla VUSB. Skoro mój VUSB działa na Windows, a ma problem w DOS/BIOS.... Może faktycznie Bios jest bardziej wymagający, lub czeka na jakieś konkretne polecenie/odpowiedź, a jeśli go nie dostanie to wywala urządzenie?
    Spróbuję później jeszcze raz podłączyć cały majdan, i wstawię Screeny.
    Dziękuję Ci za zaangażowanie.

    PS:
    Póki co uruchomiłem jeszcze moją tajną broń :D
    [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna
  • #19 19596046
    gaskoin
    Poziom 38  
    elektronockaut napisał:
    Może faktycznie Bios jest bardziej wymagający, lub czeka na jakieś konkretne polecenie/odpowiedź, a jeśli go nie dostanie to wywala urządzenie?


    Host powinien wyslać polecenie SET_ADDRESS, z jakigoś powodu tego nie robi. Później i tak się pewnie rozbije o brak boota, ale na tym etapie jeszcze nie zapytał o interfejsy...

    elektronockaut napisał:
    PS:
    Póki co uruchomiłem jeszcze moją tajną broń :D

    Nooo analiza takich błędów potrafi trwać tygodniami. Na końcu się okazuje, że to jakaś pierdoła
  • #20 19596090
    elektronockaut
    VIP Zasłużony dla elektroda
    Skróciłem połączenie USB do minimum.
    Wynik niestety podobny - nadal log zajmuje 7-8kb.

    Porobiłem też kilka screenów z Saleae, tyle że nie do końca wiem co jest potrzebne z całego przebiegu.

    [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna
  • #21 19596258
    Janusz_kk
    Poziom 38  
    Jak widać implementacja USB w basicu jest skopana albo zbytnio uproszczona, analiza transmisji nic nie mówi, nie pozostaje Ci nic innego jak kupno arduino i odpalenie na nim USB. Jak nie pójdzie pod dos-em to i szanse na modyfikację większe bo jest dostęp do źródeł bibloteki i można coś pokombinować, czego w przypadku Baskoma nie ma.
  • #22 19596397
    elektronockaut
    VIP Zasłużony dla elektroda
    Myślę kolego że nie do końca masz rację. Zaprzeczeniem tego jest kolega @bart-projects, który w bascomie potrafi zrobić wszystko. Liczę na to że jeszcze się odezwie, i pomoże rozwikłać zagadkę ;)
  • Pomocny post
    #23 19597015
    gaskoin
    Poziom 38  
    W ostatnim przypadku Atmega nie odpowiedziała nawet na żądanie o deskryptor... Komunikacja wchodzi w stan IDLE i tyle. Idealnie by było jakbyś w sofcie dodał jakieś logowanie komunikacji żeby zobaczyć co robi w tym czasie Twój procesor. Możesz dodać najprostsze wysyłanie przez RS232. Oscylogram też by się przydał bo te przebiegi co ostatnio wrzuciłeś wyglądają mi bardzo podejrzanie (napięcia coś nie teges).

    elektronockaut napisał:
    [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna


    Co tu się podziało z tymi napięciami? W dodatku jakieś dziwne skoki są napięcia. Nie powinno tak być, albo źle sondowałeś
  • Pomocny post
    #24 19597093
    slx
    Poziom 19  
    W załączniku program: klawiatura HID z obsługą boot protocol, w oparciu o V-USB. Wgraj to i sprawdź czy zadziała.
  • #25 19597171
    gaskoin
    Poziom 38  
    slx napisał:
    W załączniku program: klawiatura HID z obsługą boot protocol, w oparciu o V-USB. Wgraj to i sprawdź czy zadziała.


    Problemem jak widzisz nie jest brak boota. Nie dochodzi nawet do enumeracji. Z resztą klawiatura obsługuje boot protocol. Jest to w kodzie, tylko autor sam nie wie co wgrywa :)
  • #26 19597332
    elektronockaut
    VIP Zasłużony dla elektroda
    gaskoin napisał:
    W ostatnim przypadku Atmega nie odpowiedziała nawet na żądanie o deskryptor... Komunikacja wchodzi w stan IDLE i tyle. Idealnie by było jakbyś w sofcie dodał jakieś logowanie komunikacji żeby zobaczyć co robi w tym czasie Twój procesor. Możesz dodać najprostsze wysyłanie przez RS232. Oscylogram też by się przydał bo te przebiegi co ostatnio wrzuciłeś wyglądają mi bardzo podejrzanie (napięcia coś nie teges).


    Coś pomyślę po południu. Te napięcia też mnie zastanawiają. Szczerze powiedziawszy nie zwróciłem wcześniej na to uwagi. Skąd ten nagły skok ? Sondy były podłączone dobrze (no bez jaj...). Pomiarów dokonywałem bezpośrednio na D+ i D-. Oczywiście wspólna masa obydwóch sond 1:1. Wcześniej sondy sprawdzałem na wyjściu wzorcowym oscyloskopu (zawsze tak robię). Może problem jest tutaj po stronie sprzętowej ? Nie skorzystałem ze schematu załączonego przez autora biblioteki SWUSB, lecz ze schematu USBASP który bardziej mi odpowiadał. (dwie diody zenera dwa rezystory, i jeden rezystor podciągający do +5V).

    [BASCOM] Nietypowa klawiatura USB dla DOS - brak wykrycia przez BIOS, zmiana VID i PID bezskuteczna

    slx napisał:
    W załączniku program: klawiatura HID z obsługą boot protocol, w oparciu o V-USB. Wgraj to i sprawdź czy zadziała.
    Jak wrócę z pracy to sprawdzę. Dzięki

    gaskoin napisał:
    Problemem jak widzisz nie jest brak boota. Nie dochodzi nawet do enumeracji. Z resztą klawiatura obsługuje boot protocol. Jest to w kodzie, tylko autor sam nie wie co wgrywa
    Nie wiem jak działa protokół USB, więc też nie wiem co wgrywam ;) Oglądałem bibliotekę SWUSB i includ'y, ale nie analizowałem bo się nie znam. W kodzie Bascom dopasowałem sobie tylko wysyłanie przycisków - tyle.


    Zastanawia mnie jeszcze jedno...
    Dlaczego zabawka działa na laptopie, komputerze stacjonarnym... (pod Windows), a nie działa na komputerku z DOS. Komputer ten to terminal HPt5300 z procesorem ViaEden. Może on mieć jakieś inne standardy napięć ? Skąd ten nagły skok? Sam przełącza sobie napięcia komunikacji D+ i D- ?
    Muszę jeszcze spróbować odpalić DOS na laptopie, i tam sprawdzić moją zabawkę.
  • #27 19597521
    Janusz_kk
    Poziom 38  
    elektronockaut napisał:
    Skąd ten nagły skok? Sam przełącza sobie napięcia komunikacji D+ i D- ?

    Nie,jedno urządzenie 'chodzi' na 3.3V a drugie na 5V.
  • #28 19597797
    elektronockaut
    VIP Zasłużony dla elektroda
    Myślisz że jest sens doszukiwać się problemu po stronie napięć na liniach komunikacji?
    Co to mógł by być za skok napięcia ?
  • #29 19598077
    elektronockaut
    VIP Zasłużony dla elektroda
    Myślisz że jest sens doszukiwać się problemu po stronie napięć na liniach komunikacji?
    Co to mógł by być za skok napięcia ?

    Dodano po 3 [godziny] 30 [minuty]:

    @Janusz_kk Słusznie zauważył że coś nie tak jest z napięciami na oscylogramie który zamieściłem. Z niewiadomych przyczyn komputerek na którym pracuje DOS, i docelowo ma pracować klawiaturka SWUSB na magistrali USB D+ i D- ma niższe napięcia niż 3,3V. Nie mierzyłem dokładnie tego napięcia, ale już na pierwszy rzut oka na wykres z oscyloskopu widać że jest to napięcie znacznie niższe. Atmega za stan wysoki uważa napięcie > 2,7V (jeśli zasilana jest z 5V jak w moim przypadku), które prawdopodobnie nie było osiągane przez mój port USB. Usunąłem diody 3,6V z płytki SWUSB, i przed zasilaniem całego układu wstawiłem w szereg dwie diody 1N4148 co obniżyło napięcie zasilania Atmegi z 5V do ok 3,3V. Układzik ruszył do strzału! Bardzo wszystkim dziękuję za pomoc i zaangażowanie!

Podsumowanie tematu

Użytkownik starał się skonstruować dedykowaną klawiaturę USB działającą pod DOS, która nie była wykrywana przez BIOS, mimo że działała w systemie Windows. Inne klawiatury USB działały w DOS, co sugerowało, że problem leży w implementacji USB w jego klawiaturze. Użytkownik próbował zmienić VID i PID, ale to nie przyniosło efektów. Dyskusja skupiła się na konieczności obsługi protokołu boot przez klawiaturę oraz na problemach z komunikacją USB, które mogą wynikać z nieprawidłowych napięć na liniach D+ i D-. Użytkownik zdołał zarejestrować komunikację oscyloskopem, ale logi nie dostarczały wystarczających informacji. Ostatecznie, po modyfikacji układu zasilania, klawiatura zaczęła działać, co wskazuje na problemy z napięciem zasilania Atmegi.
Podsumowanie wygenerowane przez model językowy.
REKLAMA