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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.