3 #Atmel ties SRST & TRST together, at which point it makes
4 #no sense to use TRST, but use TMS instead.
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
13 if { [info exists CHIPNAME] } {
14 set _CHIPNAME $CHIPNAME
19 if { [info exists ENDIAN] } {
27 if { [info exists CPUTAPID ] } {
28 set _CPUTAPID $CPUTAPID
30 set _CPUTAPID 0x1f0f0f0f
32 jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
34 set _TARGETNAME $_CHIPNAME.cpu
35 target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME
37 # at CPU CLK <32kHz this must be disabled
38 arm7_9 fast_memory_access enable
39 arm7_9 dcc_downloads enable
41 set _FLASHNAME $_CHIPNAME.flash
42 flash bank $_FLASHNAME ecosflash 0x01000000 0x200000 2 2 $_TARGETNAME ecos/at91eb40a.elf
43 $_TARGETNAME configure -event reset-init {
44 # Set up chip selects & timings
45 mww 0xFFE00000 0x0100273D
46 mww 0xFFE00004 0x08002125
47 mww 0xFFEe0008 0x02002125
48 mww 0xFFE0000c 0x03002125
49 mww 0xFFE00010 0x40000000
50 mww 0xFFE00014 0x50000000
51 mww 0xFFE00018 0x60000000
52 mww 0xFFE0001c 0x70000000
53 mww 0xFFE00020 0x00000001
54 mww 0xFFE00024 0x00000000
57 mww 0xFFFFF124 0xFFFFFFFF
61 #disable 16x5x UART interrupts
65 # required for usable performance. Used for lots of
66 # other things than flash programming.
67 $_TARGETNAME configure -work-area-phys 0x00020000 -work-area-size 0x20000 -work-area-backup 0
72 proc production_info {} {
73 return "Serial number is official MAC number. Format XXXXXXXXXXXX"
76 # There is no return value from this procedure. If it is
77 # successful it does not throw an exception
79 # Progress messages are output via puts
80 proc production {firmwarefile serialnumber} {
81 if {[string length $serialnumber]!=12} {
82 puts "Invalid serial number"
86 puts "Power cycling target"
92 flash write_image erase $firmwarefile 0x1000000 bin
93 verify_image $firmwarefile 0x1000000 bin
95 # Big endian... weee!!!!
96 puts "Setting MAC number to $serialnumber"
97 flash fillw [expr 0x1030000-0x8] "0x[string range $serialnumber 2 3][string range $serialnumber 0 1]0000" 1
98 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
99 puts "Production successful"
103 proc production_test {} {
106 target_request debugmsgs enable
109 target_request debugmsgs disable
110 return "See IP address above..."