Witam,
Chciałbym napisać sobie własny prościutki mały bootloader, który zapisywałby tylko pamięć Flash (bez eeprom). Oparty o wczytywanie danych przez RS232. Oczywiście chciałbym to napisać w C. Program miałby działać ze stałą prędkością np 9600.
ale na razie mam teoretyczne pytanie czy dobrze rozumuję jak do tego podejść i czy już na tym etapie nie popełniam jakichś kardynalnych błędów, które mi to utrudnią bądź uniemożliwią.
1. Wiem, że program bootloadera trzeba skompilować do odpowiedniego obszaru pamięci (można tego dokonać zdaje się za pomocą __attribute)
2. program posiada funkcje odczytu i zapisu z/do RS232 ale nie działające na przerwaniach tylko oczekujące na znak.
3. Po restarcie sprawdzam czy jakiś tam pin ma wartość 0 co ma oznaczać, że powinien zadziałać bootloader (oczywiście z uwzględnieniem drgańs tyków)
4. jeśli nie to odpalam program od adresu 0 (czyli normalną zawartość Flash) a jeśli tak to:
5. wczytuję z RS232 zawartość bufora strony do zapisania w pamięci Flash, sprawdzam czy to przypadkiem nie ostatnia już strona, dokonuję jego zapisu SPM, wysyłam ew potwierdzenie do RS232 że gotowe i powtarzam ten cykl aż do otrzymania ostatniej strony.
6. po wszystkim robię skok - jmp 0
Oczywiście pominąłem tu, że można byłoby jeszcze rozbudować to o jakąś kontrolę prawidłowości przesyłanych danych. Pomijam też tutaj sprawę oprogramowania drugiej strony np na PC - bo z tym to już sobie najspokojniej w świecie poradzę.
Czy taki bootloader (narazie teoretyczny) będzie w stanie bez problemu zadziałać wg was ? czy to się uda? .....
czy też o czymś w tym ogólnym algorytmie nie pomyślałem ?
.... na koniec dodam, że bardzo zależy mi na zrobieniu takiego bootloadera dla małego procka jak ATtiny2313
może jakieś sugestie? podpowiedzi? albo ciekawe źródła informacji w necie na które mi nie udało się trafić? - proszę
Chciałbym napisać sobie własny prościutki mały bootloader, który zapisywałby tylko pamięć Flash (bez eeprom). Oparty o wczytywanie danych przez RS232. Oczywiście chciałbym to napisać w C. Program miałby działać ze stałą prędkością np 9600.
ale na razie mam teoretyczne pytanie czy dobrze rozumuję jak do tego podejść i czy już na tym etapie nie popełniam jakichś kardynalnych błędów, które mi to utrudnią bądź uniemożliwią.
1. Wiem, że program bootloadera trzeba skompilować do odpowiedniego obszaru pamięci (można tego dokonać zdaje się za pomocą __attribute)
2. program posiada funkcje odczytu i zapisu z/do RS232 ale nie działające na przerwaniach tylko oczekujące na znak.
3. Po restarcie sprawdzam czy jakiś tam pin ma wartość 0 co ma oznaczać, że powinien zadziałać bootloader (oczywiście z uwzględnieniem drgańs tyków)
4. jeśli nie to odpalam program od adresu 0 (czyli normalną zawartość Flash) a jeśli tak to:
5. wczytuję z RS232 zawartość bufora strony do zapisania w pamięci Flash, sprawdzam czy to przypadkiem nie ostatnia już strona, dokonuję jego zapisu SPM, wysyłam ew potwierdzenie do RS232 że gotowe i powtarzam ten cykl aż do otrzymania ostatniej strony.
6. po wszystkim robię skok - jmp 0
Oczywiście pominąłem tu, że można byłoby jeszcze rozbudować to o jakąś kontrolę prawidłowości przesyłanych danych. Pomijam też tutaj sprawę oprogramowania drugiej strony np na PC - bo z tym to już sobie najspokojniej w świecie poradzę.
Czy taki bootloader (narazie teoretyczny) będzie w stanie bez problemu zadziałać wg was ? czy to się uda? .....
czy też o czymś w tym ogólnym algorytmie nie pomyślałem ?
.... na koniec dodam, że bardzo zależy mi na zrobieniu takiego bootloadera dla małego procka jak ATtiny2313
może jakieś sugestie? podpowiedzi? albo ciekawe źródła informacji w necie na które mi nie udało się trafić? - proszę
