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?