eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem z odczytem przez FT2232H w trybie FT245 FIFO synchronicznyRe: Problem z odczytem przez FT2232H w trybie FT245 FIFO synchroniczny
  • Data: 2014-07-02 12:48:40
    Temat: Re: Problem z odczytem przez FT2232H w trybie FT245 FIFO synchroniczny
    Od: Adam Górski <gorskiamalpa@wpkropkapl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2014-07-02 01:04, s...@g...com pisze:
    > W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 użytkownik Adam Górski napisał:
    >> W dniu 2014-07-01 14:06, s...@g...com pisze:
    >>
    >>> Witam,
    >>
    >>>
    >>
    >>> Mam na pok�adzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie
    synchronicznym dzia�a OK, natomiast mam jajca przy odczycie z FPGA do PC.
    >>
    >>>
    >>
    >>> Najpierw hardware w FPGA. Wygl�da to mniej wi�cej tak:
    >>
    >>>
    >>
    >>> USB_CLK: in std_logic;
    >>
    >>> RST : in std_logic;
    >>
    >>> TXE_n : in std_logic;
    >>
    >>> WR_n : out std_logic;
    >>
    >>> USB_DATA: inout std_logic_vector(7 downto 0);
    >>
    >>> RAM_DATA: in std_logic_vector(7 downto 0);
    >>
    >>> RD_ADDR: out std_logic_vector(12 downto 0);
    >>
    >>>
    >>
    >>> signal RD_ADDRs: std_logic_vector(12 downto 0);
    >>
    >>>
    >>
    >>> process (USB_CLK,RST,TXE_n)
    >>
    >>> begin
    >>
    >>> if RST='1' then
    >>
    >>> RD_ADDRs<=(others=>'0');
    >>
    >>> RD_ADDR<=(others=>'0');
    >>
    >>> USB_DATA<=(others=>'Z');
    >>
    >>> WR_n<='1';
    >>
    >>> else
    >>
    >>> if USB_CLK'event and USB_CLK='1' then
    >>
    >>> WR_n<=TXE_n;
    >>
    >>> if TXE='0' then
    >>
    >>> USB_DATA<=RAM_DATA;
    >>
    >>> RD_ADDRs<=RD_ADDRs+1;
    >>
    >>> RD_ADDR<=RD_ADDRs;
    >>
    >>> else USB_DATA<=(others=>'Z');
    >>
    >>> end if;
    >>
    >>> end if;
    >>
    >>> end if;
    >>
    >>> end process;
    >>
    >>>
    >>
    >>> =========
    >>
    >>>
    >>
    >>> I teraz software (Delphi):
    >>
    >>>
    >>
    >>> ResetAddressCounters;
    >>
    >>> ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read
    _Result);
    >>
    >>>
    >>
    >>> Za��my, �e chc� odczyta� RAM zaimplementowany w FPGA. Zawarto��
    RAM'u:
    >>
    >>> 0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-z�bna pi�a)
    >>
    >>>
    >>
    >>> Przy pierwszym odczycie zawarto�� FT_In_Buffer jest cholera jakby zrotowana w
    prawo o losow� ilo�� adres�w. Np. o trzy adresy, w wyniku czego odczytuj�:
    >>
    >>>
    >>
    >>> 253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
    >>
    >>>
    >>
    >>> Ka�dy kolejny odczyt powoduje rotacj� w prawo o dok�adnie 16 bajt�w..
    >>
    >>>
    >>
    >>> Jakieďż˝ porady?
    >>
    >>>
    >>
    >>
    >>
    >> Wycz�ci� fifo przed u�yciem ?
    >
    > Też o tym myślałem. Problem w tym, że w drajverach D2XX od FTDI brak takiej
    funkcji.
    >
    >>
    >> Ustawi� RD_ADDR na pocz�tek po pierwszym odczycie.
    >>
    >> Jak z poziomu pc ustawiasz RD_ADDRES na pocz�tek ? Jaka jest idea
    >>
    >> synchronizacji ?
    >
    > Dokładnie!! Przed każdym rozpoczęciem odczytu daję impuls RST, który
    asynchronicznie zeruje licznik RD_ADDR (popatrz na kod VHDL). Impuls RST generuję
    programowo, działa poprawnie, sprawdziłem na oscylu. Synchronizacja jest banalnie
    prosta. Leci akwizycja danych do bufora w pamięci FPGA i sprawdzam bit statusu
    akwizycji. Jak akwizycja zakończona, to walę 2 komendy opisane w pierwszym poście.
    Aha!! Robiłem eksperymenty i tak np. przy odczycie tylko 512 bajtów z bufora,
    każdorazowo robi mi rotację o jeden bajt. Podejrzewam, że coś jest nawalone w
    drajverach D2XX, albo pieron wie co ?!

    Ok. Jaka to fpga ? Na pewno są tam jakieś mechanizmy dostępu przez jtaga
    : podgląd ram-u , podgląd sygnałów itd czy nawet rejestratory z wyzwalaniem.

    1. Czy jesteś pewien zawartości pamięci - ale tak na 10000%? Czyli np
    rom ze wzorcem. Napisałeś że jest tam jakiś ram, ale może być dwuportowy
    lub inna cholera.

    2. Może być też tak że w momencie rozpoczęcia przesyłania FT czyści
    sobie fifo ,wiec należałoby wpisać do fifo dopiero jak zacznie się
    odczyt po pc stronie. Na pewno jest to w sheecie opisane.

    3. Szukałeś jakiś app note, white papers etc ?

    VHDL nie wygląda źle, może ja bym go zrobił całkowicie synchronicznie,
    albo przynajmniej synchronizował RST do zegara USB_CLK ( albo oba
    powyższe ). Nie widzę reszty wiec nic więcej nie powiem.

    Pzdr.

    Adam Górski


    ---
    Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ
    ochrona avast! Antivirus jest aktywna.
    http://www.avast.com

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: