terça-feira, fevereiro 09, 2021

Microcontrolador 8051: Gravação da Flash do AT89S51

Vamos examinar neste post como gravar um programa na memória Flash do AT89S51. O que vamos ver aqui é específico para este modelo (e com pequenas alterações se aplica a outros microcontroladores da linha AT89 da Atmel). Microcontroladores de outros fabricantes podem ter processos de gravação diferentes, mesmo sendo baseados na mesma arquitetura do 8051.


A base para o que vou falar é o datasheet do AT89S51. Existem duas formas de gravação da Flash:

  • A paralela, que é para ser usada com o chip fora do circuito. Requer uma tensão de 12V e utiliza vários pinos, mas é mais rápida que a outra opção.
  • A serial (SPI) que requer menos pinos e pode, com certos cuidados, ser usada com o chip no circuito,
Uma ausência no AT89S51 é a "auto programação", onde o firmware consegue alterar a Flash. Sem este recurso não é possível criar um bootloader que atualize o conteúdo da Flash a partir de dados recebidos por uma serial (ou outro caminho).

O processo de gravação de firmware normalmente requer não apenas ser capaz de gravar na Flash, mas também verificar o que foi grava e, em alguns casos, ser capaz de ler o conteúdo da Flash,

Fuses

Uma preocupação de muitos projetistas é impedir que o firmware possa ser regravado (para evitar adulterações) ou lido (para proteger o código ou valores na Flash). No AT89S51 isto é controlado por três memory lock bits (também chamados de fuses).

Identificação do Chip

O AT89S51, como outros microntroladores, possui três bytes de identificação que podem ser lidos pelo programador para confirmar que é o chip correto (ou para selecionar o programa a carregar).

Programação Paralela

A figura abaixo, extraída do datasheet, mostra as ligações necessárias.



Basicamente um endereço é colocado em certos pinos e vários sinais de controle são usados para selecionar a operação. Nas gravações, o valor a gravar deve ser colocados nos pinos apropriados e o sinal Vpp deve ser colocado em 12V. Nas leituras o sinal Vpp deve ficar nos 5V e o dado lido ficará disponível nos pinos de dados.

Programação Serial

A ligação a ser feita é bem mais simples:


A programação serial está disponível quando o sinal de reset está alto. A comunicação segue o padrão SPI onde um clock (SCK) comanda o deslocamento dos sinais seriais de dados (MISO e MOSI), Para selecionar a operação deve ser enviando um byte de comando.

Um cuidado é que a frequência de SCK não pode ultrapassar /16 da frequência do cristal.


No próximo post vamos brincar com a programação serial do AT89S51.

3 comentários:

Henrique Lobo disse...

Oi!

Descobri seu site pelo Retrocomputaria e to adorando!

Mantenho um projeto chamado /dev/All que é um agregador de blogs sobre desenvolvimento/informática/TI para que outras pessoas possam descobrir bons textos como os que encontrei aqui.

Cadastra seu site lá pro pessoal poder acompanhar! Segue o link: https://devall.com.br

De novo, parabéns!

Juan Castro disse...

Oi Daniel, explicando o Henrique acima: https://www.retrocomputaria.com.br/2021/02/08/site-maneiro-do-dia-dqsoft/ - não estranhe o nome, o podcast não é sobre o que você está pensando, é sobre tecnologia. Véia.

Alguém citou o seu site no nosso grupo no FB, e achei tão legal que resolvi fazer esse post. Vou te mandar um e-mail porque ando tendo umas ideias loucas.

Um abraço e, mais uma vez, parabéns pelos relatos divertidos!

Bruno C. Castro Alves disse...

Fui mais um que chegou aqui através do Reteocomputaria. Adorei o site!
PS: Voltei recentemente a estudar programação de microcontroladores (Arduino Uno, Nano e ESP8266) e depois de ler este post, fiquei tentado a estudar também o 8051.