Forum: Mikrocontroller und Digitale Elektronik Flash Programmierung AT91SAM7A2 AU (Olimex Board SAM7-LA2)


von Martin (Gast)


Lesenswert?

Hi,

nach vielem Googeln mit wenig brauchbaren Ergebnissen möchte ich an 
Leute vom Fach wenden. Ich habe vor Kurzem ein Olimexboard SAM7-LA2 mit 
einem Arm-USB-Tiny Jtag Debugger und möchte mit Yagarto / OpenOCD das 
Board zum Laufen bringen. Das Board ist mit einem MX26LV800BTC Flash 
Speicher 1Mb ausgerüstet. Zudem befindet sich noch ein Ethernetchip 
DM9000EB darauf. Der AT91SAM7A2 hat kein internes Flash.

Das Aktivieren des Debuggers funktioniert.

telnet_port 4444
gdb_port 3333
interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG TINY A"
ft2232_layout "olimex-jtag"
ft2232_vid_pid 0x15BA 0x0004
jtag_speed 1000
jtag_nsrst_delay 333
jtag_ntrst_delay 333
reset_config trst_and_srst srst_pulls_trst

jtag_device 4 0x1 0xf 0xe
daemon_startup reset target arm7tdmi little 0

target_script 0 reset script.ocd
working_area 0 0x00300000 0x4000 nobackup

flash bank cfi 0x40000000 0x00100000 2 2 0

Das Script lautet folgendermaßen: wait_halt
armv4_5 core_state arm
#flash protect 0 0 15 off
# AMC_CS0 - FLASH 1MB (0x40000000-0x400FFFFF) + DM9000E (0x40100000)
mww 0xFFE00000 0x40003EBD
# AMC_CS1 - RAM low 2MB (0x40400000-0x405FFFFF)
mww 0xFFE00004 0x404030A9 # AMC_CS2 - RAM high 2MB 
(0x40800000-0x405FFFFF)
mww 0xFFE00008 0x404030A9 # AMC_MCR 1MB
mww 0xFFE00024 0x00000004 # AMC_RCR force remap
mww 0xFFE00020 0x00000001
sleep 1000

# disable watchdog
mww 0xFFFA0000 0x00000000
sleep 50
# disable PLLClockmanager CM
mww 0xFFEC0004 0x18070004
# PLL Divider = 10 ==> Coreclock = 6Mhz*10/2 = 30 Mhz
mww 0xFFEC0010 0x762D800A
# enable PLL
mww 0xFFEC0000 0x23050004
sleep 100
reset halt
sleep 100
at91sam7 gpnvm 0 2 set
flash info 0

####################Flash Part
#arm7_9 dcc_downloads enable#poll
#flash probe 0
#erase first 5 banks (0-4)
#flash erase_sectors 0 0 4#flash erase_sectors 0 0 15#reset
#sleep 10
#flash write 0 abc.bin  0x0 # program the onchip flash
#sleep 10
#reset run   # reset processor
#sleep 10
#shutdown   # stop

OpenOCD Nach dem Starten:

Open On-Chip Debugger (2008-06-19 19:00) svn: 717

URL: http://svn.berlios.de/svnroot/repos/openocd/trunk

Info: options.c:50 configuration_output_handler(): jtag_speed: 1000, 
1000

Info: options.c:50 configuration_output_handler(): Open On-Chip Debugger 
(2008-06-19 19:00) svn: 717

Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x1f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x1)

Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x1f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x1)

Info: options.c:50 configuration_output_handler(): nSRST pulls nTRST, 
falling back to "reset run_and_init"

Info: target.c:237 target_init_handler(): executing reset script 
'script.ocd'

Info: options.c:50 configuration_output_handler(): core state: ARM

Error: cfi.c:1947 cfi_probe(): Could not probe bank

Error: flash.c:219 get_flash_bank_by_num(): auto_probe failed -900


Info: options.c:50 configuration_output_handler(): flash bank '#0' is 
out of bounds

Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x1f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x1)

Info: options.c:50 configuration_output_handler(): nSRST pulls nTRST, 
falling back to "reset run_and_halt"

Info: options.c:50 configuration_output_handler(): Command at91sam7 not 
found

Error: cfi.c:1947 cfi_probe(): Could not probe bank

Info: options.c:50 configuration_output_handler(): dcc downloads are 
enabled

Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x1f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x1)

Warning: arm7_9_common.c:743 arm7_9_poll(): DBGACK set, but the target 
did not end up in the halted stated 1

User: target.c:436 target_process_reset(): Timed out waiting for halt 
after reset Öffen einer Telnetverbindung: telnet localhost 4444> flash 
probe 0
unknown error when probing flash bank '#0' at 0x40000000DANN:> arm_v4_5 
reg
Command arm_v4_5 not found
> armv4_5 reg
error: target must be halted for register accesses
> reset halt
JTAG device found: 0x1f0f0f0f (Manufacturer: 0x787, Part: 0xf0f0, 
Version: 0x1)
nSRST pulls nTRST, falling back to "reset run_and_halt"
target state: halted
target halted in Thumb state due to debug request, current mode: 
Supervisor
cpsr: 0x60000033 pc: 0x40002eacDANN:> armv4_5 reg
      r0: 4000380c       r0: 4000380c       r0: 4000380c       r0: 
4000380c
  r0: 4000380c       r0: 4000380c
      r1: fffa8084       r1: fffa8084       r1: fffa8084       r1: 
fffa8084
  r1: fffa8084       r1: fffa8084
      r2: 0001c200       r2: 0001c200       r2: 0001c200       r2: 
0001c200
  r2: 0001c200       r2: 0001c200
      r3: fffa8088       r3: fffa8088       r3: fffa8088       r3: 
fffa8088
  r3: fffa8088       r3: fffa8088
      r4: 00000000       r4: 00000000       r4: 00000000       r4: 
00000000
  r4: 00000000       r4: 00000000
      r5: 00000000       r5: 00000000       r5: 00000000       r5: 
00000000
  r5: 00000000       r5: 00000000
      r6: 0001c800       r6: 0001c800       r6: 0001c800       r6: 
0001c800
  r6: 0001c800       r6: 0001c800
      r7: 02202800       r7: 02202800       r7: 02202800       r7: 
02202800
  r7: 02202800       r7: 02202800
      r8: 42010008   r8_fiq: fffff000       r8: 42010008       r8: 
42010008
  r8: 42010008       r8: 42010008
      r9: 4292c601   r9_fiq: 18819580       r9: 4292c601       r9: 
4292c601
  r9: 4292c601       r9: 4292c601
     r10: 91252410  r10_fiq: 45030260      r10: 91252410      r10: 
91252410
 r10: 91252410      r10: 91252410
     r11: 0b0b2816  r11_fiq: 427c8114      r11: 0b0b2816      r11: 
0b0b2816
 r11: 0b0b2816      r11: 0b0b2816
     r12: 00000000  r12_fiq: 26808100      r12: 00000000      r12: 
00000000
 r12: 00000000      r12: 00000000
 r13_usr: 42140413  r13_fiq: 02153813  r13_irq: 00004000  r13_svc: 
00003f90  r13
_abt: 8221e030  r13_und: f5098190
  lr_usr: 40102c17   lr_fiq: a4019206   lr_irq: 01412100   lr_svc: 
40000cb5   lr
_abt: 88020910   lr_und: 80295012
      pc: 40002eac       pc: 40002eac       pc: 40002eac       pc: 
40002eac
  pc: 40002eac       pc: 40002eac
    cpsr: 60000033 spsr_fiq: f00000ff spsr_irq: e00000ff spsr_svc: 
60000033 spsr
_abt: d00000ff spsr_und: e00000ff
>> flash info 0
Could not probe bank

DANN AUSFÜHREN EINES HARDWARE RESETS AM BOARD:
> flash probe 0
Could not probe bank
probing failed for flash bank '#0' at 0x40000000
> reset
JTAG device found: 0x1f0f0f0f (Manufacturer: 0x787, Part: 0xf0f0, 
Version: 0x1)
nSRST pulls nTRST, falling back to "reset run_and_init"
target state: halted
target halted in Thumb state due to debug request, current mode: 
Supervisor
cpsr: 0x60000033 pc: 0x40002eaa
executing reset script 'script.ocd'
core state: ARM
Could not probe bank
auto_probe failed -900flash bank '#0' is out of bounds
JTAG device found: 0x1f0f0f0f (Manufacturer: 0x787, Part: 0xf0f0, 
Version: 0x1)
nSRST pulls nTRST, falling back to "reset run_and_halt"
target state: halted
target halted in Thumb state due to debug request, current mode: 
Supervisor
cpsr: 0x60000033 pc: 0x40002eae
Command at91sam7 not found
Could not probe bank
dcc downloads are enabled
JTAG device found: 0x1f0f0f0f (Manufacturer: 0x787, Part: 0xf0f0, 
Version: 0x1)
DBGACK set, but the target did not end up in the halted stated 1
Timed out waiting for halt after reset


Was muß ich machen, damit das Teil läuft? Ich habe schon überall im 
Google versucht, da Ínfo zu bekommen. Anscheinend ist der Prozessor ein 
Auslaufteil (Atmelseite). Selbst Olimex zeigt sich wenig kooperativ und 
verweist auf käufliche Debugger, was mein Budget sprengen würde.

Vielen, vielen Dank!

von ... (Gast)


Lesenswert?

Hast du das mit dem Programmieren hinbekommen? Seltsamerweise kann ich 
das Board unter Linux mit einem Parallport JTAG Adapter (Wiggler) 
problemlos programmieren. Unter Windows mit einem FT2232 basierten JTAG 
Adapter (OpenOCD USB) funktioniert es nicht. Ich bekomme die gleiche 
Fehlermeldung wie du.

von Bri (Gast)


Angehängte Dateien:

Lesenswert?

Falls es jemanden interessiert: ich hab es hinbekommen, das Olimex-Board 
über OpenOCD unter Windows zu programmieren. Folgendes habe ich gemacht:

1. von FTDI die Treiber besorgt

http://www.ftdichip.com/Drivers/D2XX.htm

Version 2.04.14

2. die neueste OpenOCD Version (Revision 1355) ausgecheckt:

http://developer.berlios.de/projects/openocd

3. OpenOCD unter cygwin compiliert:

./bootstrap
./configure --enable-ft2232_ftd2xx 
--with-ftd2xx-win32-zipdir=/cygdrive/d/OpenOCD/ftd2xx

(Achtung: der Pfad des Verzeichnisses ftd2xx muss angepasst werden!)

./make
./make install

4. OpenOCD gestartet:

openocd -f at91sam7a_usb_openocd.cfg

5. mit telnet verbunden:

telnet 127.0.0.1 4444

6. Flash programmiert:

reset
halt
script prog.txt

"prog.txt" ist ein Script, das ich mir zum programmieren geschrieben 
habe:

at91sam7.cpu configure -work-area-virt 0 -work-area-phys 0x40800000 
-work-area-size 0x100000 -work-area-backup 0

flash write_image erase test.bin 0x40000000 bin

sleep 1000

verify_image test.bin 0x40000000 bin


Anmerkung:

Bei mir initialisiert die auf dem Board installierte Firmware den 
Momorycontroller so, das der Flash ab Adresse 0x40000000 eingeblendet 
ist. Seltsamerweise kann ich den AT91SAM7 nciht sofort nach dem reset 
anhalten, also der Befehl "reset halt" funktioniert nicht. Deshalb habe 
ich die Adresse des Flash mit 0x40000000 angegeben. Wenn ihr mit einem 
anderen Programmer den Controller sofort nach dem Reset anhalten könnt, 
dann liegt der Flash auf Adresse 0x00000000.

PS: das ich den Controller nicht sofort anhalten kann liegt an der 
Einstellung:

reset_config trst_and_srst srst_pulls_trst

Mein Programmer/Board funktioniert aber nicht ohne das 
"srst_pulls_trst". Keine Ahnung warum.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.