Hallo
Ich möchte mit einem PIC16F877a über das SPI Interface Daten in den 
Speicher schreiben und dann wieder auslesen und auf einem Display 
anzeigen. (einfach nur mal für Testzwecke).
Die Display Ansteuerung (Nokia 3310 Display) funktioniert einwandfrei. 
Somit funktioniert auch die Datenübertragung per SPI.
So ich habe 2 Funktionen geschrieben um Daten aus dem 25LC640 auszulesen 
und zu beschreiben.
Hier die Funktion um Daten auszulesen:
Ich übergebe der Funktion die Speicher Adresse von der ich die Daten 
auslesen möchte.
Code:
| 1 | unsigned int read_eeprom(unsigned int l_addr, unsigned int h_addr) {
 | 
| 2 |    unsigned int data = 0;
 | 
| 3 |    ECS = 0; //Chipselect -> enabled
 | 
| 4 |    DelayUs(100);
 | 
| 5 |    write_spi(READ); // READ ist eine Konstante mit dem Wert 0x03 ->laut Datenblatt
 | 
| 6 |    write_spi(h_addr); // High Byte der 16bit Adresse
 | 
| 7 |    write_spi(l_addr); // Low Byte der 16Bit Adresse
 | 
| 8 |    data = read_spi(); // gelesenen Daten in der variable data abspeichern
 | 
| 9 |    ECS = 1;      // Chipselect -> disabled
 | 
| 10 |    DelayUs(100);
 | 
| 11 |    return data;  
 | 
| 12 | }
 | 
Hier die Funktion um Daten in den Speicher zu schreiben
Adresse und Daten werden übergeben
Code:
| 1 | void write_eeprom(unsigned int data, unsigned int l_addr, unsigned int h_addr) {
 | 
| 2 |    ECS = 0;  //Chipselect -> enabled
 | 
| 3 |    DelayUs(100);
 | 
| 4 |    write_spi(WREN); // Write enable bit setzen; hat den wert 0x06 laut Datenblatt
 | 
| 5 |                        muss dieses Write enable Latch vor jedem Schreibzyklus
 | 
| 6 |                        gesetzt werden 
 | 
| 7 |    ECS = 1;  // Chipselect -> disabled
 | 
| 8 |    DelayUs(100);
 | 
| 9 | 
 | 
| 10 |    DelayMs(20);
 | 
| 11 | 
 | 
| 12 |    ECS = 0;  // Chipselect -> enabled
 | 
| 13 |    DelayUs(100);
 | 
| 14 |    write_spi(WRITE); //WRITE ist eine Konstante mit dem Wert 0x02->laut Datenblatt
 | 
| 15 |    write_spi(h_addr); // High Byte der 16bit Adresse
 | 
| 16 |    write_spi(l_addr); // Low Byte der 16Bit Adresse
 | 
| 17 |    write_spi(data);  // Daten schreiben
 | 
| 18 |    ECS = 1;  // Chipselect -> disabled
 | 
| 19 |    DelayUs(100);
 | 
| 20 | }
 | 
Ich habe die Funktionen so aufgebaut wie es im Datenblatt beschrieben 
ist.
Leider tut sich gar nichts. Im Main Programm schreibe ich ein Byte 0xFF 
an die Speicheradresse 0x0000 und 2 Sekunden später sollte diese 
Speicheradresse ausgelesen werden und die Daten auf dem Display 
angezeigt werden. Leider wird mir nichts angezeigt.
Kann mir hier jemand helfen??? Habe ich vielleicht irgendwelche Delays 
vergessen oder sogar irgendwelche Initialisierungs-Maßnahmen für den 
Speicher vergessen?
Den HOLD Pin habe ich auf die Versorgungsspannung gelegt. Was soll ich 
mit dem WP Pin machen, oder stört es nicht wenn ich diesen Pin nicht 
angeschlossen habe?
Ich danke euch schon im Voraus,
mfg