Add lm32 cpu and milkymist port
[mw/micromonitor-lm32.git] / umon_ports / milkymist / flashtest.scr.ucon
1 #####\r
2 #\r
3 # flashtest.scr:\r
4 # This script is the uCon-equivalent of flashtest.scr as supplied\r
5 # with uMon to run on a uMon based target.  The benefit of this script\r
6 # is that TFS does not have to be installed on the system to run this\r
7 # through uCon.\r
8 #\r
9 #####\r
10 set PROMPT uMON>\r
11 gosub GET_APPRAMBASE_FROM_TARGET\r
12 \r
13 # Ask the user for sector/flash information...\r
14 dialog Q_AND_A "Enter the base address of a sector we can use to test:"\r
15 set SECTORBASE $DIALOG\r
16 dialog Q_AND_A "Enter that sector number:"\r
17 set SNUM $DIALOG\r
18 dialog DDLIST "Does this driver support flash lock?" YES NO\r
19 set FLOCK $DIALOG\r
20 \r
21 # Copy SECTORBASE to SBASE, and APPRAMBASE to SRC\r
22 set SBASE $SECTORBASE\r
23 set SRC $APPRAMBASE\r
24 \r
25 # TEST1:\r
26 echo TEST1: \r
27 echo Verify pattern\r
28 # Establish a few known bytes of source data:\r
29 send "pm $SRC 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a"\r
30 set SRC=hex($SRC+8)\r
31 send "pm $SRC 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a 0x2a"\r
32 send "dm $APPRAMBASE 16"\r
33 set SRC $APPRAMBASE\r
34 \r
35 # Unlock and erase the sector and verify erasure\r
36 # (should be all 0xff):\r
37 gosub FLASH_UNLOCK\r
38 send "flash erase $SNUM"\r
39 send "dm $SBASE 16"\r
40 set SIZE 16\r
41 \r
42 # LOOP:\r
43 if $SIZE eq 0 goto NEXTLOOP\r
44 gosub FLASHTEST\r
45 set SBASE=hex($SBASE+1) \r
46 set SRC=hex($SRC+1)\r
47 set SIZE=hex($SIZE-2)\r
48 goto LOOP\r
49 \r
50 # NEXTLOOP:\r
51 set SRC $APPRAMBASE\r
52 set SBASE $SECTORBASE\r
53 set SIZE 8\r
54 # LOOP2:\r
55 if $SIZE eq 0 goto TEST2\r
56 gosub FLASHTEST\r
57 set SIZE=hex($SIZE-1)\r
58 goto LOOP2\r
59 \r
60 # FLASHTEST\r
61 send "flash write $SBASE $SRC $SIZE"\r
62 send "dm $SECTORBASE 16"\r
63 send "flash erase $SNUM"\r
64 send "dm $SECTORBASE 16"\r
65 return\r
66 \r
67 # TEST2:\r
68 # Write a few known initial bytes of data with 0xff's within\r
69 # the data...\r
70 echo TEST2:\r
71 send "pm $APPRAMBASE 0x41 0xff 0xff 0x44 0x45 0xff 0x47 0x48"\r
72 send "flash write $SECTORBASE $APPRAMBASE 8"\r
73 \r
74 # Then try to insert data into the fields that were\r
75 # originally 0xff...\r
76 send "pm $APPRAMBASE 0x42 0x43"\r
77 set ADDR=hex($SECTORBASE+1)\r
78 send "flash write $ADDR $APPRAMBASE 2"\r
79 \r
80 send "pm $APPRAMBASE 0x46"\r
81 set ADDR=hex($SECTORBASE+5)\r
82 send "flash write $ADDR $APPRAMBASE 1"\r
83 \r
84 # Now make sure the write worked...\r
85 send "pm $APPRAMBASE 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48"\r
86 echo Next two lines of data should match...\r
87 send "dm $SECTORBASE 8"\r
88 send "dm $APPRAMBASE 8"\r
89 send "cm -v $APPRAMBASE $SECTORBASE 8"\r
90 send "flash erase $SNUM"\r
91 \r
92 #####################\r
93 #\r
94 # TEST 3:\r
95 if $FLOCK seq NO exit\r
96 echo TEST3:\r
97 echo Verify that a locked sector will not write or erase:\r
98 send "flash write $SECTORBASE $APPRAMBASE 1"\r
99 send "flash lock $SNUM"\r
100 send "dm $SECTORBASE 16"\r
101 echo This line should generate a flash write error...\r
102 send "flash write $SECTORBASE $APPRAMBASE 16"\r
103 send "dm $SECTORBASE 16"\r
104 echo This erase should fail...\r
105 send "flash erase $SNUM"\r
106 gosub FLASH_UNLOCK\r
107 echo This erase should succeed...\r
108 send "flash erase $SNUM"\r
109 send "dm $SECTORBASE 16"\r
110 \r
111 exit\r
112 \r
113 # FLASH_UNLOCK:\r
114 if $FLOCK seq NO return\r
115 send "flash unlock $SNUM"\r
116 return \r
117 \r
118 # FLASH_LOCK:\r
119 if $FLOCK seq NO return\r
120 send "flash lock $SNUM"\r
121 return \r
122 \r
123 # USAGE:\r
124 echo Establish SECTORBASE and SNUM, then rerun.\r
125 \r
126 # GET_APPRAMBASE_FROM_TARGET:\r
127 \r
128 log on C:/log\r
129 send "echo \$APPRAMBASE"\r
130 log off\r
131 file token C:/log 1 2\r
132 set APPRAMBASE $FILE\r
133 return\r