www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ARM: start bootloader?

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.62
Kraj: Kranj - struževo

PrispevekObjavljeno: Pet Mar 12, 2010 12:56 pm    Naslov sporočila:  ARM: start bootloader? Odgovori s citatom

V aplikaciji na LPC2109 / 2129 bi rad imel tudi funkcijo nalaganja novega firmware-a.

Ne bi rad tlačil notri novega custom bootloaderja, če pa mi obstoječi odgovarja. Uporabljen bo samo kot servisni pripomoček, uporabnik ne bo imel dostopa do te funkcije.

Aplikacija že komunicira preko UART-a. Rad bi samo še, da ko pošljem ustrezen ukaz, štarta vgrajen bootloader.

Lahko samo naredim Jump na določen naslov in bo kar delalo? Kolikor sem bral, se dogaja tudi nek address-remaping, kar je neugodna zadeva.
Ali bi moral procesor najprej izpraznit en kondenzator na P0.14 pinu in potem sam sebe hardversko resetirat? Anxious

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Umnik
Član
Član



Pridružen-a: Čet 16 Sep 2004 17:52
Prispevkov: 958
Aktiv.: 4.03
Kraj: Novo mesto

PrispevekObjavljeno: Pet Mar 12, 2010 1:48 pm    Naslov sporočila:   Odgovori s citatom

Če bi rad startal vgrajen bootloader je najboljše, da na UART povežeš še reset pin. Tako boš dosegel, da bootloader startaš kar iz svoje aplikacije.
Z UART signali potegneš P0.14 na maso, z njimi tudi resetiraš procesor in si v bootloaderju.

Potem samo uporabiš predpisane ukaze, naložiš program, zapišeš checksum (na eno lokacijo je potrebno zapisat dvojiški komplement nekega checksuma, na pamet ne vem točno) in to je vse. Address remaping boš potreboval samo v primeru, če boš nalagal svojo aplikacijo na poljuben naslov v flashu. Če aplikacijo naložiš na naslov, kamor običajno skoči procesor po resetu, address remapinga ne potrebuješ.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70656.41

PrispevekObjavljeno: Pet Mar 12, 2010 2:13 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.62
Kraj: Kranj - struževo

PrispevekObjavljeno: Pet Mar 12, 2010 2:20 pm    Naslov sporočila:   Odgovori s citatom

P14 in Reset pin sta globoko v ohišju in nista priklopljena na serijski port (RS422 komunikacija na 100 metrov).

To rabim, kar je Mare napisal. Hvala Dancing

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.62
Kraj: Kranj - struževo

PrispevekObjavljeno: Pet Mar 12, 2010 5:09 pm    Naslov sporočila:   Odgovori s citatom

Hmmmm Think
Zadeva ne deluje.
V dokumentaciji piše:
Citiram:
Table 319. IAP command summary
IAP Command - Command Code
Prepare sector(s) for write operation - 50
Copy RAM to Flash - 51
Erase sector(s) - 52
Blank check sector(s) - 53
Read Part ID - 54
Read Boot code version - 55
Compare - 56

Dokumentacija je UM10114 LPC21xx and LPC22xx User manual Rev. 03 - 2 April 2008, stran 329

Tsti ukaz, zgoraj omenjen je
Citiram:
command[0] = 0x39;

0x39 = 57 (črka '9'), ki ni dokumentirana.
Zadeva izvrši IAP ukaz in se vrne. In se nato vrti v tisti while(1) zanki... Preverjeno.
Bi moral še preverit status, kakšen rezultat vrne v Result tabeli.

V glavnem, ne gre mi tole...
Dosti šihta za danes.
Če pa ima še kdo kakšno idejo, se priporočam.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Benjamin
Član
Član



Pridružen-a: Tor 10 Jul 2007 11:23
Prispevkov: 116
Aktiv.: 0.53
Kraj: Trebnje, Ljubljana

PrispevekObjavljeno: Pet Mar 12, 2010 6:03 pm    Naslov sporočila:   Odgovori s citatom

LPC2109 / 2129 kot kaže ne podpirata tega ukaza (vsaj v dokumentaciji ne piše).

Lahko pa tudi programsko določiš pin P0.14 kot '0', ter skočiš na reset.
http://www.nxp.com/documents/application_note/AN10356.pdf

_________________
Cessna 152: "Flight Level Three Thousand, Seven Hundred"
Controller: "Roger, contact Houston Space Center"
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70656.41

PrispevekObjavljeno: Pet Mar 12, 2010 7:22 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.62
Kraj: Kranj - struževo

PrispevekObjavljeno: Sob Mar 13, 2010 9:30 pm    Naslov sporočila:   Odgovori s citatom

Super, bom preizkusil tale AN10356.
Hvala!

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.62
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Mar 15, 2010 2:53 pm    Naslov sporočila:   Odgovori s citatom

Kodi iz AN sem moral dodat še par vrstic, da sem spravil uC nazaj na reset vrednosti, in sicer: PLL, VPBDIV, FastIO, MAM, Timerje.

Hitrost UART-a je nastavljena na tisto, ki tudi sicer deluje pri prvem programiranju (v mojem primeru 38.400 baud pri 12 MHz kristalu).

Evo delujočo kodo Cool
Kliče se funkcija start_bootloader (); in dela.

Koda:
void start_bootloader (void);

void bootloader_init (void);
void (*bootloader_entry)(void);
unsigned long temp;

void bootloader_init(void)
   {
   SCS = 0; // izklop Fast IO na obeh portih
   MAMCR = 0;
   T0TCR=0; // ugasne števce
   T1TCR=0;
   VICIntEnClr = 0xFFFFFFFF; // disable vseh interruptov
   
   /* Connect RXD0 & TXD0 pins to GPIO */
   PINSEL0 = 0; // reset state - GPIO
    PINSEL0|=0x00000005;  // nastavi kot UART nogici

   /* Select P0.14 as an output and P0.1 as an input */
   temp = 0; // vsi so vhodi
   temp = temp | 0x4000; //p0.14 = out
   IODIR0 = temp;

   /* Clear P0.14 */
   IOCLR0 = 0x4000;

   // Init UART0
   // RxD0, TxD0
    PINSEL0 &= 0xFFFFFF0F;
    PINSEL0 |= 0x00000050;                 
   // 8 bits, no Parity, 1 Stop bit
    U0LCR = 0x83;
   // Baud rate
   U0FDR =  0x10; // default on reset - izklop baudarate fine-tuninga
//    U0DLM = ( FPCLK / 16 ) / UART_BAUD / 0x100;
//    U0DLL = ( FPCLK / 16 ) / UART_BAUD % 0x100;
    U0DLM = 0;
    U0DLL = 98;  // 38400 baud @ 12 MHz kristal
    U0LCR = 0x03;       
    U0FCR = 0x07;       

   /*    Disconnect PLL if you want to do ISP at crystal frequency.    Otherwise you need to pass the PLL freq when bootloader goes in ISP mode.
   cclk = crystal when PLL is disconnected
   cclk = PLL freq when PLL is connected.
   Disconnecting the PLL is recommended. */
   PLLCON = 0x00;
   PLLFEED = 0xAA;
   PLLFEED= 0x55;
   
   /*    Set the VPB divider to 1/4 if your application changes the VPBDIV value.
   The bootloader is hard-coded to use the reset value of VPBDIV register */
   VPBDIV = 0x0;
   
   /* Restore reset state of Timer1 */
   T1PR=0x0;
   T1MCR=0x0;
   T1CCR=0x0;
   /* Map bootloader vectors */
   MEMMAP = 0x0;
   /* Point to bootloader entry point i.e. reset vector 0x0 */
   bootloader_entry = (void (*)(void))(0x0);
   }


/* Invoke the bootloader
The bootloader will read pin P0.14 to detect if ISP is forced Since P0.14 is configured as an output and set to 0, the bootloader will go in ISP mode. */

void start_bootloader (void)
   {
   bootloader_init();
   while(1)
      bootloader_entry();
   }

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
tonko
Član
Član



Pridružen-a: Sob 25 Jun 2005 13:45
Prispevkov: 541
Aktiv.: 2.28
Kraj: Črnomelj

PrispevekObjavljeno: Sre Nov 09, 2011 9:59 am    Naslov sporočila:   Odgovori s citatom

A ima kdo izkušnje kako zagnati ISP mode na LPC2478 ?
Na LPC2148 mi deluje brez problema, tukaj pa kot kaže je nekaj drugače in ne gre.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70656.41

PrispevekObjavljeno: Sre Nov 09, 2011 10:09 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
tonko
Član
Član



Pridružen-a: Sob 25 Jun 2005 13:45
Prispevkov: 541
Aktiv.: 2.28
Kraj: Črnomelj

PrispevekObjavljeno: Sre Nov 09, 2011 1:19 pm    Naslov sporočila:   Odgovori s citatom

Mare najlepša hvala!

Pred tvojo kodo sem dodal še nekaj in sedaj mi dela AutoBaud in pa Watchdogu sem povečal timeout. Uart0Init ni več potrebna.

Koda:

 #define WDCLOCK2 1000000 //INTERNI RC CLOCK ZA WATCHDOG 4mhz / 4
 #define WATCHDOG_TIMEOUT2 (WDCLOCK2 * 60*10) // = 10min
 #define WD_RESET2 {WDFEED = 0xAA; WDFEED = 0x55;} //WDTC = WATCHDOG_TIMEOUT; //SEKVENCA POTREBNA ZA RESET WATCHDOG TIMERJA

  PLLCON  = 0x00;
  PLLFEED = 0xAA;
  PLLFEED = 0x55;

  PLLCFG  = 0x00;
  PLLFEED = 0xAA;
  PLLFEED = 0x55;

  CCLKCFG = 0x00;

//AUTO BAUD DELA CE JE CLOCK SOURCE INT-RC
  CLKSRCSEL = 0x00; //Clock Source Select register - 00 Selects the Internal RC oscillator as the PLL clock source (default).

// SET WATCHDOG TIMEOUT - PODALJSAJ
  WDCLKSEL = 0x00;   //Selects the Internal RC oscillator as the Watchdog clock source 4Mhz
  WDTC = WATCHDOG_TIMEOUT2;  //32 bitni register za watchdog timeout - 100sek
  WDMOD = 0x03;
  WD_RESET2;

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 6 dni


Powered by phpBB © 2001, 2005 phpBB Group