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 .bin
i .dat
wyposaż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 Word1
i Word2
w pliku, at32uc3l-uart-isp_cfg-1.0.1.dat
aby uzyskać te wartości:
- Słowo 1: 0xE11E0024
- Word2: 0x494F81AA
Aby użyć numeru PIN PA01
jako 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?
źródło
Odpowiedzi:
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.
źródło
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:
Skąd
avr32-objcopy
pochodzi z folderu bin AVRStudio, aBatchisp
pochodzi 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:
Trampolina musi być włączona w linkerze (właściwości projektu), tak wygląda moja konfiguracja:
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 UC3L0
AVR32_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_PA11
ustawia 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 ...źródło