Ir ao conteúdo

Posts recomendados

Postado

Estou tentando aprender o funcionamento das memórias flash.

Boa noite, tenho a memória flash: AM29F400AB-90SC

Datasheet: https://www.alldatasheet.com/datasheet-pdf/pdf/55493/AMD/AM29F400AB-90SC.html

Tenho um gravador de eproms e a memória funciona perfeitamente le grava e apaga.

Mas quero realmente aprender o funcionamento das mesmas.

E no datasheet diz que ela pode ler apagar e gravar com 5V, então acho que tenho tudo que preciso em mãos.

Como primeiro passo resolvi apagar a memória pré gravada com o gravador profissional.

Pelo que entendi do datasheet existe uma opção onde os setores são protegidos, e neste caso teria que apagar com mais tensão.

Acho que o gravador não usa isso (apenas acho não tenho certeza disso).

Liguei a memória em um Arduino mega para executar as funções e fiz o seguinte:

------------------------------------------

configuração DE ESCRITA (pelo que entendi do datasheet):

Setei os pinos de controle da seguinte forma:
CE: GND
OE: 5V
WE: GND
RESET: +5V

e apliquei o seguinte nos pinos de dados e endereços:

 

Chip Erase Command Sequence (PARA 16BITS) (neste caso setei o pino byte da memória em 5V para que esta trabalhe em 16 bits)
(Address/Command):
                  ENDEREÇO     /  COMANDO
5555H/AAH     traduzindo em binário: 0101010101010101 / 10101010

esperei 1 segundo com esta configuração setada.
2AAAH/55H     traduzindo em binário: 0010101010101010 / 01010101

esperei 1 segundo com esta configuração setada.
5555H/80H      traduzindo em binário: 0101010101010101 / 10000000

esperei 1 segundo com esta configuração setada.
5555H/AAH     traduzindo em binário: 0101010101010101 / 10101010

esperei 1 segundo com esta configuração setada.
2AAAH/55H     traduzindo em binário: 0010101010101010 / 01010101

esperei 1 segundo com esta configuração setada.
5555H/10H      traduzindo em binário: 0101010101010101 / 00010000

esperei 1 segundo com esta configuração setada.

 

depois disso esperei mais 10 segundos...

mas a memória permanece intacta.

 

Alguém pode me dar uma luz se estou indo pelo caminho certo ou se está tudo errado...

É difícil pra mim entender estes datasheets que são todos em inglês e quando traduz os termos técnicos se perdem um pouco.

Se o que estou fazendo estiver certo entào pode ser que a memória esteja travada mesmo.

 

 

Muito obrigado a todas as sugestões.

  • Membro VIP
Postado

Dá mais uma lida no d.s. (não li).  talvez você tenha que ter os sinais ce oe we reset sob controle pra atuar na hora certa....algo como um pulsinho num ou + deles...

  • Obrigado 1
  • Membro VIP
Postado

Li rapidinho...



'Byte/Word ProgrammingThe device is programmed on a byte-by-byte (orword-by-word) basis. Programming is a four bus cycleoperation. There are two “unlock” write cycles. Theseare followed by the program setup command and datawrite cycles. Addresses are latched on the falling edgeof CE or WE, whichever happens later and the data islatched on the rising edge of CE or WE, whichever hap-pens first. The rising edge of CE or WE (whichever hap-pens first) begins programming using the EmbeddedProgram Algorithm. Upon executing the algorithm, thesystem is not required to provide further controls or tim-ings. The device will automatically provide adequate in-ternally generated program pulses and verify theprogrammed cell margin.'

 

'Chip EraseChip erase is a six bus cycle operation. There are two“unlock” write cycles. These are followed by writing the“setup” command. Two more “unlock” write cycles arethen followed by the chip erase command.Chip erase does not require the user to program thedevice prior to erase. Upon executing the EmbeddedErase Algorithm command sequence the device willautomatically program and verify the entire memory foran all zero data pattern prior to electrical erase. Theerase is performed sequentially on all sectors at thesame time (see Table “Erase and Programming Perfor-mance”). The system is not required to provide anycontrols or timings during these operations.The automatic erase begins on the rising edge of thelast WE pulse in the command sequence and termi-nates when the data on DQ7 is “1” (see Write OperationStatus section) at which time the device returns to readthe mode.Figure 1 illustrates the Embedded Erase Algorithmusing typical command strings and bus operations.'

O buraco é um pouco + em baixo. Veja a 'figure 1'

  • Obrigado 1
Postado

 

Tradução do texto segundo o que entendi:

A eliminação do chip EraseChip é uma operação de seis ciclos de barramento.

*Eu tinha olhado para a figura anexa (nos comandos do lado esquerdo, pois quero apagar tudo direto e não somente setores)

e imaginei que os seis passos eram estes dos quadrinhos.

depois disso, segundo o algoritmo teria "Data Polling or Toggle Bit Successfully Completed"

Que entendi que o programa interno da eprom verificará se os bits foram alternados e caso esteja tudo correto então procedimento foi concluído com sucesso:

----------------------------

Existem dois ciclos de gravação de "desbloqueio". Estes são seguidos escrevendo o comando "setup". Dois outros ciclos de gravação de “desbloqueio” são seguidos pelo comando de exclusão de chip.

*Entendi que estes são aqueles mesmos 6 passos.

----------------------------

A exclusão de chip não exige que o usuário programe o dispositivo antes da exclusão.

*Entendi que que o chip não precisa necessariamente estar gravado para que seja realizado o processo de exclusão, mas deixei programado para poder verificar se deu certo.

----------------------------

Ao executar a sequência de comandos do EmbeddedErase Algorithm, o dispositivo programa automaticamente e verifica toda a memória para um padrão de dados zero antes de apagar a eletricidade.

*Entendi que seu executasse os 6 passos a mágica aconteceria

----------------------------

A exclusão é realizada seqüencialmente em todos os setores ao mesmo tempo (consulte a Tabela “Apagar e programar o desempenho”).

*Achei que isso só mostra o tempo do processo

----------------------------

O sistema não precisa fornecer nenhum controle ou tempo durante essas operações.

*Acho que esta parte está clara.

----------------------------

O apagamento automático começa na borda ascendente do último pulso WE na sequência de comandos

*Se entendi direito esta parte então WE estaria em LOW e passaria para HIGH (mas por quanto tempo? só um pulsinho?)

e ao final do último comando estaria iniciado o processo automático de exclusão.

----------------------------

e termina quando os dados no DQ7 são "1" (consulte a seção Write OperationStatus) em O dispositivo volta a ler o modo.

*Acho que eu deveria verificar o estado desta saída para saber se terminou

----------------------------

A Figura 1 ilustra o algoritmo de apagamento incorporado, usando seqüências de comandos e operações de barramento típicas.

*Pelo que entendi a figura 1 é muito semelhante a figura 2, só tem um fluxo de desvio mandando incrementar o endereço...

me parece ser isso.

 

NOTA... esqueci de dizer, mas o que estou fazendo é mais ou menos assim:

Através de pinos de saída ligados a todos os endereços da memória (e pinos de controle da mesma), vou setando com (5V ou GND) para alterar os estado dos pinos e os endereços...

os comandos mencionados no datasheet são de 16 digitos, mas como a memória tem A17 e A0 então preencho o A16 e o A17 com zeros (LOW)

Os tais "comandos" estou inserindo atraves das saidas de dados D0 até D7... mas como a memória é de 16bits preencho o resto com zeros (LOW) estou tentando apagar no modo 16bits.

 

Isto é bastante confuso quando se faz a primeira vez.

quadro2.jpg

Postado

Estava vendo as imagens, e me deparei com uma coisa :

 

A sequência 55 AA  ou AA 55  continua sendo usada até hoje em dia .... inacreditável como o uso do cachimbo deixa a boca torta mesmo....

 

A primeira vez que me deparei com isso foi em uma Eprom do Apple ][ .... depois no BIOS dos micros padrão IBM-PC , e agora vejo isso nas memórias Flash .....

 

Como conteúdo de memória eu até consigo entender, mas como opcode de comando não tem nada a ver ....

 

Para quem não entendeu ainda, vejam o que significam essas sequências em binário .... é um padrão de dados para fazer o teste das memórias RAM dos computadores e também das Eproms. Primeiro se escreve um padrão em toda a memória, ler o conteúdo, e se conferem, escreve o outro padrão e ler de novo. Se estiver ok, os dispositivos de memória estão funcionando todos os bits. Já se passaram mais de 30 anos da ultima vez que tive de fazer isso ....

 

Cultura inútil ainda é cultura kkkkk !

 

Paulo

  • Curtir 2
  • Haha 2
  • Membro VIP
Postado

Permita-me opinar...

Entender e dominar este componente tem algum valor como exercício mental apenas. Pra uso prático, nem vale a pena. O que vale bem + é dominar o uso das memórias SD. + capacidade, + barata, + divulgada, + popular,+ fácil de dominar, +etc

abç

  • Curtir 1
Postado

@Isadora Ferraz ,

 

Realmente alguns usos demandam grande capacidade de armazenamento, e nesse quesito realmente nada como um cartão micro-SD.

 

Mas usar o sistema de arquivos dele para ser compatível com algo tipo NTFS ou Fat32  já complica bastante devido ao uso de memoria Ram necessária.

 

Para a grande maioria de casos onde usamos microcontroladores, uma simples memoria EEPROM atende nossas necessidades.

 

Eu fiz um produto para um cliente em que precisava passar os dados de monitoramento para um PC , tentei fazer em um cartao SD usando FAT, e desisti por causa da RAM necessária ... acabei gravando tudo em duas EEproms e uma pequena rotina que passava os dados no formato delimitado com aspas e um programinha em VB capturava e gravava no PC.

 

Cada caso tem suas necessidades ...

 

Eu ainda acho que se o programador tiver de apelar para um microcontrolador que tenha um montão de RAM, um montão de memória de programa, e um montão absurdo de clock , é sinal de que não domina mais todo o hardware que tem à disposição.

 

Tá certo que os preços estão caindo muito , mas não ter esses componentes em DIP para fazermos os protótipos é uma baita dificuldade para quem gosta de meter a mão na massa ...

 

Paulo

 

  • Curtir 1
Postado

Gosto de computadores e aparelhos antigos, e restaura-los quando possível, e gosto de aprender as tecnologias envolvidas.

Já aprendi muita coisa aqui no fórum. E quanto ao uso das eproms já estou dominando bastante coisa que aprendi aqui.

Estou tentando criar meu gravador de eprom paralela.

Pelo que li as eproms de janela acho que conseguirei gravar normalmente.

Não me pareceu difícil. Mas as flash tem estes comandos loucos que estou tentando aprender.

Pesquisei alguns gravadores de eproms e os bons são muito caros, os medianos normalmente são chineses e com o tempo perdem suporte aos novos tipos de eproms.

O meu por exemplo nem o site existe mais para update dos programas.

Portanto resolvi encarar o problema de frente e aprender de uma vez como isso funciona,

e assim criar meu próprio gravador básico baseado em microcontroladores baratos e assim sempre que surgir algum modelo fora da "device list" poderei ler o datasheet e implementar a rotina necessária.

Por isso e por paixão ao ramo da eletrônica gostaria de aprender mais esta.

Obrigado a todos pela ajuda que estão me dando.

Postado

@Blumer Celta ,

 

Passei  por isso em 1985, quando um colega pediu para ajudar a projetar uma placa gravadora de Eprom para usar no Apple ][ ...  só que naquela época não tinha Internet ... não tinha como vermos algum projeto de outros, nem a facilidade de se encontrar dicas de quem fez ou os problemas que encontrou.

 

Hoje você tem muita informação ao alcance de seus dedos, e embora não vejo um motivo comercial para se fazer um aparelho semelhante, sei que você vai aprender muito com esse projeto !

 

Todo mês entram dezenas de modelos novos pelos fabricantes, e saem dezenas de produção também .... lembre-se disso, e coloque em seu projeto um gerador de tensão de alimentação programável ... vai ser útil no futuro.

 

Paulo

  • Obrigado 1
  • Membro VIP
Postado
5 horas atrás, aphawk disse:

usar o sistema de arquivos dele para ser compatível com algo tipo NTFS ou Fat32  já complica bastante devido ao uso de memoria Ram necessária.

Ao usar um baratíssimo  módulo pra cartão sd, não tenho certeza disso. Parece que ele usa simples comunicação spi e, como módulo, já faz o trabalho sujo pra ler-escrever. Nunca precisei disso pra ver o que rotinas comem de recurso do mc.

Mas o guri menciona 'aprendizado' e quer apenas gravar eeprom, o rumo é outro mesmo.

Postado

@Isadora Ferraz ,

 

Esses módulos não tem a memória necessária ... precisam de uma library feita para eles !

A maioria dos sistemas de acesso se baseiam na velha SDFAT library, que faz transferências em blocos de 512 bytes, então uma média razoável de RAM para ela é de cerca de 700 bytes, dependendo da  implementação.

Se quiser trabalhar com arquivos muito grandes , tipo acima de 4 Gb, a coisa vai pro brejo e precisa de muito mais memória...

 

Para quem trabalha com microcontroladores com 1K de RAM, já fica bem difícil ... o ideal é em torno de 2K pelo menos ...

 

Paulo

  • Curtir 2
Postado

@Isadora Ferraz ,

 

difícil mesmo achar alguma informação mais detalhada sobre o uso desses cartões... fazem alguns anos eu usei um com o Bascom e descobri que fiquei sem memória para fazer o que precisava, mesmo num Atmega328 ... aí apelei pro Atmega1284 ....

 

Em 1985 eu trabalhei numa modificação do CP/M para a placa Videx ( Z80 ) nos Apple , como conseguia usar mais duas trilhas do disquete conseguia ganhar mais uns 16K de armazenamento em disco, mas para o CP/M reconhecer tive de estudar como ele tratava o sistema de arquivos... em dois meses tava craque em Fat , e consegui modificar o sistema para usar esse espaço extra. Virou o CPM-56K , que foi distribuído no Applemaniacos como CPM-Abutre kkkkkk

 

Hoje quando compro um Sd card com 128 Gb dá vontade de rir de tudo aquilo do passado , meses de estudo para conseguir usar mais 16K em um disquete !

 

Paulo

 

 

  • Curtir 1
  • Obrigado 1
  • Haha 1
Postado

Só para dar um retorno, pois muita gente some depois de resolver o problema e nem agradece.

Apagamento efetuado com sucesso.

Obrigado a todos que ajudaram.

Faltava eu ter lido a página das tais "WAVEFORMS" e aplicar tambem os pulsos mencionados por isadora.

Segue os comandos que realizei (variei um pouco dentro dos tempos do datasheet respeitando os tempos mínimos).

Setei a memória para trabalhar em 16bits através do pino byte.
(Pelo que entendi é possível com 8 bits mas acho que os passos mudam)

coloquei em nivel alto: OE, CS e WE

//Repetir este bloco 6 vezes (mudando os endereços e os dados)

Coloquei CS em nivel baixo.
Selecionei o endereço (0101010101010101)(coloquei em zero os endereços restantes "mais altos")
Selecionei os dados (10101010) (nos pinos de dados mais baixos D0 a D7)
Esperei o tempo tVCS mencionado no datasheet (usei 55ms)
Coloquei WE em nivel baixo.
Esperei o tempo tWP mencionado no datasheet (usei 55ms)
Coloquei WE em nivel alto.
Coloquei CS em nivel alto.

//fim do loop de 6x


//Não sei se os comandos abaixo são necessários, mas fiz
Esperei o tempo tVCS mencionado no datasheet (usei 55ms)
coloquei em nivel baixo: OE e CS
* Nota importante, fiz os comandos da linha acima pois entendi isso no datasheet, mas como estou realizando este trabalho com o arduino, acho que convém finalizar deixando OE em nivel alto CASO VÁ REALIZAR GRAVAÇÃO DE DADOS EM VEZ DE APAGAR, pois pode ser que tenha algum dado na saída e entre em conflito com os pinos do arduino (que neste momento estarão setados como saida para gravar os dados na linha de dados da memória

 

adicionado 3 minutos depois

Agora partirei para o próximo passo (gravar os novos dados).

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!