RTV forum PL | NewsGroups PL

Odczyt z FPGA przez FT2232H w trybie FT245 FIFO - zniekształcenie danych w buforze?

Problem z odczytem przez FT2232H w trybie FT245 FIFO synchro

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Odczyt z FPGA przez FT2232H w trybie FT245 FIFO - zniekształcenie danych w buforze?

Guest

Tue Jul 01, 2014 2:06 pm   



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?

Adam Górski
Guest

Tue Jul 01, 2014 9:08 pm   



W dniu 2014-07-01 14:06, stchebel@gmail.com pisze:
Quote:
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 ?
Ustawić RD_ADDR na początek po pierwszym odczycie.
Jak z poziomu pc ustawiasz RD_ADDRES na początek ? Jaka jest idea
synchronizacji ?

Pzdr

Adam


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

Guest

Wed Jul 02, 2014 1:04 am   



W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 użytkownik Adam Górski napisał:
Quote:
W dniu 2014-07-01 14:06, stchebel@gmail.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.

Quote:

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 ?!
Quote:



Pzdr



Adam





---

Ta wiadomo�� e-mail jest wolna od wirus�w i z�o�liwego oprogramowania, poniewa� ochrona avast! Antivirus jest aktywna.

http://www.avast.com


Adam Górski
Guest

Wed Jul 02, 2014 10:48 am   



W dniu 2014-07-02 01:04, stchebel@gmail.com pisze:
Quote:
W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 użytkownik Adam Górski napisał:
W dniu 2014-07-01 14:06, stchebel@gmail.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

Guest

Wed Jul 02, 2014 1:15 pm   



W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:

Quote:


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.



XC6SLX45

Quote:

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.


Pierwsze co zrobiłem, jak zobaczyłem jak się to pieprzy, wstawiłem rom'a ze wzorce 32-zębnej piły (32kB). To samo. Mało tego, zrobiłem też próbę wstawiając adres RD_ADDR jako dane do odczytu. To samo....

Quote:


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.



To powinno być pilnowane przez drajvery D2XX, a one są jakie są. Nie mam na to wpływu.

Quote:

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



Jasne, że tak.

http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf

Quote:

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.



Szkoda:{

Guest

Wed Jul 02, 2014 1:25 pm   



W dniu środa, 2 lipca 2014 13:15:11 UTC+2 użytkownik stch...@gmail.com napisał:
Quote:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:







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.







XC6SLX45





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.





Pierwsze co zrobiłem, jak zobaczyłem jak się to pieprzy, wstawiłem rom'a ze wzorce 32-zębnej piły (32kB). To samo. Mało tego, zrobiłem też próbę wstawiając adres RD_ADDR jako dane do odczytu. To samo....







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.







To powinno być pilnowane przez drajvery D2XX, a one są jakie są. Nie mam na to wpływu.





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







Jasne, że tak.



http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf





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.







Szkoda:{

===========
Wygląda na to, że nie ja jeden mam ten problem.

https://groups.google.com/forum/#!topic/comp.arch.embedded/PpgpMbT921I

Guest

Wed Jul 02, 2014 9:27 pm   



W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
Quote:
W dniu 2014-07-02 01:04, stchebel@gmail.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, stchebel@gmail.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.


Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery przez producenta, A producent.. , normalka, jak "application engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...


Adam Górski
Guest

Thu Jul 03, 2014 1:42 pm   



W dniu 2014-07-02 13:25, stchebel@gmail.com pisze:
Quote:
W dniu środa, 2 lipca 2014 13:15:11 UTC+2 użytkownik stch...@gmail.com napisał:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:







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.







XC6SLX45





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.





Pierwsze co zrobiłem, jak zobaczyłem jak się to pieprzy, wstawiłem rom'a ze wzorce 32-zębnej piły (32kB). To samo. Mało tego, zrobiłem też próbę wstawiając adres RD_ADDR jako dane do odczytu. To samo....







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.







To powinno być pilnowane przez drajvery D2XX, a one są jakie są. Nie mam na to wpływu.





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







Jasne, że tak.



http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf





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.







Szkoda:{

============

Wygląda na to, że nie ja jeden mam ten problem.

https://groups.google.com/forum/#!topic/comp.arch.embedded/PpgpMbT921I



Zapodaj proszę swój kod inicializujący FT2232H w delphi.


Adam

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

Pszemol
Guest

Thu Jul 03, 2014 5:50 pm   



<stchebel@gmail.com> wrote in message
news:7f7346f8-53d5-4162-8b10-54d00a407006@googlegroups.com...
Quote:
Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery
przez producenta, A producent.. , normalka, jak "application engineer" nie
wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc,
support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie
znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe".
Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a
następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16
bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną,
zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje
rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...


Myślę że jest gotowe - wal na produkcję z tym i możecie sprzedawać ! ;-)

p.s. czy jest jakiś racjonalny powód dla którego z każdą kolejną
wypowiedzią ciągnąłeś wszystkie cytaty od początku wątka?
Zdajesz sobie chyba sprawę, że wszystko jest dostępne na grupie?

Adam Górski
Guest

Thu Jul 03, 2014 9:22 pm   



W dniu 2014-07-02 21:27, stchebel@gmail.com pisze:
Quote:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
W dniu 2014-07-02 01:04, stchebel@gmail.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, stchebel@gmail.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.


Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery przez producenta, A producent.. , normalka, jak "application engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...

Rozwiązanie o którym piszesz ma króciutkie nóżki. Co będzie jak w/w bug
zostanie naprawiony ? ( O ile to jest bug ).

Jeżeli to komercyjne lub przemysłowe lub inne niż amatorskie, to jest to
rozwiązanie nie do przyjęcia. Tak naprawdę , nie wiadomo co powoduje
przesunięcie o te 16 bajtów.

1. Trzeba gnębić dystrybutora o dojście do ludzi którzy mogą mieć
pojęcie o w/w problemie.

2. Jeżeli app engineer nie ma pojęcia - domagać się pchnięcia sprawy wyżej.

Zrób jeszcze proszę jeden test:
1. Uruchom program odbierający na PC - niech sobie czeka na dane
2. Dane do fifo z fpga zacznij wpisywać dopiero po 2 - 3 sekundach tak
żeby połączenie z pc zostało zainicjowane zanim dodasz jakiekolwiek dane
do fifo.

Daj znać co wyszło

Pzdr


Adam



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

MiSter
Guest

Fri Jul 04, 2014 4:51 pm   



Quote:
Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane
drjwery przez producenta, A producent.. , normalka, jak "application
engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na
emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma
to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc
zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u
wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym
kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to
działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone
objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale
póki co jest skuteczne i muszę z tym żyć...

Rozwiązanie o którym piszesz ma króciutkie nóżki. Co będzie jak w/w bug
zostanie naprawiony ? ( O ile to jest bug ).


Nie sądzę, że problem jest po stronie producenta, Mój klient stosuję
ten układ w pewnym urządzeniu od dłuższego czasu w większych ilościach i
nie słyszałem ani razu o takim problemie, ale fakt nie znam jego
konfiguracji.

Mister

Adam Górski
Guest

Mon Jul 07, 2014 12:20 pm   



W dniu 2014-07-02 21:27, stchebel@gmail.com pisze:
Quote:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
W dniu 2014-07-02 01:04, stchebel@gmail.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, stchebel@gmail.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.


Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery przez producenta, A producent.. , normalka, jak "application engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...



Jakiś progres ?


Adam

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

as
Guest

Tue Jul 08, 2014 6:54 am   



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.
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?

Może brakuje ci jakiegoś rezystora podciągającego i przekonfigurowanie FTDI
powoduje np. szpilki na zegarze. W tego typu przypadkach dobrze mieć
analizator stanów logicznych. Ja kupiłem polecany niedawno na grupie:
http://www.ebay.com/itm/CY7C68013A-56-EZ-USB-FX2LP-USB2-0-Develope-Board-Module-Logic-Analyzer-EEPROM-AX-/141214164581?pt=LH_DefaultDomain_0&hash=item20e1052665
Całkiem fajnie się sprawuje. Jedynie musiałem zmienić eeprom na 24C02,
zaprogramować go tym samym wsadem co oryginalny 24C128, zdjąć zworkę J1 oraz
wlutować rezystor pomiędzy 1 i 2 nogę eeproma (adres na 000) - wtedy działa
najnowsze saleae (bez przeróbki działa starsza wersja).

Guest

Sat Jul 26, 2014 2:51 am   



W dniu poniedziałek, 7 lipca 2014 14:20:39 UTC+2 użytkownik Adam Górski napisał:

Quote:



Jakiďż˝ progres ?


Witaj Adam,

No w końcu coś 'do przodu' !! W końcu ten fragment projektu zaczął fungować.
No i teraz gdzie był problem, i jak został rozwiązany? Otóż problem jest nie w błędnej dokumentacji FTDI, lecz w jej niekompletności. FTDI zarówno w opisie HW jak i SW nic nie wspomina o przypadkach 'odaktywnienia' sygnału TXE# podczas softwarowej transakcji FT_Read. I tu jest jajco!! Stąd nie ja pierwszy i chyba nie ostatni wydałem z siebie tyle wulgaryzmów do monitora podczas prototypienia tak wydawałoby się badziewnego tematu. Aż w końcu mój syn znalazł coś takiego:

http://www.ovro.caltech.edu/~dwh/correlator/pdf/ftdi.pdf

Skorzystałem z Fig.17, Fig.22, Fig.8. + objaśnienia + przebiegi czasowe jako wzorzec do symulacji. W/g powyższego zrobiłem to na FSM edytorze (Aldec ewaluacyjny), przetłumaczył mi to na VHDL, symulacja i takie tam, ..w końcu działa !! Aha!! W/w malunki (8,22) są nasmarowane w/g konwencji ASM.
(Algorythmic State Machine). Nie mylić z czystym FSM. Trochę mnie to na sam początek poirytowało, ale już wiem o co chodzi.

Jeżeli ktokolwiek z grupy potrzebuje gotowego kodu TX/RX w VHDL'u na komunikację w trybie sync. FIFO dla FT2232H/FPGA, proszę dać znać.

Pzdr,

*.Sch

P.S. A coby nie było tak sielankowo, to wyskoczył inny problem , przy którym ZGŁÓPIAŁEM !! No ale, jest to temat na inny wątek.. Jutro to opiszę w szczegółach.

elektroda NewsGroups Forum Index - Elektronika Polska - Odczyt z FPGA przez FT2232H w trybie FT245 FIFO - zniekształcenie danych w buforze?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map