Hallo Leute, ich bin gerade am verzweifeln. Ihr seit meine letze Chance. Ich versuche seit Tagen ein SPI-Programm zu schreiben und das in meinen FPGA (Spartan 3 SC3S200) zu laden. Ich schaffe es jedoch nicht, einen SPI-Clk zu erzeugen, bei dem ich softwareseitig die Frequenz und die Anzahl der Clockpulse steuern kann. Vielleicht hat ja jmd. da schon Erfahrung. Ich habe meinen Code als Anhang beigefügt. Bitte lacht euch darüber nicht tot, bin noch ein blutiger VHDL-Anfänger. Über jede Art der Hilfe bin ich sehr dankbar! Dank euch im Vorraus. Gruß Alex
Hi, SPI Master only, slave only oder beides ? Im Logic Analyzer bauen Thread war Joerg so nett ein SPI Slave only upzuloaden. Dieser funktioniert sehr gut ein paar ueberschuessige Sachen kann man da noch entfernen. Moechtest du ein Master/Slave solltest du dir mal bei Xillinx die verschiedenen Appnote's anschaun. Diese Appnote's und der fertige Code ist sehr gut beschrieben. Gruß, Dirk
Hallo Dirk, ich möchte über einen spi-fähigen ADC Werte einlesen, verarbeiten und dann wieder über einen spi-fähigen DAC ausgeben. D. h. ich bräuchte einen MASTER-Code. Aber ich seh mir trotzem den "Logic Analyzer bauen"-Thread an. Ich glaube, ich bin noch zu sehr auf Microcontroller-Programmierung eingestellt. Danke dir! Über weitere Antworten würde ich mich dennoch nicht beklagen! MfG, Alex
Hallo, dann kann ich Dir nur die Appnote's von Xillinx empfehlen als Anfaenger hast du dir ein harten Brocken ausgesucht. Gruß, Dirk
Hallo, hasst du dir mal meinen Quellcode angesehen, ob das prinzipiell so funktionieren kann, oder ob ich komplett daneben liege. Die AD7799Communication.vhd sollte (ähnlich einer C-Datei) das komplette SPI-Management für den ADC übernehmen. Die Funktionen und Prozeduren dort sollen dann im Main.vhd aufgerufen werden. Gruß Alex
Hallo Jörn, vielen, vielen Dank! Habs mir gerade runtergeladen und werde es mir vielleicht heute noch ansehen. Ich geb dir dann Bescheid, wie's gelaufen ist! Gruß Alex
Hi, ich denke ich spreche hier fuer einige mehr Vielen Dank Joerg. Ich hoffe du bist nochmal so nett und setzt es in die Codesammlung mit einer kurzen Beschreibung der Feature's. Gruß, Dirk
Hallo Jörn, danke nochmal! Das ist ein ziemlich mächtiges Tool, das du da gepublished hast. Respekt! Da ich noch Anfänger bin, ist das vielleicht zu mächtig für mich. Nachdem ich mich einige Zeit mit deinem Design auseinandergesetzt habe, bin ich zu dem Ergebnis gekommen, dass ich maximal eine Ahnung einer Idee habe, wie dein Modul funktioniert. Mir reicht ein ganz einfaches Design, das aus Clockerzeugung (z. B. 100k aus 50 MHz System-Clock), Senden und Empfangen eines Bytes besteht. Ich brauche vorerst (in meiner Softwareversion 0.0) kein SlaveSelect, keine extra Clockeinstellung, kein CPOL und CPHA, ... . Vielleicht kannst du mir einfach noch einen Tipp geben, z. B. was ich von deinem Design weglassen kann oder wie ich mein Design (aus dem ersten Beitrag dieses Threads) umbauen kann. Ich möchte das Ganze verstehen lernen und mich weiter in VHDL einarbeiten, denn ich glaube ich kann die Programmierweise von VHDL noch nicht vollständig von C unterscheiden. Vielen Dank! Gruß Alex
Hallo Axel, da du nur einen Master brauchst, kannst den kompletten Slaveteil rausnehmen. Den Interfaceteil wirst du wahrscheinlich auch nicht brauchen. Der war den externen Adress- und Datenbus eines ARM-Systems. Die FSM wird sich auch noch etwas vereinfachen und das Registerfest wird auch überflüssig sein. Wieviel Bit sollen übertragen werden? Gruß Jörn
Hallo Jörn, danke für den Tipp. Werde gleich mal rausschmeißen, was du mir eben genannt hast. Ich will zunächst einen AD7799 (Analog Devices ADC) mit 24 Bit ansprechen und auslesen. Laut DB wären also zwischen 8 und 24 Bit auszulesen bzw. zu schreiben. Gruß Alex
Hallo Jörn, hab jetzt den slave-Teil, den tristate_interface-Teil und den spitegister-Teil sowie die slave-TestBench rausgenommen. Ich hoffe ich hab nicht zu wenig und zu viel gelöscht. Werde mir den Rest noch ansehen und hoffe dann voll durchstarten zu können. Besten Dank! Gruß Alex
Hallo Jörn, ich hab jetzt einige Tage versucht, dein Design zu verstehen. Ich bin wohl doch noch ein größerer Anfänger als ich gehofft habe. Zuerst habe ich mir spi_clock_1 angesehen, das verstehe ich schon im Großen und Ganzen. Aber was genau ist mask_clk0, mask_clk1 und was liefern sck_int_re/fe und sck_re/fe? Wo ist der Unterschied bei den einzelnen Clock ausgängen (sck_re/fe und sck_int_re/fe und sck_out)? Welchen Clock nimmst du für was? Leider habe ich noch mehr Fragen! Was macht spi_sm? Was besagt die Zeile data_int <= (others => '0'); in output_sr? Was sind wordlength, DORD und load PS: SPI bzw. VHDL entwickelt sich immer mehr zum Alptraum für mich Wenn du mir nochmal helfen könntest, wäre ich dir sehr dankbar! Gruß Alex
Hi, Wordlength wird wohl die SPI Bandbreite sein. Beim Avr sind es 8Bit bei Arm's zum Beispiel 16 Bit. Dord bedeutet ob die daten msb o. lsb uebertragen werden. Gruß, Dirk
Hallo Dirk, danke, jetzt kann ich wieder 2 Fragen auf meiner Liste streichen. Danke Gruß Alex
Nachtrag! Hallo Dirk. Das mit wordlength glabue ich hab ich noch nicht ganz kappiert. Der SPI-Bus hat doch immer 4 Leitungen, oder? Gruß Alex
Hi, ich glaube du solltest dir mal bei xillinx endlich die appnotes reinziehen. Ich meine mit Wordlength die Packetgroesse die mittels SPI uebertragen werden. Dirk
Hallo Axel, mask_clk0, mask_clk1 sind Enable Signale für SCK, der freilaufend ist. Mittels den Signale wird er auf der SCK freigegeben. sck_int_re/fe und sck_re/fe liefern die Flankensignale, da diese für die das Schieben der Daten und Übernehmen der Daten auf der MISO wichtig sind. sck_re/fe und sck_int_re/fe und sck_out) muss ich selbst nochmal nachschauen. spi_sm ist die Ablaufsteuerung für eine SPI Übertragung. data_int <= (others => '0'); setzt den das Signal data_int auf 0; Zum Beispiel für ein 8 Bit Signal kann man auch schreiben data_int <="00000000"; Mit den (others=>'0') hat man den Vorteil, dass man sich nicht darum kümmern muss, ob die Anzahl der Null korrekt ist. Sehr vorteilhaft, wenn die Busbreit mit einem Generic übergeben wird. Was sind wordlength, DORD und load Wordlength = Anzahl der Bits, die mit einer SPI Übertragung gesendet werden. DORD: Datenreihenfolge MSB oder LSB zuerst. Load: Lädt die zu senden Daten in das TX-Schieberegister Gruß Jörn
Hallo Jörn, danke, hab soweit alles kappiert (glaube ich zumindest im Momnent). Das mit sck_re/fe und sck_int_re/fe klingt logisch, wenn ich mir deinen Code ansehe. Ich glaub ich hab selbst noch rausbekommen, was sck_out ist. Das dürfte der SPI-Clock (auf der Clock-Leitung) sein. Nochmals besten Dank. Gruß Alex
Hallo Jörn, kann es sein, dass kein Unterschied zw. sck_int_re/fe und sck_re/fe besteht. Du benutzt sck_int_re/fe nur für das Senden und sck_re/fe für das Empfangen vom Bus, oder liege ich da falsch? Gruß Alex
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.