Eu projetei um PCB para um cliente recentemente, está tudo bem com o hardware e o software (o aplicativo está funcionando como deveria). Agora, estamos enfrentando a necessidade de atualizar o programa dentro do microcontrolador, mas como essas PCBs são instaladas em diferentes locais do mundo, seria perfeito instalar um gerenciador de inicialização e usar o mesmo UART usado pelo aplicativo.
Descrição do Conselho
- AT32UC3L032
- Um UART já utilizado para comunicação entre placa e PC
- Duas E / Ss para o aplicativo
- Par de LEDs de estado
PINs e configuração relevantes
PA01 # Used for entering ISP with high level
PA20 # Used for application and ISP UART
PA21 # Used for application and ISP UART
#define COM_USART (&AVR32_USART2)
#define COM_USART_RX_PIN AVR32_USART2_RXD_0_0_PIN
#define COM_USART_RX_FUNCTION AVR32_USART2_RXD_0_0_FUNCTION
#define COM_USART_TX_PIN AVR32_USART2_TXD_0_0_PIN
#define COM_USART_TX_FUNCTION AVR32_USART2_TXD_0_0_FUNCTION
#define COM_USART_IRQ AVR32_USART2_IRQ
#define COM_USART_BAUDRATE 115200
Ferramentas usadas
- Windows XP
- Atmel Studio 6.1
- Programador AVRONE
Após muitas horas pesquisando, encontrei o Atmel Software Framework DFU, fornecido no ASF 3.14.0.834. Isso parecia promissor, consegui instalá-lo na minha placa usando as ferramentas fornecidas:
- AVR32Studio 2.6.0
- program_at32uc3l-uart-isp-1.0.1.cmd (script fornecido com o ASF)
- Flip 3.4.7 (batchisp)
No começo, eu usei .bin
e .dat
forneci o ASF, instalado usando o script. Agora, tentando fazer upload do aplicativo usando o comando batchisp:
batchisp.exe -device at32uc3l032 -hardware RS232 -port COM1 -baudrate 115200 -operation erase f memory flash blankcheck loadbuffer myapp.hex program verify
Mas sempre recebendo:
Device selection.................... PASS
Hardware selection.................. PASS
Opening port........................ PASS
Synchronzing target................. FAIL Timeout error.
Eu testei com o osciloscópio RX e TX da UART, os dados estão indo para a placa, mas o PC está recebendo uma onda quadrada de 27kHz (não podem ser dados da UART porque não há bit de parada ou algo assim, também a frequência provavelmente não é a mesma para 115200bps).
Após mais pesquisas, eu configurei Word1
e Word2
arquivei at32uc3l-uart-isp_cfg-1.0.1.dat
para obter esses valores:
- Word1: 0xE11E0024
- Word2: 0x494F81AA
Para usar o pino PA01
como opção para entrar no ISP.
Além disso, carreguei a fonte do DFU no Atmel Studio 6.1 e percebi que eles não estavam usando a mesma configuração de porta serial, então alteramos para o mesmo que meu aplicativo. Também foram adicionados alguns LEDs para alternar dentro do principal do DFU.
Após atualizar o carregador de inicialização na placa, nenhum LED muda, mesmo tempo limite, mesma onda quadrada.
Estou esquecendo de algo?
fonte
Respostas:
Talvez tente usar um programador AVR e o IDE do Arduino, se isso for possível. Sei que funciona bem com os microcontroladores da série AT.
fonte
O uso do JTAG sem o código adequado do trampolim substituirá o BOOTLOADER enviado pelo ATMEL. Então, após a primeira programação com o JTAG, você provavelmente apagou o BOOTLOADER definitivamente.
Além disso, os fusíveis devem ser configurados para permitir que o carregador de inicialização funcione com as configurações padrão do programador JTAG que geralmente estragam.
Para reparar isso, é necessário programar o BOOTLOADER de volta (retirado do chip ainda não programado) no chip pelo JTAG e definir os fusíveis corretamente.
Parei de usar o JTAG há muito tempo, já que o BOOTLOADER + FLIP é muito mais confortável e mais rápido. Verifique se você está usando hex em vez de bin / elf e a condição BOOTLOADER ainda é verdadeira após o término da condição de redefinição.
É assim que eu uso o FLIP no RS232:
Onde
avr32-objcopy
é da pasta bin AVRStudio eBatchisp
é da FLIP. Você só precisa alterar os nomes dos arquivos, o ID do chip AVR e o COM para corresponder ao seu projeto.Caso você precise, também pode usar USB:
O trampolim deve estar ativado no vinculador (propriedades do projeto), é assim que a minha configuração se parece:
Ainda estou usando o AVR32 Studio 2.7.0, pois as versões mais recentes são uma merda, então a configuração pode ser diferente.
[Edit1] informações adicionais
para UC3L0 a
AVR32_PIN_PA20
alguma RC relógio genérico (deve ser 32KHz, mas isso varia de chip para chip de bastante sem calibração com prescalers) a partir do chip até que seu propósito é alterado para GPIO ou qualquer outra coisa para que o ~ relógio 27KHz não tem nada a ver com USART . Btw esse relógio é alimentado por 3.3V e gera mesmo que o núcleo do chip 1.98V seja frito para sempre ....A condição do carregador de inicialização está sendo
AVR32_PIN_PA11
definida como zero antes da redefinição da versão (a menos que você implemente suas próprias condições / comandos DFU em seu firmware) Portanto, uma possibilidade é criar um RC que você dissipe para o estado LOW e redefina antes de carregar novamente ... ou use algum portão ou jumper FLIP / FLOP ...fonte