Embora eu adorasse mergulhar nos vários métodos de programação disponíveis, alguém já o fez. Aqui está o tutorial de Dean Camera sobre AVRFreaks, métodos de programação AVR :
Existem várias maneiras de programar microcontroladores AVR. Como muitas pessoas perguntam sobre diferentes de uma vez ou outra, pensei em descrevê-las aqui para que suas perguntas possam ser respondidas rápida e eficientemente. Por favor, perdoe-me se eu perder um método ou cometer um erro.
MÉTODO 1: Na Programação do Sistema (ISP)
Compatível com: Grande maioria dos AVRs (veja as postagens abaixo)
Programadores suportados: AVRISP MKI / II, JTAG MKII, STK500, STK600, Dragon, clones AVRISP, Programadores AVR910, AVRONE
Na programação do sistema, talvez seja o método mais comum de programação do flash, EEPROM, fusível e bloqueio de bytes de toda a linha do AVR. O ISP pode programar AVRs com taxas de clock extremamente altas (assumindo que o AVR alvo esteja sendo executado em alta frequência e o programador o suporte) e é o método de escolha para quase todos os entusiastas do AVR. Existem muitos clones AVRISP e programadores AVR910 no mercado, além de dongles simples do tipo faça você mesmo que se conectam à porta paralela do computador.
Projetos recentes de novos dongles podem usar a porta serial do computador, no entanto, evidências anedóticas dizem que esse método é extremamente lento devido a limitações técnicas.
O ISP exige que o AVR de destino esteja sendo executado a uma taxa de clock de pelo menos quatro vezes a do clock do ISP. Esta é uma armadilha comum e uma fonte de confusão para muitos novos nos AVRs.
MÉTODO 2: JTAG
Compatível com: Consulte a ajuda do AVRStudio Tools para suporte a dispositivos MKI e MKII
Programadores suportados: JTAG-ICE, JTAG-ICE MKII, Dragon, clones JTAG-ICE, AVRONE, STK600 (somente programação)
Tecnicamente, o JTAG é um sistema de depuração, não um método de programação. Ainda assim, a interface JTAG permite a programação de um AVR que o suporta.
O JTAG é uma ferramenta de depuração no sistema que permite manipular e examinar o status de um AVR suportado enquanto ele está sendo executado em um circuito. O JTAG permite ao usuário interromper a execução a qualquer momento, a manipulação dos registros internos do AVR e muito mais.
As unidades oficiais JTAG-ICE da ATMEL foram substituídas pelo JTAG-ICE MKII, que suporta o mais novo e mais amplamente suportado no protocolo de depuração DebugWire da faixa AVR, bem como a programação pelo método ISP (veja acima).
Os clones JTAG-ICE estão disponíveis a preços baixos, no entanto, sua compatibilidade limitada com apenas alguns AVRs limita sua utilidade. Independentemente disso, se o seu AVR suportar a interface JTAG, o JTAG-ICE continuará sendo um método e programador de depuração e programa muito agradáveis e eficazes.
MÉTODO 3: DebugWire
Suportado por: Muitos AVRs menores
Programadores suportados: JTAG-ICE MKII, Dragon, AVRONE
Novamente, o DebugWire é uma interface de depuração em vez de uma interface de programação, mas pode ser usado para carregar programas em AVRs suportados. A interface dW usa um único pino AVR (a linha / RESET) para todas as comunicações, tornando-o ideal para os dispositivos AVR de baixa contagem de pinos.
MÉTODO 4: Carregador de Inicialização
Compatível com: AVRs mais recentes
Programadores suportados: N / A
Novamente, tecnicamente, não é um método de programação. Um carregador de inicialização é um pequeno programa AVR que fica em uma seção reservada e configurável pelo usuário do flash comum. Os gerenciadores de inicialização usam os recursos de autod Modificação do flash disponíveis nos AVRs mais recentes para permitir que o AVR se programe por meio de dados do programa carregados de uma fonte externa. Os gerenciadores de inicialização podem obter seus dados de qualquer local (por exemplo, flash de dados externo ou cartão SD); no entanto, o tipo mais comum de gerenciador de inicialização se comunica com um PC através da porta RS-232 (serial) do AVR.
Os gerenciadores de inicialização são limitados, pois consomem espaço em flash (limitando o tamanho do flash disponível para o aplicativo do AVR) e não conseguem alterar os fusebits dos AVRs.
Os gerenciadores de inicialização estão amplamente disponíveis na Internet para download, mas sofrem de um problema de "galinha e ovo"; você precisa de outro tipo de programador listado aqui para programar no gerenciador de inicialização em primeiro lugar. Isso geralmente é resolvido pela construção de um dongle de porta paralela simples (consulte a seção ISP) ou pela compra de um AVR já pré-carregado com um gerenciador de inicialização (por exemplo, a placa AVRButterfly).
MÉTODO 5: Programação Paralela em Alta Tensão (HVPP)
Compatível com: A maioria dos AVRs não-TINY (com exceções)
Programadores suportados: STK500, STK600, Dragon, Homebrew Dongles, AVRONE
A programação paralela de alta tensão é um método de programação raramente usado, devido ao aborrecimento necessário para a instalação. Apesar disso, a programação HVPP é comumente usada para "ressuscitar" AVRs cujos fusebits foram configurados incorretamente por outro método de programação.
Tanto o STK500 quanto o Dragon suportam HVPP. Durante o HVPP, o pino / RESET do alvo é elevado para um valor incomumente alto de 12V, que aciona o circuito interno de programação paralela. O pino / RESET é o único pino do AVR (em AVRs compatíveis com HVPP) que pode ser elevado com segurança até esse nível.
Você pode criar seu próprio dongle HVPP usando planos on-line como este.
MÉTODO 6: Programação serial de alta tensão (HVSP)
Suportado por: Muitos TINY AVRs (com exceções)
Programadores suportados: STK500, STK600, Dragon, Homebrew Dongles, AVRONE
O HVSP é semelhante ao HVPP, exceto que a transferência de dados é realizada em série e não em paralelo. Este é o método de programação alternativo usado em muitos AVRs da série TINY que não possuem pinos suficientes para HVPP.
MÉTODO 7: PDI
Compatível com: XMEGA AVRs
Programadores suportados: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII
PDI é a nova interface de programação baseada no protocolo debugWire, para a linha de AVRs XMEGA. Atualmente, não é usado em nenhum outro microcontrolador AVR de 8 bits.
MÉTODO 8: TPI
Compatível com: AVRs TINY de 6 pinos (ATTINY10, etc.)
Programadores suportados: STK600, Dragon, AVRISP MKII
O TPI é uma interface de programação muito pequena para a nova linha de AVRs TINY com pinos limitados, como o ATTINY10 de 6 pinos. Como o dW, o TPI usa a linha / RESET do dispositivo como parte da interface de comunicação, mas a semelhança termina. Como os TINY AVRs de tamanho pequeno não possuem um circuito de depuração no chip, o protocolo TPI usa uma nova interface de programação de três pinos, em um protocolo half-duplex. Como a linha / RESET precisa ser aumentada para + 12V para programação quando o pino RSTDSB do dispositivo estiver definido, atualmente isso é suportado apenas pela placa de programação STK600 mais recente.
Seção de Perguntas frequentes sobre bônus!
Qual é o melhor método?
Não existe um método "melhor" universal. A programação do ISP é simples e extremamente popular, no entanto, todos os métodos acima funcionarão. Os dois modos de programação de alta tensão (o que for aplicável ao seu dispositivo) são os mais ricos em recursos, pois permitem o reparo de um AVR que teve seus fusíveis configurados incorretamente. No entanto, esses métodos são difíceis de configurar, daí o motivo pelo qual a maioria dos usuários acompanha o ISP.
Eu fiz um dongle de porta paralela. Posso usá-lo com o AVRStudio?
Receio que não. O AVRStudio não pode interagir com nenhum dongles "burro" - requer um dispositivo de programação inteligente - contendo um microcontrolador - para decifrar o protocolo de comunicação que ele envia. Os dongles simples sem um microcontrolador devem ser "bit-banged" (ou seja, os sinais apropriados simulados através do dongle através do computador).
Então meu dongle é inútil, então?
Não. Você ainda pode programar através de um dongle caseiro com uma ferramenta de software de programação de terceiros. O AVRDude é um utilitário de linha de comando bom, conhecido e gratuito - e vem incluído no pacote WinAVR.
Quais são minhas opções se eu quiser que meu programador trabalhe com o AVRStudio?
Escolha um programador que use um protocolo suportado pelo AVRStudio. Pode ser o protocolo "AVR910" simples (descontinuado) ou uma implementação personalizada do protocolo usado pelo STK500 / AVRISP. Observe que esses programadores exigem um microcontrolador, levando a uma situação de confusão. Isso pode ser resolvido com o AVR do programador pré-programado no momento da compra com o firmware apropriado ou com o AVR pré-programado com um gerenciador de inicialização.
Ok, eu quero usar um gerenciador de inicialização. Como faço para chegar lá em primeiro lugar ?!
Para usar um gerenciador de inicialização em um AVR, primeiro é necessário programar o gerenciador de inicialização. Se você não possui um programador (mesmo um simples dongle burro será suficiente para a programação inicial), você pode comprar AVRs pré-programados com um programa alternativo. gerenciador de inicialização de vários fornecedores.
A Atmel também fabrica a placa de demonstração Butterfly, cujo MEGA169 AVR vem pré-carregado com um carregador de inicialização compatível com o AVR-Studio.
Socorro! Eu estraguei os fusíveis e destruí meu AVR enquanto usava o ISP!
O erro mais comum é alterar os fusíveis de seleção do relógio para uma configuração inválida. Tente colocar um relógio externo no pino XTAL1 do AVR e veja se isso ajuda.
Se isso não for possível, use um dos métodos de alta tensão. Isso corrigirá qualquer configuração incorreta, incluindo as que envolvem a fonte do relógio, pois os métodos de alta tensão fornecem seu próprio relógio ao AVR para programação.
Como faço para interagir com meu programador?
O software que você usa para interagir com o programador depende do tipo de programa que você está usando.
Os dongles "burros" simples requerem software de terceiros, como PonyProg ou AVRDude. Essas podem ser ferramentas de linha de comando ou GUI - procure na Web e você irá multá-lo para atender às suas necessidades.
Programadores e gerenciadores de inicialização baseados no protocolo AVR910 podem ser usados no AVRStudio. No menu Ferramentas, selecione a opção "AVRProg" para abrir uma tela de interface gráfica com o seu programador. Como alternativa, ferramentas de terceiros como o AVRDude também são compatíveis com o AVR910.
As ferramentas oficiais estão totalmente integradas ao AVRStudio, especialmente no caso das variantes de depuração (JTAG / Dragon / etc). No menu Ferramentas do AVRStudio, selecione o submenu "Programa AVR ..." e clique no item "Conectar". Na nova janela, selecione sua ferramenta e sua interface de conexão e clique em ok.
Como é o caso dos dongles burros e dos programadores AVR910, as ferramentas oficiais também podem ser usadas com software de programação de terceiros.
(C) Dean Camera, 2009. Todos os direitos reservados. Não para reprodução em qualquer site que não seja o AVRFreaks.net sem permissão prévia e explícita.