EEPROM x DATAFlash

Componentes, Dispositivos, Equipamentos, etc...

Moderadores: 51, guest2003, Renie

EEPROM x DATAFlash

Mensagempor longo.251272 » 24 Jun 2015 10:40

Bom dia pessoal,

Tenho um kit que veio com um DATAFlash AT45DBXX e quando testo o exemplo que veio com o kit, percebo que sempre que desconecto a alimentação do mesmo os dados são perdidos.
Tinha em mente que Flash é uma memoria não volátil.

Pensei errado ? Alguém pode me dizer uma aplicação pra ela.

Segue o código do exemplo, ele grava e depois lê, tudo ok,
Mas se eu desligo a alimentação do mesmo e mudo o código só pra ler resultado em dados errados.

Código: Selecionar todos
   
   printf("\r\nFALSH AT45DBXX Write Test: \r\n");
   for(num=0;num<255;num++) /*Written to the flash*/
   {
      write_buffer((u16)num,num);
      printf("%3d ",num);
   }

   printf("\r\nFALSH AT45DBXX Read Test: \r\n");

   for(num=0;num<255;num++) /*Read the flash*/
   {
      tmp=read_buffer((u16)num);
      printf("%3d ",tmp);
   }




void write_buffer(u16 BufferOffset,u8 Data)
{         
   AT45DBXX_Enable;
   SPI_Send_byte(0x84);         
   SPI_Send_byte(0xff);
   SPI_Send_byte((u8)BufferOffset>>8);
   SPI_Send_byte((u8)BufferOffset);      
   SPI_Send_byte(Data);
   AT45DBXX_Disable;
}

u8 read_buffer(u16 BufferOffset)
{      
   u8 temp=0;

   AT45DBXX_Enable;
    SPI_Send_byte(0xd4);
   SPI_Send_byte(0xff);
   SPI_Send_byte((u8)BufferOffset>>8);
   SPI_Send_byte((u8)BufferOffset); 
   //SPI_Send_byte(0xff);
   SPI_Send_byte(0xff);   
   temp=SPI_Receive_byte();
   AT45DBXX_Disable;
   return temp;      
}

longo.251272
Byte
 
Mensagens: 318
Registrado em: 08 Nov 2011 11:58
Localização: São Paulo - SP

Re: EEPROM x DATAFlash

Mensagempor longo.251272 » 24 Jun 2015 11:55

Não encontrei ele listado em produtos no site da ATMEL, mas achei o datasheet dele e verifiquei que há o comando para jogar os dados no buffer para página da memória.

Estou pensando se compensa trabalhar com esse tipo de memória se ela não esta listada em produtos no site da atmel.
longo.251272
Byte
 
Mensagens: 318
Registrado em: 08 Nov 2011 11:58
Localização: São Paulo - SP

Re: EEPROM x DATAFlash

Mensagempor edsont » 24 Jun 2015 13:29

longo.251272 escreveu:Bom dia pessoal,

Tenho um kit que veio com um DATAFlash AT45DBXX e quando testo o exemplo que veio com o kit, percebo que sempre que desconecto a alimentação do mesmo os dados são perdidos.
Tinha em mente que Flash é uma memoria não volátil.

Pensei errado ? Alguém pode me dizer uma aplicação pra ela.

Segue o código do exemplo, ele grava e depois lê, tudo ok,
Mas se eu desligo a alimentação do mesmo e mudo o código só pra ler resultado em dados errados.

Código: Selecionar todos
   
   printf("\r\nFALSH AT45DBXX Write Test: \r\n");
   for(num=0;num<255;num++) /*Written to the flash*/
   {
      write_buffer((u16)num,num);
      printf("%3d ",num);
   }

   printf("\r\nFALSH AT45DBXX Read Test: \r\n");

   for(num=0;num<255;num++) /*Read the flash*/
   {
      tmp=read_buffer((u16)num);
      printf("%3d ",tmp);
   }




void write_buffer(u16 BufferOffset,u8 Data)
{         
   AT45DBXX_Enable;
   SPI_Send_byte(0x84);         
   SPI_Send_byte(0xff);
   SPI_Send_byte((u8)BufferOffset>>8);
   SPI_Send_byte((u8)BufferOffset);      
   SPI_Send_byte(Data);
   AT45DBXX_Disable;
}

u8 read_buffer(u16 BufferOffset)
{      
   u8 temp=0;

   AT45DBXX_Enable;
    SPI_Send_byte(0xd4);
   SPI_Send_byte(0xff);
   SPI_Send_byte((u8)BufferOffset>>8);
   SPI_Send_byte((u8)BufferOffset); 
   //SPI_Send_byte(0xff);
   SPI_Send_byte(0xff);   
   temp=SPI_Receive_byte();
   AT45DBXX_Disable;
   return temp;      
}



AT45DBXX é o código da placa, tem que ver qual o CI da sua placa para ver a capacidade (e os comandos se forem diferentes).
Você está gravando e lendo somente do buffer que é SRAM. O buffer não cobre toda a memória, mas uma página da Flash. Você grava e lê uma página por vez.
Não li o datasheet. Tem que ver se a escrita é direta ou se tem que apagar a página antes de escrever. A Flash dos MCUs normalmente tem que apagar e depois escrever. Ou apaga enquanto escreve. Ao apagar o valor fica 0xFF (seta todos os bits). A escrita só escreve os zeros (reseta os bits necessários).
Avatar do usuário
edsont
Word
 
Mensagens: 555
Registrado em: 22 Mai 2007 17:19
Localização: Araraquara-SP Brasil - Terra - Sistema Solar - Via Láctea

Re: EEPROM x DATAFlash

Mensagempor Red Neck Guy » 24 Jun 2015 14:22

Eu já trabalhei com essa memória.
O buffer ajuda nas operações de escrita dentro da página.
Você copia pro buffer, alterar o buffer e depois apaga a página e regrava.
Menos custoso computacionalmente do que copiar toda a página para um buffer no processador, alterar,apagar e reescrever.
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24


Voltar para Componentes\Equipamentos Eletrônicos

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x