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 

Tabele v RAMu in Flashu (STM32, uVision)
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
 
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: Čet Avg 11, 2011 12:04 pm    Naslov sporočila:   Odgovori s citatom

Za hardware-specific sem našel nekaj:
Koda:
FLASH_UnlockBank1();
FLASH_ErasePage(...);
FLASH_ProgramWord(Address, Data);
FLASH_LockBank1();


Za Compiler-specific zadeve: Keil uVision 4.20; C Compiler: Armcc.Exe 4.1.0.644

Če je kdo že počel kaj podobnega, se priporočam za vsako informacijo...

(Temo sem prestavil na tak način, da je tudi pri AVR-jih ostala povezava in jo je lažje najti. Itak ta forum rabi eno konkretno reorganizacijo...)

_________________
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: Čet Avg 11, 2011 12:28 pm    Naslov sporočila:   Odgovori s citatom

Za STM32:

Standard library:
Funkcije: stm32f10x_flash.c in stm32f10x_flash.h
Primer: STM32F10x_StdPeriph_Examples\FLASH\Program

Organizacija flasha:
Reference Manual, Memory and bus architecture, Memory map, Embedded Flash memory


Za uVision:

Postavitev spremenljivk na določeno lokacijo:
Koda:
#include <absacc.h>
const char table[] __at(0x00001000) = {0x01, 0x02, 0x03, 0x04};
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: Čet Avg 11, 2011 5:12 pm    Naslov sporočila:   Odgovori s citatom

Yay!
mi je prvič v karieri le uspelo priti do:
Koda:
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

Anxious
V glavnem, rutine za brisanje in pisanje flash-a zagotovo delujejo. Whistle
Ko pa uC resetiram, se mu skeglja še preden pride v main. Malo bo treba še raziskati tole..

_________________
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 Avg 12, 2011 9:57 am    Naslov sporočila:   Odgovori s citatom

Sem temo kar razdelil, ker očitno še ne bo konca mojim težavam Confused

Torej, ostal sem pri tem, da vpišem tabelo iz RAM v Flash.
Primer sem vzel iz iz ST-jeve knjižnice in deluje normalno.
Predzadnji Page proti koncu Flash-a (ki je prazen, preverjeno v MAP datoteki) pobriše in vpiše notri nove podatke. Vse ok.
V debuggerju sem podatke pregledal in se pravilno pobriše in pravilno vpiše.
Koda, ki to naredi je:
Koda:
#define FLASH_PAGE_SIZE    ((uint16_t)0x400)
#define FLASH_WRITE_START_ADDR  ((uint32_t) (0x08010000-(2*FLASH_PAGE_SIZE)))  // 2 kb pred koncem (predzadnji Page)

void Zapisi_V_Flash (void)
{
  FLASH_Unlock();  // Unlock the Flash Bank1 Program Erase controller
  FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);     //Clear All pending flags
  FLASHStatus = FLASH_ErasePage(FLASH_WRITE_START_ADDR);  //Erase the FLASH page
  WR_Address = (u32) naslov "konstante" v Flash-u;
  WR_Data = željen podatek za vpis;
  FLASHStatus = FLASH_ProgramWord (WR_Address, WR_Data);
  FLASH_Lock();
}


Program normalno teče naprej in vse dela.
Ko pa ga resetiram, se inicializacijski del izvede enako kot prej:

Koda:
; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
                 LDR     R0, =__main
                 BX      R0
                 ENDP

Koda:
0x080001CC 4808      LDR      r0,[pc,#32]  ; @0x080001F0
0x080001CE 4700      BX       r0

V R0 se pravilno naloži pozicija __main funkcije (80000EC), ampak namesto da bi skočil na tisti naslov, kot prej, se usuje (Hard Fault) Shocked
Tudi če ga odklopim z elektrike se ne pobere.

Koda:
                 __main:
0x080000EC F000F802  B L.W     __scatterload_rt2_thumb_only (0x080000F4)
0x080000F0 F000F85C  B L.W     __rt_entry_sh (0x080001AC)
                 __scatterload_rt2_thumb_only:
0x080000F4 A00A      ADR      r0,{pc}+4  ; @0x08000120
....

_________________
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 Avg 12, 2011 10:56 am    Naslov sporočila:   Odgovori s citatom

WTF OMG LOL MTFK in kar je še podobnih kratic

v .MAP fajlu kaže kot da je Flash prazen, v bistvu pa načečka neko svinjarijo notri.

Si moram izgleda v programu cel page rezervirat zase, da ne bo compiler metal drugih stvari tja (ki jih v MAP ne napiše) Mad



flash_contents.png
 Opis:
 Velikost datoteke:  23.43 KB
 Pogledana:  13 krat

flash_contents.png



_________________
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 Avg 12, 2011 11:07 am    Naslov sporočila:   Odgovori s citatom

aly je napisal/a:
...v programu cel page rezervirat zase, da ne bo compiler metal drugih stvari tja (ki jih v MAP ne napiše) ...

Seveda, saj on ne ve, da misliš vse pobrisat! Wink Sorry, ker sem pozabil omenit Very Happy
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4770
Aktiv.: 20.09
Kraj: Kobarid

PrispevekObjavljeno: Pet Avg 12, 2011 11:23 am    Naslov sporočila:   Odgovori s citatom

In kako rezerviraš določeo stran v flashu?
_________________
Lep dan
Simon
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Umnik
Član
Član



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

PrispevekObjavljeno: Pet Avg 12, 2011 11:30 am    Naslov sporočila:   Odgovori s citatom

SimonS je napisal/a:
In kako rezerviraš določeo stran v flashu?
#include <absacc.h>

#define FLASH_PAGE_SZ 0x___
#define FLASH_PAGE_ADDR 0x________

const char table[FLASH_PAGE_SZ] __at(FLASH_PAGE_ADDR) = {__, __, ... , __};
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4770
Aktiv.: 20.09
Kraj: Kobarid

PrispevekObjavljeno: Pet Avg 12, 2011 11:40 am    Naslov sporočila:   Odgovori s citatom

Hvala!
_________________
Lep dan
Simon
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 Avg 12, 2011 2:46 pm    Naslov sporočila:   Odgovori s citatom

No, sedaj pa bo Very Happy

Eno stran v Flashu sem razdelil na koristne podatke in na dummy tabelo (vse 0xFF).

Koda:
const s16 Offset_Flash[]   __at(FLASH_WRITE_START_ADDR) = {0,60,37,95,27,71,34,4,17,89,93,59,86,74,47,28,76,98,67,56,64,75,50,69,59,84,93,63,79,74,25,75,48,36,40,53,119,77,55,81,58,47,25,28,30,98,43,30,105,75,40,-15,105,49};

const u8 Dummy[]                 __at(FLASH_WRITE_START_ADDR + 108) = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, ...................


Umnik, hvala res

_________________
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
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4770
Aktiv.: 20.09
Kraj: Kobarid

PrispevekObjavljeno: Pet Avg 12, 2011 4:46 pm    Naslov sporočila:   Odgovori s citatom

Malce nerodno ima rešeno pisanje po flashu. Lahko pišeš le z word ali halfword. Torej za pisanje tipa byte je malce nerodno. Napisal sem si svojo rutinico za pisanje in branje po flashu. Uporabe je resnično enostavna in ne rabi razlage. Upam, da bo prišlo še komu za prav.


iap.rar
 Opis:

Download
 Ime datoteke:  iap.rar
 Velikost datoteke:  809 Bytov
 Downloadano:  12 krat


_________________
Lep dan
Simon
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.76
Kraj: Tržič

PrispevekObjavljeno: Sob Avg 13, 2011 9:28 pm    Naslov sporočila:   Odgovori s citatom

Aly, dummy tabele 0xFF ti res ni treba zapisovati. Ko pobrišeš celotno page so itak že vsi prazni 0xFF. Potem samo vpišeš toliko podatkov, kot jih potrebuješ.

Jaz imam takole rešeno in dela super.

Koda:

void write_parameters () {

     u32 *a = (u32 *)parameters;
     u32 addr = ADDR_parameters;
     u8 size = N_parameters;

     FLASH_Unlock();                        // Unlock the Flash Program Erase controller

     FLASHStatus=FLASH_ErasePage(addr);
     do {
           FLASH_ProgramWord((addr),*a);   //store array of parameters
           a++;
           addr+=4;
        }
     while (--size);


     FLASH_Lock();                          // Lock the Flash Program Erase controller


En page pač reskiram za te podatke. Ostalo, kar ni koristno ostane 0xFF.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4770
Aktiv.: 20.09
Kraj: Kobarid

PrispevekObjavljeno: Sob Avg 13, 2011 9:37 pm    Naslov sporočila:   Odgovori s citatom

Če se ne motim si Aly s tem rezervira lokacijo, da slučajno prevajalnik ne uporabi one lokacije.....
_________________
Lep dan
Simon
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: Ned Avg 14, 2011 11:17 am    Naslov sporočila:   Odgovori s citatom

spy je napisal/a:
Aly, dummy tabele 0xFF ti res ni treba zapisovati.
...
En page pač reskiram za te podatke. Ostalo, kar ni koristno ostane 0xFF.

Tako kot je SimonS napisal. Prevajalnik preostali Flash uporabi zase in ob tem nič je napiše v report (.map fajl). Zaradi tega se mi je program sesuval.
Poglej tukaj.

Dummy tabele ne vpisujem v Flash med delovanjem programa.
Tam je samo zato, da prevajalnik nima dostopa do tistih lokacij, ker bodo pobrisane.

_________________
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
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.76
Kraj: Tržič

PrispevekObjavljeno: Ned Avg 14, 2011 10:25 pm    Naslov sporočila:   Odgovori s citatom

Aha..ok.
Jaz imam svoje na koncu, zadnji page.
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
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
Stran 2 od 3

 
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