Moin,
ich habe hier folgende Situation: Und zwar programmiere ich einen
AT91SAM7A3 mit OpenOCD (2007-09-05 09:00 CEST) via Wiggler unter Ubuntu
mit der OpenOCD-Konfiguration, die es auf der Seite von Martin Thomas
gibt.
Das Programmieren funktioniert soweit. Allerdings startet das Programm
nicht automatisch, sondern der Reset bleibt low. Erst nachdem ich
entweder die Versorgungsspannung wegnehme und wieder anlege oder
alternativ den Wiggler abziehe, wird das Programm ausgeführt.
Da ich mit der gleichen OpenOCD-Konfiguration problemlos AT91SAM7S
programmiere und hier das Programm direkt nach der Programmierung
ausgeführt wird, bin ich ein wenig ratlos...
Hier nochmal die Skripte für OpenOCD:
openocd_at91sam7a3_flash.script:
--------------------------------
1 | halt
|
2 | sleep 10
|
3 | wait_halt
|
4 |
|
5 |
|
6 | # Init - taken form the script openocd_at91sam7_ecr.script
|
7 | mww 0xfffffd44 0x00008000 # disable watchdog
|
8 | mww 0xfffffd08 0xa5000001 # enable user reset
|
9 | mww 0xfffffc20 0x00000601 # CKGR_MOR : enable the main oscillator
|
10 | sleep 10
|
11 | mww 0xfffffc2c 0x00481c0e # CKGR_PLLR: 96.1097 MHz
|
12 | sleep 10
|
13 | mww 0xfffffc30 0x00000007 # PMC_MCKR : MCK = PLL / 2 ~= 48 MHz
|
14 | sleep 10
|
15 | mww 0xffffff60 0x003c0100 # MC_FMR: flash mode (FWS=1,FMCN=60)
|
16 | # arm7_9 force_hw_bkpts enable # program resides in flash
|
17 |
|
18 | # AT91SAM7 flash command-"batch"
|
19 | arm7_9 dcc_downloads enable
|
20 | flash probe 0
|
21 | flash write 0 ../bin/main.bin 0x0
|
22 | #flash erase 0 0 15
|
23 |
|
24 | sleep 10
|
25 | reset run
|
26 | sleep 10
|
27 | halt
|
28 | sleep 10
|
29 | mww 0xfffffd08 0xa5000000 # disable user reset
|
30 | reset run
|
31 | sleep 10
|
32 | poll
|
33 | shutdown
|
openocd_at91sam7a3_flash_wiggler.cfg:
-------------------------------------
1 | telnet_port 4444
|
2 | gdb_port 3333
|
3 |
|
4 | interface parport
|
5 | parport_port /dev/parport0
|
6 | parport_cable wiggler
|
7 | # try to increase value after jtag_speed if programming does not work!
|
8 | jtag_speed 0
|
9 | # try to increase value after jtag_nsrst_delay if programming does not work!
|
10 | jtag_nsrst_delay 50
|
11 |
|
12 | #use combined on interfaces or targets that can't set TRST/SRST separately
|
13 | reset_config srst_only srst_pulls_trst
|
14 |
|
15 | #jtag scan chain
|
16 | #format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
|
17 | jtag_device 4 0x1 0xf 0xe
|
18 |
|
19 | #target configuration
|
20 | daemon_startup reset
|
21 |
|
22 | #target <type> <startup mode>
|
23 | #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
|
24 | target arm7tdmi little run_and_init 0 arm7tdmi
|
25 | run_and_halt_time 0 30
|
26 |
|
27 | # flash-options AT91
|
28 | target_script 0 reset openocd_at91sam7a3_flash.script
|
29 | working_area 0 0x00200000 0x4000 nobackup
|
30 | flash bank at91sam7 0 0 0 0 0
|
Ich habe mich auch schonmal testweise an einem Reset-Skript versucht,
das nur den Mikrocontroller resettet (per JTAG). Für einen Moment läuft
während der Skript-Abarbeitung dann auch das Programm, aber sobald mit
"shutdown" das Skript endet, landet der Controller wieder im Reset. Mit
entsprechenden Delays kann man eindeutig feststellen, dass der
Controller hingegen vor dem shutdown nicht im Reset hängt...
Was muss ich ändern / hinzufügen, damit das Programm nach dem Flashen
des AT91SAM7A3 automatisch startet? Ich bin für jeden Tipp dankbar.
Gruß,
Daniel