Witam, zachciało mi się wczoraj przeprogramować układ z AVR, ale natknąłem się na problem. Obecnie żaden z komputerów, do których mam dostęp nie posiada LPT.
Polećcie mi proszę jakiś uniwersalny, sprawdzony (bezproblemowy) programator dla AVR oraz ARM (czy programatory dla ARM są uniwersalne? tzn. obsługują ARM 7 i ARM 9?) pod złącze USB, który będzie działał w Windows 7 x64 oraz pod Linuxem.
Procesory ARM robione są przez wiele różnych firm. Nie istnieje coś takiego jak uniwersalny programator. Musisz zdecydować się na jakąś konkretną rodzinę. Niektóre procesory mają wbudowany bootloader pozwalający zaprogramować układ przez RS232 lub USB. Nie wymagają więc żadnego programatora.
Od programatora AVRów dla Windows wypadałoby wymagać aby pracował m.in. z AVR Studio - czyli odpadają dziwaczne wynalazki "programowego" udawania USB, które chodzą tylko ze zmodyfikowanym avrdude (a'la wspomniany wcześniej w tym wątku usbasp). Zatem polecam coś emulującego oryginalny atmelowy programator (gadającego protokołem STK500v2), z zintegrowanym sprzętowym konwerterem FTDI (omijaj programatory mające w opisie pracę w klasie USB HID zamiast CDC) no i koniecznie buforem robiącym konwersję napięć.
Ja mam taki i daje radę:
formatting link
Praktycznie wszystko, co pójdzie z AVR Studio, uruchomisz też pod Linuxem (sterowniki usb_serial i ftdi_sio są wbudowane w kernel, do programowania można użyć np. avrdude).
Z drugiej strony jednak, przydałaby się też możliwość debugowania AVRów przez JTAG (też z użyciem AVR Studio) - tutaj musisz szukać klona atmelowej sondy ATJTAGICE (oryginalna jest koszmarnie droga). Coś w tym stylu:
formatting link
Oczywiście są też programatory typu 2-w-1 ale jeszcze droższe.
Do programowania i debugowania ARMów wystarcza natomiast cokolwiek obsługiwanego przez openocd. Dobrze sprawdzają się programatory oparte o układ FT2232 lub jeszcze szybszy FT2232H. Pierwszy z brzegu przykład:
Praktycznie wszystkie mikrokontrolery z jądrem ARM posiadają wyprowadzony jak najbardziej standardowy interfejs JTAG. I do niego podłącza się właśnie "uniwersalny programator". Służy do programowania i debugowania. Nawet gdy procek nie ma własnej pamięci Flash, można zagadać z dołączoną do niego na zewnątrz pamięcią Flash (umie to m.in. openocd). Na prawdę nie trzeba być zdanym na widzimisię bootloadera szeregowego (co producent to innego).
Jeden... ale rejestry od programowania Flash, to już jak producent chce... Pocieszenie takie, że to już kwestia software do programatora, a nie samego programatora.
Interfejs JTAG jest standardowy. Jednak w praktyce do każdej rodziny procesorów potrzebne jest inny software do programowania i zwykle inny programator.
Standard jest jeden, natomiast w kwestii złącza są dwa obozy: jeden preferuje oldskulowe wielgachne złącze 2x10 pinów (zaproponowane lata temu AFAIR przez samą firmę ARM), a drugi skłania się ku minimalizacji do wersji 10-pinowej (to samo tyle że mniej mas). Można spotkać kable programujące z obiema wersjami wtyczek a konkretny wybór zależy od tego, ile masz miejsca na płytce (czasem to trzeba i pójść w jeszcze mniejsze złącza plus przejściówka).
Jeżeli natomiast chodzi o warstwę komunikacji z jądrem procka - standard jest dawno ustalony i niezmienny. Tak samo się robi dostęp do rejestrów i pamięci RAM w każdym ARMie (różne mogą być tylko adresy tego obszaru RAM), podobnie jak i debugowanie (przy czym w niektórych prockach jest ograniczenie np. na liczbę pułapek sprzętowych).
Tak jak w tym wątku ktoś już trafnie zauważył - sprzęt do debugowania/programowania jest wspólny dla wszystkich ARMów, a ewentualne różnice musi obsłużyć soft na komputerze.
Inny software tak (albo po prostu nieco inny algorytm działania programów pokroju openocd, obsługujących wiele różnych procesorów), ale programator jest dokładnie identyczny. Tym samym sprzętem da się zaprogramować atmelowego AT91SAM7S256, co i dużego AT91RM9200, jak i procki rodziny LPC od NXP czy też od ST.
Podaj przykład mikrokontrolera z jądrem ARM, który wymaga niestandardowego kabla programującego (np. który nie zadziała ze starym dobrym Wiggler'em na LPT).
Dobrze wiedzieć o takich nowych "wynalazkach". Mimo to jakoś nie widzę problemu, aby stary dobry Wiggler (po drobnej modyfikacji rezystorem dodającym dwukierunkowość jednej z linii) nie umiał zagadać odpowiednim protokołem - przecież to kwestia oprogramowania na pececie.
OK, no to odpowiedź uszczegółowiona: kup pierwszy z brzegu programator JTAG na USB, który obsługuje też programowanie z interfejsem SWD. Co prawda w openocd jeszcze nad tym pracują, ale już jest w drodze. :) Wtedy dopiero będzie można powiedzieć, jak sensownie zrobić kabelek z FT2232 aby to śmigało - na razie pozostają domysły lub zakup drogich gotowców "łykających" SWD. Wszystko oczywiście zależy od tego, ile wątkotwórca ma do wydania.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.