www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI Eeprom sendet Schrott auf MISO Leitung


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche ein SPI Eeprom Microchip 25LC1024 mit einem Atmega 8 (C) in 
Betrieb zu nehmen. Mit dem Oszi sehe ich, dass der Clock und das Signal 
auf der MOSI Leitung so aussieht wie es aussehen soll.
Leider empfange ich nichts brauchbares vom Eeprom. Wenn etwas ankommt, 
sieht es so aus wie auf dem Screenshot im Anhang.
Wenn der µC programmiert wird kann ich schöne Flanken auf der 
MISO-Leitung sehen, es muss also am Eeprom oder der Programmierung 
liegen.
Hier mein verwendeter Code für die SPI initialisierung und zum Senden:

unsigned char status = 0;

void SPI_MasterInit (void) {

DDRB = _BV(PB2) | _BV(PB3) | _BV(PB5);  // setze SCK,MOSI,PB2 (SS) als 
Ausgang
DDRB &= ~_BV(PB4);// setze MISO als Eingang
PORTB = _BV(PB5) | _BV(PB0);  // SCK und PB0 high
SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0);  //Aktivierung des SPI, Master, 
Taktrate fck/16
status = SPSR;                //Status löschen
}

unsigned char SPI_MasterTransmit(unsigned char data){
SPDR = data;                //Schreiben der Daten
  while (!(SPSR & (1<<SPIF)));
  return data;
}

Ausschnitt aus Main:
PORTB &= ~(1 << PB2);
SPI_MasterTransmit(0x06);
PORTB |= (1 << PB2);

Ich habe keine Idee woran es liegen kann und bin noch Anfänger. Besten 
Dank für alle Tipps!

Hulk

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ein EEPROM ist da eigentlich eine ziemlich dumme kleine Kiste.
Die macht genau das was man ihr sagt, solange sie nicht kaputt 
ist.......

Das Böse an der Stelle ist nur das so eine Kiste nicht weiß was du 
senden willst sondern nur sieht was an Bits da ankommt. Das was du 
sendest muss in Inhalt und Timing genau stimmen sonst kommt da nichts.

Ich kenn jetzt weder das EEPROM noch den Atmega gut genug um die 
Registersettings im Detail zu prüfen, grundsätzlich sieht das aber ok 
aus.

Es fehlt aber noch die Einstellung für die aktive Flanke und ob MSB or 
LSB zuerst gesendet werden.
Lies bitte im Datenblatt zum EEPROM welche Einstellung nötig ist.

Bei SPI ist es so das NUR der Master das Glocksignal bedient. Wenn du 
also Daten vom Slave haben willst musst du mit dem Master solange 
Glocksignale erzeugen bis du alle Daten bekommen hast.

Bei EEPROM ist es oft so, das du erst ein Schreib/Lese Kommando 
überträgst und danach die Startadresse. Die Endadresse ergibt sich aus 
der Anzahl der Bytes die der Master auf dem Glock taktet.

Dazu das toggeln des CS nicht vergessen.
Hierbei 2 Möglichkeiten. 1. CS auf Low/High bei beginn der Übertragung 
und erst am Ende zurücksetzen. 2. Nach jedem Byte toggle des CS.
Auch hierzu findest du die notwendige Einstellung im Datenblatt des 
EEPROM.

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.