Nie można uruchomić programu ładującego na niestandardowej płytce drukowanej z AT32UC3L


12

Niedawno zaprojektowałem płytkę drukowaną dla klienta, wszystko jest w porządku ze sprzętem i oprogramowaniem (aplikacja działa tak, jak powinna). Teraz stajemy przed koniecznością aktualizacji programu wewnątrz mikrokontrolera, ale ponieważ te płytki drukowane są instalowane w różnych miejscach na całym świecie, idealnie byłoby zainstalować program ładujący i używać tego samego UART, którego używa aplikacja.

Opis tablicy

  • AT32UC3L032
  • Jeden UART już służy do komunikacji między kartą a komputerem
  • Kilka I / O dla aplikacji
  • Kilka diod LED stanu

Odpowiednie kody PIN i konfiguracja

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

Narzędzia użyte

  • Windows XP
  • Atmel Studio 6.1
  • Programator AVRONE

Po wielu godzinach poszukiwań znalazłem DFU Software Framework Atmel, udostępniony w ASF 3.14.0.834. Wyglądało to obiecująco, udało mi się zainstalować go na mojej płycie za pomocą dostarczonych narzędzi:

  • AVR32Studio 2.6.0
  • program_at32uc3l-uart-isp-1.0.1.cmd (dostarczony skrypt z ASF)
  • Odwróć 3.4.7 (batchisp)

Na początku użyłem .bini .datwyposażony ASF, zainstalowany przy użyciu skryptu. Teraz próbuję załadować aplikację za pomocą polecenia batchisp:

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

Ale zawsze dostaje:

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

Testowałem z oscyloskopem RX i TX z UART, dane idą na płytkę, ale komputer odbiera falę prostokątną 27 kHz (nie może to być dane z UART, ponieważ nie ma bitu stop ani nic, również częstotliwość prawdopodobnie nie jest taka sama dla 115200bps).

Po dalszych badaniach skonfigurowałem Word1i Word2w pliku, at32uc3l-uart-isp_cfg-1.0.1.databy uzyskać te wartości:

  • Słowo 1: 0xE11E0024
  • Word2: 0x494F81AA

Aby użyć numeru PIN PA01jako opcji, aby wprowadzić w ISP.

Ponadto załadowałem źródło DFU do Atmel Studio 6.1 i zauważyłem, że nie używają tej samej konfiguracji portu szeregowego, więc zmieniono na tę samą co moja aplikacja. Dodano także niektóre diody LED przełączające się w głównej części DFU.

Po aktualizacji bootloadera na płycie, diody LED się nie zmieniają, ten sam limit czasu, ta sama fala prostokątna.

Czy coś brakuje?



1
Wysłany jako bilet do Atmel, zobaczy, kto naprawdę może mi pomóc: D
— Alexandre Lavoie

Których pinów używasz (PAxx / PBxx). Nie pamiętam dokładnie, ale aby wejść do bootloadera, powinieneś pociągnąć szpilkę wysoko lub nisko (w zależności od dwóch słów konfiguracji). Czy możesz potwierdzić, że naciskasz przycisk lub podobny przycisk?
— Tom L.

@TomL., Używając PA01 (dodano w pytaniu). Próbowałem zarówno z wysokim / niskim ... takim samym wynikiem. Nawet jeśli ten pin jest używany z JTAG, nie powinien powodować problemów.
— Alexandre Lavoie

A których pinów używasz do UART?
— Tom L.

1
Hm ok, więc nic niezwykłego tutaj. Czy możesz sprawdzić kod trampoliny i czy aplikacja jest poprawnie połączona z adresem początkowym Flash (powinieneś to zobaczyć w pliku .map linkera). Czy możesz opublikować swoje argumenty linkera?
— Tom L.

Odpowiedzi:


1

Być może spróbuj użyć programatora AVR i Arduino IDE, jeśli jest to możliwe. Wiem, że działa dobrze z mikrokontrolerami serii AT.


0

Użycie JTAG bez odpowiedniego kodu trampoliny spowoduje zastąpienie BOOTLOADERA dostarczonego przez ATMEL. Więc po pierwszym programowaniu w JTAG najprawdopodobniej na dobre usunąłeś BOOTLOADER.

Należy także ustawić bezpieczniki, aby bootloader działał, które domyślne ustawienia programisty JTAG zwykle psują się.

Aby to naprawić, musisz ponownie zaprogramować BOOTLOADER (pobrany z nieprogramowanego jeszcze układu) do układu przez JTAG i poprawnie ustawić bezpieczniki.

Dawno przestałem używać JTAG, ponieważ BOOTLOADER + FLIP jest znacznie wygodniejszy i szybszy. Upewnij się, że używasz hexa zamiast bin / elfa, a warunek BOOTLOADER nadal jest spełniony po zakończeniu warunku resetowania.

Oto jak używam FLIP na 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

Skąd avr32-objcopypochodzi z folderu bin AVRStudio, a Batchisppochodzi z FLIP. Musisz tylko zmienić nazwy plików oraz ID chipa AVR i COM, aby pasowały do ​​twojego projektu.

W razie potrzeby możesz także użyć 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

Trampolina musi być włączona w linkerze (właściwości projektu), tak wygląda moja konfiguracja:

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

Nadal używam AVR32 Studio 2.7.0, ponieważ nowsze wersje to gówno dla koni, więc konfiguracja może być inna.

[Edytuj1] dodatkowe informacje

dla UC3L0AVR32_PIN_PA20 pewne RC generic zegar (powinny być 32KHz ale to zależy od układu do układu sporo bez kalibracji z prescalers) z chipem, aż jego celem jest zmieniany na GPIO lub cokolwiek innego, więc ~ zegar 27KHz nie ma nic wspólnego z USART . Przy okazji ten zegar jest zasilany napięciem 3,3 V i generuje nawet, jeśli rdzeń układu 1,98 V jest smażony na dobre ....

Warunek Bootloadera AVR32_PIN_PA11ustawia się na zero przed wydaniem Resetu (chyba że zaimplementujesz własne warunki / polecenia DFU w oprogramowaniu). Jedną z możliwości jest stworzenie RC, który rozproszysz do stanu NISKIEGO, i zresetujesz, zanim się naładuje ... lub użyj bramki lub zworki FLIP / FLOP ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.