Estimados amigos del foro todopic.
Ante la desesperación, he decidido enviar este post al foro para solicitar ayuda en la lectura de un byte por SPI con C18. Entre un PIC 18F97j60 (100pines) y la memoria 25LC256.
Por el momento, he podido leer sin problemas el registro STATUS de la memoria. Con esta operación entiendo que a nivel del HW y configuración de los registros del PIC están correctos.

void config_SPI(void)
{
TRISDbits.RD5=1;// Configuración pin SDI como Entrada
TRISDbits.RD4=0;// Configuración pic SDO como Salida
TRISDbits.RD6=0;// Configuración pin SCK como Salida
TRISJbits.RJ6=0;// Configuración pin CS como Salida.
SSP2STAT=0x40;
SSP2CON1=0x20;
OpenSPI2(SPI_FOSC_16, MODE_00, SMPMID);
}
// ################# Función:
void Read_Status_Register_RDSR_SPI()
{
PORTJbits.RJ6 = 0; // Activate the SS SPI Select pin// assert chip select
WriteSPI2(SPI_WREN);
PORTJbits.RJ6 = 1; // OFF the SS SPI Select pin// assert chip select
PORTJbits.RJ6 = 0; // Activate the SS SPI Select pin// assert chip select
WriteSPI2(SPI_RDSR); // Send READ STATUS REGISTER (RDSR)
ReadSPI2();
PORTJbits.RJ6 = 1; // OFF the SS SPI Select pin// assert chip select
}
// ############### Llamada a la función desde el main.
Read_Status_Register_RDSR_SPI();
Analizando las señales. Obtenemos que funciona OK. Imagen adjunta. Read_Status_Register_RDSR.jpg
Ahora intento leer un byte de la posición de memoria (0x03, 0x05). 8+8 bit:
Llamada a la función:
byte_read_SPI(0x03,0x05);
Función de lectura, aquí creo que es donde falta algo o no está correcto el contenido de la función. // ******************** BYTE READ ***************************************
unsigned char byte_read_SPI (unsigned char addhigh,unsigned char addlow)
{
PORTJbits.RJ6 = 0;
WriteSPI2(SPI_WREN);
PORTJbits.RJ6 = 1;
///////////////////////////////////////////////////
PORTJbits.RJ6 = 0; // Activate the SS SPI Select pin// assert chip select
WriteSPI2(SPI_READ); // Send Read Command // Read data to memory 0x0003
WriteSPI2(addhigh);
WriteSPI2(addlow);
putcSPI2(0x00); // send dummy 0x00 /* getsSPI2 * Write string to SSP2BUF */
ReadSPI2();
PORTJbits.RJ6 = 1; // OFF the SS SPI Select pin// assert chip select
return(SSP2BUF);
}
Analizando las señales, no hay ninguna respuesta de la memoria por su pin SO (salida de datos) Al solicitarle la lectura del Byte situado en la posición (0x03, 0x05) 16 bit. Imagen adjunta: byte_read_SPI(0x03,0x05).jpg
Espero vuestra ayuda. Gracias.
Saludos. Andrés.