Datum: 31.01.2008 14:27
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:
//Die Funktion löscht den Flash und den EEPROM des AVR t_u8bit EraseAVR(void) { t_u8bit u8bEmpfangen; t_u8bit u8bLetztesByte; t_u8bit u8bVorletztesByte; t_u8bit u8bCount; t_u8bit u8bTransferOK; u8bCount = 0; u8bTransferOK = FALSE; while (u8bTransferOK == FALSE && u8bCount < MAX_TRANSFERS) { ++u8bCount; u8bTransferOK = TRUE; //Chip Erase senden (0xAC, 0x53, 1XXX, XXXX) u8bLetztesByte = 0xAC; SSC0_vSendData(u8bLetztesByte); u8bVorletztesByte = u8bLetztesByte; u8bLetztesByte = 0x53; while(SSC0_ubBusy() == 1) { } SSC0_vSendData(u8bLetztesByte); u8bEmpfangen = SSC0_uwGetData(); if(u8bEmpfangen != u8bVorletztesByte) { u8bTransferOK = FALSE; } u8bVorletztesByte = u8bLetztesByte; u8bLetztesByte = 0x08; while(SSC0_ubBusy() == 1) { } SSC0_vSendData(u8bLetztesByte); u8bEmpfangen = SSC0_uwGetData(); if(u8bEmpfangen != u8bVorletztesByte) { u8bTransferOK = FALSE; } u8bVorletztesByte = u8bLetztesByte; u8bLetztesByte = 0x00; while(SSC0_ubBusy() == 1) { } SSC0_vSendData(u8bLetztesByte); u8bEmpfangen = SSC0_uwGetData(); if(u8bEmpfangen != u8bVorletztesByte) { u8bTransferOK = FALSE; } u8bVorletztesByte = u8bLetztesByte; } Wait(30*WAITTIME); //RESET-Leitung ist am AVR LOW-Active P3_P0 = HIGH; //Kurzen Puls, damit RESET deaktiviert wird. Wait(WAITTIME); if (u8bTransferOK == TRUE) { return EXIT_SUCCESS; } else { return EXIT_FAILURE; } } |
Das Programm bleibt einfach drauf. :( Danke schon mal im Voraus. PS:
#define WAITTIME 30 //Zeit in ms |
Laut MISO-Signal (auch mit Oszi geprüft) kommt auch alles beim AVR an.
Datum: 01.02.2008 10:59
Keiner eine kleine Idee? Bin so langsam am verzweifeln
Datum: 01.02.2008 11:14
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.
Datum: 01.02.2008 11:17
Man sollte lieber aufs Datenblatt, statt in seine Notizen schauen :D Danke vielmals. Manchmal steht man echt auf dem Schlauch.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel