Hallo, ich arbeite mit der Quartus-Software und einem Altera CPLD MAX3128, den ich zur Kommunikation mit dem Flash-Speicher M25P80 verwende. Sie sind über die SPI-Schnittstelle verbunden. Mein Problem ist, dass ich sporadisch Kommunikationsfehler habe. Der CPLD arbeitet mit 40MHz und der SPI-Takt(20MHz) wird vom CPLD erzeugt. Ein weiteres System mit dem exakt gleichen Schaltplan u. dem VHDL-Code funktioniert bereits fehlerfrei. Der einzige Unterschied ist das Layout und die CPLD-Taktfrequenz von 50MHz (SPI-Takt(25MHz)). Da die Logik korrekt sein sollte und ich das Bustiming laut Datenblatt bereits überprüft habe, vermute ich, dass die Signalqualität zu schlecht ist (siehe Foto) und der Flash intern Probleme kriegt. Mir machen die Unterschwinger von -1,6V Sorgen. Die Leitungen haben einen Wellenwiderstand von 55Ohm und sind nicht! abgeschlossen. Ich habe bereits Parallelwiderstände mit 215Ohm zum Testen hingelötet, um einen Abschluss zu ergänzen (nicht 55Ohm, da bei 3,3V der CPLD nicht mehr treiben kann). Das hatte aber keine Wirkung. Mir wurde die fertige Hardware vorgebenen. Ein Serienwiderstand kann nicht eingefügt werden, da ich am Layout aktuell nichts ändern kann. Habt ihr vielleicht Ideen, wie ich eine bessere Signalqualität erhalte (besonders vom SPI-Takt)? (Quartuseinstellungen: LVTTL-Level, Slow Slew Rate) Danke! Konduktor
> Ich habe bereits Parallelwiderstände... besser wäre Serienterminierung wie im Beitrag "Re: Signalproblem bei langem Kabel" EDIT: An welcher Flanke liest du das MISO ein?
Hi, Danke für die Hilfe. Ich kann leider keinen Serienwiderstand einbauen, da ich mechanisch am Layout nichts ändern kann. Das ist für das Redesign fest eingeplant. Macht es Sinn, den Serienwiderstand nicht an der Quelle, sondern an der Senke(Ende der Leitung) einzubauen, da ich dort evtl. die Beinchen hochbiegen könnte. Ich lese die MISO-Leitung mit dem CPLD bei der steigenden Flanke vom SPI-Takt. mfg Konduktor
Was mich bei diesem Über-/ und Unterschwingen wundert ist, dass der CPLD u. Flash nur 3cm voneinander entfernt sind (aber mit Durchkontaktierungen). Ich dachte nicht, dass bei nur 3cm so große Probleme entstehen. mfg Konduktor
> Ich dachte nicht, dass bei nur 3cm so große Probleme entstehen. Wo hast du denn deine Messgerätemasse angeklemmt? Die Masseklemme vom Oszi gehört auch direkt ans CPLD! Und nicht einfach so irgendwo aufs Board :-o
Ich habe die Masse ca. 3cm vom Flash entfernt an einem GND-Testpunkt abgegriffen. Ich habe die Messung wiederholt und dabei die Masse am Flash-Pin abgegriffen und konnte keine Unterschiede feststellen. (Oszi Tek MSO4104 1GHz Tastköpfe 500MHz 8pF 1:10)
Idee: einfach mal den Tastkopf über 50R bis 100R ankoppeln, sieht mir nach einem Lastproblem durch den Tastkopf aus.
Ich habe jetzt als Masseleitung den Aufsatz von Tektronix verwendet, der als Massezuführung keinen Haken mehr hat, sondern nur noch einen 4cm langen Draht. Jetzt sieht der Takt wesentlich sauberer aus. Jetzt glaube ich, komme ich der Realität schon etwas näher (siehe Anhang). @Bärbel: Meinst du als Last 50Ohm und das Oszi dann parallel hängen? Ich habe mal 200Ohm verwendet u. dabei keinen Unterschied bemerkt. Aber der Hauptfaktor ist anscheinend eine schlechte Masse bzw. Störungen, die mit dem Massekabel eingefangen werden.
100R nicht als Last, in Reihe, damit die 8pF nicht direkt von den steilen Flanken umgeladen werden müssen. Der daraus resultierende Tiefpaß verschleift das Signal nur etwa 1ns.
um eventuell noch ne ganz andere Richtung zu gehen: Falls die Signale nicht die Ursache des Problems sein sollten, hast du mal dein Design neu synthetisiert mit den zu dieser Frequenz passenden Constraints? eventuell Gated Clocks verwendet, etc? Kann ja sein, dass ein "unsauberes" Design, grad bei 40MHz läuft und bei 50 nicht mehr. Nur so ne Idee...
> als Masseleitung den Aufsatz von Tektronix verwendet Welchen? (Nummer) > Aber der Hauptfaktor ist anscheinend eine schlechte Masse Am schlimmsten wäre es, zu sagen: ich habe 4 Tastköpfe, brauche aber nur 3 und verwende den einen übrigen als Masseklemme. Das geht garantiert schief :-/ > grad bei 40MHz läuft und bei 50 nicht mehr. Es ist offenbar gerade andersrum: mit 50 gehts, mit 40 nicht... > Ich lese die MISO-Leitung mit dem CPLD bei der steigenden Flanke vom > SPI-Takt. Sicher? Also nicht, "if SCLK='1'", sondern wirklich an der "rising_edge(SCLK)"?
@Bärbel: Ich habe jetzt 100 Ohm vor meinen Tastkopf "gespannt" u. mein Signal sieht tatsächlich etwas sauberer aus. @SChrotty: Da ich anscheinend die letzten Tage wegen einer schlechten (störungsbehafteten) Masse viel schlechtere Signale gemessen habe, als real vorhanden sind, werde ich mich jetzt wieder in Richtung VHDL-Code begeben. Ich möchte jetzt das Timing der Busleitungen zueinander nochmals messen u. überprüfen. @Lothar Miller: >Welchen? (Nummer) Mit dem Masseaufsatz "Tektronix part number 343-1003-01" Collar,GND:P6130" sieht mein Signal wesentlich besser aus. Ich verwende die Masse des passenden Tastkopfes. >Also nicht, "if SCLK='1'", sondern wirklich an der "rising_edge(SCLK)"? Ich frage den SPI-Takt garnicht ab, sondern generiere ihn in meiner Statemachine. D.h. der SPI_Takt wird vom CPLD generiert und hat als Bezug immer den Systemtakt vom CPLD. Ich habe die Hard- u. Software vorgesetzt bekommen u. darf nun Fehler suchen.
>> grad bei 40MHz läuft und bei 50 nicht mehr. >Es ist offenbar gerade andersrum: mit 50 gehts, mit 40 nicht... schlecht gelesen.. also vergiss den Ansatz ;-)
Hi! Die Command-Frequenz, die niedriger ist als die Datenübertragungsfrequenz, könnte das Problem verursachen. Bitte kontrolieren.
@Michael Börke Meinst du, dass beim Read-Befehl nur 20MHz Taktfrequenz erlaubt ist und bei den restlichen Befehlen mit 25MHz gefahren werden kann? Das sollte eigentlich bei mir erfüllt sein, da der SPI-Takt immer konstant bei 20MHz läuft. Bei meinen Flash ist laut Datenblatt sogar 33MHz erlaubt, da er in 11µm-Prozesstechnologie gefertigt wurde.
Ich habe noch mal nach gesehen was SanDisk über ihre MMC-Kartem in der PDF-Datei "manual-rs-mmcv1.0.pdf" (Table 3-7 Bus Timing) veröffentlicht hat: Clock Freq. Data Transfer Mode fPP 0-20 MHz Clock Freq. Identification Mode fOD 0-400 kHz In einer anderen Datei (diese habe ich z.Z nicht gefunden) war die Information das da Befehle sind die nur mit max. 400kHz übertragen werden dürfen. Es könnte sein das es bei Dir ähnlich ist. Es könnte aber auch sein, daß das andere Board wegen der höheren Frequenz einen schnelleren Chip hat, der mit kürzeren internen Laufzeiten arbeitet. P.S. Ich durfte ab 2.Quartal 2006 ins kalte Wasser springen und vieles aus dem Internet herunterladen um mir selbst Inputs über programierbare Logik und deren Programmierwerkzeuge an zu tun, Datasheets von SanDisk (www.sandisk.com) und anderes Interessantes war auch dabei.
So was ähnliches habe ich auch vermutet, aber die kleinste erlaubte Frequenz ist 20MHz u. mit der arbeite ich. Vielleicht muss ich jetzt doch noch eine kleinere Frequenz ausprobieren, aber mein CPLD ist randvoll, weshalb zusätzliche Logik problematisch wird. Die Chips sind aufgrund der Beschriftung exakt gleich. Danke!
>Die Chips sind aufgrund der Beschriftung exakt gleich.
Aufgrund internen Laufzeiten sind die Chips nie exat gleich,
außer du gibts Umsummen dafür aus (ca. 1Mio. €/Stück).
P.S. Zur Zeit entwickel ich eine CPU für eine Simulation, diese läuft
mit 25MHz. Wenn ich die Taktfrequenz höher oder niedriger einstelle,
funktioniert diese nicht mehr richtig; und das ist Konstruktions
bedingt.
Wenn ich mal Zeit habe, dann möchte ich den CPLD mit einem 50MHz-Quarz betreiben, da eine andere Platine mit diesem Takt einwandfrei funktioniert. Der Begriff "exakt" ist natürlich relativ u. sollte für mich jetzt so gedeutet werden: Die Chips sind im Rahmen des Datenblatts gleich. Aber ich stimme dir voll zu!
@ Michael Börke:
> Korrektur: ...
Dur darfst als angemeldeter User deine abgesendeten Beiträge eine
Zeitlang editieren, und jederzeit löschen.
[edit]
Dafür gibt es die Links rechts unten im Textfeld:
Beitrag melden | Bearbeiten | Löschen | Antwort | Antwort mit Zitat
@Michael Börke Ich werde das ausprobieren u. dann mich im Forum entsprechend nochmal melden. Es kann aber etwas dauern, da jetzt ein anderes Projekt den Vorrang bekommen hat. Danke für eure bisherige Hilfe!
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.