Programador para a nova família tinyAVR baseada no conversor chinês CH340 barato

A UPDI (Unified Program and Debug Interface) é uma interface de um fio para programar / depurar os novos microcontroladores Atmel de 8 bits, substituindo a interface PDI de dois fios usada para programar os microcontroladores AVR XMEGA.

imagem

Assim, chegou o regimento de protocolos de Atmelovsk - ISP, JTAG, debugWIRE, TPI, aWire, PDI, agora aqui é UPDI. Ao mesmo tempo, a situação do ecossistema no AVR ainda é muito desesperadora, então abandonaríamos completamente o uso deles, mas a última tendência nos agradou um pouco, portanto, este artigo foi escrito.

Somente os sortudos proprietários do programador Atmel ICE podem usar o protocolo UPDI, que não é muito conveniente de usar devido à escolha um tanto estranha do conector, e não é tão barato comprá-lo em escala industrial. Além disso, requer a instalação do Atmel Studio, que periodicamente se recusa a trabalhar com ele, porque, de acordo com a política de nossa empresa, a maioria dos computadores não tem acesso à Internet, e o estúdio o rastreia periodicamente para drivers ou para algumas bibliotecas, como resultado. momentos em que o programador estava visível no sistema, ou seja, os drivers foram instalados corretamente, mas ele não foi notado pelo próprio estúdio até obter acesso à rede e não ser atualizado à força.

Portanto, imediatamente depois que começamos a usar o novo e bastante conveniente microcontrolador ATTiny1616 em nossos desenvolvimentos (sobre suas vantagens posteriormente), havia a necessidade de uma ferramenta que pudéssemos usar para gravar no controlador do gerenciador de inicialização em produção. Claro, sem SMS e registro de acesso à Internet.

Após algumas pesquisas, encontrei o projeto pyupdi no Github (https://github.com/mraardvark/pyupdi) - uma implementação do protocolo UPDI em Python, e essa implementação é baseada no protocolo UART usual, exceto sem conversores de nível que, de fato, ainda mais conveniente, pois permite o uso de chips conversores FTDI padrão ou de seus equivalentes chineses CH340 / 341.

O projeto foi baixado e testado, as coisas saíram bastante alegres. Mas depois de alguns dias, ficou claro que ele ainda não nos convinha. Razões:

  • Se for necessário instalar o Python e um grupo inteiro de pacotes (lembro que estamos falando de computadores sem acesso à Internet), tive que baixar e instalar manualmente quase uma dúzia de pacotes diferentes que dependiam um do outro. Sim, em princípio, você pode criar um arquivo executável em outro computador a partir de um script Python, isso resolveu o problema, mas a lista de problemas não terminou aí
  • quase não há verificação de erro no script, qualquer erro termina com uma interrupção indicando um monte de arquivos vinculados entre si, o que para a equipe comum não parece muito claro
  • é impossível ler o conteúdo da memória do controlador, o que impossibilita o teste final do processo de gravação
  • nenhuma maneira de ler fusível
  • a velocidade do script deixa muito a desejar, 16 kb são escritos por quase um minuto, devido à ausência de otimização durante a transferência, tudo é baseado em tempos apertados
  • falta de indicação do processo de gravação
  • o projeto não suporta vários processadores que poderiam suportar
  • o projeto está meio morto e não responde a solicitações

Os problemas foram resolvidos por algum tempo dentro da estrutura do Python, mas após qualquer correção, tive que remontar o projeto, testar, para que houvesse o desejo de reescrever o script em algo mais familiar e rápido, ou seja, em C. Afinal, somos embedders!

Agora, brevemente, sobre as vantagens da nova série tinyAVR 1:

  • unificação real de periféricos e espaço de endereço entre 2 e 32 kb
  • configuração conveniente do gerenciador de inicialização (no início da memória!)
  • simplificação significativa do algoritmo ISP (In-System-Programming)
  • transição para a arquitetura von Neumann
  • memória flash de até 32 kb em um pacote pequeno (3x3 mm) com 24 pinos, dos quais até 22 (!) podem ser usados ​​como IO
  • a presença de um oscilador interno a 16/20 MHz
  • menor dependência de desempenho na configuração de fusíveis (AVR perpétuo para dor de cabeça)
  • excelente parte analógica para um pequeno controlador (ADC / DAC / comparadores com a possibilidade de comutação interna e externa de entradas / saídas)
  • programação e depuração de fio único
  • preço de varejo extremamente baixo (de 0,6 € por 16 kb)

Como parte importante do programador, pegamos o conversor USB-UART TTL disponível com base no chip chinês CH340, assim:

imagem

Para a programação, basta conectar as duas saídas RX e TX, já que elas já estão equipadas com um resistor de saída de 1,5k, se não houver resistor no modelo do seu conversor, será necessário adicioná-lo. A saída combinada é conectada ao pino UPDI em um chip programável; o aterramento do conversor também deve ser conectado ao aterramento do controlador. Se você tiver energia externa, preste atenção apenas se corresponde à energia que o conversor usa (3,3V ou 5V). Se houver necessidade, você pode alimentar o circuito com o controlador e com o próprio conversor, o que pode ser muito conveniente para a programação inicial.

imagem

Atenção! O resistor é opcional, ele precisa ser soldado apenas se o seu conversor não tiver resistores de proteção na saída.

O único problema associado ao chip CH340 é que ele não funcionou na minha versão Linux do programa, porque o bit de paridade é usado no protocolo de programação e o driver CH340 na versão do kernel não funciona corretamente com esse bit. Talvez o problema seja resolvido em um futuro próximo, até agora não tive paciência para fazer isso.

Como resultado de trabalho e experimentos, o programa updiprog foi gravado e depurado no IDE Code :: Blocks, cujos códigos-fonte foram postados no Github .

O que foi implementado nesta versão do programa:

  • Adicionada a capacidade de ler o conteúdo da memória flash do controlador em um arquivo hexadecimal
  • Capacidade adicional de ler o status de todos os fusíveis do controlador
  • sempre que possível, adicionado tratamento de erros com mensagens correspondentes
  • indicação adicional do processo de escrita / leitura
  • velocidade significativamente aumentada (cerca de 6 segundos para ler 16 kb)
  • Adicionado suporte para todos os microcontroladores da série 1

O tamanho inicial do programa é de cerca de 25 kb, comparado com 5 kopecks para o script Python de origem compilado.

Espero que o trabalho realizado seja útil para alguém. Eu ficaria feliz em comentários e sugestões.

Source: https://habr.com/ru/post/pt427349/


All Articles