Używam Boarduino i 30-rzędowej deski chlebowej do programowania ATtiny. Ładuję niezbyt skomplikowany szkic o nazwie ArduinoISP (domyślnie dołączony teraz do Arduino IDE) i nagle mam działającego programistę. Atmel sprzedaje fajnego programistę za 30 do 40 USD, a istnieje wiele zestawów do robienia tańszych.
Byłem bardzo szczęśliwy, kiedy dostałem działającego programistę i zmusiłem malutkiego mrugnięcia do kilku diod LED. Jednak teraz moje biedne boarduino utknęło na służbie programisty.
O ile wiem, ten programista przytrzymuje przycisk resetowania, a następnie przesyła i odbiera na pinach MOSI i MISO. Myślę, że SCK jest nieużywany lub przynajmniej niepotrzebny. (SCK jest potrzebne zgodnie z arkuszem danych ATtiny, mój programista nie działa bez niego i nie mogę znaleźć miejsca, o którym myślałem, że przeczytałem, że nie jest potrzebne).
Dlaczego potrzebuję programisty sprzętowego, aby po prostu transmitować serial? To znaczy, załóżmy, że jestem skłonny przytrzymać przycisk resetowania palcem zamiast używać IC. Pozostało mi tylko szeregowe wysyłanie i odbieranie, więc potrzebuję tylko trzech przewodów GND, RXD i TXD. Cholera, jeśli mam linię „DTR” lub cokolwiek, możesz nawet przytrzymać przycisk resetowania za pomocą kabla szeregowego.
Dlaczego istnieją wszystkie te rozwiązania sprzętowe, które wymagają także wyszukanego oprogramowania (takiego jak AVRdude, studio AVR itp.)?
Mam na myśli, że mogłem zrozumieć mały kabel USB, który przedstawiał mikrokontroler jako urządzenie pamięci masowej i pozwalał ci przeciągać pliki binarne do programowania (jak ta płyta programistów ARM ). Tylko sprzęt, przy użyciu standardowych sterowników oprogramowania.
Mogłem również zrozumieć rozwiązanie tylko programowe (modulo podpinające przewody z USB do układu, używając czegoś takiego jak układ FTDI, aby uprościć to, co idzie wzdłuż przewodów). Cały fantazyjny protokół programowania byłby obsługiwany przez oprogramowanie na komputerze, a sprzętem byłyby tylko niektóre przewody.
Dlaczego w grę wchodzą zarówno (skomplikowane) oprogramowanie, jak i sprzęt? O ile mi wiadomo, programowanie mikrokontrolerów jest dość łatwe, ale kiedy tylko się w to wdawałem, naprawdę martwiłem się, jak kiedykolwiek kupię układ scalony od mousera lub digikey bez płacenia guru za program bootloadera dla mnie.
Jestem pewien, że jest dobry powód (nie napisałem oprogramowania ani nie zacząłem produkować programatora USB typu przeciągnij i upuść), ale jako nowicjusz nie mam pojęcia, co to jest.
źródło
Odpowiedzi:
Masz rację, programowanie AVR jest dość łatwe. To tylko niestandardowy protokół zaimplementowany na szczycie SPI, działający przy niskim napięciu. Potrzebny jest SCK.
Jednak programowanie starszych PIC (i innych niż programowanie AVR przez ISP) wymaga wysokich napięć i innego niestandardowego protokołu. Wymaga to specjalnego programatora sprzętowego.
Inne urządzenia są bardziej złożone. Większość mikrokontrolerów ARM musi być programowana przez JTAG, tutaj pamięć jest zapisywana bezpośrednio, a procesor otrzymuje polecenie zapisu do pamięci flash. Ponownie każde urządzenie jest inne.
źródło
Przeprowadziłem wiele badań i przygotowuję się do gry z AVR-ami, ale tak naprawdę nigdy ich nie użyłem, więc może to być źle, ale:
Większość tanich programistów nie obsługuje programowania wysokiego napięcia AVR. Jest to potrzebne, jeśli kontroler jest ustawiony tak, aby nie był programowalny przy użyciu bitów bezpieczników lub jeśli w jakiś sposób popełniłeś poważne błędy i musisz przywrócić ustawienia domyślne i tak dalej.
źródło
Większość tanich programistów AVR to tylko synchronizacja interfejsów szeregowych z linią zerowania. Możesz FT232 do bitbang out Serial Peripheral Interface (SPI). FT232 jest przeznaczony do synchronizacji szeregowej asynchronicznej, więc wszystko odbywa się w oprogramowaniu.
Możesz po prostu załadować bootloader, taki jak arduino, który pozwoli ci na przesłanie kodu przez asynchroniczny interfejs szeregowy za pomocą ft232 w trybie normalnym lub dowolny asynchroniczny interfejs szeregowy za pomocą konwerterów poziomu w razie potrzeby. Po prostu nie zapomnij użyć odpowiedniego programu ładującego dla twojej częstotliwości zegara i poprawnie ustawić bajty bezpiecznika.
źródło
Wiele programowalnych urządzeń historycznie wymagało, aby były programowane przy użyciu stosunkowo dokładnie taktowanych sekwencji sygnałów. W wielu przypadkach, gdyby ktoś chciał zaprogramować tylko jeden konkretny typ urządzenia, wymagany sprzęt byłby dość prosty, ale ponieważ różne urządzenia miały różne wymagania, zbudowanie bardziej ogólnego programatora było nieco trudniejsze.
Dzisiaj prawdopodobnie można by zaprogramować ponad 50% programowalnych urządzeń, używając jedynie kabla I / O USB i oprogramowania komputerowego, ale programiści „sprzętowi” nadal mają znaczną przewagę szybkości. Aby komputer zareagował na sygnał odebrany przez urządzenie USB i wysłał odpowiedź, zwykle trwa co najmniej 1-2 milisekundy. Jeśli sekwencja programowania wymaga wielokrotnego zapytania urządzenia, gdy jest ono gotowe do następnego kawałka danych, a następnie wysyłania go, użycie zwykłego kabla we / wy wydłużyłoby dodatkową milisekundę lub dwie do czasu potrzebnego do obsłużenia każdego fragmentu. W zależności od charakteru danego urządzenia, może to wydłużyć całkowity czas wymagany do programowania o rząd wielkości w porównaniu z programatorem, o którym można powiedzieć, czekając, aż urządzenie będzie gotowe, co powinien zrobić, gdy będzie.
Osobiście podoba mi się podejście polegające na tym, że urządzenia wyposażone w pamięć flash są dostarczane fabrycznie z modułem ładującym w pamięci, którego można używać przy minimalnym sprzęcie do programowania. Jeśli urządzenie obsługuje programowanie flashowe pod kontrolą oprogramowania, takie podejście może uprościć produkcję bez dodawania niczego do kosztu krzemu poza bardzo małym marginalnym czasem wymaganym do zainstalowania fabrycznego programu testów urządzenia w module ładującym po wykonaniu wszystkich innych czynności .
źródło