Moin Arne!
Du hast mir am 22.08. bei einem AVR Progger Problerm geholfen. Nun habe ich da nochmal ne kleine Frage :-) (Muss es leider über diesen Weg machen, denn dein Formmailer geht irgendwie nicht.) Und zwar kriege ich das Proggen des Speichers nicht sauber hin. Das ist meine Funktion: // Load Program Memory Page 0100 H000 xxxx xxxx xxxx bbbb iiii iiii // Write H (high or low) data i to Program Memory page at word address b. // Data low byte must be loaded before data high byte is applied within // the same address. // Write Program Memory Page 0100 1100 xxxx xxaa bbbb xxxx xxxx xxxx // Write Program Memory Page at address a:b. // i = data in a = address high bits b = address low bits // H = 0 - Low byte, 1 - High Byte o = data out procedure TForm1.AVRFlashSchreibenClick(Sender: TObject); var i,j,k,l:integer; begin ComOpen(COMCombo.Text); SPIInit; // Speicher löschen ISPInOut(172); ISPInOut(128); ISPInOut(0); ISPInOut(0); Delay(10); l := 0; // Positionszeiger für HexEdit for k := 0 to 3 do // \ for j := 1 to 16 do // / 16Byte Blöcke wegschreiben begin for i := 0 to 15 do // Puffer füllen begin // erst Low Byte schreiben ISPInOut(64); ISPInOut(0); ISPInOut(i); ISPInOut(hextoint(chartohex(AVRHex.GetMemory(l+1)))); // dann HighByte schreiben ISPInOut(72); ISPInOut(0); ISPInOut(i); ISPInOut(hextoint(chartohex(AVRHex.GetMemory(l)))); inc(l); inc(l); end; // checken ob ein Byte aus der Page geschrieben wurde // wenn dem so ist, kann erst die nächste Page geschrieben werden! {ISPInOut(32); //< Hi-Byte ISPInOut(k); ISPInOut(j); res := ISPInOut(0); }
// Schreibe Memory Page ISPInOut(76); ISPInOut(k); ISPInOut(j*16); ISPInOut(0); delay(10); //Memo1.Lines.Add('Schreibe Memory Page'); end; CLOSECOM; end;
Und das ist SPIInit (funzt auch sauber): // SPI Proceduren & Funktionen procedure SPIInit; var i:integer; begin TXD(1); // RTS(0); // Initialisierung einleiten Delay(100); TXD(0); Delay(100); TXD(1); Delay(100); for i:=1 to 4 do // Synchronisieren begin ISPInOut(172); ISPInOut(83); ISPInOut(0); ISPInOut(0); end; end;
Er schreibt die Werte einfach nicht sauber weg. Kannst du mir mal erklären auf was man da achten muss? Oder kannst du mir nochmal deine Funktion für das Flashen schicken?
Grüße Dominik