Hallo Forum,
folgendes Problem liegt vor:
Ich habe einen Atmel Cortex-M3 Controller, genauer gesagt den
Arduino-Due (SAM3X8E), welcher sich ganz gerne mal von alleine zyklisch
resetet.
Den Controller programmiere ich ueber Atmel Studio 6.2 und den SAM ICE
Programmer von Atmel. Board und Programmer sind ueber JTAG verbunden.
Der Reset ist voellig unabhaengig vom Programmcode und tritt sogar bei
einem einfachen Programm wie:
1 | #include "sam.h" // kommt von Atmel
|
2 | #include <stdint.h>
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | SystemInit(); // kommmt ebenfalls von Atmel, freq. usw. wird eingestellt
|
7 |
|
8 | uint64 i = 0;
|
9 | while(1)
|
10 | {
|
11 | i++;
|
12 | }
|
13 | }
|
auf.
Der Reset tritt aber nicht immer auf! Es kann sein das ich das Programm
drei mal neu flashe und alles laeuft super. Beim vierten mal einspielen
kommt es dann zu dem Reset. Um diesen zustand zu beseitigen muss ich
ueber die Arduino-IDE (teilweise mehrmals) ein Programm auf den
Controller bringen, und das dann wieder ueber AS ueberschreiben, und
dann funktioniert es wieder ne weile, bis nach ein paar mal neu flashen
das spiel von vorne losgeht.
Reset bedeutet in allen Faellen, das der Reset_Haendler() angesprungen
wird!
Der Reset tritt (wenn er auftritt) immer Zyklisch auf, nach ziemlich
exakt 17.8 sekunden.
Das heisst:
Programm startet und laeuft.
Nach 17.8 Sekunden wird der Reset_Handler angesprungen.
Programm beginnt von vorne.
Nach 17.8 Sekunden wieder reset
und immer so weiter.
Der Reset wurde auf mehreren Wegen bestaetigt:
1. Wenn ich das Programm im Debug laufen lasse, springt Atmel Studio
nach besagter Zeit in den Reset_Handler und haelt das Programmm an.
2. Das verhalten ist ebenfalls ueber eine LED visualisierbar.
Erst hatte ich den Verdacht das der Controller auf dem Board vielleicht
einen Schuss hat, also hab ich mir einen neuen Arduino-Due besorgt, aber
Pustekuchen: selbes verhalten!
Es spielt auch keine Rolle, ob ich das Board ueber MikroUSB oder ein
12V-Netzteil mit Spannung versorge. Bei Versorgung ueber MikroUSB ist es
ebenfalls egal, ueber welche von den zwei USB-Buchsen auf dem Due ich
das Board versorge.
Was mir noch auffaellt:
Egal was ich mache, ich kann das Due-Board immer ueber die Arduino-IDE
flashen.
Zum Vergleich:
Nehme ich das Arduino Mega2560, verbinde das ueber einen Programmer mit
Atmel Studio, und sage dann in AS "Erase Chip", dann ist der Controller
danach nicht mehr ueber die Arduino-IDE ansprechbar, logisch, der
Bootloader wurde ja auch geloescht.
Beim Due kann ich machen was ich will, er ist immer ueber die
Arduino-IDE flashbar, also auch noch nach einem "Erase Chip".
Ich habe den Verdacht das der Bootloader, der irgendwo liegt, wo ich ihn
nicht ohne weiteres loeschen kann, den Reset ausloesen koennte.
Zusammenfassung:
Der Reset tritt nicht nach jedem Flashvorgang auf.
Wenn er auftritt, dann immer Zyklisch nach 17.8 Sekunden, und dann immer
und immer wieder nach besagter Zeit.
Der Reset ist unabhaengig vom Programmcode.
Reset bedeutet anspringen des Reset_Handler()
Habt ihr vielleicht eine Idee wie ich rausbekommmen koennte, was den
Reset genau ausloest?
Ich bin fuer jede Hilfestellung dankbar!