Szybkie kostki USB

Problem jest taki:

PC<=>USB(FT2232H)<=>FPGA(Spartan6)<=ADC

Potrzebuję szybkiej transmisji danych przez USB. 20MB/s załatwia sprawę. FT2232H w trybie Synchronuous FIFO jest faktycznie szybkie (>35MB/s), ale zachowuje się dość upierdliwie. Zawija mi dziadyga cały ciąg danych o ileś tam bajtów przy każdym kolejnym odczycie. Przykładowo, do celów testowych zaimplementowałem w FPGA ROM o zawartości 0,1,2,3......255. No i pierwszy odczyt daje mi ciąg: 252,253,254,255,0,1,2,3......251. Każdy kolejny odczyt daje mi ciąg przesunięty zawsze o tę samą liczbę bajtów. Np. 250,251,252,253,254,255,0,1,..249. Licznik adresów ROM jest resetowany przed każdym kolejnym odczytem, sprawdzone, nie ma się tutaj czego czepiać. Drajvery od FTDI są jakie są i gówno mogę tutaj zdziałać. No chyba, że ktoś z Was ma już jakieś doświadczenie w obsłudze tego trybu i coś podpowie? Aha, zapis PC=>USB=>FPGA działa w tym trybie bez zarzutów.

A może zaproponujecie jakąś inną kostkę USB? Cypress robi takie badziewia, ale zanim się na coś zdecyduję, chciałbym zasięgnąć Waszej opinii, zanim będzie mnie szlag trafiał jak w przypadku FTDI. Ważne: >20MB/s !!

Reply to
stchebel
Loading thread data ...

W dniu piątek, 12 września 2014 09:47:35 UTC+2 użytkownik JarekC.DIY napisał:

Owszem. Prawdopodobnie problem u kolegów nadal nie jest rozwiązany do końca, tylko być może o tym nie wiedzą, bo przesyłają stosunkowo małe pakiety. Zaimplementowałem u siebie ten fragment w HDL'u, zresztą bardzo podobny do mojego i działa podobnie. Nie mniej jednak, jeżeli czytam 16320 bajtów (64 bajty mniej niż 16K) to nie mam tego efektu "przesunięcia" o ileś tam bajtów przy każdym kolejnym odczycie. Dane owszem, są "zawinięte", ale zawsze tak samo. Z tym da się już żyć. Nawiasem mówiąc, sprawdzałem przebiegi Chipscopem i wszystko jest cacy. Na 100% FTDI ma spaprane drajvery. Na różnych forach znalazłem bardzo podobne opisy tego problemu i nigdzie problem nie został rozwiązany. Jeżeli jesteś zainteresowany, podaję swój fragment w VHDL'u:

entity fifo_vhd is Port ( CLK : in STD_LOGIC; TXE : in STD_LOGIC; RST : in STD_LOGIC; RXF : in STD_LOGIC; OE : out STD_LOGIC; WR : out STD_LOGIC; READ_EN : out STD_LOGIC; RD_ADDR : out STD_LOGIC_VECTOR (13 downto 0)); end fifo_vhd;

architecture Behavioral of fifo_vhd is

signal RD_ADDRs: std_logic_vector (13 downto 0);

begin process (CLK,TXE,RXF,RST) begin if RST='1' then RD_ADDRs<=(others=>'0'); RD_ADDR<=(others=>'0'); WR<='1'; READ_EN<='0'; OE<='1'; else if CLK'event and CLK='1' then if TXE='0' and RXF='1' then WR<='0'; OE<='0'; READ_EN<='1'; RD_ADDRs<=RD_ADDRs+1; RD_ADDR<=RD_ADDRs; else READ_EN<='0'; WR<='1'; OE<='1'; end if; end if; end if; end process;

end Behavioral;

Wracając do głównego pytania... Jakie inne kostki USB ?

Reply to
stchebel

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.