Problema EEPROM 25LC1024 con placa PIC32MX OLIMEX

Estoy tratando de leer el registro de estado de la EEPROM siguiendo las instrucciones de esta nota de aplicación. Quería tener la opinión de la comunidad sobre las señales que estoy recibiendo. No me parecen normales.

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

Diagrama de cableado: estoy usando exactamente el mismo pinout recomendado en la nota de aplicación.

Cuando leo MISO, tengo un comportamiento extraño.Salida de la EEPROM

Señales MOSI y CS:

Obtengo la señal MOSI como se esperaba en el borde ascendente.Entrada a la EEPROM

Sincronización de selección de chip con reloj

Configuré el reloj para marcar @ 1MHz

Código de inicialización de SPI y código de ejecución en mi main.c. (de eewiki, adaptado a mis necesidades)

#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;
}

Hice capturas de pantalla solo para las dos últimas operaciones (habilitación de pestillo de escritura y lectura del registro de estado). Tengo exactamente las mismas señales cuando leo el registro de estado antes de enviar el comando de bloqueo de escritura.

Estoy usando la placa de prototipos PIC32MX Olimex, debajo de la documentación de la placa de prototipos y la hoja de datos de EEPROM.

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

Como de costumbre, el diablo está en los detalles, sería genial si pudiera tener una nueva perspectiva de mi problema. Tal vez me perdí algo.

Gracias por su ayuda !

PD: aumentar el baudio para que coincida con 20 MHz hace que la señal sea plana pero no resuelve mi problema.

Respuestas (1)

No parece nada relacionado con el código. Parece que un pin está en cortocircuito con otro pin de salida que está configurado en cero (u otro esclavo que no establece su MISO). Desconecte el chip de memoria, configure PIC MISO en salida e intente cambiarlo escribiendo 1 y 0 en el bit de puerto correspondiente.

Otro sospechoso es la fuente de alimentación del chip de memoria. Asegúrese de que reciba VCC y tenga un capacitor de VCC a tierra.

Gracias por su respuesta. Probé sus soluciones, y no funciona. Hice algunas pruebas con el multímetro y descubrí algo espeluznante. La corriente no fluye hacia la EEPROM. De hecho, tengo 2, espero no haberles causado un cortocircuito a ambos. Tengo un generador con 5V y estoy probando corriente con un multímetro. Permanece @ 0 microA ¿Alguna pista sobre cómo podría depurarlo? También probé otros circuitos y estoy obteniendo el mismo resultado.
Si el chip no está dañado, no podrá ver la corriente en este chip con un multímetro. ¿Intentó alternar MISO como se sugirió?
Intenté habilitar RG7 como se sugirió y obtuve la línea de salida correcta. Incluso intenté cambiar la placa de prototipos y no pasa nada. Debe ser algo pequeño. tengo que empezar todo desde el principio
Me gustaría señalar que estaba tratando de obtener la corriente de funcionamiento en el multímetro, no entiendo por qué no podría ver la corriente. En la hoja de datos dice que en modo de espera obtendría entre 12 y 20 microA imgur.com/a/bu4lNd8 –