Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

komunikacja PIC <= USB = > PC

ppawel12 09 Paź 2011 18:18 4090 29
  • #1 09 Paź 2011 18:18
    ppawel12
    Poziom 16  

    Witam,

    Kartkuje notę katalogową od układu PIC18F2550 i nie mogę zrozumieć tych rejestrów, które są odpowiedzialne za komunikacje po USB.

    Chcę nawiązać komunikację PC <=> PIC. Program na PC napiszę w LABview by wysyłał albo odbierał proste ramki danych - taki jest początek. Niestety nie mogę zrozumieć kilku rzeczy :(
    rozumiem następujące rejestry:
    UCON - kontrola usb i tu bity: USBEN - włącza usb, PPBRST (co to jest ping - pong bufor ??), RESUME - wznawia pracę, SUSPND ?? innych nie rozumiem całkowicie :(
    UCFG - konfiguracja usb bity: UTRDIS - włącza transmisję, FSEN - szybkość transmisji, UPUEN - jakie podciagnięcie zew/wew, inne podobno jak wyżej niezbyt zrozumiałe :(
    CONFIG2L - VREGEN - wew/zwe regulator 3.3V
    USTAT - rejestr statusu usb


    do czego służą rejestry:
    BDnSTAT: BD Status register -- konfiguracja
    BDnCNT: BD Byte Count register -- licznik ??
    BDnADRL: BD Address Low register -- dane ??
    BDnADRH: BD Address High register -- dane ??

    oraz
    UEPn ????

    dzięki pozdrawiam ppawel12

    0 29
  • #2 09 Paź 2011 19:09
    94075
    Użytkownik usunął konto  
  • #3 09 Paź 2011 20:00
    ppawel12
    Poziom 16  

    mówisz o tym przykładzie :

    Link

    czy inne przykłady z ich strony, patrzyłem ale to mało mi daje

    i co z tego że wezmę ich przykład jak nie będę wiedział o co chodzi z tymi rejestrami co napisałem powyżej :/ chcę się nauczyć i zrozumieć a nie brać czyjeś kody i stosować nie wiedząc dlaczego i jak działają :/

    0
  • Pomocny post
    #4 10 Paź 2011 07:14
    poorchava
    Poziom 18  

    Ściągnij sobie paczkę kodów ze strony Microchipa. Tam jest kod do obsługi USB w trybie Generic HID Device (między innymi). Nie mówię, że masz go kopiować, ale możesz chociaż podejrzeć jak to jest zrobione.

    Uwierz mi, sam tego nie rozkminisz. Protokół magistrali USB jest dość mocno skomplikowany. Dużo różnych transakcji, deskryptorów itd.

    0
  • #5 10 Paź 2011 10:36
    63404
    Użytkownik usunął konto  
  • #6 10 Paź 2011 17:00
    kinortkele
    Poziom 11  

    Żeby się brać za zrozumienie tego wszystkiego najpierw trzeba by zrozumieć to. Próba zrozumienia jednego końca USB bez znajomości protokołu jest jak(tu wstawić jakieś obrazowe, zabawne porównanie).
    W przeciwnym przypadku można co najwyżej przerabiać gotowce na czuja.
    Ja np. używałem tego jako punktu wyjścia do zabawy z HID.

    0
  • #7 10 Paź 2011 17:57
    ppawel12
    Poziom 16  

    poorchava napisał:
    Ściągnij sobie paczkę kodów ze strony Microchipa. Tam jest kod do obsługi USB w trybie Generic HID Device (między innymi). Nie mówię, że masz go kopiować, ale możesz chociaż podejrzeć jak to jest zrobione.

    Uwierz mi, sam tego nie rozkminisz. Protokół magistrali USB jest dość mocno skomplikowany. Dużo różnych transakcji, deskryptorów itd.


    możesz podać linka do tej paczki :) bo brzmi ciekawie a nie wiem czy już na to wpadłem bo wiele rzeczy oglądałem ale za dużo kodu i za dużo bibliotek różnych i się gubię.

    0
  • Pomocny post
    #8 10 Paź 2011 23:41
    63404
    Użytkownik usunął konto  
  • #9 27 Paź 2011 16:33
    ppawel12
    Poziom 16  

    miałem trochę czasu i zainstalowałem to, jest tam spora lista plików/programów odnośnie USB :/

    komunikacja PIC <= USB = > PC

    niektóre programy rozumiem po nazwach, ale co do niektórych to nie mam pojęcia o co chodzi :/
    device to urządzenia a host ??
    niektóre programy to komunikacja tylko w jedną stronę a które dotyczą komunikacje w obie ???

    0
  • #10 27 Paź 2011 17:00
    63404
    Użytkownik usunął konto  
  • #11 27 Paź 2011 17:17
    ppawel12
    Poziom 16  

    wiem, o tym :)
    tylko się spytałem :P

    czyli host to tak jakby przejściówka z urządzenia do pc ?

    0
  • #12 27 Paź 2011 17:22
    63404
    Użytkownik usunął konto  
  • #13 30 Paź 2011 13:03
    Marico
    Poziom 19  

    Też uważam, że przykłady Microchipa nie pomagają a wręcz zaciemniają, szczególnie ta ich tendencja do pisania softu kompatybilnego dla każdej rodziny ich uC, przez co kod ma pełno ifdefów, które zaciemniają obraz. Szkoda, że nie zrobili liba USB TYLKO dla 18f25*.

    0
  • #14 30 Paź 2011 13:27
    Szymon Tarnowski
    Poziom 27  

    Marico napisał:
    Też uważam, że przykłady Microchipa nie pomagają a wręcz zaciemniają, szczególnie ta ich tendencja do pisania softu kompatybilnego dla każdej rodziny ich uC, przez co kod ma pełno ifdefów, które zaciemniają obraz.
    To nie jest ich tendencja tylko standard pisania takich rzeczy. Nie zaglądaj w kod biblioteki jak nie masz potrzeby tylko do main.c tam są podane przykłady użycia. Jak będziesz chciał mieć CDC to wywołujesz max 5 funkcji typu konfiguracja-odczyt-zapis i projekt gotowy.

    0
  • #15 30 Paź 2011 17:27
    Marico
    Poziom 19  

    Masz rację ale tutaj chodzi mi o wartość edukacyjną tych materiałów (inicjator wątku właśnie chce się czegoś dowiedzieć więcej a nie tylko wywoływać funkcje z liba). To jest standard gdy liby są wykorzystywane bez wnikania w ich zawartość (w 99% przypadków), gdy jest potrzeba edukacji - juz standard nie bardzo w tym pomaga. Uważam, że najlepsze materiały pod względem edukacyjnym pisał Lucio di Jasio, szkoda że odszedł z Microchipa.

    0
  • #16 30 Paź 2011 18:14
    63404
    Użytkownik usunął konto  
  • #17 30 Paź 2011 18:32
    Marico
    Poziom 19  

    Pozostanę przy swoim zdaniu :-). Jak zaczynam się czegoś uczyć to najpierw wole poznać podstawową implementację, najczęściej TYLKO na uC, na którym właśnie pracuję. Nie interesuje mnie fafdziesiąt innych implementacji. DLa mnie eot bo dyskusja zaczyna się o gustach :-)

    0
  • #18 30 Paź 2011 20:58
    ppawel12
    Poziom 16  

    Przeglądałem te biblioteki z kodów próbnych i mam takie pytanie są może podobne biblioteki pod kompilator Hi-tech'a ?? bo go umiem a przesiadać się na C18 to narazie za dużo, bo tam trochę jest inaczej niż w Hi-techu

    0
  • #19 30 Paź 2011 21:37
    poorchava
    Poziom 18  

    Niektóre biblioteki Microchipa mają błędy powodujące dysfunkcjonalność całej biblioteki. Przykładem czegoś takiego jest biblioteka do UARTu dla dsPIC33F (testowałem na dsPIC33FJ128MC804). W funkcjach otwierających port nie uwzględniono bitu odpowiedzialnego za odwrócenie polaryzacji linii i wywołanie tej funkcji z jakimkolwiek zestawem parametrów powoduje skonfigurowanie portu z odwrócona polaryzacją. Trzeba ręcznie ustawiać ten bit bo inaczej nic nie działa. To już równie dobrze można to wszystko zrobić ręcznie. Takich bubli jest pewnie znacznie więcej, ale ja natknąłem się tylko na ten jeden.

    0
  • #20 31 Paź 2011 17:59
    ppawel12
    Poziom 16  

    Szkoda, że po zainstalowaniu Hi-tech PIC18 jest w nim taka mało bibliotek :( tylko kilka do podstawowych peryferii :/


    Zacząłem gryźć te kody z C18 pod układ PIC18F47J53 przykładowa biblioteka:
    USB Device - CDC - BASIC Demo
    Wyodrębniłem fragmenty programu, które są pod mój układ pic (obserwując symulacje) niestety jest kilka funkcji, których nie ma nigdzie opisanych :/ przeszukałem całe drzewo plików dodanych do projektu i nic :/

    np. po odpaleniu projektu main.c mamy funkcji InitializeSystem() a w niej inną funkcje USBDeviceInit() (skaczemu do pliku usb_device.c) i tam mamy kilka funkcji, których nie ma nigdzie :/
    USBDisableInterrupts();
    SetConfigurationOptions();

    itp. o co z tym chodzi coś się dzieje w tych funkcjach ale nie wiem co bo symulator nigdzie nie skacze.
    Podobnie jest w innych bibliotekach zamieszczonych w tej paczce np. mouse, joystick

    ktoś wie o co chodzi z tym ??

    0
  • #21 04 Lis 2011 16:43
    ppawel12
    Poziom 16  

    a możecie mi wyjaśnić taką prostą rzeczy:

    w komunikacji po RS232 był rejestr do którego się wpisywało info aby wysłać. Dana odebrana była zapisywana w innym rejestrze. Przeglądając te przykłady nie mogę znaleźć tych rejestrów :/
    Jest program z przykładów USB Basic Demo i chyba on jest takim podstawowym programem, do niego chcę dokleić kod by coś wysyłac ale nie wiem jaki to rejestr :/ bo w innym programach nie ma rejestrów podanych tylko zmienne lokalne na których autor operuje :/

    0
  • #22 22 Lis 2011 00:27
    Marico
    Poziom 19  

    Natchniony twoimi probami z uruchomieniem USB i przypomniawszy sobie ze gdzies u mnie lezy 2550 postanowilem w koncu uruchomic w nim usb (w trybie HID). Wraznie sa takie, ze nie warto. W najmniejszej wersji (uzwam maksyumalnie wykastrowany usb framework dla sdcc) kod do obslugi usb zajmuje prawie polowe pamieci. Prosciej uzyc przejsciowke usbserial niz bawic sie w usb w 2550.

    0
  • #23 22 Lis 2011 07:08
    94075
    Użytkownik usunął konto  
  • #24 22 Lis 2011 09:03
    Marico
    Poziom 19  

    OK, przesadzilem z ta 1/2 pamieci. Z twojej wypowiedzi wniosek jest taki ze nie umiales uzyc sdcc (albo uzywales go w jakis archaicznych wersjach). Kod bootloadera hid skompilowany sdcc 6881 bajtow, c18 6856 bajtow. Padlem na kolana przed c18. Bootloader to ma zajmowac 100 slow (jak tinyboot) a nie prawie 1/4 pamieci.

    0
  • #25 22 Lis 2011 09:25
    94075
    Użytkownik usunął konto  
  • #26 22 Lis 2011 10:48
    Marico
    Poziom 19  

    Inicjator wątku (chyba) nie podał do czego mu USB. Stawiam orzeszki przeciwko dolarom, że uległ ogólnemu społecznemu mniemaniu jakież to USB jest proste. Bo przecież nawet dziecko "umie" podłączyć dowolne urządzenie USB do Windows i zadziała. To właśnie dzisiejsza powszechność USB spowodowała, że wszystkim się wydaje jakie to jest proste. Pamiętasz jak w latach 9x (jak pojawiały się pierwsze implementacje usb) było larum, że jest to źle zaprojektowany standard i na dodatek niepotrzebnie skomplikowany? Jakoś wszyscy o tym zapomnieli... Powszechność USB wymusiła (niestety) konieczność wepchnięcie tegoż do 8bit uC ze wszystkimi konsekwencjami. Podaj mi listę (przynajmniej 10 przykładów) zastosowań komunikacyjnych (wymiany danych) między 8bitowym uC a hostem (PC), które nie da się zaimplementować używając *tylko* przejściówki uart<->USB serial (wyjątki typu komunikacja z zamkniętym/gotowym softem, który "umie" komunikować się tylko po USB się nie liczą).
    Podsumowując, jeśli inicjator wątku potrzebuje w celu hobbistycznym (szukał w module USB analogicznych rejestrów do uartowych RXREG/TXREG, podejrzewam, że założył, że jest to podobny mechanizm wymiany danych jak w uarcie) wymieniać dane uC <-> PC nie dość, że usb serial mu wystarczy, firmware będzie prostszy to jeszcze zaoszczędzi trochę pamięci. No chyba, że koniecznie chce się przekonać "jakież to USB jest proste" :-)

    0
  • #27 22 Lis 2011 11:28
    94075
    Użytkownik usunął konto  
  • #28 22 Lis 2011 13:13
    Marico
    Poziom 19  

    Bootloader po USB był tylko jednym przykładem użytym w dygresji, że można się bez tego obejść używając serialowego. Nie musisz podawać, aż 100 przykładów, byłoby super, ale 10 wystarczy aby pawel12 na podstawie przytoczonych argumentów za i przeciw mógł sobie wyciągnąć własne wnioski z dyskusji. Forum chyba ma w czymś pomóc poprzez rzeczową dyskusję czy ma tylko być miejscem gdzie "autorytety" wykorzystują okazję aby wytykać "niedouczonym"?
    Pawel12: czy USB jest ci tylko potrzebne do "wysyłania albo odbierania prostych ramek danych", czy do czegoś więcej?

    0
  • #29 22 Lis 2011 14:53
    94075
    Użytkownik usunął konto  
  • #30 22 Lis 2011 15:50
    Marico
    Poziom 19  

    Ojtam, ojtam. Zaraz "forsuje". To pawel12 sam podejmie decyzje czy woli rozwiązanie tanie czy proste :-).

    0