Linux i biblioteka do EZ-USB FX2LP.

Linux i biblioteka do EZ-USB FX2LP.
PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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.

edytowany 1x, ostatnio: pwop
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.

daniel1302
  • Rejestracja:ponad 16 lat
  • Ostatnio:8 dni
1

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


Head of the pprof.
PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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?

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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.

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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"

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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:7: *** missing separator. Stop.
Zawartość makefila wygląda następująco:

Kopiuj
#
# 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?

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

Bo pliku libusb-dev nie znajduję.

edytowany 2x, ostatnio: pwop
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:7: *** missing separator. Stop.
Zawartość makefila wygląda następująco:

Kopiuj
#
# 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?

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

Bo pliku libusb-dev nie znajduję.

Tak to bedzie to.

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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>

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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(?)

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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.

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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.

PW
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 6 lat
  • Postów:50
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)
edytowany 1x, ostatnio: pwop
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)