flash/nor/at91samd: Use 32-bit register writes for ST-Link compat
[fw/openocd] / tcl / board / zy1000.cfg
1 #Script for ZY1000
2
3 #Atmel ties SRST & TRST together, at which point it makes
4 #no sense to use TRST, but use TMS instead.
5 #
6 #The annoying thing with tying SRST & TRST together is that
7 #there is no way to halt the CPU *before and during* the
8 #SRST reset, which means that the CPU will run a number
9 #of cycles before it can be halted(as much as milliseconds).
10 reset_config srst_only srst_pulls_trst
11
12
13 if { [info exists CHIPNAME] } {
14    set  _CHIPNAME $CHIPNAME
15 } else {
16    set  _CHIPNAME zy1000
17 }
18
19 if { [info exists ENDIAN] } {
20    set  _ENDIAN $ENDIAN
21 } else {
22    set  _ENDIAN little
23 }
24
25
26 #jtag scan chain
27 if { [info exists CPUTAPID] } {
28    set _CPUTAPID $CPUTAPID
29 } else {
30    set _CPUTAPID 0x1f0f0f0f
31 }
32 jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
33
34 set _TARGETNAME $_CHIPNAME.cpu
35 target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME
36
37 # at CPU CLK <32kHz this must be disabled
38 arm7_9 fast_memory_access enable
39 arm7_9 dcc_downloads enable
40
41 set _FLASHNAME $_CHIPNAME.flash
42 flash bank $_FLASHNAME cfi 0x01000000 0x200000 2 2 $_TARGETNAME
43
44 $_TARGETNAME configure -event reset-init {
45         # Set up chip selects & timings
46         mww 0xFFE00000 0x0100273D
47         mww 0xFFE00004 0x08002125
48         mww 0xFFEe0008 0x02002125
49         mww 0xFFE0000c 0x03002125
50         mww 0xFFE00010 0x40000000
51         mww 0xFFE00014 0x50000000
52         mww 0xFFE00018 0x60000000
53         mww 0xFFE0001c 0x70000000
54         mww 0xFFE00020 0x00000001
55         mww 0xFFE00024 0x00000000
56
57         # remap
58         mww 0xFFFFF124 0xFFFFFFFF
59         mww 0xffff0010 0x100
60         mww 0xffff0034 0x100
61
62         #disable 16x5x UART interrupts
63         mww 0x08020004 0
64 }
65
66 $_TARGETNAME configure -event gdb-attach {
67         # Without this gdb-attach will first time as probe will fail
68         reset init
69 }
70
71 # required for usable performance. Used for lots of
72 # other things than flash programming.
73 $_TARGETNAME configure -work-area-phys 0x00020000 -work-area-size 0x20000 -work-area-backup 0
74
75 adapter_khz 16000
76
77
78 proc production_info {} {
79         return "Serial number is official MAC number. Format XXXXXXXXXXXX"
80 }
81
82 # There is no return value from this procedure. If it is
83 # successful it does not throw an exception
84 #
85 # Progress messages are output via puts
86 proc production {firmwarefile serialnumber} {
87         if {[string length $serialnumber]!=12} {
88                 echo "Invalid serial number"
89                 return
90         }
91
92         echo "Power cycling target"
93         power off
94         sleep 3000
95         power on
96         sleep 1000
97         reset init
98         flash write_image erase $firmwarefile 0x1000000 bin
99         verify_image $firmwarefile 0x1000000 bin
100
101         # Big endian... weee!!!!
102         echo "Setting MAC number to $serialnumber"
103         flash fillw [expr 0x1030000-0x8] "0x[string range $serialnumber 2 3][string range $serialnumber 0 1]0000" 1
104         flash fillw [expr 0x1030000-0x4] "0x[string range $serialnumber 10 11][string range $serialnumber 8 9][string range $serialnumber 6 7][string range $serialnumber 4 5]" 1
105         echo "Production successful"
106 }
107
108
109 proc production_test {} {
110         power on
111         sleep 1000
112         target_request debugmsgs enable
113         reset run
114         sleep 25000
115         target_request debugmsgs disable
116         return "See IP address above..."
117 }