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


von Hulk (Gast)


Angehängte Dateien:

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

von Ralph (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.