Hallo,
ich arbeite mit der Quartus-Software und einem Altera CPLDMAX3128, 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
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)
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 ;-)
@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!