Hi, Ich habe ein Problem bei der USB-Kommunikation zwischen meinem Morph-IC II Board und dem PC,vielleicht könnt ihr mir helfen :) Und zwar ist auf dem Board ein FT2232HQ von FTDI drauf,ich benutze ihn derzeit im Synchronous FIFO Mode. Das klappt auch ganz gut,ich kann Daten sowohl von PC->FPGA als auch FPGA->PC schicken. Nun mein Problem,ich möchte z.B. Start/Stop-Signale vom PC an den FPGA schicken,der mir darauf Daten bereitstellt. Dieses Umstellen von Senden/Empfangen funktioniert leider nicht,immer nur eins von beiden(Umstellen kann ich derzeit nur durch auskommentieren der Sende/Empfangsfunktion und neukonfigurieren). Soweit ich das Datenblatt richtig gelesen habe sollte das eig gehen,nur nicht gleichzeitig,was ich aber auch nicht brauch. Ablauf sollte einfach so sein: 1.Start-Signal PC->FPGA 2.Daten FPGA->PC bis 3.Stop-Signal PC->FPGA Hats vllt schonmal wer gemacht? Ist das so überhaupt möglich? Falls ja würde ich noch genaueres mit Code etc. posten. Vielen Dank schonmal! MfG Andi
Hallo, du musst dir ein Read/Write-Protokoll einfallen lassen oder abgucken.Wir verwenden z.B. netpp mit einem Cypress FX2. Google mal nach "netpp dclib" nach dem Source. Allerdings haben wir das protokoll für unsere Zwecke abgespeckt.
Andi schrieb: > Umstellen kann ich derzeit nur durch auskommentieren der > Sende/Empfangsfunktion und neukonfigurieren wenn man zwei verschiedene Modi verwenden will, dann muss man auch neu konfigurieren. Andi schrieb: > Soweit ich das Datenblatt richtig gelesen habe sollte das eig gehen,nur > nicht gleichzeitig,was ich aber auch nicht brauch. Vermutlich nutzt Du die D2XX Treiber. Dieses Datenblatt solltest Du mal lesen. Soweit ich das noch weiss, wird der FT2232H per EEPROM als Synch FIFO eingestellt. Per Software (->D2XX Interface) kann man den dann umstellen auf Asynch FIFO.
Andi schrieb: > Hats vllt schonmal wer gemacht? Ist das so überhaupt möglich? Falls ja > würde ich noch genaueres mit Code etc. posten. Ja ich habe das auch schon gemacht und es funktioniert wunderbar. Wo musst du auskommentieren? PC-Applikation oder VHDL?
Im VHDL-Code habe ich jeweils einen Sende/Empfang-Prozess, wenn ich z.B. im Sende-Prozess die Zeile auskommentiere in der ich die Daten abhole,kann ich empfangen und andersrum. Wenn ich nichts auskommentiere und ein externes Startsignal benutze(Button) Kann ich empfangen,das Startsignal vom PC aus senden geht dann aber nicht, vllt ein Fehler in der Empfangs-State-Machine?
1 | IF rising_edge(CLKOUT) THEN |
2 | IF read_write = '0' THEN |
3 | CASE usb_read_state IS |
4 | |
5 | WHEN 0 => |
6 | IF RXF = '0' THEN |
7 | usb_read_state := usb_read_state + 1; |
8 | END IF; |
9 | |
10 | WHEN 1 => |
11 | OE <= '0'; |
12 | usb_read_state := usb_read_state + 1; |
13 | |
14 | WHEN 2 => |
15 | RD <= '0'; |
16 | usb_read_state := usb_read_state + 1; |
17 | |
18 | WHEN 3 => |
19 | data_output(7 DOWNTO 0) <= data(7 DOWNTO 0); |
20 | RD <= '1'; |
21 | OE <= '1'; |
22 | usb_read_state := usb_read_state + 1; |
23 | |
24 | WHEN 4 => |
25 | config(7 DOWNTO 0) <= data_output(7 DOWNTO 0); |
26 | usb_read_state := usb_read_state + 1; |
27 | |
28 | WHEN 5 => |
29 | config <= "00000000"; |
30 | usb_read_state := 0; |
31 | END CASE; |
32 | END IF; |
33 | END IF; |
read_write wird in einem anderen Prozess geändert,es ist low wenn RXF low ist,also Daten vom PC zu empfangen sind, high,wenn keine Daten zu empfangen sind und ich zum PC senden kann.In config sende ich das empfangene Byte weiter an eine Control-Entity die das dann verarbeitet Weiss nicht genau wie ich zwischen Read/Write umschalten soll,RXF zeigt mir an wenn Daten bereit stehen zum Empfangen,TXE ob der FTDI sendebereit ist,ich hab jetzt auf RXF reagiert,da start/stop/reset Signale Priorität haben,deswegen wollte ich das so mit read_write machen
Noch was vergessen: die State-Machine funktioniert so wenn ich im Sende-Prozess die Zeile:
1 | data(7 DOWNTO 0) <= data_input(7+(8*usb_next_data_byte) DOWNTO 0+(8*usb_next_data_byte)); |
auskommentiere,in der Zeile übergebe ich die Sendedaten an den FTDI
hab einen Main-Takt für alles andere und für die USB-Sachen den CLKOUT,der vom FTDI geliefert wird
Hat vielleicht irgendwer funktionierende Code-Beispiele oder ähnliches? Problem besteht leider immernoch...
Moin Andi, schau dir mal folgendes Beispiel an: http://opencores.org/websvn,filedetails?repname=ft2232hcore&path=%2Fft2232hcore%2Ftrunk%2Fvhdl%2Fusb_sync%2Fusb_sync.vhd Für dich dürfte allerdings nur der Teil mit "-- Handle FIFOs to USB2232 in synchronous mode" interessant sein. Desweiteren schau mal auf der FTDI Homepage nach dem AN_130, dort stehen auch noch eine Menge an nützlichen Infos und Code-Beispiele drin. Grüße TF
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.