Forum: Mikrocontroller und Digitale Elektronik Bootloader 4313 funktioniert nicht


von 4313 (Gast)


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?

von Oliver J. (skriptkiddy)


Lesenswert?

Am µC wird es sicher nicht liegen. Zeig mal das Projekt.

von 4313 (Gast)


Angehängte Dateien:

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

von Rene Z. (renezimmermann)


Lesenswert?

Hallo,

das liegt da dran das beim 4313 die Flashpage 32 words = 64 bytes groß 
ist und beim 2313 nur 16 words = 32 bytes.

Gruß Rene

von 4313 (Gast)


Lesenswert?

Hi

danke du hast mir das Wochenende gerettet!

Viele Grüße
Oli

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.