Formato de arquivo Intel HEX

Confira neste artigo como interpretar as informações armazenadas em um arquivo no formato Intel Hex. Nesse tipo de arquivo são definidos o programa e valores constantes que serão gravados na memória, sendo utilizado em diversos programadores e emuladores.

 

 

Padrão Intel Hex

 

Um arquivo com extensão .hex contém uma sequência de caracteres ASCII que é armazenada seguindo o padrão Intel HEX. De modo geral, cada linha de texto presente no arquivo contém informações representadas utilizando o sistema de numeração hexadecimal. Tais parâmetros são indicados seguindo um formato padrão de linha que é iniciado com o símbolo ‘:’.

 

:LLAAAATT[DD...]CC

 

Os parâmetros são apresentados a seguir:

  • LL: Quantidade de bytes na linha;
  • AAAA: Endereço inicial em que as informações serão armazenadas;
  • TT: Campo de extensão;
  • DD: Informações da linha;
  • CC: Código para verificação de erros.

 

É importante ressaltar que duas letras representam um valor hexadecimal. Assim sendo, verifica-se que cada campo possui, respectivamente: um byte; dois bytes; LL bytes; um byte. Lembre-se que o tamanho do campo DD depende da informação presente em LL.

 

 

Campo de Extensão

 

O campo de extensão é usado para indicar o tipo de informação definida na linha, isto é, no campo DD. Pode ser a definição dos valores armazenados na memória ou algum mecanismo de controle: 

  • 00: Determinação do conjunto de dados;
  • 01: Fim de linha;
  • 02: Extensão de endereço de segmento;
  • 04: Extensão linear de endereço.

 

Determinação do conjunto de bytes: A informação contida a partir de um endereço de memória. No exemplo, 12 bytes gravados a partir do endereço 50H.

 

:0C005000456D6261726361646F730000B3

 

Fim de linha: Indica o final do arquivo HEX.

 

:00000001FF

 

Extensão de endereço de segmento: Utilizado no padrão HEX86, este campo define os bits 4-19 de um segmento de endereço de 20 bits. Para este campo são utilizados 2 bytes. Nesse caso, a função do campo é definir um endereço base que será somado aos endereços subsequentes (próximas linhas). Assim sendo, o endereço absoluto é obtido somando o endereço atual com o valor de extensão deslocado de 4 bits.

 

Endereço absoluto = (Endereço_Segmento << 4) + Endereço_Linha

 

Extensão linear de endereço: Utilizado no padrão HEX386, este campo define os bits 16-31 de um de endereço de 32 bits. Para este campo são utilizados 2 bytes para definir a parte alta (16 bits) das próximas linhas. Portanto, o endereço absoluto é obitdo somando o endereço atual com o valor de extensão deslocado de 16 bits.

 

Endereço absoluto = (Endereço_Segmento << 16) + Endereço_Linha

 

 

Código para verificação de erros

 

O código de verificação de erros é obtido da seguinte maneira: Todos os campos são somados, exceto o checksum. Em seguida, toma-se o complemento desse valor. Por fim, é somado o valor 1 para obter o checksum. Essas operações são mostradas no exemplo a seguir:

 

:0C005000456D6261726361646F730000B3

 

Soma: 0C + 00 + 50 + 00 + 45 + 6D + 62 + 61 + 72 + 63 + 61 + 64 + 6F+ 73 + 00 + 00 = 44D = 4D.

Complemento = NOT(4D) = B2.

Checksum = B2 + 01 = B3.

 

 

Exemplo

 

Considere o código abaixo compilado para arquitetura AVR de 8 bits.

 

 

O arquivo Hex gerado é mostrado na Figura 1. As cinco primeiras linhas são usadas para gravar o programa que é composto pelo código de inicialização e a função main. A penúltima linha é usada para gravar o dado constante na memória. Por fim, a ultima linha apresenta o comando de finalização. 

 

Exemplo de arquivo Intel Hex.
Figura 1: Exemplo de arquivo Intel Hex.

 

 

Saiba mais

 

“Disassemblando” código Intel Hex com o simulador Kit SENAI PIC16

Conjunto de Instruções do Intel 8051

Compilando C para 8051 com SDCC

 

 

Referências

 

Intel HEX File Format

Imagem em destaque

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Fernando Deluno Garcia
Fascinado por computação, especialmente na interface entre hardware e software, me engajei na área de sistemas embarcados. Atuo com desenvolvimento de sistemas embarcados e sou docente da Faculdade de Engenharia de Sorocaba.Para mais informações: https://about.me/fdelunogarcia

Deixe um comentário

avatar
 
  Notificações  
Notificar