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.