EEPROM 25LC1024-Problem mit PIC32MX-OLIMEX-Karte

Ich versuche, das Statusregister für das EEPROM gemäß den Anweisungen in diesem Anwendungshinweis auszulesen. Ich wollte die Meinung der Community zu den Signalen haben, die ich bekomme. Sie erscheinen mir nicht normal.

http://ww1.microchip.com/downloads/en/AppNotes/01073A.pdf

Schaltplan: Ich verwende genau die gleiche Pinbelegung, die im Anwendungshinweis empfohlen wird.

Wenn ich MISO lese, bekomme ich ein seltsames Verhalten.Ausgang des EEPROMs

MOSI- und CS-Signale:

Ich bekomme das MOSI-Signal wie erwartet bei steigender Flanke.Eingabe in das EEPROM

Chip Select mit Uhr synchronisieren

Ich habe die Uhr so ​​eingestellt, dass sie bei 1 MHz tickt

SPI-Initialisierungscode und Laufcode in meiner main.c. (aus eewiki, angepasst an meine Bedürfnisse)

#define eepromCS LATBbits.LATB15
void initSPI(void)
{
// Add GPIO config on pin RB15
eepromCS = 1; //GND


IEC0bits.SPI1EIE = 0;
IEC0bits.SPI1RXIE = 0;
IEC0bits.SPI1TXIE = 0;


SPI2CONbits.ON = 0;

SPI2BUF = 0;

SPI2BRG = 0; // 1MHZ

SPI2STATbits.SPIROV = 0;

/* SPI2CON Settings */
SPI2CONbits.FRMEN = 0;
SPI2CONbits.SIDL = 0;
SPI2CONbits.DISSDO = 0;

// 8 bits !
SPI2CONbits.MODE16 = 0;
SPI2CONbits.MODE32 = 0;

SPI2CONbits.CKP = 0; // Active state is high
SPI2CONbits.CKE = 0; // sampling from idle to active
SPI2CONbits.SSEN = 0;
SPI2CONbits.MSTEN = 1;
SPI2CONbits.SMP = 0; // sample during transmission

SPI2CONbits.ON = 1;
}

int main(void)
{
TRISBbits.TRISB15 = 0;
CSEEPROM = 1; 


initSPI(); //EEPROM as a slave
unsigned char status;
unsigned char tmp;

//First READ
while (!SPI2STATbits.SPITBE);
eepromCS = 0;
SPI2BUF = 0x05;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
SPI2BUF = 0;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
eepromCS = 1;
write_char(status);


//Enable write LATCH
while (!SPI2STATbits.SPITBE);
eepromCS = 0;
SPI2BUF = 0x06;
while (!SPI2STATbits.SPIRBF);
tmp = SPI2BUF;
eepromCS = 1;


//Read Status register
while (!SPI2STATbits.SPITBE);
eepromCS = 0;
SPI2BUF = 0x05;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
SPI2BUF = 0;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
eepromCS = 1;
//write_char(status);

while (42);
return 0;
}

Ich habe Screenshots nur für die letzten beiden Operationen gemacht (Latch-Aktivierung schreiben und Statusregister lesen). Ich habe genau die gleichen Signale, wenn ich das Statusregister lese, bevor ich den Write-Latch-Befehl sende.

Ich verwende das PIC32MX Olimex-Prototyping-Board, unterhalb der Protoboard-Dokumentation und des EEPROM-Datenblatts.

https://www.olimex.com/Products/PIC/Proto/PIC-32MX/resources/PIC-32MX.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/22064B.pdf

Wie immer steckt der Teufel im Detail, es wäre toll, wenn ich einen neuen Blick auf mein Thema werfen könnte. Vielleicht habe ich etwas verpasst.

Ich danke Ihnen für Ihre Hilfe !

PS: Das Erhöhen der Baudrate auf 20 MHz macht das Signal flach, löst aber mein Problem nicht.

Antworten (1)

Es sieht nicht nach etwas Codebezogenem aus. Es sieht so aus, als ob entweder ein Pin mit einem anderen Ausgangspin kurzgeschlossen ist, der auf Null gesetzt ist (oder ein anderer Slave, der sein MISO nicht dreifach angibt). Trennen Sie den Speicherchip, stellen Sie PIC MISO auf Ausgang und versuchen Sie, ihn umzuschalten, indem Sie 1 und 0 in das entsprechende Portbit schreiben.

Ein weiterer Verdächtiger ist die Stromversorgung des Speicherchips. Stellen Sie sicher, dass es VCC empfängt und einen Kondensator von VCC nach Masse hat.

Vielen Dank für Ihre Antwort. Ich habe Ihre Lösungen ausprobiert, und es funktioniert nicht. Ich habe einige Tests mit dem Multimeter durchgeführt und etwas Schreckliches entdeckt. Es fließt kein Strom in das EEPROM. Ich habe eigentlich 2, ich hoffe, ich habe sie nicht beide kurzgeschlossen. Ich habe einen Generator mit 5 V und prüfe den Strom mit einem Multimeter. Es bleibt bei 0 microA Irgendeine Ahnung, wie ich es debuggen könnte? Ich habe auch andere Schaltungen ausprobiert und erhalte das gleiche Ergebnis
Wenn der Chip nicht beschädigt ist, können Sie mit einem Multimeter keinen Strom in diesem Chip sehen. Haben Sie versucht, MISO wie vorgeschlagen umzuschalten?
Ich habe versucht, RG7 wie vorgeschlagen zu aktivieren, und ich bekomme die richtige Ausgabeleitung. Ich habe sogar versucht, das Prototyping-Board zu ändern, und nichts passiert. Es muss etwas Kleines sein. Ich muss alles von vorne anfangen
Ich möchte darauf hinweisen, dass ich versucht habe, den Betriebsstrom im Multimeter zu ermitteln. Ich verstehe nicht, warum ich keinen Strom sehen kann. Im Datenblatt steht, dass ich im Standby-Modus zwischen 12 und 20 microA bekommen würde imgur.com/a/bu4lNd8 –