SRAM i PIC?
SRAM i PIC?
De flesta picar har både EEPROM och SRAM. EEPROMen är väll vanligt EEPROM minne där man kan spara data. Men SRAM delen, vad har man där för data?
> De flesta picar har både EEPROM och SRAM.
De flesta PIC'ar har både Flash, EEPROM och SRAM.
Flash : Programlagring. Tabeller. Statisk data. "Selfwrite" (d.v.s att man kan
skriva till Flash) å¨de flesta lite större modelle (Enhanced Flash).
EEPROM : "Vanligt" EEPROM. Konfigurationsparametrar m.m. Det finns vissa
gränser för hur många gånger man kan skriva til EEPROM, se databladen.
SRAM : Allt annat. Variabler, register eller vad man vill kalla det.
Innehållet "tappas" vid spänningsbortfall. Det minne som används mest.
De flesta PIC'ar har både Flash, EEPROM och SRAM.
Flash : Programlagring. Tabeller. Statisk data. "Selfwrite" (d.v.s att man kan
skriva till Flash) å¨de flesta lite större modelle (Enhanced Flash).
EEPROM : "Vanligt" EEPROM. Konfigurationsparametrar m.m. Det finns vissa
gränser för hur många gånger man kan skriva til EEPROM, se databladen.
SRAM : Allt annat. Variabler, register eller vad man vill kalla det.
Innehållet "tappas" vid spänningsbortfall. Det minne som används mest.
Helt rätt ! Det skulle jag ha nämnt. Se databladet för detaljer... 
Datalagring i Flash tenderar att vara av mer "statisk" art, look-up tabeller och liknande.
En annan stor skillnad är att Flash skrivs (och raderas !) i hela block, på nyare
modeller upp till 64 bytes. Ska man uppdatera en byte/word, så får man först
läsa ut ett helt block till RAM, ändra det som skall ändras, radera blocket och
slutligen skriva tillbaka det justerade blocket till Flash.
EEPROM kan raderas och skrivas om byte för byte.

Datalagring i Flash tenderar att vara av mer "statisk" art, look-up tabeller och liknande.
En annan stor skillnad är att Flash skrivs (och raderas !) i hela block, på nyare
modeller upp till 64 bytes. Ska man uppdatera en byte/word, så får man först
läsa ut ett helt block till RAM, ändra det som skall ändras, radera blocket och
slutligen skriva tillbaka det justerade blocket till Flash.
EEPROM kan raderas och skrivas om byte för byte.
Jag vet inte om det här gjorde mig klokare. Men vilket minne är det jag kan använda i programmeringen? Alltså arbetsminne eller vad man ska kalla det för. Inte det utrymme där själva programmet ligger utan där man kan spara data under programmets gång.
Det var där jag funderade på skillnaden mellan SRAM och EEPROM. EEPROM verker vara det man använder men SRAMen förstog jag inte vad den var till för.
Varför jag frågar är för att veta vilket minne jag ska kolla på för att veta hur mycket data programmet kan spara när det körs.
Det var där jag funderade på skillnaden mellan SRAM och EEPROM. EEPROM verker vara det man använder men SRAMen förstog jag inte vad den var till för.
Varför jag frågar är för att veta vilket minne jag ska kolla på för att veta hur mycket data programmet kan spara när det körs.
På en 10Fxxx/12Fxxx/16Fxxx/18Fxxx, alltså flashversionerna, är programminnet FLASH-minne. Ex. vis har PIC16F628A 2K program-ord á 14 bit, alltså är det plats för 2048 instruktioner i programminnet.
SRAM (eller bara RAM) är dataminne, registre som man räknar i och spara data under körning, alltså det minne som raderas när spänningen faller bort.
SRAM (eller bara RAM) är dataminne, registre som man räknar i och spara data under körning, alltså det minne som raderas när spänningen faller bort.
> Jag vet inte om det här gjorde mig klokare.
Nähä, då kör vi en ny runda...
> Men vilket minne är det jag kan använda i programmeringen?
Alla typer !
När du programmerar så skriver du ett "program" som kommer att
översättas till maskinkod och lagras i Flash. Detta program kommer när
det körs att hantera variabler i RAM och (eventuellt) skriva och läsa
från EEPROM (och ev. Flash). Så alla typer kan användas, beroende på
vad du vill göra i din applikation..
> Alltså arbetsminne eller vad man ska kalla det för.
Dina variabler (eller vad du nu vill kalla det) lagras i de GPR's som är
tillgängliga i resp PIC modell. GPR = General Purpose Register. Se
databladet för detaljer. GPR's består av RAM minne. GPR delar
adressutrymme med alla FSR's, för övrigt.
> Det var där jag funderade på skillnaden mellan SRAM och EEPROM.
OK. Det är en *jäkla* skillnad.
T.ex så är EEPROM upp till 50.000 *gånger* långsammare att *skriva*
till än RAM (GPR). Så man gör inte det allt för ofta. Det finns även en
begränsning i hur många gånger man kan skriva till EEPROM innan det
är "utslitet". Ca 1-10 milj gånger brukar det vara.
Och EEPROM är ca 5-10 gånger långsammare att läsa från, lite beroende
på hur koden ser ut. Igen, se databladet för detaljer...
> Varför jag frågar är för att veta vilket minne jag ska kolla på för att
> veta hur mycket data programmet kan spara när det körs.
Vad menar du med "spara" ? Spara även efter att spänningen har slagits från ?
Notera att du även på många PIC modeller kan "spara" data i Flash !
Nähä, då kör vi en ny runda...

> Men vilket minne är det jag kan använda i programmeringen?
Alla typer !
När du programmerar så skriver du ett "program" som kommer att
översättas till maskinkod och lagras i Flash. Detta program kommer när
det körs att hantera variabler i RAM och (eventuellt) skriva och läsa
från EEPROM (och ev. Flash). Så alla typer kan användas, beroende på
vad du vill göra i din applikation..
> Alltså arbetsminne eller vad man ska kalla det för.
Dina variabler (eller vad du nu vill kalla det) lagras i de GPR's som är
tillgängliga i resp PIC modell. GPR = General Purpose Register. Se
databladet för detaljer. GPR's består av RAM minne. GPR delar
adressutrymme med alla FSR's, för övrigt.
> Det var där jag funderade på skillnaden mellan SRAM och EEPROM.
OK. Det är en *jäkla* skillnad.
T.ex så är EEPROM upp till 50.000 *gånger* långsammare att *skriva*
till än RAM (GPR). Så man gör inte det allt för ofta. Det finns även en
begränsning i hur många gånger man kan skriva till EEPROM innan det
är "utslitet". Ca 1-10 milj gånger brukar det vara.
Och EEPROM är ca 5-10 gånger långsammare att läsa från, lite beroende
på hur koden ser ut. Igen, se databladet för detaljer...
> Varför jag frågar är för att veta vilket minne jag ska kolla på för att
> veta hur mycket data programmet kan spara när det körs.
Vad menar du med "spara" ? Spara även efter att spänningen har slagits från ?
Notera att du även på många PIC modeller kan "spara" data i Flash !
- JimmyAndersson
- Inlägg: 26579
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Låt säga att man använder en och samma PIC-krets som "utvecklings-exemplar". Även om den klarar 100 000 erase/write till Flash så kanske det kan vara en god idé att byta krets någon gång? Eller händer det "aldrig" att någon förbrukar alla 100 000?
Jag själv är inte ens i närheten visserligen, men det vore lite kul att veta hur stor "oro" man bör ha för detta.
Gjorde en liten koll på hur många hex-filer jag har till PIC18F2320. Det var ca 40st. Även om man programmerar varje fil 20 gånger till samma krets så skulle jag bara nå upp till 800 erase/write, men det finns ju de som sitter hela dagarna med detta...
Jag själv är inte ens i närheten visserligen, men det vore lite kul att veta hur stor "oro" man bör ha för detta.

Gjorde en liten koll på hur många hex-filer jag har till PIC18F2320. Det var ca 40st. Även om man programmerar varje fil 20 gånger till samma krets så skulle jag bara nå upp till 800 erase/write, men det finns ju de som sitter hela dagarna med detta...
Så längde det är under *utveckling* så är det väl bara att köra
tills den "ger upp". Sedan *kan* det ibland vara klokt att ta en
ny krets för enheten som ska gå i produktion. Det är ju möjligt att
man har misshandlat (med ESD eller liknande) sin utvecklingskrets
en del, och att det finns latenta fel i den...
tills den "ger upp". Sedan *kan* det ibland vara klokt att ta en
ny krets för enheten som ska gå i produktion. Det är ju möjligt att
man har misshandlat (med ESD eller liknande) sin utvecklingskrets
en del, och att det finns latenta fel i den...