-
Notifications
You must be signed in to change notification settings - Fork 3
/
sta8090fgbd.cfg
114 lines (97 loc) · 4.96 KB
/
sta8090fgbd.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
####################
# Teseo II sta8089 #
####################
set ADAPTER_SLOW 1000
set ADAPTER_FAST 3000
source [find mem_helper.tcl] ; # help guide for the commands
adapter_khz $ADAPTER_SLOW ; # set the speed of the communication
set path $env(openocd_dir) ; # set the variable to point the openocd directory
source [find $path/tcl/cpu/arm/arm946.tcl] ; # set some variables related to the specific arm946 architecture
debug_level 0 ; # set the verbosity of the commands (0 only error messages)
######################################################
# Set the variables related to the core of the board #
######################################################
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME sta8089
}
if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
if { [info exists CPUTAPID ] } {
set _CPUTAPID $CPUTAPID
} else {
set _CPUTAPID 0x05946041
}
####################################################
# Set the variables related to the debug interface #
####################################################
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID ; # Declares a new TAP (Test Access Port) with the dotted name chipname.tapname, and configured according to the parameters
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm946e -endian $_ENDIAN -chain-position $_TARGETNAME ; # This command creates a GDB debug target that refers to a specific JTAG tap
#puts "Target = $_TARGETNAME"
reset_config trst_and_srst srst_gates_jtag trst_push_pull srst_push_pull ; # reset configuration for JTAG interface and for the core
#############################
# Set the variables for gdb #
#############################
gdb_memory_map disable ; # Set to enable to cause OpenOCD to send the memory configuration to GDB when requested
gdb_breakpoint_override hard ; # Force breakpoint type for gdb break commands
#####################################################
# Set the variables related ARM core of the STA8090 #
#####################################################
arm7_9 dbgrq enable ; # Displays the value of the flag controlling use of the the EmbeddedIce DBGRQ signal to force entry into debug mode, instead of breakpoints
arm7_9 fast_memory_access enable
arm7_9 dcc_downloads enable ; # DCC downloads offer a huge speed increase, but might be unsafe, especially with targets running at very low speeds
###########################
# User defined procedures #
###########################
##############################################################################################
# The results of the dumps are stored in a "data" directory that must be created by the user #
# before using this procedure. The file name is made of "ARM_mem_add", where add is an hex #
# number that identifies the address at which the dump has been performed. Every file #
# corresponds to 10KB of the target memory starting at the address specified by add. #
##############################################################################################
proc dump_arm {addr size} { ; # addr is starting address of the dump, size is the portion of memory dumped at each attempt
puts "starting"
set att 0 ; # number of attempts before hard reset
set fp [open "log.txt" "w"] ; # log file for the dump result
set fine_msg "Everything is fine."
set dead_msg "I'M DEAD."
halt ; # halt the CPU for the dump
set new_addr $($addr + 0) ; # set the starting address for the dump
for {set x 0} {$x < 100} {incr x} { ; # try to dump size*100 memory
if [catch {dump_image data/ARM_mem_[format %08X $new_addr] $new_addr $size}] { ; # check dump command result
set new_addr $new_addr ; # dump failed try again at the same address of the previous attempt
jtag_reset 1 0 ; # reset procedure
sleep 10
jtag_reset 0 1
sleep 10
jtag_reset 0 0
sleep 10
set x $($x-1) ; # update counter of the cycle to the previous value
soft_reset_halt
set att $($att+1) ; # increase the counter of the failed dumping attempts at the same memory address
if {$att == 5} { ; # stop and signal an error after 5 attempts failed at the same address
puts $fp $dead_msg ; # report the error on the log file
puts $fp "dump_arm 0x[format %08X $new_addr] $size"
close $fp
puts "dump_arm 0x[format %08X $new_addr] $size" ; # print the command that has failed
shutdown
reset halt ; # reset of the board and exit from all the running procedures
}
} else {
set att 0 ; # reset number of attempts
set new_addr $($new_addr+$size) ; # set next address for the dump
}
}
puts $fp $fine_msg ; # report the result on the log file
puts $fp "dump_arm 0x[format %08X $($new_addr-$size)] $size" ; # print the command for dumping next memory region
close $fp
puts "dump_arm 0x[format %08X $($new_addr-$size)] $size" ; # print the command for dumping next memory region
puts "done"
shutdown
reset halt ; # reset of the board and exit from all the running procedures
}