Bootloader 4313 funktioniert nicht

Gast #2399815
Lesenswert?
• ▲
▼
Ich habe einen sehr einfachen Bootloader (ich weiss nicht mehr, wo der 
her ist) vom Tiny2313 auf den 4313 angepasst.
Auf dem 2313 funktionierte alles bestens.
Der Flash ist da doppelt so gross (4k statt 2k), ansonsten ist lt. 
Datenblatt und Errata kein Unterschied.
Bei der Programmierung wird nur jeder zweite der 32 Byte-Blöcke 
erfolgreich programmiert, die anderen werden mit FF programmiert (d.h. 
möglicherweise gelöscht, aber nicht programmiert)
Hat jemand diesen Effekt beim 4313 schon gehabt?
Gast #2399854
Lesenswert?
• ▲
▼
Hier ist das Testprogramm und der resultierende Dump nach der 
Programmierung.
Write_Page kommt glaube ich aus der AVR Doku.
Ich schiebe nur zh:zl in den Flash.
1
.equ pages = (bootloader*2) / PAGESIZE
2
//Then 48 x 32 bytes = bytes to FLASH, blocksize = 16 words = 32 bytes
3
  ldi  r18, PAGES              
4
  ldi  zh,high((2*bootloader)-32)
5
  ldi  zl,low((2*bootloader)-32)
6
wrrom1:
7
  rcall   write_page
8
  sbiw  zh:zl,32    //next flash page
9
  dec   r18
10
  brne   wrrom1
11
nix:    rjmp nix
12

13
write_page:
14
;page erase
15
//address needs to be in zh:zl
16
  ldi   a,0b00000011
17
  rcall   do_spm
18
  
19
;transfer data from RAM to Write Buffer
20
;points to Y
21
  ldi   r21,PAGESIZE/2 //= 16 words
22
  push   zl    //save pointer to flash
23
  push   zh
24

25
wrloop:
26
//  ld   r0,y+
27
//  ld   r1,y+
28
  mov  r0,zh
29
  mov  r1,zl
30
  ldi   a,0b00000001
31
  rcall   do_spm
32
  adiw   zh:zl,2
33
  dec   r21
34
  brne   wrloop
35
  
36
;execute write page
37
  pop   zh
38
  pop   zl
39
  ldi   r16,0b00000101
40
  rcall   do_spm
41
  
42
  ret
43

44
do_spm:
45
  in   r22,spmcsr
46
  sbrc   r22,spmen
47
  rjmp   do_spm
48

49
wait_ee:
50
  sbic   eecr,eewe
51
  rjmp   wait_ee
52
  out   spmcsr,r16
53
  SPM    //Writes r0,r1 to flash zh:zl
54
  ret
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.