Serial Flash siempre devuelve 0x00 mientras lee después de escribir

0

¿Podría alguien mirar el código y decirme el error en el código?

Estoy intentando conectar la interfaz de serie PIC16F877a y AT25SF041.

He levantado el pin CS a 5V con una resistencia de 1K El flash es alimentado por 3.5V (Vcc) obtenido de LM317. Los pines WP, Hold se han conectado a Vcc (3.3V)

La codificación se realiza utilizando MPLAB X IDE, utilizando el compilador XC8.

void spiInit()
{
   SSPSTAT=0x00;
   SSPCON=0x20;
   TRISCbits.TRISC2=0;
   TRISCbits.TRISC3=0;
   TRISCbits.TRISC4=1;    
   TRISCbits.TRISC5=0;
   SS=1;
}
void spiWrite(char Wdata)
{
   SSPBUF=Wdata;
   while(BF);
}
char spiRead()
{
   while(!BF);
   return SSPBUF;
}

Función de borrado:

void Erase()
{
  SS=1;
  SS=0;
  spiWrite(0xD8);
  spiWrite(0x01);
  spiWrite(0x01);
  spiWrite(0x01);
  SS=1;
}

Función de habilitación de escritura:

void writeEnable()
{
  SS=1;
  SS=0;
  spiWrite(0x06);
  SS=1;
}

Función de escritura:

void Write(char txData)
{
   int i=0;
   SS=0;    
   spiWrite(0x02);
   spiWrite(0x01);
   spiWrite(0x01);
   spiWrite(0x01);
   spiWrite(txData);
   i++;
   SS=1;
}

Función de lectura:

char Read()
{
   char rxData;
   SS=0;
   spiWrite(0x03);
   spiWrite(0x01);
   spiWrite(0x01);
   spiWrite(0x01);
   rxData=spiRead();
   SS=1;
}

Estas son mis funciones y todo lo que estoy tratando de hacer es escribir un carácter en el flash y leer lo mismo

void main()
{
  spiInit();
  RC1=0;
  Erase();
  __delay_ms(100);
  writeEnable();
  Write('A');                         //Write
  __delay_ms(100);
  rx=Read();                          //Read
  while(1);
}

pero el valor leído siempre es 0x00 alguien podría señalar mi error Aquí está mi circuito (el oscilador de cristal, Vdd, tierra se ha excluido del diagrama del circuito).

Gracias por su valioso tiempo.

    
pregunta Sreez..

0 respuestas

Lea otras preguntas en las etiquetas