Forum: Mikrocontroller und Digitale Elektronik Flash-Speicher vom ATTINY25 beschreiben


von Michael S. (misax)


Lesenswert?

Hallo;
kann mir jemand ein kleines übersichtliches Beispielprogramm posten wie 
man den Flash-Speicher im ATTINY25 beschreiben kann ?
Ich weiss dass man das Fusebit auf Null setzen muss um den SPM Befehl 
zuzulassen und dass man erst die Register beschreiben muss und dann ein 
Steuerbit setzen muss um dann inerhalb von 4 Taktzyklen den SPM Befehl 
abzusetzen sowie dass die Register R30 und R31 die Adresse beinhalten 
und das Register R0 den Wert aber ich kriegs nicht hin.
Dann habe ich gelesen dass man erst einen Erase-Befehl absetzen muss und 
danach erst das Beschreiben. Ausserdem dass der Flash seitenweise 
beschrieben wird. Da verstehe ich nicht ganz wieso die beiden Z-Register 
(30 und 31) doch genau auf EIN Wort hinweisen und nicht auf 16.
Oder ?
Ach so: Bitte keine Fragen wieso und warum und was ist der Sinn. Es ist 
einfach ein Interesse von mir ohne praktischen Nutzen. Mich interessiert 
einfach nur wie das geht.
Danke

von Andreas B. (bitverdreher)


Lesenswert?

Wie wäre es den Hersteller zu befragen:
http://ww1.microchip.com/downloads/en/AppNotes/Atmel-2575-C-Functions-for-Reading-and-Writing-to-Flash-Memory_ApplicationNote_AVR106.pdf
Zwar kein Beispielprogramm, aber die Programmiersprache hattest Du ja 
auch nicht genannt.

von Michael S. (misax)


Lesenswert?

danke der Link ist schonmal gut.
Ich programmiere in Assember.

von Andreas B. (bitverdreher)


Lesenswert?

Am besten mal einen Bootloader anschauen. Da wird ja ausgiebig davon 
Gebrauch gemacht, z.B. hier:
Beitrag "Re: UART Bootloader ATtiny13 - ATmega644"

von My T. (mtram)


Lesenswert?

Im Gegensatz zu bekannten Bootloader-Projekten hat mir sehr geholfen:
g-heinrichs.de/attiny/Bootloader.pdf
Daraus entstand das ASM f.T45:
1
;avrdude -P /dev/ttyUSB0 -c stk500v2 -p t45 -V -Uflash:w:boot1.hex:i
2
;avrdude -P /dev/ttyUSB0 -c stk500v2 -p t45 -F -V -Uefuse:w:0xfe:m
3
.include "tn45def.inc"
4
.def wert  = r16
5
.def seite  = r17
6
.def RWCount  = r23
7
.def spmcsrval  = r22
8
.def A     = r27
9
.org 32
10
Anfang:
11
  ldi seite,14; oder andere Testwerte
12
Testen:
13
  inc seite
14
 Rrcall WrPage 
15
 rjmp  -1 ; oder bis ? Testen
16
WrPage:
17
  ; rcall Zhl ;Berechnen Z 
18
  ldi ZH,1; 2 sind dann 32 word weiter
19
  ldi ZL,0 ; oder 16 32 48 bei t45
20
  ldi RWCount, 32
21
; Puffer fuellen
22
Schreib_schleife:   
23
 ;  rcall getByte
24
  ldi wert,11 ; zum Test: Festwert
25
  mov r0, wert 
26
  rcall getByte
27
  mov r1, wert ; einlesen
28
  ldi spmcsrval, 1
29
; 1 Wort in Puffer schreiben
30
  out spmcsr, spmcsrval
31
  spm
32
  inc ZL ; Adresse + 1 Word 
33
  inc ZL
34
  dec RWCount
35
  brne Schreib_schleife
36
; SeiteLoeschen:
37
  subi ZL,64
38
  ldi spmcsrval, 3 
39
  out spmcsr, spmcsrval
40
  spm
41
; evtl.hier Pause 
42
; Puffer in FLASH-Seite schreiben
43
  ldi spmcsrval, 5
44
  out spmcsr, spmcsrval
45
  spm
46
  ret ;WrPage
Mein Leseprogramm funktioniert leider nicht, deshalb will ich das hier 
auch nicht komplett einstellen.
Hoffe, dass beim Entfernen einiger Code-Teile nichts falsch geworden 
ist.
Fuer t25 sind wohl die Pages nur halb so grosz, also ZL 8 mal erhoehen 
bis zum naechsten ZH.

von Michael S. (misax)


Lesenswert?

Für diese sehr konkrete Hilfestellung bedanke ich mich schonmal vorab 
und melde mich wieder wenn ich alles ausprobiert habe.

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

'What else is there to do on a Saturday, when your girl-friend has left 
you, your TV-set is broken and your jogging-suit is in the wash?'

(Corona blieb Charles M. Schulz erspart)

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

Entschuldigung, noch mal.
(falscher Sprung in §page_checking)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.