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
, ...