Hi,
ich entwickel derzeit fuer eine Firma ein System welches einen Spartan6
LX45 und einen AT91SAM7X256 Controller beinhaltet. Beide sind ueber JTAG
angebunden. Die Konfiguration des Controllers erfolgt dabei ueber
OpenOCD. Das Beschreiben des Controller Flashs funktioniert. Das Problem
ist, dass nach der Konfiguration alle IO Pins High Level (3,3V) fuehren.
Egal welches Programm auf den Controller geladen wird. Die
Initialisierung (LowLevelInit) ist soweit "standard", also die die auch
von Atmel zur Verfuegung gestellt wird. Ebenso das OpenOCD Script. Die
Beschaltung des Controllers ist soweit auch nicht ungewoehnlich (siehe
Anhang). Was ich bereits geprueft habe sind die
Versorgungsspannungspegel (3,3V und 1,8V), diese sind genau so wie sie
sein sollten, Kurzschluesse habe ich soweit ausgeschlossen. Des weiteren
habe ich den Quarz vermessen. Dieser schwingt mit 18,432MHz mit einer
Amplitude von ca. 250mV, allerdings mit einem leichten DC Offset.
Koennte bereits das dieses Problem verursachen?
So langsam bin ich am Verzweifeln. Meine Annahme ist, dass der
Controller vielleicht defekt ist, allerdings moechte ich wirklich alles
ausschliessen bevor ich mich ans Umloeten mache. Waere super wenn Jemand
mit mehr Erfahrung mit ARM Controllern mir einen Rat geben koennte.
Ich kenne mich an der Low-Level-Front jetzt auch nicht wirklich aus,
aber köntest du nicht einfach mal ein einfaches "Blinke"-Skript per
Samba draufspielen? Die kostenfreie Keil-Version dazu vielleicht
verwenden, damit kannst du ein paar Kbyte Programmcode in deinen AT91
schubsen.
Siehst du den an der Debug-Schnittstelle das Romboot?
Danke fuer die Antwort. Ich habe bisher noch nie SAM-BA benutzt. Vor
einem Jahr habe ich bereits mit einem AT91SAM7 gearbeitet, damals
allerdings auf einer nicht selbst entwickelten Leiteprlatte. Habe immer
direkt ueber JTAG programmiert. Die Entwicklungsumgebung war die selbe
wie jetzt (selber Rechner). Soweit ich gelesen habe erforder samba auch
eine Beschaltung die ich nicht implementiert
Die Meldungen der Kofiguration sehen wie folgt aus:
1
**** Build of configuration Default for project pcb_fw ****
AT91C_BASE_AIC->AIC_ICCR=0xFFFFFFFF;// Clear all interrupts
87
AT91C_BASE_AIC->AIC_IDCR=0xFFFFFFFF;// Disable all interrupts
88
89
AT91C_BASE_RSTC->RSTC_RMR=(((unsignedint)0xA5<<24)|AT91C_RSTC_URSTEN);// allow user reset
90
91
//enable clocks for pioa and piob
92
pPMC->PMC_PCER=(1<<AT91C_ID_PIOA);
93
pPMC->PMC_PCER=(1<<AT91C_ID_PIOB);
94
95
}
Ich weiss das es viel Code zum durchsehen ist. Waere wirklich nett wenn
jemand sich das mal antut :) Vielleicht uebersehe ich in meiner
Betriebsblindheit ja eine Kleinigkeit. Aber ist es trotz aller
Konfiguration nicht sehr merkwuerdig das wirklich alle IOs auf High
gehen?
Also ich komme mit den Startup-Skripten nie zurecht, ich kann die
einfach nicht richtig lesen. Daher nur so ein Schuss ins Blaue.
Nach dem Reset sind alle IOs als Input mit aktiviertem Pullup
beschaltet. Hast du dich nur wegen der Pullups vermessen?
Die Programme, die du geladen hast, setzen die auch die
Input/Output-Register? Ich sehe im Startup nichts, was die IOs als
Ausgang/Low initialisiert. Das könnte man doch mal testen? Oder einfach
die Pullups ausschalten.
Hoffentlich erzähle ich keinen Mist, das ist wirklich noch nicht mein
Fachgebiet;-)
Das ist definitiv kein Mist. Das die Pullups nach dem Reset aktiv sind
war mir nicht bewusst. Ich werde es heute im Laufe des Tages auf jeden
fall ausprobieren und die Ergebnisse hier schreiben. Besten Dank!
Wie Achim schon erwähnte den Clock aktivieren.
Zusätzlich würde ich mir in der Main einen Ausgang toggeln lassen. Da
hängst du dann eine LED dran. Somit siehst du immer, ob dein Prozessor
noch läuft. Ich habe auch immer gerne eine serielle Debug-Schnittstelle.
Da gebe ich mir die Debug-Meldungen der einzelnen Tasks aus. Ich würde
an deiner Stelle versuchen erst einmal ein fertiges kleines Programm zu
laden. Funktionieren die Sourcen von Atmel für OpenOCD? Dann hättest du
die Sicherheit, dass deine Startup.s nicht die Ursache ist.
Ich kann leider keine LED dran haengen da es ein eigenes Layout und kein
Entwicklungsboard ist. Ich messe an Testpads mit dem Oszilloskop die
Signalpegel. Die Main Funktion sieht nun so aus. PA25 sollte jetzt sehr
schnell toggeln.
AT91C_BASE_PIOA->PIO_SODR=AT91C_PIO_PA25;// Set pin state to 'high
13
AT91C_BASE_PIOA->PIO_CODR=AT91C_PIO_PA25;// Set pin state to 'low
14
15
16
17
18
}
Leider tut sich nach wie vor garnichts. ALle Pins haben 3,3V. Ich bin
immer noch recht neu auf dem Gebiet AT91SAM7 und ARM Controller
ueberhaupt. Welche Sourcen von Atmel für OpenOCD meinst du
Stromverdichter?
Vielen Dank fuer den Link. Ich werde es jetet ausprobieren. Worum es mir
derzeit aber hauptsaechlich geht ist ein Hardware Problem
Auszuschliessen (Siehe Schaltplan am Anfang im Eroeffnungsbeitrag), also
ob das Layout oder der Controller selbst vielleicht fehlerhaft sind.
Koennte es sein das der Takt nicht funktioniert? Ich habe gerade den XIN
Eingang vermessen und das Oszillogramm angehangen. Die Einstellung ist
0,05µS/Div Timebase und 100 mV/Div Amplitude. Sollte so ein Taktsignal
aussehen? Am PLLRC Pin ist nichts zu sehen... CH2 (das 0 Signal) zeigt
den Nullpunkt an.
Das Oszillogramm sieht gut aus: knapp 19 MHz, 180 mV.
Tipp: Keil Entwicklungsumgebung runter laden, damit kann du
Mini-Programm (Blinky.c) laden und mit deinem Debugger Schritt für
Schritt durch das Programm gehen, und sehen was geht und was nicht geht.
Dein Debugger wird imho nicht von Keil unterstützt. Was funktionieren
sollte ist der Blinky-Code für IAR. Damit sollte auch dein Debugger
funktionieren.
http://www.iar.com/Service-Center/Downloads/
Viel Glück.
Vielleicht kannst ja noch ein ICE für Keil auftreiben. Baremetal mit
Arm7 und Arm9 ist halt schon etwas heftig. Da gibt es nicht viel im
Netz, und was man so findet ist auch nicht immer alles korrekt. Ein
Kollege kämpft gerade mit dem arm9G25 in Baremetal. Der hat vielleicht
geflucht;-)
Da hast du allerdings recht, ist wirklich nicht ohne... Das lustige ist,
dass der Spartan6 im CSG384 Package (BGA) auf dem Board hervorragend auf
anhieb funktioniert und der µC nach fast einer Woche immer noch nicht.
Soll heissen ich bin auch seit einer ganzen Weile am Fluchen :D Ist halt
sehr schwierig festzustellen ob es ein Firmware oder Hardwareproblem
ist... Wobei ich als Entwickler im Hinterkopf irgendwie immer von
letzterem ausgehe, zumal eine Firmware, welche exakt auf dem gleichen
Controller und mit der selben Toolchain mal lief auf dieser Hardware
keinen Muks macht :(
Und es geht immer weiter :) Habe jetzt IAR Workbench als Freeware Lizenz
installiert und das Getting Startet Project von hier
http://www.atmel.com/tools/AT91SAMSOFTWAREPACKAGE.aspx fuer den
AT91SAM7X256 geflasht. Leider mit dem selben Ergebnis, alle Pins sind
auf high und nichts passiert... Laut Debugger laeuft das Programm sauber
durch, aber die IO Pins machen rein garnichts.
Hallo Sergej,
das ist ja richtig schade, dass dein Board immer-noch nicht laufen will.
Verstehe ich das richtig, dass laut Debugger das Ausgangsregister mit
dem blinky.c-Code toggelt, du real aber nichts messen kannst? Die
Wahrscheinlichkeit eines Hardware-Defektes steigt rasant :-(
Ich denke für dich wäre so ein Referenz-Board wie das von Olimex ganz
hilfreich.
https://www.olimex.com/Products/ARM/Atmel/SAM7-EX256/
Vielleicht kannst du deinen Arbeitgeber überreden, euch ein solches
anzuschaffen. Die 60 Euro sind ganz gut investiert. Wenns nix kosten
soll, gibts hier das Board für 20Euro, frag mich aber nicht wieso
http://www.dontronics-shop.com/sam7-ex-256-development-board-for-or-at91sam7x256-arm7tdmi-s-microcontroller.html
Viel Glück,
garp
Hi Alle zusammen. Es gibt gute Neuigkeiten. Das Toggeln der LEDs lauft
jetzt. Das ganze funktioniert ueber OpenOCD als GDB Server in
Kombination mit dem Olimex USB Tiny H Dongle. Habe jetzt die Config
Files angepasst und bekomme mit IAR Workbench tatsaechlich
Rechtecksignale auf den Schirm :). So ganz trau ich der Sache noch
nicht, aber es ist auf jeden Fall ein riesen Fortschritt. Fuer den Fall,
dass jemand Anders mal so ein Problem mit den Tools haben sollte, haenge
ich hier noch die OpenOCD Target CFG fuer den AT91SAM7 an, die bei mir
funktioniert hatte. Ich danke euch allen sehr fuer eure Hilfe,
hoffentlich laeuft die Sache jetzt rund!
1
#use combined on interfaces or targets that can't set TRST/SRST separately
2
reset_config srst_only srst_pulls_trst #srst_gates_jtag srst_open_drain none separate
Und es wird immer besser :) Nachdem ich das Board einmal mit der IAR
Umgebung beschrieben hatte, habe ich jetzt wieder die andere
Entwicklungsumgebung getestet ohne was daran zu aendern und siehe da, es
funktioniert auf einmal. Sehr mysterioes.... wirklich sehr, aber es
funktioniert nun wie es soll :) Frage mich nur was das gewesen sein
koennte, fuer das naechste mal.
Hey Leute ich melde mich mal wieder mit interessanten Neuigkeiten. Ich
denke das Problem gefunden zu haben warum das System nicht funktioniert
hatte. Der AT91SAM7 hat nvmbits, das zweite entscheidet ueber die boot
selection und muss gesetzt werden, wenn SAM-BA nicht benutzt wird. Ich
dachte auch dies getan zu haben da es ja in der OpenOCD Config
eingetragen ist. Jetzt habe ich die Programmiermeldungen ausgewertet.
Als es noch nicht funktioniert hatte stand da:
Pagesize: 256 bytes | Lockbits(16): 0 0x0000 | Pages in lock region: 0
Securitybit: 0 | Nvmbits(3): 0 0x0
Anscheinend hat das setzten des Bits also nicht geklappt. IAR Workbench
hat es wohl richtig gemacht. Jetzt wo es funktioniert, sieht die Meldung
wie folgt aus:
Pagesize: 256 bytes | Lockbits(16): 0 0x0000 | Pages in lock region: 0
Securitybit: 0 | Nvmbits(3): 0 0x4
Die 0x4 ist entscheidend, jetzt ist das Bit offensichtlich gesetzt
worden.
Ich danke euch Allen nochmals fuer die grossartige Hilfe. Vielleicht
hilft dieser Thread mal jemandem weiter.