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

FT2232H w trybie CPU Bus Emulation - niska prędkość transmisji 4kB/s, co robić?

logison 12 Lip 2012 19:20 1676 4
REKLAMA
  • #1 11098756
    logison
    Poziom 10  
    Witam,

    W projektowanym urządzeniu mam zamiar zastosować do komunikacji z pecetem
    kostki FT2232H w trybie CPU Bus Emulation Mode. Aby posprawdzać sobie różne
    koncepcje, zakupiłem za parę zeta takie coś:

    www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT2232H_Mini_Module.pdf

    Napisałem kawałek softu, wszystko fajnie się komunikuje w obie strony, ale...
    postanowiłem jeszcze zmierzyć szybkość transmisji i w pętli przesyłać dane w
    jedną i drugą stronę. I tu rozczarowanie, wychodzi mi około 4KB/s !!!

    Przeczytałem jeszcze ze strony producenta 2 AN:

    www.ftdichip.com/Support/Documents/AppNotes/AN232B-04_DataLatencyFlow.pdf

    www.ftdichip.com/Support/Documents/AppNotes/AN232B-03_D2XXDataThroughput.pdf

    Trochę poeksperymentowałem, ale wyniki raczej mizerne. Co o tym sądzicie?
    A może dać sobie z tym spokój i zastosować inne kostki, które są wyposażone w
    lepsze drajvery.

    Moje wymagania to min. 1MB/s.

    Pozdrawiam,

    MH
  • REKLAMA
  • #2 11100798
    DXFM
    Poziom 20  
    Coś musiałeś źle zrobić. W trybie asynchronicznym FIFO osiągaliśmy transfer pod 16MB/s. Udało się to z wykorzystaniem oprogramowania napisanego w Visual C. W innym projekcie potrzebowałem 4~5Mbit/s i spokojnie to szło pod kontrolą aplikacji napisanej w Delphi, przerabiałem jakiś przykład ze strony FTDI, oidp ft232r_IO.
    Nie sądzę, aby Host Bus Emulation działał tak tragicznie. Pewnie w erracie lub na forum by się znalazły krzyki.
  • REKLAMA
  • #3 11101077
    logison
    Poziom 10  
    DXFM napisał:
    Nie sądzę, aby Host Bus Emulation działał tak tragicznie. Pewnie w erracie lub na forum by się znalazły krzyki.


    Obawiam się jednak, że Host Bus Emulation jest niestety tak wolny. Wynika to prawdopodobnie z faktu, iż transmisja-żądanie zapisu/odczytu jest ograniczona do 1-go bajtu. Przy pakiecie 64 bajty i pętli żądania transakcji USB 64k razy może być taki efekt.
    Piszą coś na ten temat w cytowanych AN. Oczywiście mogę się mylić, ale swoje eksperymenty robiłem na bazie HostEmul ze strony ftdi i raczej pomyłkę wykluczam. Chyba spróbuję innych trybów, aczkolwiek to z kolei komplikuje mi trochę gotową koncepcję reszty projektu na FPGA.
  • REKLAMA
  • #4 11121013
    logison
    Poziom 10  
    DXFM napisał:
    W trybie asynchronicznym FIFO osiągaliśmy transfer pod 16MB/s.


    Po przekopaniu AN'ów z FTDI, uzyskałem w końcu 40MB/s !! Daleko powyżej moich potrzeb !! Tryb FIFO, ale synchroniczny.

    http://www.ftdichip.com/Support/Documents/App...Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf

    Fragment kodu Delphi:

    procedure TForm1.Button11Click(Sender: TObject);
    var
    i:FT_Result;
    n,j,k:integer;
    begin
    n:=65536;
    i:=Set_USB_Device_BitMode(0,$40);
    i:=Set_USB_Device_LatencyTimer(2);
    i:=Set_USB_Parameters(65536,65536);
    i:=Set_USB_Device_Flow_FT245;
    for j:=1 to 1000 do
    begin
    Label11.Caption:=IntToStr(j);
    i:=Read_USB_Device_Buffer(n);
    Application.ProcessMessages;
    end;
    k:=FT_In_Buffer[65535];
    Label9.Caption:=IntToStr(k);

    end;

    Plus dorobiona funkcja do D2XXUnit:

    Function Set_USB_Device_Flow_FT245 : FT_Result;
    begin
    Result := FT_SetFlowControl(FT_Handle,FT_FLOW_RTS_CTS,0,0);
    If Result<>FT_OK then FT_Error_Report('FT_SetFlowControl ',Result);
    end;

    Wszystko gra. Niniejszym zamykam temat.
  • #5 11122011
    DXFM
    Poziom 20  
    Te FIFO działają dobrze, jak pisałem asynchroniczny trochę wolniej. Natomiast pytanie co w tym trybie, który potrzebowałeś...?
REKLAMA