www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT25080 mit 8051 in ASM


Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich brauche mal Eure Hilfe.
Ich habe den EEprom mit Galep zum Testen mit Text beschrieben.
Jetzt will ich ihn auslesen, aber er will nicht. Nach dem Datenblatt 
sollte der Code i.O.sein.
MCU mit 11.059 MHz, macht 1ms pro Befehl. Timing ist also o.k.
Wo sehe ich was nicht ??
1. Sende Befehl Read
2. Sende Adresse High mit 00
3. Sende Adresse Low mit 00
4. lese SPI

Statusflags sollten beim lesen egal sein. Die werden erst beim schreiben 
interessant.

der Code :
;***************************
; 8 Byte aus EEProm lesen

         mov  r1,#60h
         seleep
         eeread
         mov  r3,#00    ; Startadresse High EEProm
         acall  putspi
         mov  r3,#00
         acall  putspi
         mov  b,#8
get8:    acall  getspi
         mov  @r1,a
         inc  r1
         djnz  b,get8
         setb  CSEEP
         ret

;************************************

seleep    macro
          clr  SCLK
          clr  CSEEP
          EndM

eeread    macro      ; Lese EEProm
          mov  r3,#03h
          acall  putspi
          EndM


;***********************
; SPI Write 8 Bit, Wert in R3

putspi:   mov  r4,#8
          mov  a,R3
          clr  c
spiwr:    clr  SCLK
          rlc  a
          mov  MOSI,c
          setb  SCLK
          djnz  r4,spiwr
          ret


;***************************
; SPI Read 8 Bit, Wert in X

getspi:   mov  r4,#8
spird:    clr  SCLK
          clr  c
          setb  MISO
          mov  c,MISO
          rlc  a
          setb  SCLK
          djnz  r4,spird
          mov  r3,a
          ret

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan Henning wrote:
> MCU mit 11.059 MHz, macht 1ms pro Befehl. Timing ist also o.k.

Bei 12MHz hast du genau 1µs (nicht 1ms) pro Befehlstakt!
Bei 11,0592MHz hast du 1,0850694...µs pro Befehlstakt. Und je nach 
Befehl werden zwischen 1-3 Takte benötigt, also nicht jeder Befehl 
benötigt genau einen Takt!

Also ohne Verzögerungen arbeitet dein SPI viel zu schnell um ein EEProm 
auslesen zu können.

Timing ist also nicht ok ;)

Ciao,
     Rainer

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Fox,
natürlich habe ich 1 us pro Befehl, man sollte mal Pausen machen.
Allerdings ist das Timing eben nicht viel zu schnell.
Det AT25080 hat eine max. Clock Rate von 20 MHz !!
Jetzt kommt aber der Haken. Es gibt im Datenblatt eine Input Rise und 
Fall Time von max. 2us. Diese ist im Timingdiagramm aber eben nicht 
eingetragen.
Atmel war da sehr zurückhaltend. Ich nehme an es ist die Zeit die
der EEProm braucht um von Low nach High und umgekehrt am Eingang zu 
kommen.
Also habe ich nach dem Anlagen der Bits an MOSI zwei Befehle (NOP)
Bringt aber auch nichts.

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn das EEProm eine theoretische Clock Rate von 20MHz hat bringt 
dir das trotzdem nichts. Denn EEProms sind prinzipbedingt relativ 
langsam und verarbeiten intern die Zellen meistens nur in ms Bereichen. 
Gerade das Schreiben kann etliche ms dauern. Deshalb kannst du nicht mit 
20MHz das EEProm auslesen oder beschreiben.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
beim Schreiben ist es klar.  tWC max. 5ms ( Write Cycle Time )
Gilt die denn auch zum übermitteln der Adresse die gelesen werden soll 
??
Ich denke das ist nur beim Schreiben des EEProm interessant.
Wie gesagt, das Datenblatt ist mit Timingdiagrammen sehr zurückhaltend.
Auch das Datsheet von ST ist nicht viel besser. ( es sieht fast so aus 
wie das von Atmel )..... wer da böses denkt...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fox Mulder wrote:
> Auch wenn das EEProm eine theoretische Clock Rate von 20MHz hat bringt
> dir das trotzdem nichts. Denn EEProms sind prinzipbedingt relativ
> langsam und verarbeiten intern die Zellen meistens nur in ms Bereichen.


Das ist Quatsch, Lesen kann man mit 20MHz, nur der interne Schreibzyklus 
dauert einige ms.
Ich gehe mal davon aus, daß die SPI-EEPROMs auch eine Statusabfrage 
erlauben, ob der Schreibzyklus beendet ist.

Wie das genau geht, weiß ich nicht, da ich nur die viel gebräuchlicheren 
I2C-EEPROMs benutze (AT24C512).

Zu dem Code kann ich daher garnichts sagen.


Peter

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter,
so ist es. Diese Bit gibt es. Allerdings werde ich das wohl ehr mit dem 
Timer regeln. Ich werde eh nur 9 Bytes speichern. (Stromausfall) Und die 
kleineren Typen haben das gleiche gekostet. Ist eigentlich normales SPI 
mit MSB first.

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, da hab ich wohl den langsamen Schreibzyklus auch auf das Lesen 
fälschlicherweise übertragen. ;)
Laut Datenblatt kann der AT25080 innerhalb von maximal 5ms die Daten 
schreiben. Man kann nach dem Schreiben den Busy Status im "Read Status 
Register" auslesen. Zum lesen steht nichts explizit drin, weshalb 
vermutlich nur die minimalen Timings eingehalten werden müssen.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SO, das Problem ist gelöst.
Vorab: ich schreibe ja nicht weil ich zu faul oder zu bequem bin mir 
Gedanken zu machen. Ich hatte die Software und das Timing mehrfach 
geprüft und keine Idee mehr. Der LA den ich am 8051 hatte zeigte nur 
Müll an. Nachedem ich ihn an den EEProm gesteckt hatte, funktionierte 
alles. Welch WUNDER..
Zur lösung.
Ich hatte das EEProm auf dem Steckbrett mit ca. 30cm Flachband zum 8051 
Borad verbunden. Ader 1 SCLK, 2 MISO, 3 MOSI und 4 CS des EEProm.
Das Problem war ein Übbersprechen auf den Leitungen.
Ich hatte zum Test jede 2. frei gelassen. 1 SCLK, 3 MISO, 5 MOSI und 7 
CS.
Und siehe da..... alles war gut.
Pull UP, Pull Down oder C nach Masse im Bereich von pF bis nF brachten 
keinen Erfolg. Auch widerstände in Reihe zu MOSI, MISO, SCLK brachten 
nichts.

Falls Ihr mal ähnliche Sorgen habt, erinnert Euch mal daran.
Danke für Eure Mitarbeit

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hatte zum Test jede 2. frei gelassen
Normalerweise legt man diese "freigelassenen Leitungen auf Masse, um ein 
Übersprechen noch weiter zu verhindern.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht in diesem Falle nicht, da der Stecker direkt vom Board kommt und 
voll belegt ist. Ich hatte allerdings damit auch noch nie Sorgen.

Wie auf dem Board zu sehen, ist über dem ED2 ein 20pol Stecker.
Das ist der ICE Anschluß für nen 89C2051. Über 30cm Flachband geht der 
direkt in die Zielapplikation, spielt dort den 89C2051 und macht auch 
keine Probleme. Ich denke die EEProm sind etwas zu hochohmig, so was 
diese Kopplungen ausreichen.

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

Bewertung
0 lesenswert
nicht lesenswert
und das Board

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]
  • [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.