Programowanie ISP mikrokontrolerów ADuC7000 i STR73x
Prezentowane sposoby programowania mikrokontrolerów z rdzeniem ARM7TDMI wybrano jako najtańsze, dość wygodne i wymagające niewielkich inwestycji.
Prawdą jest, że zdecydowanie większe możliwości oferują interfejsy JTAG z odpowiednim oprogramowaniem, ale ich poważną wadą są wysokie ceny (mniej więcej od 1000 zł netto), co dyskwalifikuje je w rozwiązaniach nie tylko amatorskich lecz także stosowanych przez niewielkie firmy. Z kolei możliwość samodzielnego wykonania interfejsu JTAG „udrożnił” niedawno Atmel, publikując w dokumentacji swoich mikrokontrolerów jego specyfikację. Wcześniej szczegółowe informacje techniczne były skrzętnie utajniane przez producentów mikrokontrolerów, czego ślady nadal widać w User Manualach firm: Philips, STMicroelectronics, OKI, Analog Devices czy Texas Instruments.
Rodzina ADuC7000
Mikrokontrolery z rodziny ADuC7000 są produkowane przez Analog Devices. Jak łatwo się domyśleć, są to „analogowe” ARM-y zbliżone koncepcyjnie do produkowanych od lat microconverterów ADuC8xx (z rdzeniem 8052). Pamięć programu Flash tych mikrokontrolerów można oczywiście programować przez interfejs JTAG, ale z podanych na wstępie przyczyn zajmiemy się alternatywnymi sposobami, które producent zaimplementował fabrycznie we wszystkich mikrokontrolerach ADuC700.
Pierwszą możliwością jest programowanie 62 kB pamięci Flash za pomocą bootloadera (oraz procedur inicjalizacyjnych) ulokowanego w „górnych” 2 kB pamięci Flash. Dane wpisywane do pamięci mogą być dostarczane poprzez port szeregowy UART (RS232) lub interfejs I2C. Aktywny kanał transmisji danych zależy od wersji mikrokontrolera i jest oznaczany w nazwie sufiksem „I”:
- ADuC7026BSTZ62 – mikrokontroler ADuC7062 z bootloaderem obsługującym UART,
- ADuC7026BSTZ62 – mikrokontroler ADuC7062 z bootloaderem obsługującym I2C.
Tak więc wybierając interfejs służący do modyfikowania pamięci Flash należy pamiętać o zakupie odpowiednich wersji mikrokontrolerów, co może być o tyle kłopotliwe, że niektóre z nich występują tylko w wersji z obsługą przez bootloader interfejsu UART (np. ADuC7022, ADuC7024, ADuC7027) lub I2C (np. ADuC7019).
Niezależnie od wersji mikrokontrolera, sposób uaktywniania bootloadera jest identyczny: należy dołączyć wyprowadzenie portu BM (zazwyczaj multipleksowane z P0.0) do masy z włączonym szeregowo rezystorem 1 k i wyzerować mikrokontroler.
Na rys. 1 pokazano schemat elektryczny podstawowej konfiguracji mikrokontrolera z rezystorem R2 i przyciskami S1 i S2 umożliwiającymi uaktywnienie bootloadera. Na rys. 2 pokazano sekwencję stanów logicznych na wejściach RST i BM przełączającą mikrokontroler w tryb bootloadera. Czas trwania poszczególnych etapów przełączania przy ręcznym inicjowaniu nie są krytyczne, istotne jest wyłącznie zachowanie ich kolejności.
Rys. 1. Schemat elektryczny bazowej konfiguracji mikrokontrolera ADuC7xxx
Rys. 2. Sposób zainicjowania bootloadera
Transfer danych z komputera PC do pamięci Flash mikrokontrolera ułatwia bezpłatny program armwsd, który udostępnia producent na swojej stronie internetowej. Wygląd okna uruchomionego programu oraz pomocniczego okna konfiguracyjnego (w którym ustala się m.in. czynności wykonywane przez program) pokazano na rys. 3. Obsługa programu nie jest trudna i to pomimo niestandardowej (jak na Windows) obsługi.
Rys. 3. Przykładowa konfiguracja programu armwsd
Dokładnie w taki sam sposób, jak opisano powyżej, inicjuje się bootloader obsługujący interfejs I2C. Do ładowania programu do pamięci Flash jest wykorzystywany interfejs I2C0, którego linie I/O są dołączone do tych samych linii mikrokontrolera, co linie UART-u (P1.0/P1.1). Po zainicjowaniu bootloadera interfejs jest konfigurowany do pracy w trybie Slave. Przesłanie danych do zaprogramowania pamięci odbywa się za pomocą dość złożonego protokołu, który został opisany w nocie aplikacyjnej AN806 „I2C Download Protocol for ADuC70xxBCPZxxI Models”. Aby zminimalizować kłopoty z obsługą tego protokołu, Analog Devices (przy współpracy Andreasa Rebera) opracował interfejs sprzętowy z portem USB (od strony PC) i I2C (od strony programowanego mikrokontrolera). Interfejs ten współpracuje z bezpłatnym programem sterującym o nazwie i2cwsd, którego okno pokazano na rys. 4.
Rys. 4. Przykład konfiguracji programu i2cwsd
Schemat elektryczny interfejsu umożliwiającego programowanie mikrokontrolerów ADuC7000 poprzez interfejs I2C pokazano na rys. 5.
Nie lekceważcie oznaczeń! Mikrokontrolery z rodziny ADuC7000 z sufiksem „I” (ADuC70xxBCPZxxI) są przystosowane do programowania ISP wyłącznie przez interfejs I2C. Należy pamiętać o tym szczególe podczas zamawiania tych układów, bowiem wersje bez sufiksu są programowane via RS232. |
Rys. 5. Schemat interfejsu umożliwiającego programowanie mikrokontrolerów ADuC7000 poprzez I2C