Arduino jako ISP bez komputera

12

Czy ktoś widział lub wiedział o metodzie wstępnego ładowania (przy użyciu komputera lub innego) oprogramowania układowego jako danych na jednym arduino skonfigurowanym do działania jako isp, a następnie za pomocą tego arduino podłącz interfejs isp do innego i załaduj oprogramowanie układowe.

Żeby było jasne - szukam sposobu, aby umożliwić przesyłanie szkiców arduino bez bezpośredniego połączenia z pełnym komputerem.

Idealne kroki to:

  1. Napisz nowy szkic / oprogramowanie układowe
  2. Skompiluj oprogramowanie układowe
  3. Napisz kopię oprogramowania na Arduino A jako dane (Arduino A jest skonfigurowany do pracy jako ISP)
  4. Odłącz Arduino A od komputera
  5. W oddzielnej lokalizacji podłącz Arduino A do Arduino B za pomocą nagłówków ISP
  6. Za pomocą jakiejś metody (np. Przycisku) uruchom Arduino A, aby załadować wstępnie załadowane oprogramowanie na Arduino B.

Zakładam, że teoretycznie może to działać, ponieważ przesyłanie oprogramowania układowego jest po prostu wymianą bajtów w interfejsie SPI, ale nie jestem pewien co do rzeczywistości.

Rozważam scenariusz, w którym jeśli zainstalowałbym arduino (na stałe) w miejscu oddalonym od mojego komputera (nie mam laptopa ani nie chcę go mieć) przeprogramowanie byłoby kłopotliwe to.

Inną metodą, którą rozważałem, jest użycie ATMEGA w pakiecie DIL, który mogę następnie wyjąć z płyty i zaprogramować na komputerze i wrócić do płyty - jednak wolałbym nie ryzykować zginania pinów i kłopotów z koniecznością usunięcia chip za każdym razem, gdy chcę przeprogramować.

m3z
źródło
W wyniku tego będziesz mógł programować inne Arduino tylko z dokładnym szkicem / oprogramowaniem wbudowanym do programatora (Arduino A). Przydatne byłoby zatem wykonywanie kopii tylko na linii produkcyjnej, prawda? Jeśli musisz coś zmienić w szkicu, musisz wrócić do komputera, aby zmodyfikować i załadować go ponownie. Czy dobrze to zrozumiałem?
Ricardo
1
Czy nie jest możliwe, aby „obraz flash” został skopiowany do celu na innym nośniku (takim jak karta SD)?
jfpoilpret
Tak. Przypuszczam, że byłoby to również dobre dla linii produkcyjnej. Moja sytuacja jest taka, że ​​mam arduino przyklejone do obudowy, która jest trudna do przenoszenia i znajduje się w innym pomieszczeniu niż mój komputer (również trudny do przenoszenia). Z przyjemnością załadowałem szkic do Arduino A za każdym razem, gdy chciałem go zmienić.
m3z
2
Zostało to zrobione w ograniczonym celu programowania programu ładującego - github.com/WestfW/OptiLoader - ale powinno działać dla każdej ładunku mniejszej niż dostępna pamięć flash minus rozmiar narzędzia. W przypadku większego oprogramowania sprzętowego zewnętrzne urządzenie pamięci masowej (lub po prostu Arduino Mega?) Powinno działać.
Chris Stratton
@ChrisStratton, który wygląda idealnie dla mnie do przystosowania. Dzięki
m3z

Odpowiedzi:

5

Myślę, że µProg - mały, szybki, przenośny programator AVR z SD robi to, co chcesz. Możesz przechowywać wiele plików na karcie SD (hex, eep itp.) I wybrać z menu urządzenia, który chcesz zapisać na docelowym MCU bez potrzeby korzystania z komputera.
Najlepsze jest to, że jest dostępny za darmo (PCB, schematy, oprogramowanie układowe itp.).

Jedyny w swoim rodzaju, przenośny programator AVR! Pomaga wszędzie tam, gdzie potrzebujesz zaktualizować oprogramowanie układowe urządzenia, gdzie urządzenie docelowe znajduje się w trudno dostępnym miejscu i nie możesz (lub nie chcesz) zabrać ze sobą laptopa z wiązką przewodów. Niezwykle łatwy w użyciu, super tani w produkcji, super mały, super szybki, wykorzystuje karty SD…

Funkcje:

  • super mały - wymiary 44 x 39 x 5,5 mm
  • super szybka - zapis do 12,5kB / s, odczyt do 14,5kB / s
  • wykorzystuje tani nośnik pamięci - małe karty MICRO SD
  • obsługuje systemy plików FAT16 i FAT32
  • potrafi czytać, pisać, weryfikować pamięć flash i eeprom
  • umie czytać, pisać, weryfikować bezpieczniki i blokady
  • zapis i odczyt do plików BIN, HEX i TXT
  • potrafi ustawić domyślne wartości bezpieczników, wymazać pamięć
  • tani, łatwy do uzyskania wyświetlacz graficzny LPH7779
  • wyświetla śmieszne animacje po każdej operacji
  • standardowy nagłówek programowania - Atmel 6-PIN ISP
  • ma funkcję automatycznej aktualizacji własnego oprogramowania (z SD)
  • bardzo prosty w obsłudze, nawigacja 4 przyciskami
  • menu ustawień użytkownika
  • automatyczny wybór prędkości programowania (do 4 MHz)
  • Działa przy 3 V, programuje układy zasilane z 3 V do 5 V.

Lista obsługiwanych chipów

wprowadź opis zdjęcia tutaj

alexan_e
źródło
Wygląda dobrze. Zbadam w weekend.
m3z
Nie wiem, jak tego dnia przegapiłem to pytanie. Rozmawiałem tylko z przyjacielem o tym, jak sami stworzyliśmy dokładnie ten projekt. A potem widzę twoją odpowiedź.
Madivad
4

Nie mam bezpośredniego rozwiązania tego, czego chcesz, ale tak, można to zrobić. Możesz zhakować oprogramowanie rozruchowe, aby odczytało kod flash oprogramowania i przesłało je przez ISP.

Chociaż oczywiście nie możesz załadować 32k oprogramowania układowego do docelowego AVR, jeśli oba arduinos mają tylko 32k całkowitego flasha w swoich MCU, musisz mieć flashowanie więcej flasha niż cel, jeśli chcesz to zrobić (1284p lub 2560 Mega będzie wystarczająco daleko, albo 328 / 32u4 będzie gotowy na flashowanie 168 lub attyki). Jedynym wyjątkiem byłby flashowanie oprogramowania układowego znacznie mniejszego niż całkowita pamięć (jak w przypadku szkicu błyskawicznego).

W końcu nie będzie to łatwe, jest to w 100% czysty kod AVR, ale możesz to zrobić. Spójrz na:

Sposób, w jaki zaimplementowałbym to, aby wszystko dopasować do bootloadera urządzenia flasher, więc odczytuje oprogramowanie układowe (wszystko od 0x00 do adresu początkowego bootloadera) i flashuje je przez ISP poprzez połączenie AVRISP z Optiboot.

W każdym razie, to ciekawy projekt dla warsztatów na temat programów ładujących i AVR, które mogę zasugerować w mojej lokalnej hackerspace! ;-)

HTH

zmo
źródło
Dzięki, kod źródłowy AVRISP nie wygląda na tak skomplikowany, jak się spodziewałem.
Przyjrzę się
Gdzie jest twoja lokalna hackerspace? :)
Madivad
to we Francji Le Loop
zmo
żadnych problemów, właśnie po to jest głosowanie ;-)
zmo