Linux i biblioteka do EZ-USB FX2LP.

0

Witam,
Próbuję napisać aplikację na Linuxa w c/c++, która komunikuje się z chipem Cypress CY7C68013A EZ-USB FX2LP USB Microcontroller High-Speed USB Peripheral Controller przez USB 2.0.
Niestety nie wiem jakiej biblioteki użyć do komunikacji z nim. Ktoś miał do czynienia z tym chipem?
Byłbym wdzięczny za pomoc.

0

Co rozumiesz pod pojeciem komunikacji z chipem? Masz driver-a dla tego kontrolera? Jesli chcesz dopiero napisac driver to raczej poczytaj o kernel space a nie user space.

1

Jeśli to komunikuje się przez USB to w C jest <libusb.h> i to powinno się dać użyć

0

Drivera pobrałem ze strony producenta:
http://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit

Przez komunikację rozumiem pobieranie paczek danych i sterowanie urządzeniem.
Sterowanie odbywa się poprzez USB 2.0 przez komendy bezpośrednie i rejestry kontrolne.

0
daniel1302 napisał(a):

Jeśli to komunikuje się przez USB to w C jest <libusb.h> i to powinno się dać użyć

Jesteś pewien, ze libusb wspiera strone USB device'a? Z tego co ja wiem to kiedys bylo wsparcie tylko dla USB hosta ale moze cos sie zmienilo...

0
pwop napisał(a):

Drivera pobrałem ze strony producenta:
http://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit

Przez komunikację rozumiem pobieranie paczek danych i sterowanie urządzeniem.
Sterowanie odbywa się poprzez USB 2.0 przez komendy bezpośrednie i rejestry kontrolne.

Skoro masz driver ze strony producenta to ok. Na tej stronce widze jakies przyklady i SDK dla Linuxa. Probowales uzyc ich?

0

Jedynie to przejrzałem, myślałem że jest mi potrzebna dodatkowa biblioteka i jej poszukiwałem.
Ale zaraz skorzystam z tej <libusb.h> i postaram się spróbować użyć przykładów ze strony producenta.

1
pwop napisał(a):

Jedynie to przejrzałem, myślałem że jest mi potrzebna dodatkowa biblioteka i jej poszukiwałem.
Ale zaraz skorzystam z tej <libusb.h> i postaram się spróbować użyć przykładów ze strony producenta.

Obawiam sie, ze tak jak pisalem troche wyzej ze libusb jest biblioteka przeznaczona tylko dla USB hosta, wiec nie tedy droga. Na twoim miejscu skupilbym sie raczej tylko na SDK i przykladach od producenta. Ale wybor nalezy do ciebie.

0
Kwadratowy pomidor napisał(a):

Obawiam sie, ze tak jak pisalem troche wyzej ze libusb jest biblioteka przeznaczona tylko dla USB hosta, wiec nie tedy droga. Na twoim miejscu skupilbym sie raczej tylko na SDK i przykladach od producenta. Ale wybor nalezy do ciebie.

Okej postaram się też spróbować napisać przez to, ale tutaj mam problem, bo nie wiem jak zainstalować te sterowniki, bo plik do budowy jest w rozszerzeniu .bat a z tego co się orientuję(mogę się mylić) jest to plik windowsowy i linux go nie obsługuje.
Dopiero zaczynam z Linuxem i jeszcze się uczę.

Tak samo mam problem z instalacją libusb, zrobiłem dokładnie to co tutaj:
http://www.linuxfromscratch.org/blfs/view/8.0/general/libusb.html
Lecz wyskakuje mi > configure: error: "udev support requested but libudev not installed"
Dobrze zrozumiałem, że po instalacji, od razu program będzie wykrywać tą bibliotekę? Pracuję w QT.

0
pwop napisał(a):
Kwadratowy pomidor napisał(a):

Obawiam sie, ze tak jak pisalem troche wyzej ze libusb jest biblioteka przeznaczona tylko dla USB hosta, wiec nie tedy droga. Na twoim miejscu skupilbym sie raczej tylko na SDK i przykladach od producenta. Ale wybor nalezy do ciebie.

Okej postaram się też spróbować napisać przez to, ale tutaj mam problem, bo nie wiem jak zainstalować te sterowniki, bo plik do budowy jest w rozszerzeniu .bat a z tego co się orientuję(mogę się mylić) jest to plik windowsowy i linux go nie obsługuje.
Dopiero zaczynam z Linuxem i jeszcze się uczę.

Pod linuxem szukalbym raczej pliku "Makefile". Jesli jest - sprobuj odpalic go przez "make".

Tak samo mam problem z instalacją libusb, zrobiłem dokładnie to co tutaj:
http://www.linuxfromscratch.org/blfs/view/8.0/general/libusb.html
Lecz wyskakuje mi > configure: error: "udev support requested but libudev not installed"
Dobrze zrozumiałem, że po instalacji, od razu program będzie wykrywać tą bibliotekę? Pracuję w QT.

To moze prosciej bedzie zainstalowac libusb z pakietu? Nie wiem jakiej dystrybucji Linuxa uzywasz, ale zapewne Ubuntu - wiec zapewne "apt get libusb-dev"

0
Kwadratowy pomidor napisał(a):

Pod linuxem szukalbym raczej pliku "Makefile". Jesli jest - sprobuj odpalic go przez "make".

Znalazłem makefile w src, nadal mi nie wychodzi. Pojawia się komunikat > makefile *** missing separator. Stop.
Zawartość makefila wygląda następująco:

#
# DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#

!INCLUDE $(NTMAKEENV)\makefile.def

Jedno co mnie zastanawia to dlaczego w plikach nie ma makefile.def

Kwadratowy pomidor napisał(a):

To moze prosciej bedzie zainstalowac libusb z pakietu? Nie wiem jakiej dystrybucji Linuxa uzywasz, ale zapewne Ubuntu - wiec zapewne "apt get libusb-dev"

Tak pracuje na ubuntu 16.04 LTS 32 bit.
Chodzi o to?

sudo apt-get install libusb-1.0-0-dev

Bo pliku libusb-dev nie znajduję.

1
pwop napisał(a):
Kwadratowy pomidor napisał(a):

Pod linuxem szukalbym raczej pliku "Makefile". Jesli jest - sprobuj odpalic go przez "make".

Znalazłem makefile w src, nadal mi nie wychodzi. Pojawia się komunikat > makefile *** missing separator. Stop.
Zawartość makefila wygląda następująco:

#
# DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#

!INCLUDE $(NTMAKEENV)\makefile.def

Jedno co mnie zastanawia to dlaczego w plikach nie ma makefile.def

Ten Makefile jakos tak bardziej windowsowo mi wyglada... Moze to nie paczka z driverem pod Linuxa?

Kwadratowy pomidor napisał(a):

To moze prosciej bedzie zainstalowac libusb z pakietu? Nie wiem jakiej dystrybucji Linuxa uzywasz, ale zapewne Ubuntu - wiec zapewne "apt get libusb-dev"

Tak pracuje na ubuntu 16.04 LTS 32 bit.
Chodzi o to?

sudo apt-get install libusb-1.0-0-dev

Bo pliku libusb-dev nie znajduję.

Tak to bedzie to.

0

Wyświetliło mi taki komunikat:

Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
libusb-1.0-0-dev is already the newest version (2:1.0.20-1).
0 aktualizowanych, 0 nowo instalowanych, 0 usuwanych i 33 nieaktualizowanych.

Lecz QT Creator nadal nie widzi tej biblioteki, trzeba ją jakoś specjalnie dodać? Nie powinna być już ona jakoś dodana?
W pliku .pro próbowałem ręcznie ją dodać poprzez LIBS += libusb, ale nie działa.

1
pwop napisał(a):

Wyświetliło mi taki komunikat:

Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
libusb-1.0-0-dev is already the newest version (2:1.0.20-1).
0 aktualizowanych, 0 nowo instalowanych, 0 usuwanych i 33 nieaktualizowanych.

Ok, czyli już była zainstalowana.

Lecz QT Creator nadal nie widzi tej biblioteki, trzeba ją jakoś specjalnie dodać? Nie powinna być już ona jakoś dodana?
W pliku .pro próbowałem ręcznie ją dodać poprzez LIBS += libusb, ale nie działa.

Nie czuje sie specjalista od Qtcreatora (nie moja specjalizacja) ale chyba powinno byc cos w tym stylu:
LIBS += -lusb
albo:
LIBS += -lusb-1.0

0
Kwadratowy pomidor napisał(a):

Nie czuje sie specjalista od Qtcreatora (nie moja specjalizacja) ale chyba powinno byc cos w tym stylu:
LIBS += -lusb
albo:
LIBS += -lusb-1.0

Poprawne dołączenie to LIBS += -lusb-1.0 tak jak pisałeś, ale jak próbuję dołączyć bibliotekę #include <libusb.h> to wyskakuje błąd że jej nie znajduje.
No such file or directory
Co może być przyczyną?

1
pwop napisał(a):
Kwadratowy pomidor napisał(a):

Nie czuje sie specjalista od Qtcreatora (nie moja specjalizacja) ale chyba powinno byc cos w tym stylu:
LIBS += -lusb
albo:
LIBS += -lusb-1.0

Poprawne dołączenie to LIBS += -lusb-1.0 tak jak pisałeś, ale jak próbuję dołączyć bibliotekę #include <libusb.h> to wyskakuje błąd że jej nie znajduje.
No such file or directory
Co może być przyczyną?

To spróbuj tak: #include <libusb-1.0/libusb.h>

0
Kwadratowy pomidor napisał(a):

To spróbuj tak: #include <libusb-1.0/libusb.h>

Zadziałało :D
Wielkie dzięki, głównie za Twój poświęcony czas.
Mam jeszcze jedno pytanie, ten zapis libusb-1.0/libusb.h oznacza, że w zainstalowanej biblotece znajdź libusb.h?

1
pwop napisał(a):
Kwadratowy pomidor napisał(a):

To spróbuj tak: #include <libusb-1.0/libusb.h>

Zadziałało :D
Wielkie dzięki, głównie za Twój poświęcony czas.
Mam jeszcze jedno pytanie, ten zapis libusb-1.0/libusb.h oznacza, że w zainstalowanej biblotece znajdź libusb.h?

To oznacza ze plik libusb.h nie znajduje sie bezposrednio w /usr/include tylko w jego podkatalogu: libusb-1.0

0

Male sprostowanie - ty chcesz napisac w QT aplikacje, czyli domyslam sie ze raczej po stronie PC-ta, czyli po stronie USB hosta. W takim ukladzie libusb powinien byc ok, tzn powinien pozwolic na wylistowanie urzadzen USB i komunikacje z nimi. Poczatkowo myslalem ze chcesz pisac driver (mowiles cos o rejestrach) albo inny kod pod tego FX2/FX3 - a on jest USB device'm przeciez(?)

0

A to mój błąd jeżeli źle napisałem.

Planuję napisać aplikację, która będzie pobierać dane z urządzenia, które później po obróbce lub bez chcę wyświetlać na oknie.
O rejestrach pisałem, ponieważ jeżeli chcę coś ustawić na urządzeniu to muszę przesłać mu rejestr i ustawić na nim konkretną wartość. Jeżeli to dobrze zrozumiałem, to jest chyba coś podobnego jak na raspberry pi ustawie napięć na gpio, ale mogę się mylić bo dopiero z tym zaczynam.

1
pwop napisał(a):

A to mój błąd jeżeli źle napisałem.

Planuję napisać aplikację, która będzie pobierać dane z urządzenia, które później po obróbce lub bez chcę wyświetlać na oknie.
O rejestrach pisałem, ponieważ jeżeli chcę coś ustawić na urządzeniu to muszę przesłać mu rejestr i ustawić na nim konkretną wartość. Jeżeli to dobrze zrozumiałem, to jest chyba coś podobnego jak na raspberry pi ustawie napięć na gpio, ale mogę się mylić bo dopiero z tym zaczynam.

To nie do konca tak. Jesli chcesz grzebac w rejestrach FX3-ki to musisz miec niskopoziomowy dostep do tych rejestrow ale z poziomu firmware Cypress FX3 a nie przez kabel USB. Specyfikacja USB nie ma czegos takiego jak grzebanie po rejestrach zdalnego urzadzenia (po kablu). Czyli z poziomu PC-ta i aplikacji w QT nie uda ci sie grzebac po rejestrach FX3-ki po kablu USB. O to ci chodzilo? Jesli tak - to to se ne da.

0

No to chyba będę musiał w takim razie także napisać fimware.
Bo w tym urządzeniu ustawia się różne parametry, np amplitude.
A z tego co zrozumiałem, to tylko otrzymywane dane są przesyłane, a parametry ustawia się poprzez rejestry.

0
pwop napisał(a):

No to chyba będę musiał w takim razie także napisać fimware.
Bo w tym urządzeniu ustawia się różne parametry, np amplitude.
A z tego co zrozumiałem, to tylko otrzymywane dane są przesyłane, a parametry ustawia się poprzez rejestry.

Hm... To moze podpowiem, jako ktos kto juz pisal drivery usb ze napisanie takiego drivera to nie kwestia godzin czy kilku dni. Pisanie od zera drivera do firmware zwykle zajmuje cale tygodnie, czasami miesiace. To nie jest prosty task. USB to nie jest taki sobie szybszy RS232, jak sie wielu osobom wydaje.

Co do samego urzadzenia - to tak - grzebanie po rejestrach to kwestia lokalnego firmware, natomiast po kablu masz transmisje typu control, bulk, interrupt czy isochronous.

0

Hmm, jeszcze nie do końca to rozumiem i jak to działa, ale urządzenie posiada dostępne 3 endpointy i nie wiem czy przez nie nie mogę się komunikować z urządzeniem.
Komendy bezpośrednie to po prostu adresy żądania, a rejestry kontrolne to po prostu odresy rejestru. Listę tych adresów i rejestrów posiadam.
Nie wiem czy dobrze tłumaczę, ale chodzi mi o to że jak np włącza się urządzenie to muszę ustawić bit zerowy w rejestrze podanym w liście.

Czyli do tego pisania bym potrzebował dodatkowo:

  1. Wgrywanie firmware do fx2lp: narzędzie fxload. Źródła dostępne w sieci, bardzo prosta aplikacja pisząca na określony endpoint.
  2. Biblioteki dla firmware: EZUSB.LIB, dscr.a51 (deskryptor USB), USBJmpTb.OBJ
    3.Środowisko do pisania firmware:
    a) Keil uVision: kompilator + IDE (Windows)
    b) eclipse + sdcc (Linux)
0
pwop napisał(a):

Hmm, jeszcze nie do końca to rozumiem i jak to działa, ale urządzenie posiada dostępne 3 endpointy i nie wiem czy przez nie nie mogę się komunikować z urządzeniem.
Komendy bezpośrednie to po prostu adresy żądania, a rejestry kontrolne to po prostu odresy rejestru. Listę tych adresów i rejestrów posiadam.
Nie wiem czy dobrze tłumaczę, ale chodzi mi o to że jak np włącza się urządzenie to muszę ustawić bit zerowy w rejestrze podanym w liście.

(...)

Aha, czyli jeszcze inaczej niz myslalem. Teraz wyglada mi na na to ze driver USB zrobili juz ludzie z Cypressa udostepniajac w ich driverze USB mozliwosc ustawiania niektorych rejestrow poprzez jakis protokol uzywajac endpointow. Ok, to faktycznie nie musisz pisac drivera, tylko programik na PC w QT sterujacy tym driverem.
Powodzenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1