Eu uso um Boarduino e um tabuleiro de pão de 30 linhas para programar meu ATtiny. Carrego um esboço não muito complicado chamado ArduinoISP (incluído por padrão agora no IDE do Arduino) e, de repente, tenho um programador em funcionamento. A Atmel vende um bom programador por entre US $ 30 e US $ 40, e há muitos kits para fazer os mais baratos.
Fiquei muito feliz quando recebi meu programador em funcionamento e fiz o pequeno piscar alguns leds. No entanto, agora meu pobre boarduino está preso no dever do programador.
Tanto quanto posso dizer, este programador pressiona o botão de reset e depois transmite e recebe nos pinos MOSI e MISO. Eu acho que o SCK não é usado ou, pelo menos, desnecessário. (O SCK é necessário de acordo com a folha de dados da ATtiny, meu programador não funciona sem ele e não consigo encontrar o local que pensei que tinha lido não era necessário.)
Por que preciso de um programador de hardware para transmitir apenas serial? Quero dizer, vamos supor que estou disposto a pressionar o botão de reset com o dedo em vez de usar um IC. Tudo o que resta é o envio e recebimento serial, então tudo o que preciso são três fios GND, RXD e TXD. Caramba, se eu tiver a linha "DTR" ou qualquer outra coisa, você pode até pressionar o botão de reset com o cabo serial.
Por que existem todas essas soluções de hardware que também exigem software sofisticado (como AVRdude, AVR studio ou qualquer outra coisa)?
Quero dizer, eu pude entender um pequeno cabo USB que apresentava o microcontrolador como um dispositivo de armazenamento em massa e permitia arrastar arquivos binários para programação (como esta placa de desenvolvimento ARM ). Apenas hardware, usando drivers de software padrão.
Eu também conseguia entender uma solução apenas de software (módulo conectando fios do USB ao chip, usando algo como o chip FTDI para simplificar o que ocorre nos fios). Todo o protocolo de programação sofisticado seria tratado por software no computador, e o hardware seria apenas alguns fios.
Por que temos software e hardware (complicados) envolvidos? Quero dizer, até onde eu sei, programar microcontroladores é bem fácil, mas quando eu estava começando a me preocupar com como eu compraria um chip da mouser ou digikey sem pagar algum guru para programar um gerenciador de inicialização para mim.
Tenho certeza de que há uma boa razão (não é como se eu tivesse escrito o software ou começado a fabricar o programador USB de arrastar e soltar), mas como recém-chegado, não tenho idéia do que seja.
fonte
Respostas:
Você está certo, programar AVRs é muito fácil. É apenas um protocolo personalizado implementado no SPI, rodando em baixa tensão. SCK é necessário.
No entanto, a programação de PICs mais antigos (e não do ISP AVR) requer altas voltagens e um protocolo personalizado diferente. Isso requer um programador de hardware especial.
Outros dispositivos são mais complexos. A maioria dos microcontroladores ARM deve ser programada via JTAG, aqui a memória está sendo gravada diretamente e o processador é instruído a gravar no flash. Mais uma vez, cada dispositivo é diferente.
fonte
Pesquisei bastante e estou me preparando para começar a jogar com os AVRs, mas nunca usei um, então isso pode estar errado, mas:
A maioria dos programadores baratos não suporta programação de alta tensão AVR. É necessário se o controlador estiver configurado para não ser programável usando bits de fusível ou se você, de alguma forma, cometeu algum erro sério e precisar redefinir o padrão para os padrões e assim por diante.
fonte
Os programadores AVR mais baratos são apenas sincronizar interfaces seriais com uma linha de redefinição. Você pode usar um FT232 para separar a interface serial periférica (SPI). O FT232 foi projetado para serial assíncrona e não sincronizada, portanto tudo é feito em software.
Você pode simplesmente fazer upload de um carregador de inicialização como o arduino, que permitiria o upload de código via interface serial assíncrona usando o ft232 no modo normal ou qualquer interface serial assíncrona usando conversores de nível, conforme necessário. Só não se esqueça de usar o gerenciador de inicialização correto para a velocidade do relógio e definir os bytes dos fusíveis corretamente.
fonte
Muitos dispositivos programáveis exigem historicamente que sejam programados usando sequências de sinais com tempo relativamente preciso. Em muitos casos, se alguém apenas quisesse programar um tipo específico de dispositivo, o hardware necessário teria sido bastante simples, mas como dispositivos diferentes tinham requisitos diferentes, a criação de um programador de uso geral era um pouco mais difícil.
Atualmente, é possível programar mais de 50% dos dispositivos programáveis usando nada mais que um cabo de E / S USB e software para PC, mas os programadores de "hardware" ainda têm uma vantagem considerável de velocidade. Para o PC reagir a um sinal recebido por um dispositivo USB e enviar uma resposta, geralmente leva no mínimo 1-2 milissegundos. Se uma sequência de programação exigir perguntar repetidamente a um dispositivo quando ele estiver pronto para o próximo pedaço de dados e enviá-lo, o uso de um cabo de E / S simples adicionaria um milissegundo ou dois extras ao tempo necessário para lidar com cada pedaço. Dependendo da natureza do dispositivo em questão, isso poderia aumentar o tempo total necessário para a programação em uma ordem de magnitude em comparação com um programador que poderia ser informado, enquanto esperava que um dispositivo estivesse pronto, o que ele deveria fazer uma vez.
Pessoalmente, gosto da abordagem de enviar dispositivos equipados com flash da fábrica com um carregador de inicialização na memória que pode ser usado com um mínimo de hardware de programação. Se o dispositivo oferecer suporte à programação flash sob controle de software, essa abordagem poderá simplificar a produção sem acrescentar nada ao custo do silício além do muito pequeno tempo marginal necessário para que o programa de teste de fábrica seja instalado no carregador de inicialização, depois que ele tiver feito todo o resto .
fonte