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

Zmiana USB z Ftdi na Cypress CY7C68001 - a program Delphi

mariuszekpl 10 Kwi 2008 23:18 2400 2
REKLAMA
  • #1 5017030
    mariuszekpl
    Poziom 10  
    Posty: 25
    Jakiś czas temu napisałem prosty program w Delphi do odczytywania danych z USB gdzie w elektronice był chip FTDI, przykładów było dużo więc bez problemu powstał program. Niestety Ftdi do demonów szybkości nie należy i elektronika została zmieniona a do obsługi USB użyto CY7C68001.

    I tutaj zaczynają sie moje problemy, z mojego punktu widzenia jakoś tak mało przykładów jest które pokazywały by jak odczytać albo wysłać dane z takiego USB.

    Ze strony
    http://tiny.pl/467z
    Ściągnąłem sobie sterownik CyUSB.sys, CyAPI, CyConsole.
    Za pomocą CyConsole sprawdziłem że dane są transmitowane więc elektronika jest OK.

    Trochę sie uśmiałem jak zobaczyłem przykłady i CyAPI, bo ktoś wpadł na dość szalony pomysł aby udostępnić statyczne skompilowane biblioteki pod BC6 albo VC7 (czyli praktycznie już nie spotykane kompilatory a przynajmniej ja nie mogę w delphi korzystać). Przykłady jakie są korzystają ze statycznej biblioteki do której nie ma źródeł więc w sumie nie wiele mi to mówi.

    Kolejny etap mojej walki to dokumentacja do CyUSB.sys.
    Niestety i tutaj przykłady są dość szczątkowe nie udało mi się odczytać danych :( Autor chyba zakładał dość sporą wiedzę z zakresu którego ja niestety nie posiadam.


    Działa mi:
    IOCTL_ADAPT_ABORT_PIPE
    IOCTL_ADAPT_GET_DEVICE_NAME
    IOCTL_ADAPT_GET_FRIENDLY_NAME
    IOCTL_ADAPT_RESET_PIPE
    IOCTL_ADAPT_RESET_PARENT_PORT

    A nie działą mi instrukcje którymi powinienem być w stanie odczytać dane z endpointa :
    IOCTL_ADAPT_SEND_NON_EP0_TRANSFER
    IOCTL_ADAPT_SEND_NON_EP0_DIRECT


    Ktoś może posiada jakiś prosty przykład komunikacji bulk z układem cypress ?
    W sumie język może być dla mnie dowolny. Ewentualnie jakieś sugestie gdzie można w miare zwięzłej postaci wchłonąć trochę wiedzy jak obsłużyć CyUSB.sys.
  • REKLAMA
  • #2 5017147
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    A jak zgłasza się urządzenie w systemie?
    Jako virtualCom, HID itp?

    FTDI jest układem, który ma za zadanie udostępnić po USB urządzenia zewnętrzne tak jakby były na porcie RS232 tyle że wirtualnym. Cała zabawa związana ze specyfikacją USB jest jakby pominięta.
    Z tym konkretnie układem, o którym Piszesz nie miałem doczynienia ale proponuje choć trochę ogarnąć jak zbudowana jest transmisja USB wtedy korzystanie z APi do tego układu okaże się proste i logiczne.

    pozdr.
  • #3 5017679
    mariuszekpl
    Poziom 10  
    Posty: 25
    Jeżeli mówimy o wersji VCP (Virtual COM Port) sterownika do Ftdi to rzeczywiście istnieje taka opcja, prosta w implementacji jednak jest ona koszmarnie wolna.
    Drugą opcją w Ftdi jest D2XX i tutaj jest już lepiej jeżeli chodzi o szybkość, przyzwoita dokumentacja i wiele przykładów więc też nie ma z tym problemu.
    Co do pominięcia specyfikacji USB to masz rację była pominięta przy FTDI , bo dobre API pozwala na szybką implementację albo za pomocą RS-a albo za pomocą D2XX z mojego punktu widzenia to był ogromny plus.

    Urządzenie się zgłasza jako "Generic Cypress USB Device"
    Żadnych wirtualnych COM czy HID to to nie jest, raczej High-Speed :)

    Co do wczytywania sie w dokumentację do sposobu transmisji to z miłą chęcią ale fajnie jak by to było z punktu widzenia api windows, jest coś takiego ?

    Kontakt ze sterownikiem jest za pomocą 20 funkcji tylko że nie potrafię ustalic czy istnieją jakieś zależności , że trzeba wykonać pewien cykl czynności wcześniej aby zadziałała dana funkcja :(

    I o ile np. taka prostę funkcje które nie wymagają skomplikowanych struktur przekazywanych jako parametr działają

    
     DWORD dwBytes; 
     UCHAR Address = 0x82;  // edress endpoint-a
    
    DeviceIoControl(hDevice, IOCTL_ADAPT_RESET_PIPE, 
                        &Address, sizeof (Address) 
                        NULL, 0, 
                        &dwBytes, NULL); 
    



    ale jest kilka funkcji które wymaga przekazywania dość skomplikowanych struktur jako parametry a nie koniecznie opisane jest co dany parametr znaczy :(

    Dodano po 55 [minuty]:

    :) Wstyd mi.
    Wszystko działa, miałem drobny problem spowodowany błędem w kodzie.
REKLAMA