Não foi possível obter o gerenciador de inicialização trabalhando no PCB personalizado com AT32UC3L


12

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 .bine .datforneci 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 Word1e Word2arquivei at32uc3l-uart-isp_cfg-1.0.1.datpara obter esses valores:

  • Word1: 0xE11E0024
  • Word2: 0x494F81AA

Para usar o pino PA01como 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?



1
Postado como um ingresso para Atmel, vai ver quem pode realmente me ajudar: D
Alexandre Lavoie

Quais pinos você está usando (PAxx / PBxx). Não me lembro exatamente, mas para entrar no gerenciador de inicialização você deve puxar um pino para cima ou para baixo (dependendo das duas palavras de configuração). Você pode confirmar que está pressionando um botão ou similar?
Tom L.

@TomL., Usando PA01 (adicionado em questão). Tentei com alto / baixo ... mesmo resultado. Mesmo que este pino seja usado com o JTAG, não deve causar problemas.
Alexandre Lavoie 20/03

E quais pinos você está usando para o UART?
Tom L.

1
Hm ok, então nada de anormal aqui. Você pode verificar o código do trampolim e se o aplicativo está corretamente vinculado ao endereço de início do flash (você deve vê-lo no arquivo .map do vinculador). Você pode postar seus argumentos do vinculador?
Tom L.

Respostas:


1

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.


0

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:

avr32-objcopy -O ihex AT32UC3L064.elf AT32UC3L064.hex
Batchisp -device AT32UC3L064 -hardware RS232 -port COM1 -baudrate 115200 -operation onfail abort memory flash erase f blankcheck loadbuffer AT32UC3L064.hex program start reset 0

Onde avr32-objcopyé da pasta bin AVRStudio e Batchispé 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:

avr32-objcopy -O ihex cpp_trampoline.elf AT32UC3A3256.hex
Batchisp -device AT32UC3A3256 -hardware USB -operation onfail abort memory flash erase f blankcheck loadbuffer AT32UC3A3256.hex program start reset 0

O trampolim deve estar ativado no vinculador (propriedades do projeto), é assim que a minha configuração se parece:

linker: -nostartfiles -Wl,--gc-sections -Wl,-e,_trampoline -mpart=uc3l032 -Wl,--gc-sections --direct-data --rodata-writable

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_PA20alguma 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_PA11definida 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 ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.