 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.35 Kraj: Lovrenc na P.
|
Objavljeno: Tor Mar 11, 2008 11:44 am Naslov sporočila: Daljinsko nalaganje novega firmwara na uC |
|
|
Pozdrav!
Je kdo že delal kaj podobnega? Se pravi imam nekje neki mikrokrmilnik, ki bi ga rad preprogramiral, vendar ne na klasičen način preko programatorja ali kakšnega serijskega kabla. Stvar bi bila v tem, da bi novi firmware poslal po nekem vodilu mikrokontrolerju, ki bi ga ta nekam shranil in se nato bootal iz njega.
Zanimajo me predvsem naprave, ki to imajo, ker trenutno ne poznam nobene takšne. To seveda mislim na vgrajene sisteme.
Sam imam naštudiran koncept kako bom to implementiral, in sicer z dvema mikrokontrolerjema in zunanjim flashom. Sprašujem pa zato, da ne bi slučajno izumljal tople vode. |
|
Nazaj na vrh |
|
 |
Davorin Član

Pridružen-a: Pon 16 Okt 2006 16:28 Prispevkov: 129 Aktiv.: 0.57
|
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.35 Kraj: Lovrenc na P.
|
Objavljeno: Tor Mar 11, 2008 1:10 pm Naslov sporočila: |
|
|
To že vem. Jaz bi programiral preko brezžične povezave, torej ne bom imel možnosti fizičnega dostopa z laptopom do kontrolerja.
Zanima me samo, če se lahko takšna stvar naredi s samo enim mikrokontrolerjem?
LPC ima npr. možnost IAP, kjer lahko pišeš v flash med delovanjem, samo ima premalo ram-a, da bi lahko prepisal celotnem firmware.
Naštudiran imam ISP protokol za LPC-je in na tem bom gradil. Za ta podvig potrebujem dodaten uC ali pač?
Uporabil bom LPC arm7, ta pa nima možnosti bootanja preko spi, paralel itd. kot to omogočajo nekateri uC. |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Tor Mar 11, 2008 1:31 pm Naslov sporočila: |
|
|
Išči pod "bootloader".
Pač narediš firmware, ki lovi podatke iz te tvoje brezične naprave in shrani v flash.
Dovlj je en kontroler. _________________ LP, Mitja
Nazadnje urejal/a dragoon Tor Mar 11, 2008 1:33 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.65 Kraj: Zagorje ob Savi
|
Objavljeno: Tor Mar 11, 2008 1:32 pm Naslov sporočila: |
|
|
Kaj pa SPI flash + napišeš svoj bootloader, ki skopira kodo v on-chip flash ali ram?
To bi se lahko naredilo z enim samim kontrolerjem, možnosti kako, je kar nekaj.
V bistvu sploh ne bi rabil zunanjega flasha, če imaš dovolj prostora v flashu oz. ramu ... v vsakem primeru ostane problem, kako procesor resetirati, ker direkten 'skok' iz stare v novo kodo ni preveč pameten ...
Najbolj pametno bi bilo kodo razdeliti na dva dela -- neka osnova v flashu in funkcije, za katere pričakuješ, da jih boš popravljal v ramu. Potem samo ob programiranju novega flasha zaključiš izvajanje trenutnih funkcij, se vrneš v neko funkcijo v flashu, ki zna brati iz kjerkoli boš že pošiljal nov firmware in pisati v ram, napišeš nove funkcije v ram, popraviš pointerje na funkcije in poženeš ... lahko imaš te iste funkcije za 'backup' še v flashu.
LP! |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.45 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Mar 11, 2008 1:33 pm Naslov sporočila: |
|
|
Na začetku programa daš bootloader. Ki zna preko brezžične povezave pisati tvoj program v nadaljevanju. Ko se update-a program zapisuje neposredno čez že ovstoječ progam. Če crkne nadgradnja, program ne dela, še vedno pa dela bootloader. |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.35 Kraj: Lovrenc na P.
|
Objavljeno: Tor Mar 11, 2008 1:36 pm Naslov sporočila: |
|
|
chaos je napisal/a: |
Kaj pa SPI flash + napišeš svoj bootloader, ki skopira kodo v on-chip flash ali ram?
To bi se lahko naredilo z enim samim kontrolerjem, možnosti kako, je kar nekaj.
V bistvu sploh ne bi rabil zunanjega flasha, če imaš dovolj prostora v flashu oz. ramu ... v vsakem primeru ostane problem, kako procesor resetirati, ker direkten 'skok' iz stare v novo kodo ni preveč pameten ...
Najbolj pametno bi bilo kodo razdeliti na dva dela -- neka osnova v flashu in funkcije, za katere pričakuješ, da jih boš popravljal v ramu. Potem samo ob programiranju novega flasha zaključiš izvajanje trenutnih funkcij, se vrneš v neko funkcijo v flashu, ki zna brati iz kjerkoli boš že pošiljal nov firmware in pisati v ram, napišeš nove funkcije v ram, popraviš pointerje na funkcije in poženeš ... lahko imaš te iste funkcije za 'backup' še v flashu.
LP! |
Hm, da bi pisal svoj bootloader? Kaj pa vem, če bi se spuščal tako daleč. Seveda bom imel en osnovni firmware, ki bo shranjen na flashu in bo imel nalogo samo sprejeti novi firmware in ga naložiti. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.54
|
Objavljeno: Tor Mar 11, 2008 2:51 pm Naslov sporočila: |
|
|
Saj to je "bootloader", le pognati se mora na zacetku in potem prepustiti kontrolo glavnemu programu (torej skoci na izvajanje programa, ce ni nobene nadgradnje). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.35 Kraj: Lovrenc na P.
|
Objavljeno: Tor Mar 11, 2008 3:07 pm Naslov sporočila: |
|
|
Vse skupaj je ok, samo še vedno ostane problem resetiranja samega sebe. Dodatni zunanji hardware mi v vsakem primeru ne uide (zraven SPI flash-a). Verjetno bom uporabil kar dva uC. Glavni bo eden iz družine LPC, drugi pa en majhen PIC, ki bo flashal prvega. PIC bo imel tudi nalogo kontrole LPC-ja, če npr. nov firmware ne dela bo ga ponovno flashal z nekim osnovnim firmwareom.
Bolj preproste rešitve ne vidim. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.54
|
Objavljeno: Tor Mar 11, 2008 3:17 pm Naslov sporočila: |
|
|
MarkoM je napisal/a: |
Vse skupaj je ok, samo še vedno ostane problem resetiranja samega sebe. Dodatni zunanji hardware mi v vsakem primeru ne uide (zraven SPI flash-a). Verjetno bom uporabil kar dva uC. Glavni bo eden iz družine LPC, drugi pa en majhen PIC, ki bo flashal prvega. PIC bo imel tudi nalogo kontrole LPC-ja, če npr. nov firmware ne dela bo ga ponovno flashal z nekim osnovnim firmwareom.
Bolj preproste rešitve ne vidim. |
Ce je to bolj preprosto kot skok na naslov, kjer se zacne aplikacija ...
Kje pise, da se mora MCU povsem resetirati; ali PC tudi resetiras z gumbom vsakic, ko zelis pognati drug program ? Dokler je program napisan pravilno, ni nobene potrebe po resetu ... bos imel vsaj spodbudo za pravilno programiranje. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.35 Kraj: Lovrenc na P.
|
Objavljeno: Tor Mar 11, 2008 3:28 pm Naslov sporočila: |
|
|
Sokrat je napisal/a: |
Dokler je program napisan pravilno, ni nobene potrebe po resetu ... bos imel vsaj spodbudo za pravilno programiranje. |
Tukaj je prvi problem. Stvar bo za testne namene in tam ni pričakovati, da bo vsak upload uspešen. Če nekaj zaj... se vsuje brezžična komunikacija in takrat je konec pravljice. |
|
Nazaj na vrh |
|
 |
Proteus Član



Pridružen-a: Sre 15 Jun 2005 10:03 Prispevkov: 1943 Aktiv.: 8.19
|
Objavljeno: Tor Mar 11, 2008 4:02 pm Naslov sporočila: |
|
|
Sam imam zadevo narejeno na naslednji način:
Flash imam razdeljen na tri segmente:
1. prostor za bootloader
2. prostor za aplikacijo 1
3. prostor za aplikacijo 2
Preko bootloaderja (ki sem ga sam napisal) poteka start aplikacije in vsa komunikacija za prenos novega firmware.
CPU se vedno starta v bootloader in na začetku preveri, katera aplikacija je veljavna (preko CRC in kazalca, ki mu pove, kaj je bilo nazadnje naloženo (aplikacija 1 ali 2 ).
Če nalagam nov SW, potem ga nalagam na mesto neaktivne aplikacije. Pravilnost prenosa podatkov preverjam sproti med prenosom (zaradi morebitne ponovitve prenosa podatkov) in na koncu za cel SW (pomembno, da CPU ve, da je SW veljaven).
Če je vse O.K. potem vpišem na ustrezno mesto še CRC zadnje aplikacije in kazalec na novo aplikacijo.
Sledi reset CPU, ki sam ugotovi na katero aplikacijo mora skočit (preveri kazalec in CRC).
Komunikacijo imam standardizirano in se deloma vedno odvija preko bootloaderja, kar pomeni, da le ta loči ali so podatki aplikativni (namenjeni aplikaciji) ali sistemski (nov SW). Na ta način lahko celo mešam komunikacijo; malo nalagam SW, malo delam standardna opravila, ki jih mora aplikacija nemoteno opravljati. Aktivna aplikacija torej niti ne ve (ves čas deluje normalno), da se vzporedno nalaga nov SW.
Če ugotovim, da nova aplikacija ne deluje v redu, potem zadevo z enim telegramom preklopim nazaj na staro. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.54
|
Objavljeno: Tor Mar 11, 2008 4:26 pm Naslov sporočila: |
|
|
Proteus je lepo opisal kako taka zadeva gre, rako da meni ni treba
Ce se mocno bojis za integriteto podatkov, obstajajo tudi ucinkovitejse (a posledicno potratnejse) sheme za kodiranje podatkov, ne samo neucinkovite kode za preverjanje.
Isci "hamming code" ali "reed-solomon code", s tem da se pri brezzicnem prenosu ponavadi podatki razbijejo se naprej. Branja na to temo je ogromno (recimo AN od Motorole s primeri ucinkovitih algoritmov v assemblerju za 8-bitnike). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
Proteus Član



Pridružen-a: Sre 15 Jun 2005 10:03 Prispevkov: 1943 Aktiv.: 8.19
|
Objavljeno: Tor Mar 11, 2008 4:43 pm Naslov sporočila: |
|
|
Po mojih izkušnjah se, (pri radijskem prenosu podatkov) za izvedbo CRC, običajno seštevanje ne obnese in je potrebno uporabiti kakšen polinom, ki napako bistveno bolj razprši po naboru možnih vrednosti za CRC, kot pa običajno seštevanje.
Na spodnjem linku je praktično vse za izvedbo učinkovitega CRC:
http://www.ross.net/crc/ |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.35 Kraj: Lovrenc na P.
|
Objavljeno: Tor Mar 11, 2008 5:49 pm Naslov sporočila: |
|
|
Proteus hvala za dobro razlago. Bom malo preštudiral stvar, predvsem kodiranje za brezžični prenos. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 501 dni
Powered by phpBB © 2001, 2005 phpBB Group
|