Por que precisamos de programadores de hardware?

22

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.

Jack Schmidt
fonte
O seu programador de hardware de fabricação caseira permite a depuração? Você pode estar bem programando sozinho, mas precisaria de um programador de hardware se desejasse fazer a depuração no chip (definindo pontos de interrupção no código e interrompendo a execução quando chegar a esse ponto), pois essa operação pode fazer coisas engraçadas com a linha de redefinição.
Joel B
1
Algo pelo qual você pode se divertir, hackaday.com/2013/05/10/…
binarysmacker

Respostas:

18

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.

Toby Jaffey
fonte
Alguma idéia de por que essas são muito mais complexas? O modo AVR (protocolo padrão de baixa tensão) parece muito mais sensato do que exigir um programador personalizado (como esse cara com uma necessidade de programador 8051/8052 - ajuda, representante disponível! Electronics.stackexchange.com/questions/4104 )
Kevin Vermeer
2
Realmente não há nada de especial ou caro nos programadores do PIC; muitos projetos estão disponíveis on-line e a maioria dos novos PICs pode ser programada em baixa tensão.
precisa saber é o seguinte
4
Os fabricantes de IC realmente não se preocupam com a complexidade de algo que os amadores usam. Desde que possa ser usado em produção em grande quantidade, o custo é tudo.
endolith 30/09/10
2
A programação de alta tensão estava lá primeiro, era a maneira de programar EPROMs apagáveis ​​por UV nos anos 80 (e microcontroladores contendo essas EPROMs).
starblue
Corrigida a reivindicação SCK. Eu gosto da idéia de que apenas o SPI é necessário, mas como os computadores não têm uma porta SPI (e que tal o cabo FTDI já possui um chip de US $ 4 !!), podemos também usar um microcontrolador de US $ 2. O argumento de upload e depuração do JTAG me vendeu os benefícios de uma placa de desenvolvimento em geral, e acho que o endólito tem um bom argumento de que ninguém se importa com o que eu gasto meus US $ 20; os fabricantes se importam com o que os engenheiros reais (e seus empregadores) gastam seu orçamento.
Jack Schmidt
5

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.

AndrejaKo
fonte
2
Programadores de baixa tensão como o AVRISP mkII [1] ou USBtinyISP [2] podem ser usados ​​para definir fusíveis com avrdude ou outros programadores, mas eles não podem salvar um chip AVR que não foi inicializado ou que sua linha de redefinição foi transformada em um GPIO. Você precisa de um programador de alta tensão para esse tipo de coisa. [1] mouser.com/search/… [2] ladyada.net/make/usbtinyisp
blalor 30/09/10
@blalor À luz dessa informação, editarei minha resposta.
AndrejaKo
Eu vi algumas instruções sobre como criar um programador de alta tensão (e a folha de dados do chip parece ter instruções bem detalhadas sobre o design de um), mas estou esperando até que eu coloque um de meus chips até que eu o experimente. Meus osciladores chegam aqui amanhã, então logo queimarei fusíveis e tentarei a fada dos tijolos!
Jack Schmidt
É notável que o avrdude verifique novamente seus bits de fusível para evitar esse problema. Um problema um pouco mais comum é ajustar o chip para o relógio externo.
Yann Vernier
4

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
1

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 .

supercat
fonte