Hallo zusammen,
nach vielen durchsuchten Foren, Datenblättern, Manuals und diversen Internetseiten hoffe ich das mir hoffentlich hier jemand weiterhelfen kann. Ich habe den LPC2294 und das dazugehörige Development Board von Phytec. Entwicklungsumgebung ist Keil MikroVision. Nun will ich verschiedene Werte im EEPROM (AT25080) über SPI speichern. Das Problem dabei ist das das EEPROM sich nicht asnsprechen lässt. Der LPC2294 arbeitet dabei als Master. Dazu habe ich die entsprechenden Funktionen (SCK0, MOSI, MISO, SSEL0) in PINSEL0 aktiviert. Chip Select erfolgt über Port0.10 (Laut Harware Manual ist dieser mit /PCS0 des EEPROM verbunden). Auf dem Oszilloskop sind die Signale SCK, MOSI und CS auch zu sehen. Jedoch kann ich keine Daten aus dem Datenregister S0SPDR auslesen (Hier befindet sich immer nur 0xFF wenn ich mir den im Debugger anschaue). Es sind auch keine Daten auf MISO zu sehen.
Ich weiß nicht wo der Fehler im Code sein kann:
#include <LPC22xx.H>
#define SPIF (1<<7)
#define Add 0x00000000
int Mem_Read(unsigned long address)
{
char Wert;
IOCLR0 = 0x00000400; //Chipselect low (Low_enabled)
S0SPDR = 0x00000003; //Send read operation code 0000 x011
while(!(S0SPSR&SPIF)); //Wait until done
//Wert = S0SPDR; //Receive data
S0SPDR = address; //Send address
while(!(S0SPSR&SPIF)); //Wait until done
S0SPDR = 0x00000000; //Dummy Byte
while(!(S0SPSR&SPIF)); //Wait until done
Wert = S0SPDR; //Receive data
IOSET0 = 0x00000400; //Chipselect High (High_disabled)
return Wert;
}
void Mem_Write(char Wert, unsigned long address)
{
IOCLR0 = 0x00000400; //Chipselect low (Low_enabled)
S0SPDR = 0x00000006; //Send write enable 0000 x110
while(!(S0SPSR&SPIF)); //Wait until done
S0SPDR = 0x00000002; //Send write operation code 0000 x010
while(!(S0SPSR&SPIF)); //Wait until done
S0SPDR = address; //Send address
while(!(S0SPSR&SPIF)); //Wait until done
S0SPDR = Wert; //Send data
while(!(S0SPSR&SPIF)); //Wait until done
IOSET0 = 0x00000400; //Chipselect High (High_disabled)
}
void init_SPI()
{
PINSEL0 |= 0x00005500; //Configure SPI0 Pins
IODIR0 = 0x00000400; //Set P0.10 as output
IOSET0 = 0x00000400; //Chipselect High (High_disabled)
S0SPCR = 0x20; //CPHA=0, Mastermode, MSB first
S0SPCCR = 0x0C; //PCLK/S0SPCCR=SCK (12 für SCK = 1,25 MHz) muss größer 8 und geradzahlig sein
}
int main()
{
int stop=0;
init_SPI();
Mem_Write(88,Add); //Write 88 to address Add
stop=Mem_Read(Add); //Read from address Add
stop+=1;
}
Ich hoffe sehr, dass mir jemand weiterhelfen kann. Bin mittlerweile ziemlich verzweifelt nachdem ich tagelang Codebeispiele für ähnliche Projekte und Manuals studiert habe. Brauche das nämlich für meine Diplomarbeit.
Vielleicht hilft es auch anderen, die in einer ähnliche Situation stecken.
Gruß Max