Der Bootloader kann mit AT32UC3L nicht auf einer benutzerdefinierten Platine ausgeführt werden

12

Ich habe kürzlich eine Leiterplatte für einen Kunden entworfen, alles ist in Ordnung mit der Hardware und Software (die Anwendung funktioniert so, wie sie soll). Jetzt müssen wir das Programm im Mikrocontroller aktualisieren. Da diese Leiterplatten jedoch an verschiedenen Orten auf der Welt installiert sind, ist es ideal, einen Bootloader zu installieren und denselben UART zu verwenden, der von der Anwendung verwendet wird.

Board-Beschreibung

  • AT32UC3L032
  • Ein UART wurde bereits für die Kommunikation zwischen Karte und PC verwendet
  • Ein paar I / Os für die Anwendung
  • Einige Status-LEDs

Relevante PINS und Konfig

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

Benutztes Werkzeug

  • Windows XP
  • Atmel Studio 6.1
  • AVRONE-Programmierer

Nach vielen Stunden der Suche habe ich die in ASF 3.14.0.834 bereitgestellte DFU von Atmel Software Framework gefunden. Das sah vielversprechend aus, ich konnte es mit den mitgelieferten Tools auf meinem Board installieren:

  • AVR32Studio 2.6.0
  • program_at32uc3l-uart-isp-1.0.1.cmd (mitgeliefertes Skript mit ASF)
  • Flip 3.4.7 (batchisp)

Zuerst habe ich ASF verwendet .binund .datbereitgestellt, das mithilfe des Skripts installiert wurde. Versuchen Sie nun, eine Anwendung mit dem Befehl batchisp hochzuladen:

batchisp.exe -device at32uc3l032 -hardware RS232 -port COM1 -baudrate 115200 -operation erase f memory flash blankcheck loadbuffer myapp.hex program verify

Aber immer bekommen:

Device selection.................... PASS
Hardware selection.................. PASS
Opening port........................ PASS
Synchronzing target................. FAIL    Timeout error.

Ich habe mit Oszilloskop RX und TX von UART getestet, die Daten gehen an Bord, aber der PC empfängt eine 27-kHz-Rechteckwelle (es können keine Daten von UART sein, da es kein Stoppbit oder ähnliches gibt, auch die Frequenz ist wahrscheinlich nicht dieselbe für 115200bps).

Nach weiteren Recherchen habe ich konfiguriert Word1und Word2in Datei at32uc3l-uart-isp_cfg-1.0.1.dat, um diese Werte zu erhalten:

  • Word1: 0xE11E0024
  • Word2: 0x494F81AA

PIN PA01als Option zur Eingabe in den ISP verwenden.

Laden Sie auch die Quelle der DFU in Atmel Studio 6.1 und stellen Sie fest, dass sie nicht dieselbe Konfiguration für den seriellen Anschluss verwenden, und ändern Sie sie für dieselbe Anwendung. Es wurden auch einige LEDs hinzugefügt, die im Hauptbereich der DFU umschalten.

Nach dem Update des Bootloaders auf der Karte ändern sich keine LEDs, dieselbe Zeitüberschreitung, dieselbe Rechteckwelle.

Vermisse ich etwas?


Alexandre Lavoie
quelle
1
Als Ticket für Atmel gepostet, werden Sie sehen, wer mir wirklich helfen kann: D
Alexandre Lavoie
Welche Pins verwenden Sie (PAxx / PBxx)? Ich erinnere mich nicht genau, aber um in den Bootloader zu gelangen, solltest du einen Stift hoch oder niedrig ziehen (abhängig von den beiden Konfigurationswörtern). Können Sie bestätigen, dass Sie einen Knopf oder Ähnliches drücken?
Tom L.
@TomL., Mit PA01 (in Frage hinzugefügt). Versucht mit beiden hoch / niedrig ... das gleiche Ergebnis. Auch wenn dieser Pin mit JTAG verwendet wird, sollte dies kein Problem verursachen.
Alexandre Lavoie
Und welche Pins verwenden Sie für den UART?
Tom L.
1
Hm ok, also hier nichts ungewöhnliches. Können Sie den Trampolin-Code überprüfen und ob die Anwendung korrekt mit der Flash-Startadresse verknüpft ist (Sie sollten dies in der Linker-Map-Datei sehen)? Können Sie Ihre Linker-Argumente posten?
Tom L.

Antworten:

1

Versuchen Sie es vielleicht mit einem AVR-Programmierer und der Arduino-IDE, wenn dies möglich ist. Ich weiß, dass es mit den Mikrocontrollern der AT-Serie gut funktioniert.

electricviolin
quelle
0

Die Verwendung von JTAG ohne korrekten Trampolin-Code überschreibt den vom ATMEL gelieferten BOOTLOADER. Nach der ersten Programmierung mit JTAG haben Sie den BOOTLOADER also höchstwahrscheinlich endgültig gelöscht.

Außerdem müssen die Sicherungen so eingestellt sein, dass der Bootloader funktioniert, was die Standardeinstellungen des JTAG-Programmiergeräts normalerweise vermasseln.

Um dies zu reparieren, müssen Sie den BOOTLOADER von JTAG in den Chip zurückprogrammieren und die Sicherungen richtig einstellen.

Ich habe die Verwendung von JTAG vor langer Zeit eingestellt, da BOOTLOADER + FLIP viel komfortabler und schneller ist. Stellen Sie sicher, dass Sie hex anstelle von bin / elf verwenden und die BOOTLOADER-Bedingung auch nach dem Ende der Rücksetzbedingung erfüllt ist.

So benutze ich FLIP auf 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

Wo avr32-objcopyist von AVRStudio und bin OrdnerBatchisp ist von FLIP. Sie müssen nur die Dateinamen und die AVR-Chip-ID und COM entsprechend Ihrem Projekt ändern.

Falls Sie es brauchen, können Sie auch USB verwenden:

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

Das Trampolin muss im Linker (Projekteigenschaften) aktiviert sein. So sieht meine Konfiguration aus:

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

Ich benutze immer noch AVR32 Studio 2.7.0, da es sich bei den neueren Versionen um Horse Shit handelt und die Konfiguration in diesen Versionen möglicherweise anders ist.

[Edit1] Zusatzinfo

für UC3L0 das AVR32_PIN_PA20ist einige RC generic Uhr (sollte 32 kHz sein , aber es variiert von Chip zu Chip ziemlich viel ohne Kalibrierung mit Vorteiler) vom Chip bis zu seinem Zweck geändert wird GPIO anderes oder etwas so die ~ 27kHz Uhr hat nichts mit dem zu tun USART . Übrigens wird diese Uhr mit 3,3 V betrieben und erzeugt auch dann, wenn der 1,98 V-Chipkern für immer gebraten ist ....

Die Bootloader-Bedingung wurde AVR32_PIN_PA11vor dem Zurücksetzen auf Null gesetzt (es sei denn, Sie implementieren Ihre eigenen DFU- Bedingungen / -Befehle in Ihre Firmware). Daher besteht eine Möglichkeit darin, eine RC in den Zustand LOW zu versetzen und zurückzusetzen, bevor sie wieder aufgeladen wird. oder benutze ein FLIP / FLOP Gate oder einen Jumper ...

Spektre
quelle