ISP Programmierung eines ATmega8L mit einem XC161

OP #767868
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich versuche einen ATmega8l mittels eines XC161 zu programmieren.
Das Programming Enable Kommt auch am AVR an. Das Read Signature klappt 
auch einwandfrei. Aber das Chip Erase klappt ums Verrecken nicht.
Das ist mein Code dazu:
1
//Die Funktion löscht den Flash und den EEPROM des AVR
2
t_u8bit EraseAVR(void)
3
{  
4
  t_u8bit u8bEmpfangen;
5
  t_u8bit u8bLetztesByte;
6
  t_u8bit u8bVorletztesByte;
7
  t_u8bit u8bCount;
8
  t_u8bit u8bTransferOK;
9

10
  u8bCount     = 0;
11
  u8bTransferOK   = FALSE;
12
  
13
  while (u8bTransferOK == FALSE && u8bCount < MAX_TRANSFERS)
14
  {  
15
    ++u8bCount;
16

17
    u8bTransferOK   = TRUE;
18
    
19
    //Chip Erase senden (0xAC, 0x53, 1XXX, XXXX)
20
    u8bLetztesByte = 0xAC;
21
    SSC0_vSendData(u8bLetztesByte);  
22
    u8bVorletztesByte = u8bLetztesByte;
23
    
24
    u8bLetztesByte = 0x53;
25
    while(SSC0_ubBusy() == 1) {  }
26
    SSC0_vSendData(u8bLetztesByte);
27
    u8bEmpfangen = SSC0_uwGetData();
28
    if(u8bEmpfangen != u8bVorletztesByte)
29
    {
30
      u8bTransferOK = FALSE;
31
    }
32
    u8bVorletztesByte = u8bLetztesByte;
33
    
34

35
    u8bLetztesByte = 0x08;
36
    while(SSC0_ubBusy() == 1) {  }
37
    SSC0_vSendData(u8bLetztesByte);
38
    u8bEmpfangen = SSC0_uwGetData();
39
    if(u8bEmpfangen != u8bVorletztesByte)
40
    {
41
      u8bTransferOK = FALSE;
42
    }
43
    u8bVorletztesByte = u8bLetztesByte;
44

45
    u8bLetztesByte = 0x00;
46
    while(SSC0_ubBusy() == 1) {  }
47
    SSC0_vSendData(u8bLetztesByte);
48
       u8bEmpfangen = SSC0_uwGetData();
49
    if(u8bEmpfangen != u8bVorletztesByte)
50
    {
51
      u8bTransferOK = FALSE;
52
    }
53
    u8bVorletztesByte = u8bLetztesByte;
54
  }  
55
  
56
  Wait(30*WAITTIME);
57

58
  //RESET-Leitung ist am AVR LOW-Active
59
  P3_P0 = HIGH;          
60
         //Kurzen Puls, damit RESET deaktiviert wird.
61
  Wait(WAITTIME);
62
  
63
   if (u8bTransferOK == TRUE) 
64
  {
65
    return EXIT_SUCCESS;
66
  }
67
  else
68
  {
69
     return EXIT_FAILURE;
70
  }
71
}

Das Programm bleibt einfach drauf. :(
Danke schon mal im Voraus.

PS:
1
#define WAITTIME 30 //Zeit in ms

Laut MISO-Signal (auch mit Oszi geprüft) kommt auch alles beim AVR an.
Moderator Persönliche Seite #768521
Lesenswert?
• ▲
▼
Maximilian Bock wrote:
> Keiner eine kleine Idee? Bin so langsam am verzweifeln

    //Chip Erase senden (0xAC, 0x53, 1XXX, XXXX)

Was soll das denn sein?

AC 53 00 00 ist die "programming enable"-Sequenz.  Die muss man
initial einmal ausführen, nachdem man /RESET aktiviert hat.

Die "chip erase"-Sequenz ist AC 80 00 00.  Ich sehe nicht, dass
du diese irgendwo mal senden würdest.

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.