Bootloader dla ATMEGA8

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
atelszewski
Użytkownik
Posty: 143
Rejestracja: 12 sie 2005, 9:36
Lokalizacja: Banie

Post autor: atelszewski » 26 gru 2009, 23:58

Witam,
czy piny przez które wgrywa się bootloader mogą później służyć jako pełnowartościowe we/wy?
Mogą, tylko ograniczeniem ich funkcjonalności mogą być zewnętrzne elementy dopasowujące, w przypadku rozpatrywanego bootloadera USB będą to rezystory "dopasowujące" interfejs. Jeśli okaże się, że stanowią one problem, można pokusić się o umieszczenie ich na osobnej płytce.

Generalnie chodzi o to, aby elektronika podłączona do pinów bootloadera nie "przeszkadzała" bootloaderowi i na odwrót, aby elementy bootloadera nie przeszkadzały elektronice. Mam nadzieje, że wyraziłem się zrozumiale;)
a przy okazji, czy można jakoś wyposażyć bootloader w unikalny system który będzie ropoznawał hexa? czyli widzę to tak że do jednego procka taki hex pasuje a do drugiego już nie. coś jak zabezpieczenie programów.
Można zrobić coś takiego, ale nie jest to raczej proste, tym bardziej, że procek dostaje hexa porcjami, a nie w całości. Można by próbować umieścić jakąś sygnaturę np. na początku hexa, jeśli nie zgadzałby się z tym co ma bootloader, to by np. zrywał połączenie. Tylko teoretyzuję, bo optymalna implementacja takiego cacka wymaga odrobiny wiedzy.

Awatar użytkownika
matrix
Użytkownik
Posty: 1805
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 27 gru 2009, 10:06

atelszewski pisze: Można by próbować umieścić jakąś sygnaturę np. na początku hexa, jeśli nie zgadzałby się z tym co ma bootloader, to by np. zrywał połączenie. Tylko teoretyzuję, bo optymalna implementacja takiego cacka wymaga odrobiny wiedzy.
to było takie pytanie teoretyczne dla mnie bo ciężko mi z poradzeniem sobie z samym bootloaderem, nie mówiąc już o takim cacku. natomiast wymyśliłem coś innego aby jeden hex nie pasował do wielu procków, ale to już dużo rozpisywania się. wszyscy są tu niesamowicie pomocni. cieszę się że należę do tego portalu. podziękował ślicznie.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 27 gru 2009, 10:22

matrix pisze:sorki ale nie bardzo kojarzę. gdzie to się wywołuje? aż tak dobrze nie znam WinAVR
zauważ że przy programowaniu ([WinAVR] Program) na początku logu masz:
Programming Flash memory:
avrdude -p atmega8 -P lpt1 -c stk200 -U flash:w:Bootloader.hex
czyli avrdude wykonywane jest z dodatkowymi parametrami. Musisz tam dodać parametr -i jeżeli chcesz korzystać z tej opcji. Powinno się to dać zrobić w pliku makefile (ja nigdy tego nie robiłem więc możesz przetestować ;) ). Jest tam taka linia:

Kod: Zaznacz cały

AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
można zatem spróbować zmienić ją na linie:

Kod: Zaznacz cały

AVRDUDE_WRITE_FLASH = -i 10 -U flash:w:$(TARGET).hex
co powinno spowodować opóźnienie przykładowo o 10ms.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 07 paź 2011, 17:01

Witam!
Mam pytanie odnoście AVR109. Mianowicie uruchomiłem ten bootloader, natomiast mam taki problem ze nie wiem jak go wywołać we własnym programie.

PonyProg- iem wgrałem bootloader do ATmega162 i przy jego pomocy z poziomu Programers Notepada wgrałem program. Wgrany program działa- więc sam bootloader jest ok. Natomiast to czego nie potrafie to we wgrywanym programie umieścić instrukcji która pozwoli na ponowne wgranie innego programu bootloaderem.

Korzystam tutaj z artykułu z EDW 10/2008 i płytki AVR-3505. Podpowiecie jak wywołać bootloadera poprzez np. ściągnięcie dowolnego pinu??

Dziękuję za pomoc
Janusz

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 07 paź 2011, 19:19

Nie lepiej zresetować procesor ? Włącz watchdog i wskocz w pętle nieskończoną ,wtedy watchdog zresetuje procka i ruszy ci z adresu bootloadera.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 07 paź 2011, 21:09

...ciekawy pomysł, natomiast i tak docelowo potrzebuje włączać bootowanie zwieraniem pinu do masy. Chodzi o to dla klienta tak będzie najwygodniej.

Dziękuję.

Awatar użytkownika
kayron
Użytkownik
Posty: 2090
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 08 paź 2011, 7:41

A bo najpierw należało by sobie uzmysłowić jak przeciętny bootloader działa. Przeważnie, jest to zrobione tak że po restarcie, sprzętowym i/lub programowym procesor inicjuje najważniejsze rzeczy w tym USART. Potem skacze do programu bootloadera i odczekuje jakiś czas np. 3sek na nadejście transmisji z USARTu, jeżeli ta nie nadchodzi to uruchamia sie program główny, jeżeli nadchodzi to program bootloadera decyduje czy to przypadkowa komunikacja, czy polecenie przeprogramowania.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 10 paź 2011, 8:27

Witam!
Problem rozwiązany- przyczyną był niezaprogramowany bit BOOTRST i program zaczynał się wykonywać od adresu 0x0000 nie zaś od adresu bootloadera ( w moim przypadku to adres 0x03800).

Dziękuję i pozdrawiam.
Janusz.

ODPOWIEDZ