www.mikrocontroller.net

Forum: FPGA, VHDL & Co. CPLD - SPI - M25P80


Autor: Konduktor (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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?

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Bärbel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Idee: einfach mal den Tastkopf über 50R bis 100R ankoppeln, sieht mir 
nach einem Lastproblem durch den Tastkopf aus.

Autor: Konduktor (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Bärbel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Bärbel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: in Reihe = zwischen Meßspitze und Signal.

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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)"?

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> 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 ;-)

Autor: Michael Börke (Firma: leonie&hajo) (dehla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Die Command-Frequenz, die niedriger ist als die 
Datenübertragungsfrequenz, könnte das Problem verursachen.
Bitte kontrolieren.

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Michael Börke (Firma: leonie&hajo) (dehla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Michael Börke (Firma: leonie&hajo) (dehla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Michael Börke (Firma: leonie&hajo) (dehla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin gespannt ob das dann auch funtioniert.

Viel Spaß dabei.

Autor: Michael Börke (Firma: leonie&hajo) (dehla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur:

Ich bin gespannt ob das dann auch funktioniert.

Viel Spaß dabei.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Konduktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.