Add lm32 cpu and milkymist port
[mw/micromonitor-lm32.git] / umon_ports / milkymist / flashtest.scr
1 # flashtest.scr:
2 # This script can be run after a port is completed to verify
3 # that the flash driver can properly deal with various address
4 # and data alignments.
5 #
6 # Required shell variables: SECTORBASE & SNUM ...
7 #
8 # SECTORBASE: set to the base address of some sector within
9 #   TFS that can be erased during this test.
10 # SNUM: the number of the sector whose base address is
11 #   $SECTORBASE.
12 # NOLOCK: set to TRUE if the flash driver doesn't support flash
13 #   lock/unlock
14
15 if $SECTORBASE seq \$SECTORBASE goto USAGE
16 if $SNUM seq \$SNUM goto USAGE
17
18 # Copy SECTORBASE to SBASE, and APPRAMBASE to SRC
19 set SBASE $SECTORBASE
20 set SRC $APPRAMBASE
21
22 # TEST1:
23 echo TEST1: 
24 echo Verify pattern
25 # Establish a few known bytes of source data:
26 pm $SRC 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a
27 set SRC=hex($SRC+8)
28 pm $SRC 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a
29 dm $APPRAMBASE 16
30 set SRC $APPRAMBASE
31
32 # Unlock and erase the sector and verify erasure
33 # (should be all 0xff):
34 gosub FLASH_UNLOCK
35 flash erase $SNUM
36 dm $SBASE 16
37 set SIZE 16
38
39 # LOOP:
40 if $SIZE eq 0 goto NEXTLOOP
41 gosub FLASHTEST
42 set SBASE=hex($SBASE+1) 
43 set SRC=hex($SRC+1)
44 set SIZE=hex($SIZE-2)
45 goto LOOP
46
47 # NEXTLOOP:
48 set SRC $APPRAMBASE
49 set SBASE $SECTORBASE
50 set SIZE 8
51 # LOOP2:
52 if $SIZE eq 0 goto TEST2
53 gosub FLASHTEST
54 set SIZE=hex($SIZE-1)
55 goto LOOP2
56
57 # FLASHTEST
58 flash write $SBASE $SRC $SIZE
59 dm $SECTORBASE 16
60 flash erase $SNUM
61 dm $SECTORBASE 16
62 return
63
64 # TEST2:
65 # Write a few known initial bytes of data with 0xff's within
66 # the data...
67 echo TEST2:
68 pm $APPRAMBASE 0x41 0xff 0xff 0x44 0x45 0xff 0x47 0x48
69 flash write $SECTORBASE $APPRAMBASE 8
70
71 # Then try to insert data into the fields that were
72 # originally 0xff...
73 pm $APPRAMBASE 0x42 0x43
74 set ADDR=hex($SECTORBASE+1)
75 flash write $ADDR $APPRAMBASE 2
76
77 pm $APPRAMBASE 0x46
78 set ADDR=hex($SECTORBASE+5)
79 flash write $ADDR $APPRAMBASE 1
80
81 # Now make sure the write worked...
82 pm $APPRAMBASE 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
83 echo Next two lines of data should match...
84 dm $SECTORBASE 8
85 dm $APPRAMBASE 8
86 cm -v $APPRAMBASE $SECTORBASE 8
87 flash erase $SNUM
88
89 #####################
90 #
91 # TEST 3:
92 echo TEST3:
93 if $NOLOCK seq TRUE exit
94 echo Verify that a locked sector will not write or erase:
95 set SCRIPT_IGNORE_ERROR TRUE
96 flash write $SECTORBASE $APPRAMBASE 1
97 flash lock $SNUM
98 dm $SECTORBASE 16
99 echo This line should generate a flash write error...
100 flash write $SECTORBASE $APPRAMBASE 16
101 dm $SECTORBASE 16
102 echo This erase should fail...
103 flash erase $SNUM
104 gosub FLASH_UNLOCK
105 echo This erase should succeed...
106 flash erase $SNUM
107 dm $SECTORBASE 16
108
109 exit
110
111 # FLASH_UNLOCK:
112 if $NOLOCK seq TRUE return
113 flash unlock $SNUM
114 return 
115
116 # FLASH_LOCK:
117 if $NOLOCK seq TRUE return
118 flash lock $SNUM
119 return 
120
121 # USAGE:
122 echo Establish SECTORBASE and SNUM, then rerun.