AVR Flash läßt sich nicht programmiere n

Hallo,

ich verwende gerade den ATmega324PA in einer neuen Anwendung und m=F6chte=

dort einen IAP-Lader (f=FCr Software-Updates im laufenden Betrieb) einbau= en.

Der IAP-Lader liegt am oberen Ende des Flash (im RWW Bereich) und macht alles exakt so, wie es im Datenblatt und diversen Application Notes beschrieben ist.

Trotzdem scheint der SPM Befehl einfach gar nichts zu tun. Es wird weder des Flash gel=F6scht, noch neue Daten hineingeschrieben. Es gibt auch keine me=DFbare Verz=F6gerung zwischen der Ausf=FChrung von SPM und dem anschlie=DFenden Inaktivwerden von SPMEN.

Ich habe mir einige (angeblich funktionierende) Bootlader angesehen, aber dabei keinen Unterschied gefunden. Woran k=F6nnte es liegen, da=DF d= as Flash sich partout nicht l=F6schen bzw. schreiben l=E4=DFt?

Hier der Code (IAPBase liegt auf Wort-Adresse 0x1E00):

--
; Erase Flash from 0x0000 up to IAP loader:

		...
 Click to see the full signature
Reply to
Tilmann Reh
Loading thread data ...

Tilmann Reh schrieb:

Ohne Dir zu nahe treten zu wollen: sind die Lock- und Fusebits richtig gesetzt?

--
Mit freundlichen Grüßen
Andreas Graebe
 Click to see the full signature
Reply to
Andreas Graebe

Andreas Graebe schrieb:

er

ch

PM und dem

Ja, zig-mal kontrolliert: keinerlei Lockbits aktiviert.

Und bei den Fuses gibt es interessanterweise kein Bit f=C3=BCr "Self Programming Enable", wie man das von anderen AVR kennt.

Tilmann

Reply to
Tilmann Reh

Das Ende des Flashes und die Bootloader Section liegen aber im NRWW Bereich.

Sieht auf den ersten Blick nicht verkehrt aus. Vielleicht doch ein Trivialproblem: Du machst rcall/ret, d.h. der Stackpointer muss vorher initialisiert werden. Und die Interrupts sollten deaktiviert sein damit es keinen SPMEN Timeout gibt.

Oder ganz anders: Es wurde mal eine falsche Adresse uebergeben und dadurch hat sich der Bootloader selbst zerschossen.

Micha

Reply to
Michael Baeuerle

Die gibt's nur bei den ganz kleinen AVRs. Bei den großen (wie der '324 es ist) gibt es BOOTSZ0/BOOTSZ1, die die Größe des Bootloader-Bereichs festlegen. Allerdings ist der voreingestellte Wert im Auslieferungszustand so, dass der gesamte NRWW-Bereich als Bootloader-Bereich zugelassen ist.

Rein von dem, was du da aufgeschrieben hast, ist nicht klar, warum es nicht funktioniert.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
 Click to see the full signature
Reply to
Joerg Wunsch

Michael Baeuerle schrieb:

t

Ja, sorry - NRWW war gemeint.

Nat=FCrlich ist der Stackpointer gesetzt, der ganze Rest des IAP-Laders (incl. serieller Kommunikation mit definiertem Protokoll) l=E4uft auch perfekt. Interrupts sind global aus, die kann ich im ganzen Lader nicht brauchen (Kommunikation l=E4uft vollst=E4ndig per Polling).

Schon der frisch per ISP geflashte Lader ist nicht in der Lage, auch nur eine einzelne Page ganz unten (weit abseits des Laders selbst) zu l=F6sch= en. (Au=DFerdem lehnt der Lader nat=FCrlich schon bei der Kommunikation Adres= sen ab, die ihm gef=E4hrlich werden k=F6nnten.)

Tilmann

Reply to
Tilmann Reh

CPU mal wechseln. Klappt das nur mit einer bestimmten CPU nicht oder ist das ein generelles Problem dieses Typs/HertellerS?

Kenne den AVR nicht, hab früher (tm) schon mal ähnliche Probleme mit ADuC 812(?) gehabt. Prototyp und 1. Serien gingen. Dann waren einige CPUs serienmässig mit dem Problem behaftet.

Typische support Antwort ... das kann garnicht sein... Sie sind der Erste, der sowas behauptet... liegt an ihrer SW... bei allen anderen gehts... ...und nach einem halben Jahr gabs dann ganz kleinlaute ECOs :( Aber auch ein redesign mit SiLabs :)

Saludos Wolfgang

--
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
 Click to see the full signature
Reply to
Wolfgang Allinger

Dann solltest du vielleicht auch mal die Hardware verdaechtigen, chinesischer Fake macht bekanntlich auch vor AVRs nicht Halt. Statt einen voellig falschen Chip einzubauen kaufen die vielleicht mittlerweile auch halbkaputten Ausschuss auf (und "entsorgen" ihn dann bei ihren Kunden).

Auch denkbar waere ein noch undokumentiertes Errata. Das gab es IIRC schonmal bei einem aelteren Modell, das liess sich nur bei bestimmten Spannungen programmieren, also nicht im gesamten Bereich den das Datenblatt spezifizierte.

Micha

Reply to
Michael Baeuerle

Wolfgang Allinger schrieb:

t =20

Die, die ich von diesem Typ habe, stammen alle aus einer Charge. Ich k=F6nnte h=F6chstens mal einen 164P oder einen 644P testen, davon habe ic= h Muster.

Ein generelles Problem sollte es eigentlich nicht sein, denn angeblich gibt es viele IAP-f=E4hige Produkte auf AVR-Basis.

( =20

Ich w=E4r schon froh, wenn der Atmel Support /=FCberhaupt/ irgendetwas au= f meine Anfrage antworten w=FCrde. :-\ Keinerlei Reaktion bislang.

Tilmann

Reply to
Tilmann Reh

Nichtmal eine Ticketnummer? Dann hast du was falsch gemacht, denn die wird automatisch vergeben. Ansonsten ist die Policy, glaub ich, dass sich innerhalb von 3 Werktagen jemand mit deinem Problem befasst haben soll.

Ich habe mal spaßeshalber einen ATmega324P in einen STK500 gesteckt (der PA sollte dazu logisch identisch sein, da es sich nur um eine "die shrink"-Version handelt), und dort das folgende Programm geflasht (sorry, ist in C/AVR-GCC, zum Assembler bin ich zu faul):

#include #include #include

int main(void) { uint8_t b; uint16_t i; uint16_t page = 0;

b = pgm_read_byte((void *)0); if (b == 0xff) { /* unprogrammed first flash page */ boot_page_erase (page); boot_spm_busy_wait ();

for (i=0; i>> d fl

0000 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |......... ..| 0010 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |................| 0020 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f | !"#$%&'()*+,-./| 0030 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |0123456789:;?|

avrdude> d fl

0040 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |@ABCDEFGHIJKLMNO| 0050 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |PQRSTUVWXYZ[\]^_| 0060 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |`abcdefghijklmno| 0070 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |pqrstuvwxyz{|}~.|

avrdude> d fl

0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|

Hier mal das Hexfile als Referenz:

:107000000C943E380C9448380C9448380C9448380A :107010000C9448380C9448380C9448380C944838F0 :107020000C9448380C9448380C9448380C944838E0 :107030000C9448380C9448380C9448380C944838D0 :107040000C9448380C9448380C9448380C944838C0 :107050000C9448380C9448380C9448380C944838B0 :107060000C9448380C9448380C9448380C944838A0 :107070000C9448380C9448380C94483811241FBE9E :10708000CFEFD8E0DEBFCDBF0E944A380C947638EF :107090000C940038E0E0F0E0E491EF3F21F5E0E00F :1070A000F0E083E080935700E89507B600FCFDCF41 :1070B000E0E0F0E021E031969E2F882731978E0F97 :1070C0009F1F0C0120935700E89511243296E03859 :1070D000F10589F7E0E0F0E085E080935700E8955E :1070E00007B600FCFDCF80E090E00895F894FFCF54 :040000030000700089 :00000001FF

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
 Click to see the full signature
Reply to
Joerg Wunsch

Hallo Tilmann!

Hast Du's mal über einen Distri versucht? MSC ist meines Wissens nach recht hilfsbereit. Für direkten Support von Atmel sind Deine Stückzahlen u.U. zu klein ;)

Gruß Thorsten

--
PGP welcome!
Thorsten online: http://www.ostermann-net.de/electronic
 Click to see the full signature
Reply to
Thorsten Ostermann

Joerg Wunsch schrieb:

auf

Doch, Ticket habe ich - aber sonst noch nichts. Nach gut zwei Tagen ist der Fall immer noch "Open" - aber gut, bis morgen h=E4tten sie demnach noch Zeit. Drei Tage k=F6nnen in so einem Fall aber schon sehr lang werden... :-\

Hier ist =FCbrigens aktuell auch ein 324P drin, Fehlangabe meinerseits.

Vielen Dank f=FCr den Testcode. K=F6nntest Du mir rein informativ noch da= s Assemblerlisting aus dem Compiler schicken? (Mailadresse funktioniert.)

Danke, Tilmann

Reply to
Tilmann Reh

Thorsten Ostermann schrieb:

auf

=20

ahlen=20

Daf=FCr hat Atmel extra eine "MCU Hotline", die ich auch fr=FCher schon genutzt habe. Nach St=FCckzahlen wird da bei der Eingabe =FCbrigens nicht=

gefragt.

Tilmann

Reply to
Tilmann Reh

Wenn der Loader im NRWW liegt, liegt er dann nur in der App Table oder tatsächlich in der BL Section? SPM muss im Bootloader liegen, nur NRWW alleine ist nicht ausreichend (S.11: "The SPM instruction that writes into the Application Flash memory section must reside in the Boot Program section.")

Gruß, Henrik

Reply to
Henrik Faber

Joerg Wunsch schrieb:

=2E.|

=2E.|

=2E/|

NO|

^_|

no|

~.|

Dein Code gibt bei mir das gleiche Ergebnis. Jetzt mu=DF ich also "nur noch" [tm] den entscheidenden Unterschied finden...

Vielen Dank!

Tilmann

Reply to
Tilmann Reh

Im Code kann ich keinen Fehler finden, allerdings könnte man den auch etwas hübscher schreiben, so daß er automatisch auf jede Pagegröße paßt. Aber das ist Kosmetik und hat mit dem geschilderten Problem sicher erstmal nix zu tun.

Das Thema Interrupts wurde ja bereits im Thread behandelt, scheint soweit auch OK zu sein. Aber zur Sicherheit kann es nicht schaden, DoSPM testweise mit einem kleinen "cli" direkt vor "out SPMCSR,r16" zu ergänzen. Der eine Takt mehr macht den Kohl sicher nicht fett, aber er sorgt dafür, daß im entscheidenden Moment sicher nix schief geht.

Interessant wäre vielleicht noch die Stromversorgung. Mit welcher Spannung läßt du das Ding eigentlich laufen? Schonmal eine andere (höhere) probiert?

Reply to
Heiko Nocon

Sowas kenne ich auch, da musste vor und hinter dem out ans Flash noch ein NOP stehen, sonst kam die statemachine im Flash aus dem Tritt.

Die Beispiele waren alle in C und relativ umständlich, von Hand per ASM waren da nur die Minimalzahl von Taktzyklen drin. Gelernt ist gelernt :(

Das erinnert mich an ein anderes Flash Problem. uC hab ich vergessen, aber da musste der PF und der brownout detector explizit vorher abgeschaltet werden, sonst murkste er dazwischen. Aber nicht unter allen Bedingungen. War auch so ein Lotto Generator, der schlaflose Nächte bereitet hat. Viel später kamm dann eine Errata, wo das beschrieben wurde. Schienen im Endeffekt Masse Probleme im Chip gewesen zu sein. Die rel. hohen Ströme fürs flashen machte den Detektor wuschig!

Sieh mal nach, was da auf dem AVR alles so gespielt wird.

Saludos Wolfgang

--
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
 Click to see the full signature
Reply to
Wolfgang Allinger

snipped-for-privacy@spambog.com (Wolfgang Allinger) schrieb:

AVRs sind bezüglich Errata eher unspektakulär, auch Flashen bis zur minimal garantierten Versorgungsspannung ist dort kein Thema. Irgendwo auf avrfreaks.net gibt's auch noch eine Liste inoffizieller Errata (teilweise sind sie dann später auch offizialisiert worden).

Da mein Code auf seinem Controller jedoch funktioniert, muss das Problem woanders liegen.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
 Click to see the full signature
Reply to
Joerg Wunsch

Heiko Nocon schrieb:

e pa=DFt.

Wird ganz sicher noch gemacht, aber erstmal mu=DF es laufen...

M
r

Aus ist aus. CLI steht ganz am Anfang des Programms - auch das schon nur zur Sicherheit, denn nach Reset sind die Interrupts abgeschaltet.

Lieber keine h=F6here probieren - es sind schon 5 V. :-)

Wie wir inzwischen festgestellt haben, mu=DF es schon irgendwas mit dem Code zu tun haben, J=F6rgs Progr=E4mmchen l=E4uft ja hier.

Tilmann

Reply to
Tilmann Reh

Die Megas vielleicht. Bei den XMegas ist das eine *ganz* andere Geschichte :-(

Henrik

Reply to
Henrik Faber

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.