Microchip SPI Eeprom

Gast #2394360
Lesenswert?
• ▲
▼
Hallo,
ich versuche erste Schritte mit einem SPI Eeprom von Microchip 
(25LC1024) und einem Atmega 8 zu machen. Als Vorlage benutze ich diese 
Application Note:

http://ww1.microchip.com/downloads/en/AppNotes/01193A.pdf

Im Anhang befindet sich mein Code. Ich will am Anfang einfach eine Zahl 
(hier 2) ins Eeprom schreiben, die Zahl wieder zurücksenden und auf dem 
Display darstellen lassen. Leider funktioniert mein Programm nicht. Mit 
einem Oszi kann ich sehen, dass der µC sendet und auch der Clock anliegt 
(so wie auf den Bildern der AN).
Auf der SO/MI Leitung kann ich aber nichts sinnvolles messen (hab grad 
leider kein Bild zur Verfügung, es kommt nur eine lange abfallende 
Flanke).
Es wäre schön, wenn jemand den Fehler finden könnte. Herzlichen Dank!
Viele Grüße
Roland
Angehängte Dateien:
Gast #2395846
Lesenswert?
• ▲
▼
Hi

>SPI_MasterTransmit(0x03);  // READ

>SPI_MasterTransmit(0x00);   // MSB Address
>SPI_MasterTransmit(0x40);   // LSB Address
                 <-xxxxxxxxx
>data = SPDR;

Wo ist hier die Stelle, an der du das Byte ausliest?

An der Stelle xxxxxxxxx muss noch ein Dummybyte gesendet werden.

MfG Spess
Gast #2397260
Lesenswert?
• ▲
▼
danke für die Antwort.
Ich habe jetzt noch das Dummybyte eingefügt. Es funktioniert aber 
dennoch nicht.

>SPI_MasterTransmit(0x03);  // READ

>SPI_MasterTransmit(0x00);   // MSB Address
>SPI_MasterTransmit(0x40);   // LSB Address
>SPI_MasterTransmit(0x00);   // Dummybyte
>data = SPDR;

Eigentlich lese ich das Byte doch hiermit aus oder? data = SPDR;
In data müsste dann 0x02 stehen.
data hat aber irgendwie immer nur den Wert 255. Außerdem wundert es mich 
das in der Application Note kein Dummybte gesendet wird. Laut 
application note sollte das Eeprom ja direkt nach der LSB Address 
antworten.
Wobei das Senden und Empfangen bei SPI ja gleichzeitig passiert? Ich 
verstehe es leider noch nicht ganz.
Gast #2397299
Lesenswert?
• ▲
▼
Hi

>Laut application note sollte das Eeprom ja direkt nach der LSB Address
>antworten.

Der EEPROM braucht aber einen Takt zum Senden. Und der wird durch das 
Dummybyte vom Master erzeugt.

>Eigentlich lese ich das Byte doch hiermit aus oder? data = SPDR;

Ja. Das darfst du aber erst machen, wenn SPIF in SPSR gesetzt ist.

MfG Spess
Gast #2401596
Lesenswert?
• ▲
▼
leider funktioniert es immer noch nicht. Ich bekomme hier
>SPI_MasterTransmit(0x00);   // Dummybyte
>data = SPDR;

immer den Wert 255 geliefert und nicht 2. MISO ist also quasi immer 1, 
hat noch jemand eine Idee?

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.