Escribir y leer desde AT45DB son dos cosas diferentes

-1

Estoy usando una memoria flash AT45DB642D a través de la interfaz SPI. No hay ningún problema en la lectura y la escritura, sin embargo, lo que escribo y leo son dos cosas diferentes.

void Main_Memory_Page_Program_Through_Buffer(unsigned char BufferX,unsigned int PA,unsigned int BA,unsigned char *wData,unsigned int DataLen)
    {          
      DF_Check_Busy_State();
      Enable_DFLASH(1);

      if(BufferX == Buffer1)  
        SPI_Write_Byte(Main_Memory_Page_Program_Through_Buffer1);//0x82
      else                   
        SPI_Write_Byte(Main_Memory_Page_Program_Through_Buffer2);//0x85

      // Address page 0 byte 0
      SPI_Write_Byte(0);
      SPI_Write_Byte(0);
      SPI_Write_Byte(0);

      for(i=0;i<DataLen;i++){
        SPI_Write_Byte(wData[i]);
      }
      Disable_DFLASH(1);
    }

void DF_Main_Memory_Page_Read(unsigned int PA,unsigned int BA,
                              unsigned char *rData,unsigned int DataLen)
{
  DF_Check_Busy_State();
  Enable_DFLASH(1);
  SPI_Write_Byte(Main_Memory_Page_Read_Command);//0xD2 

//Address page 0 byte 0
  SPI_Write_Byte(0);
  SPI_Write_Byte(0);
  SPI_Write_Byte(0);

//4 dont care bytes
  for(i=0;i<4;i++) 
    SPI_Write_Byte(0);

  for(i=0;i<DataLen;i++)  rData[i] = SPI_Read_Byte(0);
  Disable_DFLASH(1);
}

// --- Run

 DF_Chip_Erase();

 unsigned char status = 0;
  while (!(status & 0x80)){
    status = DF_Read_status_Register();
    printk("Status Register: %x\r\n", status);
  }  

  unsigned int x = 0;
  for(int j=0;j<DataLen;j+=4)
  {                     
   bytes[j]=(unsigned char)x;  
   bytes[j+1]=(unsigned char)x;  
   bytes[j+2]=(unsigned char)x;  
   bytes[j+3]=(unsigned char)x;  
   x++;
  }
  //Write
  Main_Memory_Page_Program_Through_Buffer(1,0,0,bytes,1024);
  //Read
  DF_Main_Memory_Page_Read(0,0,Flashbytes,1024);

  for(int i=0;i<1024;i++)
  {
   printk("index: %d - Bytes : %d : FlashBytes : %d \r\n",i,bytes[i],Flashbytes[i]);
  }

// - Resultado

índice: 0 - Bytes: 0: FlashBytes: 198

índice: 1 - Bytes: 0: FlashBytes: 198

índice: 2 - Bytes: 0: FlashBytes: 198

índice: 3 - Bytes: 0: FlashBytes: 198

índice: 4 - Bytes: 1: FlashBytes: 199

índice: 5 - Bytes: 1: FlashBytes: 199

índice: 6 - Bytes: 1: FlashBytes: 199

índice: 7 - Bytes: 1: FlashBytes: 199

índice: 8 - Bytes: 2: FlashBytes: 200

índice: 9 - Bytes: 2: FlashBytes: 200

índice: 10 - Bytes: 2: FlashBytes: 200

índice: 11 - Bytes: 2: FlashBytes: 200

índice: 12 - Bytes: 3: FlashBytes: 201

índice: 13 - Bytes: 3: FlashBytes: 201

índice: 14 - Bytes: 3: FlashBytes: 201

índice: 15 - Bytes: 3: FlashBytes: 201

índice: 16 - Bytes: 4: FlashBytes: 202

índice: 17 - Bytes: 4: FlashBytes: 202

índice: 18 - Bytes: 4: FlashBytes: 202

índice: 19 - Bytes: 4: FlashBytes: 202

índice: 20 - Bytes: 5: FlashBytes: 203

índice: 21 - Bytes: 5: FlashBytes: 203

índice: 22 - Bytes: 5: FlashBytes: 203

, ...

    
pregunta mirtiger

1 respuesta

1

¡El problema fue encontrado! El nombre del paquete es AT45DB64D2 pero realmente es AT45DB641E y en esta memoria las páginas son 256/264 bytes frente a 1024/1056 bytes y este es un gran error de la compañía Adesto Technologies (China)

    
respondido por el mirtiger

Lea otras preguntas en las etiquetas