Boa noite, amigos!

Estou desenvolvendo um projeto onde o arduino trabalha como um gravador e leitor de memórias e estou com uma dúvida: como ler e gravar arquivos em hexadecimal. Ler e gravar em um cartão SD até que é fácil, mas como fazer para gravar na memória? Como ler o arquivo do cartão SD separando cada endereço de memória para gravar? Espero ter sido claro em minha pergunta.

 

Exibições: 213

Responder esta

Respostas a este tópico

Boa noite JFMA,

já que vc perguntou, a minha resposta é :  Não, pra mim vc não foi claro.

1. Vc fala em ler e gravar memória. Que tipo, de memória? 

2. Gravar arquivos hexadecimais.  Arquivo tem formatos.ex: txt, ino, doc, etc. E todos dados lá são h exadecimais.

Detalhe melhor sua dificuldade para que possamos ajudá-lo.

RV

Vou tentar explicar melhor. São arquivos em memória do tipo 27C256 que possuem informações de veículos como chassis, codes. Geralmente estes arquivos tem extensão .bin. Estou um pouco confuso. Dá para gravar e ler com o arduino arquivos com esta extensão?

Ler de uma memória é só endereçar a informação, mas de um arquivo, que não tem endereços, como ler e gravar?

Olá.

  A principio arquivos binários quando vão ser gravados em uma memória vão na sequencia. Primeiro byte do arquivo é o primeiro byte da eprom e assim vai.

  O hex segue um formato que descreve o endereço, os dados a gravar e um checksum, vide:

https://en.wikipedia.org/wiki/Intel_HEX

  Ler os arquivos acredite, é o fácil. 

  Se vc pretende gravar uma Eprom (UVPROM) se prepare para tabelas com tensões, larguras de pulso, acompanhamento pelo osciloscópio de larguras e alturas de pulsos, queimas, mau funcionamento quando troca o fornecedor,, novas tabelas, etc. Elas usam um processo meio arcaico de escrita (sem falar no processo de apagamento...).

  Sugiro comprar um gravador de eprom, posso recomendar um, ligado no PC.

  Caso precise mesmo gravar acredito que um bom upgrade seria usar memorias com a mesma pinagem mas tecnologia mais moderna como uma flasheprom. Acho que o codigo seria 29C256 ou coisa assim.

  Enfim, fazer um gravador de eprom é realmente um desafio. Mas a net está cheia de esquemas.

A dúvida é apenas uma, quando eu leio uma memória vou endereçando cada posição de memória, mas quando leio o arquivo um arquivo do cartão SD como endereçar posições de memória?

Sobre como usar um cartão SD, sugiro essas leitura  para entender como: 

https://www.sdcard.org/downloads/pls/

https://en.wikipedia.org/wiki/SD_card

Os dados de um SD card são agrupados em Blocos de Bytes e não em posições de memória. 

Os blocos são endereçados, para poder ler ou gravar. 

Boa tarde José Francisco, 

Já gravei memórias UV-EPROM na década de 1980. Tenho bastante conhecimento dessas EPROMs. 

Mas você precisa detalhar exatamente o que precisa. Favor responder as perguntas. 

1) Porque usar essas EPROMs antigas? E porque não usar outro tipo de memória mais moderna, com maior capacidade? 

2) Você já tem o formato definido do que precisa gravar? Informe os detalhes. 

3) Se for gravar cartão SD com Arduino, já existe tudo pronto. O formato da gravação é você que define. Não serve? 

4) Nas memórias (todos os tipos) são gravados os bits! Se vai ser em hexa ou se vai ser em ASCII(texto), o jeito de ler/gravar é você que define. Qual a sua necessidade? 

Sr. José Gustavo,

trabalho com centrais de injeção eletrônica e muitas possuem memórias antigas, os arquivos são em binário (extensão .bin).

Boa tarde José Francsico, 

Agora começa a aparecer uma luz no fim do túnel. 

Quanto mais informações puder nos dar, ficará mais fácil para ajudá-lo. 

1) Você pretende copiar as EPROMs ?

2) Qual ou quais modelos pretende ler? Por exemplo, um modelo você já citou - 27C256.

  https://www.jaapsch.net/psion/pdffiles/Eprom032k_datasheet_27C256...

3) Quais módulos de injeção você trabalha? Fabricante, modelo do carro, etc.

Você tem sorte. Conheço a fundo EPROMs e já trabalhei com módulos de injeção a mais de 20 anos atrás. 

Algumas dicas: 

1) Identifique, se possível, o processador do módulo de injeção. Sabendo o processador, você terá uma ideía do formato que o fabricante usa, por exemplo formato Intel, Motorola, etc.

2) Sabendo o modelo do processador, se quiser aprender mais, poderá usar um disassembler para entender o código do programa.

3) Faça um levantamento dos componentes e outros chips que o módulo possui. 

Minha história com os módulos de injeção:

- A quase 20 anos(talvez mais), um amigo meu que tinha um ferro-velho de carros importados me procurou. Ele comprava de seguradoras,  Citroens ZX e Xantia com perda total. Desmontava os carros e vendia as peças.

Esse modelos de Citroen, tinham um teclado numérico para acionar o carro. O código ficava gravado no módulo de injeção. Cada módulo custava bem caro, mas ficava travado com a senha. 

Resumindo, eu conseguia identificar os códigos e liberava os módulos para que ele pudesse comercializá-los! Liberei mais de 20 módulos naquela época. 

Boa noite, José Gustavo!

Obrigado pelas informações. Eu já consegui gravar alguma coisa na 27C256 com o Arduino. Eu quero entender como acessar as posições de memória do cartão SD como em uma memória comum.

Sr. José Gustavo!

Como o sr. já teve contato com arquivos gravados em memórias em carros você deve saber ler os arquivos com um programador de eprom. Eu quero exatamente conseguir faze isto com o Arduino. Eu quero ler um arquivo de memória, gravar em um cartão SD, editar e gravar novamente na memória. Como eu endereço em um arquivo no cartão SD as informações lidas da memória de forma a poder retorná-la na memória nas mesmas posições?

Sr José Francisco,

Como o amigo Eduardo já citou, um formato de dados de Eprom muito usado é o Intel HEX. 

Sugiro que use esse formato para ler e gravar Eproms. 

https://en.wikipedia.org/wiki/Intel_HEX

https://www.embarcados.com.br/formato-de-arquivo-intel-hex/

Traduzido pelo Google:

Estrutura de registro 

Um registro (linha de texto) consiste em seis campos (partes) que aparecem em ordem da esquerda para a direita: [1]

  1. Código de início , um caractere, dois pontos ASCII ':'.
  2. Contagem de bytes , dois dígitos hexadecimais (um par de dígitos hexadecimais), indicando o número de bytes (pares de dígitos hexadecimais) no campo de dados. A contagem máxima de bytes é 255 (0xFF). 16 (0x10) e 32 (0x20) são comumente usados ​​contagens de bytes.
  3. Endereço , quatro dígitos hexadecimais, representando o deslocamento do endereço da memória inicial de 16 bits dos dados. O endereço físico dos dados é calculado adicionando esse deslocamento a um endereço base previamente estabelecido, permitindo assim o endereçamento de memória além do limite de 64 kilobytes dos endereços de 16 bits. O endereço base, cujo padrão é zero, pode ser alterado por vários tipos de registros. Os endereços base e as compensações de endereço são sempre expressos como grandes valores endian .
  4. Tipo de registro (veja tipos de registro abaixo), dois dígitos hexadecimais, 00 a 05 , definindo o significado do campo de dados.
  5. Dados , uma sequência de n bytes de dados, representada por 2 n dígitos hexadecimais. Alguns registros omitem esse campo ( n é igual a zero). O significado e a interpretação dos bytes de dados dependem da aplicação.
  6. Soma de verificação , dois dígitos hexadecimais, um valor calculado que pode ser usado para verificar se o registro não possui erros.

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2020   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço