1 // factory_defaults dss script
2 // Import the DSS packages into our namespace to save on typing
3 importPackage(Packages.com.ti.debug.engine.scripting);
4 importPackage(Packages.com.ti.ccstudio.scripting.environment);
5 importPackage(Packages.java.lang);
6 importPackage(Packages.java.io);
7 importPackage(Packages.java.util);
9 // Create our scripting environment object - which is the main entry point into
10 // any script and the factory for creating other Scriptable ervers and Sessions
11 var script = ScriptingEnvironment.instance()
13 var debugScriptEnv = ScriptingEnvironment.instance();
14 // program_evm environment.
15 testEnv = {};
17 // Get the Debug Server and start a Debug Session
18 var debugServer = script.getServer("DebugServer.1");
20 //***************Functions define***************************
23 function isFile(path)
24 {
25 try
26 {
27 file = new java.io.FileReader(path);
28 }
29 catch (ex)
30 {
31 return false;
32 }
34 return true;
36 }
39 //****************Get New Time Stamp***********************
40 function localTime()
41 {
42 // get time stamp
43 var currentTime = new Date();
44 var year = currentTime.getFullYear();
45 var month = currentTime.getMonth() + 1;
46 month = month + "";
47 if (month.length == 1)
48 {
49 month = "0" + month;
50 }
51 var day = currentTime.getDate();
52 var hour = currentTime.getHours();
53 var minute = currentTime.getMinutes();
54 minute = minute + "";
55 if (minute.length == 1)
56 {
57 minute = "0" + minute;
58 }
59 var second = currentTime.getSeconds();
60 second = second + "";
61 if (second.length == 1)
62 {
63 second = "0" + second;
64 }
66 return (year+"_"+month+"_"+day+"_"+hour+minute+second);
67 }
69 /**
70 * Get error code from the given exception.
71 * @param {exception} The exception from which to get the error code.
72 */
73 function getErrorCode(exception)
74 {
75 var ex2 = exception.javaException;
76 if (ex2 instanceof Packages.com.ti.ccstudio.scripting.environment.ScriptingException) {
77 return ex2.getErrorID();
78 }
79 return 0;
80 }
81 function fileCopy(source,destination)
82 {
83 inputFile = new File(source);
84 outputFile = new File(destination);
85 infile = new java.io.FileReader(inputFile);
86 out = new java.io.FileWriter(outputFile);
87 var c;
89 while ((c = infile.read()) != -1)
90 out.write(c);
92 infile.close();
93 out.close();
94 }
96 function pausecomp(millis)
97 {
98 var date = new Date();
99 var curDate = null;
100 do { curDate = new Date(); }
101 while(curDate-date < millis)
102 {
103 //print("Waiting "+millis+"ms...\r\n")
104 }
105 }
107 //*******************************************
108 // Declarations and Inititalizations
109 var nandwriter_dir = java.lang.System.getProperty("user.dir");
110 var dss_script_dir = java.lang.System.getenv("DSS_SCRIPT_DIR");
111 var host_os = "";
112 var script_logs = nandwriter_dir+"/logs/";
113 var script_configs = nandwriter_dir+"/configs/";
114 var script_binaries = nandwriter_dir+"/binaries/";
115 var targetConfig = "";
116 var writeAll = false;
117 var writerImages = "";
118 var big_endian = false;
119 var targetFlag = "unknown";
120 var targetConfig = "unknown";
121 var emul560 = false;
122 var xds200 = false;
123 var emulation_spec = "onboard XDS100";
124 testEnv.cioFile = null;
126 if (java.lang.System.getProperty("os.name").match(/Linux/i))
127 {
128 host_os = "-linuxhost";
129 }
131 // Parse the arguments
132 if (arguments.length > 0 && arguments.length < 3)
133 {
134 // parse the board spec
135 var board_spec = arguments[0].toLowerCase();
136 board_spec = board_spec.replace(/^tmd(x|s)/, "");
137 board_spec = board_spec.replace(/^evmc/, "evm");
139 // find endian, user wants
140 if (board_spec.match(/-be$/))
141 {
142 big_endian = true;
143 board_spec = board_spec.replace(/-be$/, "");
144 }
145 else
146 board_spec = board_spec.replace(/-le$/, "");
148 // find onboard emulation option for this board
149 if (board_spec.match(/lx?e$/))
150 {
151 emul560 = true;
152 emulation_spec = "XDS560 mezzanine";
153 board_spec = board_spec.replace(/e$/, "");
154 }
156 if (board_spec.match(/ls$/))
157 {
158 xds200 = true;
159 emulation_spec = "XDS200 emulator";
160 board_spec = board_spec.replace(/ls$/, "l");
161 }
163 if (board_spec.match(/k2h$/) || board_spec.match(/k2e$/) || board_spec.match(/k2l$/) || board_spec.match(/k2g$/))
164 {
165 emulation_spec = "XDS2xx emulator";
166 }
168 // for now, use the same software for lx and l variants
169 board_spec = board_spec.replace(/lx$/, "l");
171 // for now, treat evm6618l as an alias for evm6670l
172 board_spec = board_spec.replace(/evm6618/, "evm6670");
174 targetFlag = board_spec;
176 endian_spec = (big_endian ? "-be" : "");
178 board_binaries = script_binaries + targetFlag + endian_spec + "/";
179 targetConfig = java.lang.System.getenv("PROGRAM_EVM_TARGET_CONFIG_FILE");
180 if (!targetConfig)
181 targetConfig = script_configs + targetFlag + "/" + targetFlag + (emul560 ? "e" : "") + (xds200 ? "s" : "") + host_os + ".ccxml";
183 print("board: " + targetFlag);
184 print("endian: " + (big_endian ? "Big" : "Little"));
185 print("emulation: " + emulation_spec);
186 print("binaries: " + board_binaries);
187 print("ccxml: " + targetConfig);
189 var dir = new File(board_binaries);
190 if (!dir.exists())
191 {
192 print("board binaries directory not found");
193 java.lang.System.exit(2);
194 }
196 if(arguments[1])
197 writerImages = arguments[1];
198 else
199 writeAll = true;
200 }
201 else
202 {
203 print("Syntax error in command line");
204 print("Syntax: program_evm.js [tmdx|tmds]evm[c](<device>)l[x][e][-le|-be] [images_to_write]")
206 print(" tmdx: TMDX type EVM")
207 print(" tmds: TMDS type EVM")
208 print(" c: Not used, for backward compatibility")
209 print(" <device> is the board name e.g 6472,6678 etc")
210 print(" l: Low cost EVM")
211 print(" x: EVM supports encryption")
212 print(" e: EVM uses 560 Mezzanine Emulator daughter card")
213 print(" le: Little Endian")
214 print(" be: Big Endian")
216 print(" example: TMDXEVM6678L-le")
217 print(" [images_to_write] OPTIONAL is a list of the images to be written")
218 print(" example: eeprom50,nor")
219 print(" If not specified all (eeprom50,eeprom51,nand,nor) will be written")
220 java.lang.System.exit(0);
221 }
223 var i2cwriterbinary = board_binaries + "eepromwriter_" + targetFlag + ".out";
224 var nandwriterbinary = board_binaries + "nandwriter_" + targetFlag + ".out";
225 var norwriterbinary = board_binaries + "norwriter_" + targetFlag + ".out";
226 var eepromwriter_input51 = board_binaries + "eepromwriter_input51.txt";
227 var eepromwriter_input50 = board_binaries + "eepromwriter_input50.txt";
228 var eepromwriter_input = board_binaries + "eepromwriter_input.txt";
229 var eeprom50 = board_binaries + "eeprom50.bin";
230 var eeprom51 = board_binaries + "eeprom51.bin";
231 var nand = board_binaries + "nand.bin";
232 var nor = board_binaries + "nor.bin";
234 // Note: nAddress is the load address for using eepromwriter.
235 // nandNorAddress is the address used for nandwriter and norwriter.
236 switch (targetFlag)
237 {
238 case "evm6457l":
239 cpu_id = "C64XP_1";
240 var nAddress = 0x800000;
241 var nandNorAddress = nAddress;
242 var iblByteSwap = false;
243 break;
244 case "evm6474l":
245 cpu_id = "C64XP_0";
246 var nAddress = 0x800000;
247 var nandNorAddress = nAddress;
248 var iblByteSwap = false;
249 break;
250 case "evm6455":
251 cpu_id = "C64XP_0";
252 var nAddress = 0x800000;
253 var nandNorAddress = nAddress;
254 var iblByteSwap = false;
255 break;
256 case "evm6474":
257 cpu_id = "C64XP_1A";
258 var nAddress = 0x800000;
259 var nandNorAddress = nAddress;
260 var iblByteSwap = false;
261 break;
262 case "evm6472l":
263 cpu_id = "C64XP_A";
264 var nAddress = 0x800000;
265 var nandNorAddress = nAddress;
266 var iblByteSwap = false;
267 break;
268 case "evm6670l":
269 cpu_id = "C66xx_0";
270 var nAddress = 0x0C000000;
271 var nandNorAddress = 0x80000000;
272 var iblByteSwap = false;
273 break;
274 case "evm6678l":
275 cpu_id = "C66xx_0";
276 var nAddress = 0x0C000000;
277 var nandNorAddress = 0x80000000;
278 var iblByteSwap = false;
279 break;
280 case "evm6657l":
281 cpu_id = "C66xx_0";
282 var nAddress = 0x0C000000;
283 var nandNorAddress = 0x80000000;
284 var iblByteSwap = false;
285 break;
286 case "evmk2h":
287 cpu_id = "C66xx_0";
288 var nAddress = 0x0C000000;
289 var nandNorAddress = 0x80000000;
290 var iblByteSwap = false;
291 break;
292 case "evmk2e":
293 cpu_id = "C66xx_0";
294 var nAddress = 0x0C000000;
295 var nandNorAddress = 0x80000000;
296 var iblByteSwap = false;
297 break;
298 case "evmk2l":
299 cpu_id = "C66xx_0";
300 var nAddress = 0x0C000000;
301 var nandNorAddress = 0x80000000;
302 var iblByteSwap = false;
303 break;
304 case "evmk2g":
305 cpu_id = "C66xx_0";
306 var nAddress = 0x0C000000;
307 var nandNorAddress = 0x80000000;
308 var iblByteSwap = false;
309 break;
310 default:
311 script.traceWrite("Could not file cpu id for target " + targetFlag + "\n");
314 }
316 start = localTime();
317 testEnv.cioFile = script_logs+targetFlag+"_"+start+"-cio"+".txt";
318 // Create a log file in the current directory to log script execution
319 script.traceBegin(script_logs+targetFlag+"_"+start+"-trace"+".txt")
321 // Configure target
322 debugServer.setConfig(targetConfig);
323 pausecomp(1000);
324 debugSession = debugServer.openSession("*",cpu_id);
326 if (testEnv.cioFile != null)
327 debugSession.beginCIOLogging(testEnv.cioFile);
328 pausecomp(1000);
329 debugSession.target.connect();
330 pausecomp(1000);
331 debugSession.target.reset();
332 pausecomp(1000);
334 //POST
335 if(writeAll || writerImages.match(/eeprom50/))
336 {
337 //Write EEPROM
338 start = localTime();
339 script.traceWrite("Start writing eeprom50");
340 script.traceWrite("Writer:" + i2cwriterbinary + "\r\n");
341 script.traceWrite("Image:" + eeprom50 + "\r\n");
342 if (isFile(i2cwriterbinary) && isFile(eeprom50))
343 {
344 fileCopy(eepromwriter_input50,eepromwriter_input);
345 debugSession.memory.loadProgram(i2cwriterbinary);
346 var nPage = 0x0;
347 // var nAddress = 0x80000000;
348 var sFilename = eeprom50 ;
349 var nTypeSize = 32;
350 var bByteSwap = false;
351 try
352 {
353 debugSession.memory.loadRaw(nPage, nAddress, sFilename, nTypeSize, bByteSwap);
354 }
355 catch (ex)
356 {
357 errCode = getErrorCode(ex);
358 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
359 " to target memory!");
360 }
361 debugSession.target.run()
362 end = localTime();
363 }
364 else
365 {
366 script.traceWrite("Required EEPROM50 files do not exist in " + board_binaries + "\n");
368 }
369 }
371 //IBL
372 if(writeAll || writerImages.match(/eeprom51/))
373 {
374 start = localTime();
375 script.traceWrite("Start writing eeprom51");
376 script.traceWrite("Writer:" + i2cwriterbinary + "\r\n");
377 script.traceWrite("Image:" + eeprom51 + "\r\n");
379 if (isFile(i2cwriterbinary) && isFile(eeprom51))
380 {
381 fileCopy(eepromwriter_input51,eepromwriter_input);
382 debugSession.memory.loadProgram(i2cwriterbinary);
383 var nPage = 0x0;
384 // var nAddress = 0x80000000;
385 var sFilename = eeprom51;
386 var nTypeSize = 32;
387 var bByteSwap = iblByteSwap;
388 try
389 {
390 debugSession.memory.loadRaw(nPage, nAddress, sFilename, nTypeSize, bByteSwap);
391 }
392 catch (ex)
393 {
394 errCode = getErrorCode(ex);
395 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
396 " to target memory!");
397 }
399 debugSession.target.run()
400 end = localTime();
401 }
402 else
403 {
404 script.traceWrite("Required EEPROM51 files do not exist in " + board_binaries + "\n");
406 }
407 }
410 //NAND
411 if(writeAll || writerImages.match(/nand/))
412 {
413 if (writerImages.match(/format/))
414 {
415 /* No action is taken for NAND since it is format*/
416 }
417 else
418 {
419 start_nand = localTime();
420 script.traceWrite("Writer:" + nandwriterbinary + "\r\n");
421 script.traceWrite("NAND:" + nand + "\r\n");
422 if (isFile(nand) && isFile(nandwriterbinary))
423 {
424 debugSession.memory.loadProgram(nandwriterbinary);
425 var nPage = 0x0;
426 // var nAddress = 0x80000000;
427 var sFilename = nand;
428 var nTypeSize = 32;
429 var bByteSwap = false;
431 try
432 {
433 script.traceWrite("Start loading nand.bin");
434 debugSession.memory.loadRaw(nPage, nandNorAddress, sFilename, nTypeSize, bByteSwap);
436 }
437 catch (ex)
438 {
439 errCode = getErrorCode(ex);
440 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
441 " to target memory!");
442 }
443 script.traceWrite("Start programming NAND");
444 debugSession.target.run()
445 script.traceWrite("End programming NAND");
446 end_nand = localTime();
447 }
448 else
449 {
450 script.traceWrite("Required NAND files does not exist in " + board_binaries + "\n");
452 }
453 }
454 }
456 //FORMAT the flash
457 if (writerImages.match(/format/))
458 {
459 //NAND Erase all
460 if (writerImages.match(/nand/))
461 {
462 start_nand = localTime();
463 script.traceWrite("Writer:" + nandwriterbinary + "\r\n");
464 if (isFile(nandwriterbinary))
465 {
466 debugSession.memory.loadProgram(nandwriterbinary);
467 var nPage = 0x0;
468 var nValue = 0x12345678;
470 try
471 {
472 script.traceWrite("Formatting NAND device ... Initiated");
473 // Get the address of that symbol
474 var flag_address = debugSession.symbol.getAddress("nand_erase_flag")
475 debugSession.memory.writeWord(nPage, flag_address, nValue);
476 }
477 catch (ex)
478 {
479 errCode = getErrorCode(ex);
480 script.traceWrite("Error code #" + errCode + ", could not set the nandwriter for erasing all nand blocks! ");
481 }
482 debugSession.target.run()
483 script.traceWrite("Formatting NAND device ...Completed");
484 end_nand = localTime();
485 }
486 else
487 {
488 script.traceWrite("Required NAND binary does not exist in " + board_binaries + "\n");
490 }
491 }
492 else
493 {
494 /* No action is taken */
495 script.traceWrite("FLASH FORMAT - No Action is taken, please provide the supported format command string, e.g., format-nand");
496 }
498 if (testEnv.cioFile != null)
499 {
500 // Stop CIO logging.
501 debugSession.endCIOLogging();
502 }
504 debugSession.terminate();
505 debugServer.stop()
507 // Stop logging and exit.
508 script.traceEnd();
509 java.lang.System.exit(0);
511 }
513 //NOR
514 if(writeAll || writerImages.match(/nor/))
515 {
516 start_nor = localTime();
517 script.traceWrite("Writer:" + norwriterbinary + "\r\n");
518 script.traceWrite("NOR:" + nor + "\r\n");
521 if (isFile(nor) && isFile(norwriterbinary))
522 {
524 debugSession.memory.loadProgram(norwriterbinary);
525 var nPage = 0x0;
526 // var nAddress = 0x80000000;
527 var sFilename = nor ;
528 var nTypeSize = 32;
529 var bByteSwap = false;
530 try
531 {
532 script.traceWrite("Start loading nor.bin");
533 debugSession.memory.loadRaw(nPage, nandNorAddress, sFilename, nTypeSize, bByteSwap);
535 }
536 catch (ex)
537 {
538 errCode = getErrorCode(ex);
539 script.traceWrite("Error code #" + errCode + ", could not load file " + sFilename +
540 " to target memory!");
541 }
542 script.traceWrite("Start programming NOR");
543 script.traceWrite(localTime());
544 debugSession.target.run()
545 script.traceWrite("End programming NOR");
546 end_nor = localTime();
547 }
548 else
549 {
550 script.traceWrite("Required NOR files does not exist in " + board_binaries + "\n");
552 }
554 }
556 if (testEnv.cioFile != null)
557 {
558 // Stop CIO logging.
559 debugSession.endCIOLogging();
560 }
562 debugSession.terminate();
563 debugServer.stop()
565 // Stop logging and exit.
566 script.traceEnd();
567 java.lang.System.exit(0);