Impossibile far funzionare bootloader su PCB personalizzato con AT32UC3L


12

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 .bine .datfornito 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 Word1e Word2nel file at32uc3l-uart-isp_cfg-1.0.1.datper ottenere questi valori:

  • Parola 1: 0xE11E0024
  • Word2: 0x494F81AA

Per utilizzare il pin PA01come 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?



1
Inserito come biglietto per Atmel, vedrà chi può davvero aiutarmi: D
Alexandre Lavoie,

Quali pin stai usando (PAxx / PBxx). Non ricordo esattamente, ma per entrare nel bootloader dovresti tirare un pin alto o basso (a seconda delle parole di due configurazioni). Puoi confermare che stai premendo un pulsante o simile?
Tom L.

@ TomL., Utilizzando PA01 (aggiunto nella domanda). Provato con alto / basso ... stesso risultato. Anche se questo pin viene utilizzato con JTAG, non dovrebbe causare problemi.
Alexandre Lavoie,

E quali pin stai usando per l'UART?
Tom L.

1
Va bene, quindi niente di insolito qui. Puoi controllare il codice del trampolino e se l'applicazione è correttamente collegata all'indirizzo di partenza flash (dovresti vederlo nel file .map del linker). Puoi pubblicare i tuoi argomenti sul linker?
Tom L.

Risposte:


1

Forse, se possibile, prova a utilizzare un programmatore AVR e l'IDE Arduino. So che funziona bene con i microcontrollori serie AT.


0

L'uso di JTAG senza il corretto codice del trampolino sovrascriverà il BOOTLOADER spedito da ATMEL. Quindi, dopo la prima programmazione con JTAG, molto probabilmente hai cancellato definitivamente BOOTLOADER.

Inoltre, i fusibili devono essere impostati per consentire al bootloader di funzionare quali impostazioni predefinite del programmatore JTAG di solito falliscono.

Per risolvere questo problema, è necessario programmare nuovamente il BOOTLOADER (prelevato dal chip non ancora programmato) nel chip da JTAG e impostare correttamente i fusibili.

Ho smesso di usare JTAG molto tempo fa poiché BOOTLOADER + FLIP è molto più comodo e veloce. Assicurati di utilizzare hex invece di bin / elf e la condizione BOOTLOADER è ancora vera al termine della condizione di reset.

Ecco come utilizzo FLIP su 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

Da dove avr32-objcopyproviene la cartella bin di AVRStudio e Batchispda FLIP. Devi solo cambiare i nomi dei file, l'ID del chip AVR e COM per adattarli al tuo progetto.

Se ne hai bisogno puoi anche usare 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

Il trampolino deve essere abilitato nel linker (proprietà del progetto), ecco come appare la mia configurazione:

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

Sto ancora usando AVR32 Studio 2.7.0 poiché le versioni più recenti sono merda di cavallo, quindi in esse la configurazione potrebbe essere diversa.

[Modifica1] informazioni aggiuntive

per UC3L0 l' AVR32_PIN_PA20è un po ' RC orologio generico (dovrebbe essere 32KHz ma varia da chip per chip di un bel po', senza calibrazione con prescaler) dal chip fino a quando il suo scopo è cambiato in GPIO o qualsiasi altra cosa in modo che il ~ orologio 27kHz non ha nulla a che fare con USART . A proposito, quel clock è alimentato a 3.3V e genera anche se il chip 1.98V core è fritto per sempre ....

La condizione Bootloader è stata AVR32_PIN_PA11impostata su zero prima della reimpostazione del rilascio (a meno che non si implementino le proprie condizioni / comandi DFU nel proprio firmware) Quindi una possibilità è creare un RC che si dissipa allo stato BASSO e reimpostare prima che si ricarichi ... oppure usa un gate o un ponticello FLIP / FLOP ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.