Di recente ho progettato un PCB per un client, tutto va bene con l'hardware e il software (l'applicazione funziona come dovrebbe). Ora stiamo affrontando la necessità di aggiornare il programma all'interno del microcontrollore, ma poiché questi PCB sono installati in luoghi diversi in tutto il mondo, sarebbe perfetto installare un bootloader e utilizzare lo stesso UART utilizzato dall'applicazione.
Descrizione della scheda
- AT32UC3L032
- Un UART già utilizzato per comunicare tra scheda e PC
- Coppia di I / O per l'applicazione
- Coppia di LED di stato
PIN e configurazione pertinenti
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
Strumenti utilizzati
- Windows XP
- Atmel Studio 6.1
- Programmatore AVRONE
Dopo molte ore di ricerche, ho trovato la DFU Atmel Software Framework, fornita in ASF 3.14.0.834. Sembrava promettente, sono stato in grado di installarlo sulla mia scheda utilizzando gli strumenti forniti:
- AVR32Studio 2.6.0
- program_at32uc3l-uart-isp-1.0.1.cmd (script fornito con ASF)
- Capovolgi 3.4.7 (batchisp)
Inizialmente, ho usato .bin
e .dat
fornito ASF, installato usando lo script. Ora provo a caricare l'applicazione usando il comando batchisp:
batchisp.exe -device at32uc3l032 -hardware RS232 -port COM1 -baudrate 115200 -operation erase f memory flash blankcheck loadbuffer myapp.hex program verify
Ma sempre ottenendo:
Device selection.................... PASS
Hardware selection.................. PASS
Opening port........................ PASS
Synchronzing target................. FAIL Timeout error.
Ho testato con l'oscilloscopio RX e TX di UART, i dati stanno andando a bordo ma il PC sta ricevendo un'onda quadra a 27 kHz (non possono essere dati da UART poiché non c'è bit di stop o niente, anche la frequenza probabilmente non è la stessa per 115200bps).
Dopo ulteriori ricerche, ho configurato Word1
e Word2
nel file at32uc3l-uart-isp_cfg-1.0.1.dat
per ottenere questi valori:
- Parola 1: 0xE11E0024
- Word2: 0x494F81AA
Per utilizzare il pin PA01
come opzione per accedere all'ISP.
Inoltre, ha caricato l'origine della DFU in Atmel Studio 6.1 e ha notato che non utilizzavano la stessa configurazione della porta seriale, quindi modificata per la stessa della mia applicazione. Aggiunti anche alcuni LED che si attivano all'interno della DFU.
Dopo aver aggiornato il bootloader nella scheda, nessun LED cambia, stesso timeout, stessa onda quadra.
Mi sto perdendo qualcosa?