Hallo,
hoffentlich kann mir jemand bei meinem Problem helfen.
Und zwar programmiere ich einen ATMEGA128 mit einem Hexfile, das einen
Bootloader und Application beinhaltet. Beides wird also gleichzeitig
programmiert. Lockbits sind keine gesetzt, somit alles frei
programmierbar. Alle Fuse und Lockbits sind richtig eingestellt, da
diese Einstellungen in der Produktion in meiner Firma bei 50+ Stück auch
so funktioniert hat. Bei 7 Stück allerdings nicht.
Nun ist das Problem, dass nach einem Programmieren und anschließendem
Verify scheinbar alles programmiert ist. Liest man nun das Flash nochmal
aus, ist es bis auf den Bootloader leer. Dies habe ich schon mit 3
verschiedenen Programmiertools und Programmern probiert, mit dem selben
Ergebnis. Programmiert man nur die Application ohne Bootloader
funktioniert das Schreiben ins Flash, da beim Lesen alles so drinsteht
wie es sein soll und die Applikation läuft.
Was kann das Problem sein?? Hatte irgend jemand schon mal so eine
Situation. Der ATMEGA wurde auch schon getauscht, und dennoch das selbe
Problem.
Danke schon mal für die Hilfe!
Hallo Zusammen,
Habe die letzten Tage intensiv getestet und den Fehlerherd gefunden.
Ganz kann ich mirs nicht erklären, aber zumindest gehts nun.
Also, als erstes habe ich ein kleines Demo Board gebastelt um die
scheinbar defekten ATMEGA128 dort mal zu programmieren. Habe dabei nur
die nötigen Pins angeschlossen und sonst nichts weiter. Siehe da, es
ging auf einmal.
Daher war mein Schluss, irgendetwas in der Schaltung verursacht den
Fehler und lässt mich den ATMEGA nicht 100% programmieren. Da es nur ein
Bauteil gibt, das die Pins der Programmierschnittstelle teilt, habe ich
mir das ATMEL Datenflash (AT45DB161) angesehen. Dieses hängt mit der SPI
Schnittstelle an dem ATMEGA128 dran. Das Datenflash teilt den SCK Pin
mit der ISP Schnittstelle.
Nach dem Entfernen des Datenflashs aus einer defekten Karte
funktionierte das Programmieren auf einmal wunderbar. Daher ist das
Datenflash das Problem. Der einzige Pin der wirklich zw. Datenflash und
Programmierschnittstelle geteilt wird, ist der SCK Clock der SPI. Dies
ist aber nur ein Eingang für das Datenflash. Habe dann das Datenflash
wieder an den ATMEGA angeschlossen, außer den SCK Pin. Siehe da, der
ATMEGA ging noch immer toll zu programmieren. Dann hab ich den SCK Pin
kontaktiert und es ging nicht mehr.
Mittles Logic Analyzer hab ich mir mal die Pins der
Programmierschnittstelle angesehen und vor allem den SCK Pin. Der Clock
kommt allerdings wunderbar, egal ob der SCK Pin am Datenflash hängt oder
nicht.
Nachdem ich das Datenflash als Fehlerherd identifiziert hatte, habe ich
nun ein neues Datenflash eingebaut und alle Pins kontaktiert. Siehe da
nun gehts auf mit Datenflash. Daher dürfte bei den defekten Boards das
Datenflash kaputt sein. Warum der SCK Pin dennoch schön hin und her
toggelt versteh ich aber nicht. Also den eigentlichen Fehler hab ich
nicht gefunden.
Vielleicht fällt euch ja ein, was den Fehler wirklich verursacht hat.
Ansonsten ist es vielleicht eine interessante Geschichte, von der man
was lernen kann.
lg
Gernot
Das Dataflash muss an seinem /CS-Eingang einen Pullup-Widerstand nach
Vcc haben. Nur dann hält es während des Programmierens des Controllers
am selben SPI die Klappe und wird auch nicht durch die Programmierpulse
beeinflusst.
Hallo Knut,
danke für den Tipp.
Aber das ATMEL Datenflash benutzt MISO und MOSI (PB3, PB2) des
ATMEGA128, während beim Programmieren die MISO, MOSI Leitungen auf PE0,
PE1 gemappt werden. Daher sind diese Leitungen ja gar nicht verbunden
und somit kann der Mist vom Datenflash nichts ausmachen!? Oder vergess
ich da was wichtiges?
Habe es dennoch probiert mit dem Pull-Up, da der fehlte. Aber auch das
brachte nichts. Mein Kollege meinte, vlt. ist die Kapazität am Eingang
des SCK pins des Datenflash zu hoch. Also Pull-Up am SCK Pin. Aber das
brachte ebensowenig.
lg
Gernot
Gernot M. schrieb:> Aber das ATMEL Datenflash benutzt MISO und MOSI (PB3, PB2) des> ATMEGA128, während beim Programmieren die MISO, MOSI Leitungen auf PE0,> PE1 gemappt werden. Daher sind diese Leitungen ja gar nicht verbunden> und somit kann der Mist vom Datenflash nichts ausmachen!? Oder vergess> ich da was wichtiges?
Das ist erstmal richtig. Dennoch kann das Dataflash durch den im RESET
befindlichen Controller und die somit floatenden Interface-Leitungen
irritiert werden und somit kaputtprogrammiert werden (Lock-Status).
Gernot M. schrieb:> Mein Kollege meinte, vlt. ist die Kapazität am Eingang> des SCK pins des Datenflash zu hoch.
Nein. Ich kann mit Bestimmtheit sagen dass dies nicht der Fall ist, da
wir hunderte Platinen mit genau derselben Konfiguration +
Netzwerk-Controller am SPI des Mega128 haben und das Programmieren immer
problemlos funktionierte.
Gernot M. schrieb:> Also Pull-Up am SCK Pin. Aber das> brachte ebensowenig.
Da gehört keiner hin. Du hast bestimmt ein anderes Problem. Wie hoch ist
denn die ISP-Frequenz und welchen Programmer benutzt Du?
Habe schon 3 verschiedene Programmer benutzt.
In unserer Produktion wird der Kanda AVR USB benutzt mit Standard
Frequenz 250kHz. Ich habe dann noch den AVR ISP mkII und das AVR Dragon
benutzt, welche genau dasselbe Problem lieferte. Frequenzen habe ich
schon einige ausprobiert. Nichts höher als 1MHz, da die Taktfrequenz des
ATMEGA nur ca. 7Mhz ist.
Ich werd mal mit dem Logic Analyzer oder Scope schauen ob das Flash
nicht doch Mist sendet ohne Pull-up und dann probier ichs nochmal mit
dem Pull-Up am /CS Eingang.
Gernot M. schrieb:> In unserer Produktion wird der Kanda AVR USB benutzt mit Standard> Frequenz 250kHz.
Der Mega läuft bis zum ersten Umstellen der Fuses nur mit 1Mhz, 250kHz
ISP Frequenz sind somit grenzwertig.
Gernot M. schrieb:> schauen ob das Flash> nicht doch Mist sendet ohne Pull-up
Davon kannst Du ausgehen. Der PullUp ist absolut notwendig.
Was sind die Versorgungsspannungen?
Das Dataflash scheint 2.5/2.7V zu benötigen, der Atmel aber 5V, oder?
Welche Spannung liefert der Programmierer? Kann dabei der SCK Eingang
vom Flash kaputtwerden?
@Knut: Ja das Datenflash schickt ordentlichen Mist. Habe testweise den
CS Pin getrennt, dafür aber SCK Pin angeschlossen. Siehe da es geht.
Mittels Scope sieht man auch das der CS Pin vom ATMEGA128 enabled wird
und dadurch der Mist vom Datenflash entsteht. Nun ist die Frage, warum
der Pull-Up auf den /CS Pin des Datenflash nichts hilft. Bekomme nach
wie vor die Flanke auf dem Pin. Habe schon 100 Ohm und 1k ausprobiert.
Was nehmt ihr denn?
Klaus Falser schrieb:> Das Dataflash scheint 2.5/2.7V zu benötigen, der Atmel aber 5V, oder?> Welche Spannung liefert der Programmierer? Kann dabei der SCK Eingang> vom Flash kaputtwerden?
Das DataFlash läuft von 2.7...3.6V. Alle Eingänge sind 5V-tolerant. Also
keine Sorge.
Gernot M. schrieb:> Nun ist die Frage, warum> der Pull-Up auf den /CS Pin des Datenflash nichts hilft. Bekomme nach> wie vor die Flanke auf dem Pin.
Welcher Pin des Mega128 wird für /CS verwendet? Normalerweise gehen alle
Pins des Mega128 auf tristate, wenn er Low auf /RESET sieht.
DANKE Knut!!!
Endlich des Rätsels Lösung gefunden!
Der 10K Widerstand als Pull-Up funktioniert.
Eine Woche Testen und Debuggen um das herauszufinden.
Danke nochmal recht herzlich für die nette Hilfe!!
Schönen Tag noch!
lg
Gernot
PS: Der CS Pin am Datenflash hängt am SS Pin der SPI Schnittstelle
Oje,
habs nochmal geprüft.
Hatte den ATMEGA SS Pin noch nicht wieder verbunden.
Wenn ich die CS Leitung fix auf 3V3 lege gehts.
Aber 10k Pull-UP gehen auch nicht.
Irgendwie komisch. Es hängt nur das Datenflash und der ATMEGA128 am CS
Pin.
Irgendwelche Ideen?
Ich probier nun nochmal 100 Ohm, 1k und 4k7 aus.
Mach mir aber keine Hoffnungen.
Erst ein Pull-Up von 33 Ohm funktionierte.
Allerdings ist der Strom dann schon bei 100mA.
Das könnte den ATMEGA schon schaden?!
Warum funktionieren keine höheren Pull-Ups??
Die Frage ist doch: wieso gibt der ATMEGA während des RESET überhaupt
einen Pegel aus? Es liegt dann wohl nicht am DataFlash. Kurzschluss auf
der Platine?!