Fix all line endings
authorBrad Griffis <bgriffis@ti.com>
Fri, 17 Feb 2017 16:19:13 +0000 (10:19 -0600)
committerBrad Griffis <bgriffis@ti.com>
Fri, 17 Feb 2017 16:19:13 +0000 (10:19 -0600)
am335x-bbb-pru-startup.js
am335x-boot.dss
am335x-ctt.dss
am335x-ddr-analysis.dss
am335x-ds0-analysis.dss

index 52ceaa876212191bd06c1e038c286ebac962651e..256384724058b439013229be7177bd437c046a4a 100644 (file)
-/*\r
- *\r
- * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ \r
- * \r
- * \r
- *  Redistribution and use in source and binary forms, with or without \r
- *  modification, are permitted provided that the following conditions \r
- *  are met:\r
- *\r
- *    Redistributions of source code must retain the above copyright \r
- *    notice, this list of conditions and the following disclaimer.\r
- *\r
- *    Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the \r
- *    documentation and/or other materials provided with the   \r
- *    distribution.\r
- *\r
- *    Neither the name of Texas Instruments Incorporated nor the names of\r
- *    its contributors may be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
- *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
- *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
- *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
- *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
-*/\r
-\r
-\r
-//----------------------------------------------------------------------------\r
-// Purpose: Prepare the AM335x SOC so CCS can connect to the PRU as if it were\r
-// any other standalone CPU.  \r
-//\r
-// This script is only intended to be used as described in \r
-// http://processors.wiki.ti.com/index.php/PRU-ICSS_Debug_on_AM335x\r
-// In particular, it does NOT WORK as a standalone script.  \r
-//\r
-// Presumptions:\r
-// - Target system is BeagleBone Black or BeagleBone White\r
-// - The target configuration has launched\r
-// - PRU connection occurs after this script runs\r
-//----------------------------------------------------------------------------\r
-\r
-//----------------------------------------------------------------------------\r
-// Constants\r
-//----------------------------------------------------------------------------\r
-var AM335X_INPUT_EN   = 1 << 5;\r
-var AM335X_PULL_DISA  = 1 << 3;\r
-var AM335X_PIN_OUTPUT = AM335X_PULL_DISA;\r
-var AM335X_PIN_INPUT  = AM335X_INPUT_EN | AM335X_PULL_DISA;\r
-\r
-//----------------------------------------------------------------------------\r
-// Invoke the main function in this file\r
-//----------------------------------------------------------------------------\r
-startup_pru();\r
-\r
-//****************************************************************************\r
-// STARTUP_PRU\r
-//****************************************************************************\r
-function startup_pru()\r
-{\r
-   var errCode = 0;\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Import the DSS packages into our namespace to save on typing\r
-   //-------------------------------------------------------------------------\r
-   importPackage(Packages.com.ti.debug.engine.scripting);\r
-   importPackage(Packages.com.ti.ccstudio.scripting.environment);\r
-   importPackage(Packages.java.lang);\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Create our scripting environment object - which is the main entry\r
-   // point into any script and the factory for creating other Scriptable\r
-   // servers and Sessions\r
-   //-------------------------------------------------------------------------\r
-   script = ScriptingEnvironment.instance();\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Get the Debug Server and start a Debug Session\r
-   //-------------------------------------------------------------------------\r
-   debugServer = script.getServer("DebugServer.1");\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Open a session on the Debug Access Port (DAP)\r
-   //-------------------------------------------------------------------------\r
-   var debugSessionDAP = debugServer.openSession("*", "CS_DAP_M3");\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Connect to the DAP.  Error check.\r
-   //-------------------------------------------------------------------------\r
-   print("Connecting to DAP");\r
-   try\r
-   {\r
-      debugSessionDAP.target.connect();\r
-   }\r
-   catch (ex)\r
-   {\r
-      throw "Aborting!";\r
-   }\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Init steps for PRU carried out by the DAP\r
-   //-------------------------------------------------------------------------\r
-   print("Enabling JTAG clock");\r
-   debugSessionDAP.expression.evaluate(\r
-      "*((unsigned int*) 0x44e00414 ) |= 0x02;");\r
-\r
-   print("Configuring PRU pins");\r
-   PRU_PINMUX_Config(debugSessionDAP.memory);\r
-   \r
-   print("Enabling ICSS clock");\r
-   debugSessionDAP.expression.evaluate(\r
-      "*((unsigned int*) 0x44e00140 ) = 0x02;");\r
-   debugSessionDAP.expression.evaluate(\r
-      "*((unsigned int*) 0x44E000E8 ) = 0x02;");\r
-\r
-   print("Resetting ICSS");\r
-   debugSessionDAP.expression.evaluate(\r
-      "*((unsigned int*) 0x44E00C00 ) |= 0x2;");\r
-   debugSessionDAP.expression.evaluate(\r
-      "*((unsigned int*) 0x44E00C00 ) &= ~0x2;");\r
-\r
-   print("Done");\r
-}\r
-\r
-//****************************************************************************\r
-// PRU_PINMUX_Config\r
-//****************************************************************************\r
-function PRU_PINMUX_Config(dsDAP_mem)\r
-{\r
-   // GEL_TextOut("****** PRU Cape GPI/O PINMUX is being configured  ***** \n","Output",1,1,1);\r
-\r
-   //-------------------------------------------------------------------------\r
-   // LEDS\r
-   //-------------------------------------------------------------------------\r
-   //red led  = pru0 r30_3  ARM pin c12\r
-   dsDAP_mem.writeData(0, 0x44e1099c, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //green led = pru0 r30_2 arm pin d12\r
-   dsDAP_mem.writeData(0, 0x44e10998, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //blue led  = pru0 r30_0 arm pin a13\r
-   dsDAP_mem.writeData(0, 0x44e10990, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //orange led = pru0 r30_1 arm pin b13 \r
-   dsDAP_mem.writeData(0, 0x44e10994, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //RGB_0 led = pru1 r30_2 arm pin r3 \r
-   dsDAP_mem.writeData(0, 0x44e108AC, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //RGB_1 led = pru1 r30_3 arm pin r4 \r
-   dsDAP_mem.writeData(0, 0x44e108B0, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //RGB_2 led = pru0 r30_4 arm pin t1 \r
-   dsDAP_mem.writeData(0, 0x44e108B4, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Switches\r
-   //-------------------------------------------------------------------------\r
-   //switch 1 = pru0 r31_5 c13\r
-   dsDAP_mem.writeData(0, 0x44e109a4, AM335X_PIN_INPUT  | 6, 32); //mode 6\r
-\r
-   //switch 2 = pru0 r31_7 a14 \r
-   dsDAP_mem.writeData(0, 0x44e109ac, AM335X_PIN_INPUT  | 6, 32); //mode 6\r
-\r
-   //-------------------------------------------------------------------------\r
-   // Audio\r
-   //-------------------------------------------------------------------------\r
-   //audio data pr1 r30_0 r1 \r
-   dsDAP_mem.writeData(0, 0x44e108a0, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //audio clk pr1 r30_1 r2\r
-   dsDAP_mem.writeData(0, 0x44e108a4, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //audio sync pr1 r30_2 r3\r
-   dsDAP_mem.writeData(0, 0x44e108a8, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //-------------------------------------------------------------------------\r
-   // UART\r
-   //-------------------------------------------------------------------------\r
-   //Uart txd d15\r
-   dsDAP_mem.writeData(0, 0x44e10984, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //UART rxd d16\r
-   dsDAP_mem.writeData(0, 0x44e10980, AM335X_PIN_INPUT  | 5, 32); //mode 5\r
-\r
-   //UART rts b17\r
-   dsDAP_mem.writeData(0, 0x44e1097C, AM335X_PIN_OUTPUT | 5, 32); //mode 5\r
-\r
-   //UART cts a17\r
-   dsDAP_mem.writeData(0, 0x44e10978, AM335X_PIN_INPUT  | 5, 32); //mode 5\r
-\r
-   //-------------------------------------------------------------------------\r
-   // LCD\r
-   //-------------------------------------------------------------------------\r
-   //lcd rs t3 \r
-   dsDAP_mem.writeData(0, 0x44e108B8, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
-\r
-   //lcd r/w t4\r
-   dsDAP_mem.writeData(0, 0x44e108BC, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
-\r
-   //lcd e v5 \r
-   dsDAP_mem.writeData(0, 0x44e108E8, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
-\r
-   //lcd data4 b16 \r
-   dsDAP_mem.writeData(0, 0x44e10958, AM335X_PIN_OUTPUT | 6, 32); //mode 6\r
-\r
-   //lcd data5 a16\r
-   dsDAP_mem.writeData(0, 0x44e1095C, AM335X_PIN_OUTPUT | 6, 32); //mode 6\r
-\r
-   //lcd data6 u5 \r
-   dsDAP_mem.writeData(0, 0x44e108e0, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
-\r
-   //lcd data7 r5 \r
-   dsDAP_mem.writeData(0, 0x44e108e4, AM335X_PIN_OUTPUT | 4, 32); //mode 4     \r
-\r
-   //-------------------------------------------------------------------------\r
-   // TEMP SENSOR\r
-   //-------------------------------------------------------------------------\r
-   //gpmc ad14 - input (GPI direct)\r
-   dsDAP_mem.writeData(0, 0x44E10838, AM335X_PIN_INPUT  | 6, 32); //mode 6\r
-\r
-   //lcd data7 - output (DIGIO)\r
-   dsDAP_mem.writeData(0, 0x44E108BC, AM335X_PIN_OUTPUT | 4, 32); //mode 4\r
-}\r
+/*
+ *
+ * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ 
+ * 
+ * 
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met:
+ *
+ *    Redistributions of source code must retain the above copyright 
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ *    Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the 
+ *    documentation and/or other materials provided with the   
+ *    distribution.
+ *
+ *    Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+*/
+
+
+//----------------------------------------------------------------------------
+// Purpose: Prepare the AM335x SOC so CCS can connect to the PRU as if it were
+// any other standalone CPU.  
+//
+// This script is only intended to be used as described in 
+// http://processors.wiki.ti.com/index.php/PRU-ICSS_Debug_on_AM335x
+// In particular, it does NOT WORK as a standalone script.  
+//
+// Presumptions:
+// - Target system is BeagleBone Black or BeagleBone White
+// - The target configuration has launched
+// - PRU connection occurs after this script runs
+//----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+// Constants
+//----------------------------------------------------------------------------
+var AM335X_INPUT_EN   = 1 << 5;
+var AM335X_PULL_DISA  = 1 << 3;
+var AM335X_PIN_OUTPUT = AM335X_PULL_DISA;
+var AM335X_PIN_INPUT  = AM335X_INPUT_EN | AM335X_PULL_DISA;
+
+//----------------------------------------------------------------------------
+// Invoke the main function in this file
+//----------------------------------------------------------------------------
+startup_pru();
+
+//****************************************************************************
+// STARTUP_PRU
+//****************************************************************************
+function startup_pru()
+{
+   var errCode = 0;
+
+   //-------------------------------------------------------------------------
+   // Import the DSS packages into our namespace to save on typing
+   //-------------------------------------------------------------------------
+   importPackage(Packages.com.ti.debug.engine.scripting);
+   importPackage(Packages.com.ti.ccstudio.scripting.environment);
+   importPackage(Packages.java.lang);
+
+   //-------------------------------------------------------------------------
+   // Create our scripting environment object - which is the main entry
+   // point into any script and the factory for creating other Scriptable
+   // servers and Sessions
+   //-------------------------------------------------------------------------
+   script = ScriptingEnvironment.instance();
+
+   //-------------------------------------------------------------------------
+   // Get the Debug Server and start a Debug Session
+   //-------------------------------------------------------------------------
+   debugServer = script.getServer("DebugServer.1");
+
+   //-------------------------------------------------------------------------
+   // Open a session on the Debug Access Port (DAP)
+   //-------------------------------------------------------------------------
+   var debugSessionDAP = debugServer.openSession("*", "CS_DAP_M3");
+
+   //-------------------------------------------------------------------------
+   // Connect to the DAP.  Error check.
+   //-------------------------------------------------------------------------
+   print("Connecting to DAP");
+   try
+   {
+      debugSessionDAP.target.connect();
+   }
+   catch (ex)
+   {
+      throw "Aborting!";
+   }
+
+   //-------------------------------------------------------------------------
+   // Init steps for PRU carried out by the DAP
+   //-------------------------------------------------------------------------
+   print("Enabling JTAG clock");
+   debugSessionDAP.expression.evaluate(
+      "*((unsigned int*) 0x44e00414 ) |= 0x02;");
+
+   print("Configuring PRU pins");
+   PRU_PINMUX_Config(debugSessionDAP.memory);
+   
+   print("Enabling ICSS clock");
+   debugSessionDAP.expression.evaluate(
+      "*((unsigned int*) 0x44e00140 ) = 0x02;");
+   debugSessionDAP.expression.evaluate(
+      "*((unsigned int*) 0x44E000E8 ) = 0x02;");
+
+   print("Resetting ICSS");
+   debugSessionDAP.expression.evaluate(
+      "*((unsigned int*) 0x44E00C00 ) |= 0x2;");
+   debugSessionDAP.expression.evaluate(
+      "*((unsigned int*) 0x44E00C00 ) &= ~0x2;");
+
+   print("Done");
+}
+
+//****************************************************************************
+// PRU_PINMUX_Config
+//****************************************************************************
+function PRU_PINMUX_Config(dsDAP_mem)
+{
+   // GEL_TextOut("****** PRU Cape GPI/O PINMUX is being configured  ***** \n","Output",1,1,1);
+
+   //-------------------------------------------------------------------------
+   // LEDS
+   //-------------------------------------------------------------------------
+   //red led  = pru0 r30_3  ARM pin c12
+   dsDAP_mem.writeData(0, 0x44e1099c, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //green led = pru0 r30_2 arm pin d12
+   dsDAP_mem.writeData(0, 0x44e10998, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //blue led  = pru0 r30_0 arm pin a13
+   dsDAP_mem.writeData(0, 0x44e10990, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //orange led = pru0 r30_1 arm pin b13 
+   dsDAP_mem.writeData(0, 0x44e10994, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //RGB_0 led = pru1 r30_2 arm pin r3 
+   dsDAP_mem.writeData(0, 0x44e108AC, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //RGB_1 led = pru1 r30_3 arm pin r4 
+   dsDAP_mem.writeData(0, 0x44e108B0, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //RGB_2 led = pru0 r30_4 arm pin t1 
+   dsDAP_mem.writeData(0, 0x44e108B4, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //-------------------------------------------------------------------------
+   // Switches
+   //-------------------------------------------------------------------------
+   //switch 1 = pru0 r31_5 c13
+   dsDAP_mem.writeData(0, 0x44e109a4, AM335X_PIN_INPUT  | 6, 32); //mode 6
+
+   //switch 2 = pru0 r31_7 a14 
+   dsDAP_mem.writeData(0, 0x44e109ac, AM335X_PIN_INPUT  | 6, 32); //mode 6
+
+   //-------------------------------------------------------------------------
+   // Audio
+   //-------------------------------------------------------------------------
+   //audio data pr1 r30_0 r1 
+   dsDAP_mem.writeData(0, 0x44e108a0, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //audio clk pr1 r30_1 r2
+   dsDAP_mem.writeData(0, 0x44e108a4, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //audio sync pr1 r30_2 r3
+   dsDAP_mem.writeData(0, 0x44e108a8, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //-------------------------------------------------------------------------
+   // UART
+   //-------------------------------------------------------------------------
+   //Uart txd d15
+   dsDAP_mem.writeData(0, 0x44e10984, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //UART rxd d16
+   dsDAP_mem.writeData(0, 0x44e10980, AM335X_PIN_INPUT  | 5, 32); //mode 5
+
+   //UART rts b17
+   dsDAP_mem.writeData(0, 0x44e1097C, AM335X_PIN_OUTPUT | 5, 32); //mode 5
+
+   //UART cts a17
+   dsDAP_mem.writeData(0, 0x44e10978, AM335X_PIN_INPUT  | 5, 32); //mode 5
+
+   //-------------------------------------------------------------------------
+   // LCD
+   //-------------------------------------------------------------------------
+   //lcd rs t3 
+   dsDAP_mem.writeData(0, 0x44e108B8, AM335X_PIN_OUTPUT | 4, 32); //mode 4
+
+   //lcd r/w t4
+   dsDAP_mem.writeData(0, 0x44e108BC, AM335X_PIN_OUTPUT | 4, 32); //mode 4
+
+   //lcd e v5 
+   dsDAP_mem.writeData(0, 0x44e108E8, AM335X_PIN_OUTPUT | 4, 32); //mode 4
+
+   //lcd data4 b16 
+   dsDAP_mem.writeData(0, 0x44e10958, AM335X_PIN_OUTPUT | 6, 32); //mode 6
+
+   //lcd data5 a16
+   dsDAP_mem.writeData(0, 0x44e1095C, AM335X_PIN_OUTPUT | 6, 32); //mode 6
+
+   //lcd data6 u5 
+   dsDAP_mem.writeData(0, 0x44e108e0, AM335X_PIN_OUTPUT | 4, 32); //mode 4
+
+   //lcd data7 r5 
+   dsDAP_mem.writeData(0, 0x44e108e4, AM335X_PIN_OUTPUT | 4, 32); //mode 4     
+
+   //-------------------------------------------------------------------------
+   // TEMP SENSOR
+   //-------------------------------------------------------------------------
+   //gpmc ad14 - input (GPI direct)
+   dsDAP_mem.writeData(0, 0x44E10838, AM335X_PIN_INPUT  | 6, 32); //mode 6
+
+   //lcd data7 - output (DIGIO)
+   dsDAP_mem.writeData(0, 0x44E108BC, AM335X_PIN_OUTPUT | 4, 32); //mode 4
+}
index 7dca2d99732bc829fedc89c317174a0da75308a4..1b019843293dc9cf6a32d7502b8fa51afddfc187 100644 (file)
-/*\r
- * Copyright (c) 2006-2014, Texas Instruments Incorporated\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * *  Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- *\r
- * *  Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * *  Neither the name of Texas Instruments Incorporated nor the names of\r
- *    its contributors may be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}\r
-\r
-var newline = "\n";\r
-\r
-function printRegisterValue(ds, name, addr)\r
-{\r
-       value = debugSessionDAP.memory.readWord(0,addr,false);\r
-       value_string = d2h(value);\r
-       file.write(name + " = 0x" + value_string + newline);\r
-       return value; // return the register value for interrogation\r
-}\r
-\r
-// Build a filename that includes date/time\r
-var today = new Date();\r
-var year4digit = today.getFullYear();\r
-var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
-var day2digit = ("0" + today.getDate()).slice(-2);\r
-var hour2digit = ("0" + today.getHours()).slice(-2);\r
-var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
-var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
-var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
-var userHomeFolder = System.getProperty("user.home");\r
-var filename = userHomeFolder + '/Desktop/' + 'am335x-boot-analysis' + filename_date + '.txt';\r
-\r
-file = new java.io.FileWriter(filename);\r
-\r
-debugSessionDAP = ds.openSession("*","CS_DAP_DebugSS");\r
-debugSessionDAP.target.connect();\r
-\r
-var reg_val;\r
-\r
-// CONTROL: device_id\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: device_id", 0x44E10600);\r
-if ( (reg_val & 0x0FFFFFFF) == 0xb94402e ) {file.write("  * AM335x family" + newline);}\r
-if ( (reg_val & 0xF0000000) == (0 << 28) ) {file.write("  * Silicon Revision 1.0" + newline);}\r
-if ( (reg_val & 0xF0000000) == (1 << 28) ) {file.write("  * Silicon Revision 2.0" + newline);}\r
-if ( (reg_val & 0xF0000000) == (2 << 28) ) {file.write("  * Silicon Revision 2.1" + newline);}\r
-\r
-// ROM: PRM_RSTST\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "PRM_DEVICE: PRM_RSTST", 0x44E00F08);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0 : GLOBAL_COLD_RST" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1 : GLOBAL_WARM_RST" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4 : WDT1_RST" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5 : EXTERNAL_WARM_RST" + newline);}\r
-\r
-// CONTROL: control_status\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: control_status", 0x44E10040);\r
-boot_sequence = (reg_val & 0x1F);\r
-if ( (reg_val & 3<<22 ) == 0<<22 ) {file.write("  * SYSBOOT[15:14] = 00b (19.2 MHz)" + newline);}\r
-if ( (reg_val & 3<<22 ) == 1<<22 ) {file.write("  * SYSBOOT[15:14] = 01b (24 MHz)" + newline);}\r
-if ( (reg_val & 3<<22 ) == 2<<22 ) {file.write("  * SYSBOOT[15:14] = 10b (25 MHz)" + newline);}\r
-if ( (reg_val & 3<<22 ) == 3<<22 ) {file.write("  * SYSBOOT[15:14] = 11b (26 MHz)" + newline);}\r
-if ( (reg_val & 3<<20 ) != 0<<20 ) {file.write("  * SYSBOOT[13:12] have been set improperly!" + newline);}\r
-if ( (reg_val & 3<<18 ) == 0<<18 ) {file.write("  * SYSBOOT[11:10] = 00b No GPMC CS0 addr/data muxing" + newline);}\r
-if ( (reg_val & 3<<18 ) == 1<<18 ) {file.write("  * SYSBOOT[11:10] = 01b GPMC CS0 addr/addr/data muxing" + newline);}\r
-if ( (reg_val & 3<<18 ) == 2<<18 ) {file.write("  * SYSBOOT[11:10] = 10b GPMC CS0 addr/data muxing" + newline);}\r
-if ( (reg_val & 3<<18 ) == 3<<18 ) {file.write("  * SYSBOOT[11:10] = 11b ILLEGAL VALUE!" + newline);}\r
-if ( (reg_val & 1<<17 ) == 1<<17 ) {file.write("  * SYSBOOT[9] = 0 GPMC CS0 Ignore WAIT input" + newline);}\r
-if ( (reg_val & 1<<17 ) == 1<<17 ) {file.write("  * SYSBOOT[9] = 1 GPMC CS0 Use WAIT input" + newline);}\r
-if ( (reg_val & 1<<16 ) == 1<<16 ) {file.write("  * SYSBOOT[8] = 0 GPMC CS0 8-bit data bus" + newline);}\r
-if ( (reg_val & 1<<16 ) == 1<<16 ) {file.write("  * SYSBOOT[8] = 1 GPMC CS0 16-bit data bus" + newline);}\r
-if ( (reg_val & 7<<8  ) == 3<<8  ) {file.write("  * Device Type = General Purpose (GP)" + newline);}\r
-else {file.write("  * Device Type is NOT GP" + newline);}\r
-if ( (reg_val & 0xFF ) == 0x01 ) {file.write("  * SYSBOOT[8] = 1 GPMC CS0 16-bit data bus" + newline);}\r
-if ( (reg_val & 3<<6  ) == 0<<6  ) {file.write("  * SYSBOOT[7:6] = 00b MII (EMAC boot modes only)" + newline);}\r
-if ( (reg_val & 3<<6  ) == 1<<6  ) {file.write("  * SYSBOOT[7:6] = 01b RMII (EMAC boot modes only)" + newline);}\r
-if ( (reg_val & 3<<6  ) == 2<<6  ) {file.write("  * SYSBOOT[7:6] = 10b ILLEGAL VALUE!" + newline);}\r
-if ( (reg_val & 3<<6  ) == 3<<6  ) {file.write("  * SYSBOOT[7:6] = 11b RGMII no internal delay (EMAC boot modes only)" + newline);}\r
-if ( (reg_val & 1<<5  ) == 0<<5  ) {file.write("  * SYSBOOT[5] = 0 CLKOUT1 disabled" + newline);}\r
-if ( (reg_val & 1<<5  ) == 1<<5  ) {file.write("  * SYSBOOT[5] = 1 CLKOUT1 enabled" + newline);}\r
-if (boot_sequence == 0x00) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}\r
-if (boot_sequence == 0x01) {file.write("  * Boot Sequence : UART0 -> XIP w/WAIT (MUX2) -> MMC0 -> SPI0" + newline);} \r
-if (boot_sequence == 0x02) {file.write("  * Boot Sequence : UART0 -> SPI0 -> NAND -> NANDI2C" + newline);}\r
-if (boot_sequence == 0x03) {file.write("  * Boot Sequence : UART0 -> SPI0 -> XIP (MUX2) -> MMC0" + newline);}\r
-if (boot_sequence == 0x04) {file.write("  * Boot Sequence : UART0 -> XIP w/WAIT (MUX1) -> MMC0 -> NAND" + newline);}\r
-if (boot_sequence == 0x05) {file.write("  * Boot Sequence : UART0 -> XIP (MUX1) -> SPI0 -> NANDI2C" + newline);}\r
-if (boot_sequence == 0x06) {file.write("  * Boot Sequence : EMAC1 -> SPI0 -> NAND -> NANDI2C" + newline);}\r
-if (boot_sequence == 0x07) {file.write("  * Boot Sequence : EMAC1 -> MMC0 -> XIP w/WAIT (MUX2) -> NAND" + newline);}\r
-if (boot_sequence == 0x08) {file.write("  * Boot Sequence : EMAC1 -> MMC0 -> XIP (MUX2) -> NANDI2C" + newline);}\r
-if (boot_sequence == 0x09) {file.write("  * Boot Sequence : EMAC1 -> XIP w/WAIT (MUX1) -> NAND -> MMC0" + newline);}\r
-if (boot_sequence == 0x0A) {file.write("  * Boot Sequence : EMAC1 -> XIP (MUX1) -> SPI0 -> NANDI2C" + newline);}\r
-if (boot_sequence == 0x0B) {file.write("  * Boot Sequence : USB0 -> NAND -> SPI0 -> MMC0" + newline);}\r
-if (boot_sequence == 0x0C) {file.write("  * Boot Sequence : USB0 -> NAND -> XIP (MUX2) -> NANDI2C" + newline);}\r
-if (boot_sequence == 0x0D) {file.write("  * Boot Sequence : USB0 -> NAND -> XIP (MUX1) -> SPI0" + newline);}\r
-if (boot_sequence == 0x0E) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}\r
-if (boot_sequence == 0x0F) {file.write("  * Boot Sequence : UART0 -> EMAC1 -> Reserved -> Reserved" + newline);}\r
-if (boot_sequence == 0x10) {file.write("  * Boot Sequence : XIP (MUX1) -> UART0 -> EMAC1 -> MMC0 " + newline);}\r
-if (boot_sequence == 0x11) {file.write("  * Boot Sequence : XIP w/WAIT (MUX1) -> UART0 -> EMAC1 -> MMC0" + newline);} \r
-if (boot_sequence == 0x12) {file.write("  * Boot Sequence : NAND -> NANDI2C -> USB0 -> UART0" + newline);}\r
-if (boot_sequence == 0x13) {file.write("  * Boot Sequence : NAND -> NANDI2C -> MMC0 -> UART0" + newline);}\r
-if (boot_sequence == 0x14) {file.write("  * Boot Sequence : NAND -> NANDI2C -> SPI0 -> EMAC1" + newline);}\r
-if (boot_sequence == 0x15) {file.write("  * Boot Sequence : NANDI2C -> MMC0 -> EMAC1 -> UART0" + newline);}\r
-if (boot_sequence == 0x16) {file.write("  * Boot Sequence : SPI0 -> MMC0 -> UART0 -> EMAC1" + newline);}\r
-if (boot_sequence == 0x17) {file.write("  * Boot Sequence : MMC0 -> SPI0 -> UART0 -> USB0" + newline);}\r
-if (boot_sequence == 0x18) {file.write("  * Boot Sequence : SPI0 -> MMC0 -> USB0 -> UART0" + newline);}\r
-if (boot_sequence == 0x19) {file.write("  * Boot Sequence : SPI0 -> MMC0 -> EMAC1 -> UART0" + newline);}\r
-if (boot_sequence == 0x1A) {file.write("  * Boot Sequence : XIP (MUX2) -> UART0 -> SPI0 -> MMC0" + newline);}\r
-if (boot_sequence == 0x1B) {file.write("  * Boot Sequence : XIP w/WAIT (MUX2) -> UART0 -> SPI0 -> MMC0" + newline);}\r
-if (boot_sequence == 0x1C) {file.write("  * Boot Sequence : MMC1 -> MMC0 -> UART0 -> USB0" + newline);}\r
-if (boot_sequence == 0x1D) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}\r
-if (boot_sequence == 0x1E) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}\r
-if (boot_sequence == 0x1F) {file.write("  * Boot Sequence : Fast External Boot -> EMAC1 -> UART0 -> Reserved" + newline);}\r
-\r
-// ROM: Tracing Vector 1\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 1", 0x4030CE40);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [General] Passed the public reset vector" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [General] Entered main function" + newline);}\r
-if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [General] Running after the cold reset" + newline);}\r
-if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Boot] Main booting routine entered" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Memory booting started" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Peripheral Boot] Peripheral booting started" + newline);}\r
-if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [Boot] Booting loop reached last device" + newline);}\r
-if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Boot] GP header found" + newline);}\r
-if (reg_val & 1<<8  ) {file.write("  * Bit 8  : [Boot] Reserved" + newline);}\r
-if (reg_val & 1<<9  ) {file.write("  * Bit 9  : [Boot] Reserved" + newline);}\r
-if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<11 ) {file.write("  * Bit 11 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Peripheral Boot] Device initialized" + newline);}\r
-if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Peripheral Boot] ASIC ID sent" + newline);}\r
-if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Peripheral Boot] Image received" + newline);}\r
-if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Peripheral Boot] Peripheral booting failed" + newline);}\r
-if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Peripheral Boot] Booting Message not received (timeout)" + newline);}\r
-if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Image size not received (timeout)" + newline);}\r
-if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Image not received (timeout)" + newline);}\r
-if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}\r
-if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Configuration Header] CHSETTINGS found" + newline);}\r
-if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Configuration Header] CHSETTINGS executed" + newline);}\r
-if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Configuration Header] CHRAM executed" + newline);}\r
-if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Configuration Header] CHFLASH executed" + newline);}\r
-if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Configuration Header] CHMMCSD clocks executed" + newline);}\r
-if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Configuration Header] CHMMCSD bus width executed" + newline);}\r
-if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}\r
-if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}\r
-if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}\r
-if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}\r
-if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}\r
-if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}\r
-\r
-// ROM: Tracing Vector 2\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 1", 0x4030CE44);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [USB] USB connect" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [USB] USB configured state" + newline);}\r
-if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [USB] USB VBUS valid" + newline);}\r
-if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [USB] USB session valid" + newline);}\r
-if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}\r
-if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}\r
-if (reg_val & 1<<10 ) {file.write("  * Bit 10 : Reserved" + newline);}\r
-if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}\r
-if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Memory Boot] Memory booting trial 0" + newline);}\r
-if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Memory Boot] Memory booting trial 1" + newline);}\r
-if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Memory Boot] Memory booting trial 2" + newline);}\r
-if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Memory Boot] Memory booting trial 3" + newline);}\r
-if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Memory Boot] Execute GP image" + newline);}\r
-if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Start authentication of peripheral boot image" + newline);}\r
-if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Memory & Peripheral Boot] Jumping to Initial SW" + newline);}\r
-if (reg_val & 1<<19 ) {file.write("  * Bit 19 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Memory & Peripheral Boot] Start image authentication" + newline);}\r
-if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Memory & Peripheral Boot] Image authentication failed" + newline);}\r
-if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Memory & Peripheral Boot] Analyzing SpeedUp" + newline);}\r
-if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Memory & Peripheral Boot] SpeedUp failed" + newline);}\r
-if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<26 ) {file.write("  * Bit 26 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<27 ) {file.write("  * Bit 27 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<28 ) {file.write("  * Bit 28 : [Memory & Peripheral Boot] Authentication procedure failed" + newline);}\r
-if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}\r
-if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}\r
-if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}\r
-\r
-\r
-// ROM: Tracing Vector 3\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 1", 0x4030CE48);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Memory Boot] Memory booting device NULL" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Memory Boot] Memory booting device XIP" + newline);}\r
-if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Memory Boot] Memory booting device XIPWAIT" + newline);}\r
-if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Memory Boot] Memory booting device NAND" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Reserved" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Memory Boot] Memory booting device MMCSD0" + newline);}\r
-if (reg_val & 1<<6  ) {file.write("  * Bit 6  : Reserved" + newline);}\r
-if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Memory Boot] Memory booting device MMCSD1" + newline);}\r
-if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}\r
-if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}\r
-if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Memory Boot] Reserved" + newline);}\r
-if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}\r
-if (reg_val & 1<<12 ) {file.write("  * Bit 12 : Memory booting device SPI" + newline);}\r
-if (reg_val & 1<<13 ) {file.write("  * Bit 13 : Reserved" + newline);}\r
-if (reg_val & 1<<14 ) {file.write("  * Bit 14 : Reserved" + newline);}\r
-if (reg_val & 1<<15 ) {file.write("  * Bit 15 : Reserved" + newline);}\r
-if (reg_val & 1<<16 ) {file.write("  * Bit 16 : Peripheral booting device UART0" + newline);}\r
-if (reg_val & 1<<17 ) {file.write("  * Bit 17 : Reserved" + newline);}\r
-if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}\r
-if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Peripheral Boot] Peripheral booting device USB" + newline);}\r
-if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Peripheral Boot] Peripheral booting device GPGMAC0" + newline);}\r
-if (reg_val & 1<<23 ) {file.write("  * Bit 23 : Reserved" + newline);}\r
-if (reg_val & 1<<24 ) {file.write("  * Bit 24 : Peripheral booting device NULL" + newline);}\r
-if (reg_val & 1<<25 ) {file.write("  * Bit 25 : Reserved" + newline);}\r
-if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}\r
-if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}\r
-if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}\r
-if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}\r
-if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}\r
-if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}\r
-\r
-// ROM: Copy of PRM_RSTST\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "ROM: Current copy of PRM_RSTST", 0x4030CE4C);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0 : GLOBAL_COLD_RST" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1 : GLOBAL_WARM_RST" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4 : WDT1_RST" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5 : EXTERNAL_WARM_RST" + newline);}\r
-\r
-// ROM: Cold Reset Tracing Vector 1\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 1", 0x4030CE50);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [General] Passed the public reset vector" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [General] Entered main function" + newline);}\r
-if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [General] Running after the cold reset" + newline);}\r
-if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Boot] Main booting routine entered" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Memory booting started" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Peripheral Boot] Peripheral booting started" + newline);}\r
-if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [Boot] Booting loop reached last device" + newline);}\r
-if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Boot] GP header found" + newline);}\r
-if (reg_val & 1<<8  ) {file.write("  * Bit 8  : [Boot] Reserved" + newline);}\r
-if (reg_val & 1<<9  ) {file.write("  * Bit 9  : [Boot] Reserved" + newline);}\r
-if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<11 ) {file.write("  * Bit 11 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Peripheral Boot] Device initialized" + newline);}\r
-if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Peripheral Boot] ASIC ID sent" + newline);}\r
-if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Peripheral Boot] Image received" + newline);}\r
-if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Peripheral Boot] Peripheral booting failed" + newline);}\r
-if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Peripheral Boot] Booting Message not received (timeout)" + newline);}\r
-if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Image size not received (timeout)" + newline);}\r
-if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Image not received (timeout)" + newline);}\r
-if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}\r
-if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Configuration Header] CHSETTINGS found" + newline);}\r
-if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Configuration Header] CHSETTINGS executed" + newline);}\r
-if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Configuration Header] CHRAM executed" + newline);}\r
-if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Configuration Header] CHFLASH executed" + newline);}\r
-if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Configuration Header] CHMMCSD clocks executed" + newline);}\r
-if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Configuration Header] CHMMCSD bus width executed" + newline);}\r
-if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}\r
-if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}\r
-if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}\r
-if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}\r
-if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}\r
-if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}\r
-\r
-// ROM: Cold Reset Tracing Vector 2\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 1", 0x4030CE54);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Companion chip] Reserved" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [USB] USB connect" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [USB] USB configured state" + newline);}\r
-if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [USB] USB VBUS valid" + newline);}\r
-if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [USB] USB session valid" + newline);}\r
-if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}\r
-if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}\r
-if (reg_val & 1<<10 ) {file.write("  * Bit 10 : Reserved" + newline);}\r
-if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}\r
-if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Memory Boot] Memory booting trial 0" + newline);}\r
-if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Memory Boot] Memory booting trial 1" + newline);}\r
-if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Memory Boot] Memory booting trial 2" + newline);}\r
-if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Memory Boot] Memory booting trial 3" + newline);}\r
-if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Memory Boot] Execute GP image" + newline);}\r
-if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Start authentication of peripheral boot image" + newline);}\r
-if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Memory & Peripheral Boot] Jumping to Initial SW" + newline);}\r
-if (reg_val & 1<<19 ) {file.write("  * Bit 19 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Memory & Peripheral Boot] Start image authentication" + newline);}\r
-if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Memory & Peripheral Boot] Image authentication failed" + newline);}\r
-if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Memory & Peripheral Boot] Analyzing SpeedUp" + newline);}\r
-if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Memory & Peripheral Boot] SpeedUp failed" + newline);}\r
-if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<26 ) {file.write("  * Bit 26 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<27 ) {file.write("  * Bit 27 : [Memory & Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<28 ) {file.write("  * Bit 28 : [Memory & Peripheral Boot] Authentication procedure failed" + newline);}\r
-if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}\r
-if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}\r
-if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}\r
-\r
-// ROM: Cold Reset Tracing Vector 3\r
-file.write(newline);\r
-reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 1", 0x4030CE58);\r
-if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Memory Boot] Memory booting device NULL" + newline);}\r
-if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Memory Boot] Memory booting device XIP" + newline);}\r
-if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Memory Boot] Memory booting device XIPWAIT" + newline);}\r
-if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Memory Boot] Memory booting device NAND" + newline);}\r
-if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Reserved" + newline);}\r
-if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Memory Boot] Memory booting device MMCSD0" + newline);}\r
-if (reg_val & 1<<6  ) {file.write("  * Bit 6  : Reserved" + newline);}\r
-if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Memory Boot] Memory booting device MMCSD1" + newline);}\r
-if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}\r
-if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}\r
-if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Memory Boot] Reserved" + newline);}\r
-if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}\r
-if (reg_val & 1<<12 ) {file.write("  * Bit 12 : Memory booting device SPI" + newline);}\r
-if (reg_val & 1<<13 ) {file.write("  * Bit 13 : Reserved" + newline);}\r
-if (reg_val & 1<<14 ) {file.write("  * Bit 14 : Reserved" + newline);}\r
-if (reg_val & 1<<15 ) {file.write("  * Bit 15 : Reserved" + newline);}\r
-if (reg_val & 1<<16 ) {file.write("  * Bit 16 : Peripheral booting device UART0" + newline);}\r
-if (reg_val & 1<<17 ) {file.write("  * Bit 17 : Reserved" + newline);}\r
-if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}\r
-if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Peripheral Boot] Peripheral booting device USB" + newline);}\r
-if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Peripheral Boot] Reserved" + newline);}\r
-if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Peripheral Boot] Peripheral booting device GPGMAC0" + newline);}\r
-if (reg_val & 1<<23 ) {file.write("  * Bit 23 : Reserved" + newline);}\r
-if (reg_val & 1<<24 ) {file.write("  * Bit 24 : Peripheral booting device NULL" + newline);}\r
-if (reg_val & 1<<25 ) {file.write("  * Bit 25 : Reserved" + newline);}\r
-if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}\r
-if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}\r
-if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}\r
-if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}\r
-if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}\r
-if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}\r
-\r
-\r
-debugSessionDAP.target.disconnect();\r
-\r
-\r
-debugSessionA8 = ds.openSession("*","CortxA8");\r
-debugSessionA8.target.connect();\r
-\r
-// Get value of ARM Program Counter\r
-value = debugSessionA8.memory.readRegister("PC");\r
-value_string = d2h(value);\r
-file.write(newline + "Cortex A8 Program Counter = 0x" + value_string + newline);\r
-\r
-file.write(newline);\r
-file.write("ROM Exception Vectors" + newline);\r
-file.write("  * 0x4030CE04 Undefined" + newline);\r
-file.write("  * 0x4030CE08 SWI" + newline);\r
-file.write("  * 0x4030CE0C Pre-fetch abort" + newline);\r
-file.write("  * 0x4030CE10 Data abort" + newline);\r
-file.write("  * 0x4030CE14 Unused" + newline);\r
-file.write("  * 0x4030CE18 IRQ" + newline);\r
-file.write("  * 0x4030CE1C FIQ" + newline);\r
-\r
-file.write(newline);\r
-file.write("ROM Dead Loops" + newline);\r
-file.write("  * 0x00020080 Undefined exception default handler" + newline);\r
-file.write("  * 0x00020084 SWI exception default handler" + newline);\r
-file.write("  * 0x00020088 Pre-fetch abort exception default handler" + newline);\r
-file.write("  * 0x0002008C Data exception default handler" + newline);\r
-file.write("  * 0x00020090 Unused exception default handler" + newline);\r
-file.write("  * 0x00020094 IRQ exception default handler" + newline);\r
-file.write("  * 0x00020098 FIQ exception default handler" + newline);\r
-file.write("  * 0x0002009C Validation test PASS" + newline);\r
-file.write("  * 0x000200A0 Validation test FAIL" + newline);\r
-file.write("  * 0x000200A4 Reserved" + newline);\r
-file.write("  * 0x000200A8 Image not executed or returned" + newline);\r
-file.write("  * 0x000200AC Reserved" + newline);\r
-file.write("  * 0x000200B0 Reserved" + newline);\r
-file.write("  * 0x000200B4 Reserved" + newline);\r
-file.write("  * 0x000200B8 Reserved" + newline);\r
-file.write("  * 0x000200BC Reserved" + newline);\r
-\r
-debugSessionA8.target.disconnect();\r
-file.close();\r
+/*
+ * Copyright (c) 2006-2014, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}
+
+var newline = "\n";
+
+function printRegisterValue(ds, name, addr)
+{
+       value = debugSessionDAP.memory.readWord(0,addr,false);
+       value_string = d2h(value);
+       file.write(name + " = 0x" + value_string + newline);
+       return value; // return the register value for interrogation
+}
+
+// Build a filename that includes date/time
+var today = new Date();
+var year4digit = today.getFullYear();
+var month2digit = ("0" + (today.getMonth()+1)).slice(-2);
+var day2digit = ("0" + today.getDate()).slice(-2);
+var hour2digit = ("0" + today.getHours()).slice(-2);
+var minutes2digit = ("0" + today.getMinutes()).slice(-2);
+var seconds2digit = ("0" + today.getSeconds()).slice(-2);
+var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; 
+var userHomeFolder = System.getProperty("user.home");
+var filename = userHomeFolder + '/Desktop/' + 'am335x-boot-analysis' + filename_date + '.txt';
+
+file = new java.io.FileWriter(filename);
+
+debugSessionDAP = ds.openSession("*","CS_DAP_DebugSS");
+debugSessionDAP.target.connect();
+
+var reg_val;
+
+// CONTROL: device_id
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: device_id", 0x44E10600);
+if ( (reg_val & 0x0FFFFFFF) == 0xb94402e ) {file.write("  * AM335x family" + newline);}
+if ( (reg_val & 0xF0000000) == (0 << 28) ) {file.write("  * Silicon Revision 1.0" + newline);}
+if ( (reg_val & 0xF0000000) == (1 << 28) ) {file.write("  * Silicon Revision 2.0" + newline);}
+if ( (reg_val & 0xF0000000) == (2 << 28) ) {file.write("  * Silicon Revision 2.1" + newline);}
+
+// ROM: PRM_RSTST
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "PRM_DEVICE: PRM_RSTST", 0x44E00F08);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0 : GLOBAL_COLD_RST" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1 : GLOBAL_WARM_RST" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4 : WDT1_RST" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5 : EXTERNAL_WARM_RST" + newline);}
+
+// CONTROL: control_status
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: control_status", 0x44E10040);
+boot_sequence = (reg_val & 0x1F);
+if ( (reg_val & 3<<22 ) == 0<<22 ) {file.write("  * SYSBOOT[15:14] = 00b (19.2 MHz)" + newline);}
+if ( (reg_val & 3<<22 ) == 1<<22 ) {file.write("  * SYSBOOT[15:14] = 01b (24 MHz)" + newline);}
+if ( (reg_val & 3<<22 ) == 2<<22 ) {file.write("  * SYSBOOT[15:14] = 10b (25 MHz)" + newline);}
+if ( (reg_val & 3<<22 ) == 3<<22 ) {file.write("  * SYSBOOT[15:14] = 11b (26 MHz)" + newline);}
+if ( (reg_val & 3<<20 ) != 0<<20 ) {file.write("  * SYSBOOT[13:12] have been set improperly!" + newline);}
+if ( (reg_val & 3<<18 ) == 0<<18 ) {file.write("  * SYSBOOT[11:10] = 00b No GPMC CS0 addr/data muxing" + newline);}
+if ( (reg_val & 3<<18 ) == 1<<18 ) {file.write("  * SYSBOOT[11:10] = 01b GPMC CS0 addr/addr/data muxing" + newline);}
+if ( (reg_val & 3<<18 ) == 2<<18 ) {file.write("  * SYSBOOT[11:10] = 10b GPMC CS0 addr/data muxing" + newline);}
+if ( (reg_val & 3<<18 ) == 3<<18 ) {file.write("  * SYSBOOT[11:10] = 11b ILLEGAL VALUE!" + newline);}
+if ( (reg_val & 1<<17 ) == 1<<17 ) {file.write("  * SYSBOOT[9] = 0 GPMC CS0 Ignore WAIT input" + newline);}
+if ( (reg_val & 1<<17 ) == 1<<17 ) {file.write("  * SYSBOOT[9] = 1 GPMC CS0 Use WAIT input" + newline);}
+if ( (reg_val & 1<<16 ) == 1<<16 ) {file.write("  * SYSBOOT[8] = 0 GPMC CS0 8-bit data bus" + newline);}
+if ( (reg_val & 1<<16 ) == 1<<16 ) {file.write("  * SYSBOOT[8] = 1 GPMC CS0 16-bit data bus" + newline);}
+if ( (reg_val & 7<<8  ) == 3<<8  ) {file.write("  * Device Type = General Purpose (GP)" + newline);}
+else {file.write("  * Device Type is NOT GP" + newline);}
+if ( (reg_val & 0xFF ) == 0x01 ) {file.write("  * SYSBOOT[8] = 1 GPMC CS0 16-bit data bus" + newline);}
+if ( (reg_val & 3<<6  ) == 0<<6  ) {file.write("  * SYSBOOT[7:6] = 00b MII (EMAC boot modes only)" + newline);}
+if ( (reg_val & 3<<6  ) == 1<<6  ) {file.write("  * SYSBOOT[7:6] = 01b RMII (EMAC boot modes only)" + newline);}
+if ( (reg_val & 3<<6  ) == 2<<6  ) {file.write("  * SYSBOOT[7:6] = 10b ILLEGAL VALUE!" + newline);}
+if ( (reg_val & 3<<6  ) == 3<<6  ) {file.write("  * SYSBOOT[7:6] = 11b RGMII no internal delay (EMAC boot modes only)" + newline);}
+if ( (reg_val & 1<<5  ) == 0<<5  ) {file.write("  * SYSBOOT[5] = 0 CLKOUT1 disabled" + newline);}
+if ( (reg_val & 1<<5  ) == 1<<5  ) {file.write("  * SYSBOOT[5] = 1 CLKOUT1 enabled" + newline);}
+if (boot_sequence == 0x00) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}
+if (boot_sequence == 0x01) {file.write("  * Boot Sequence : UART0 -> XIP w/WAIT (MUX2) -> MMC0 -> SPI0" + newline);} 
+if (boot_sequence == 0x02) {file.write("  * Boot Sequence : UART0 -> SPI0 -> NAND -> NANDI2C" + newline);}
+if (boot_sequence == 0x03) {file.write("  * Boot Sequence : UART0 -> SPI0 -> XIP (MUX2) -> MMC0" + newline);}
+if (boot_sequence == 0x04) {file.write("  * Boot Sequence : UART0 -> XIP w/WAIT (MUX1) -> MMC0 -> NAND" + newline);}
+if (boot_sequence == 0x05) {file.write("  * Boot Sequence : UART0 -> XIP (MUX1) -> SPI0 -> NANDI2C" + newline);}
+if (boot_sequence == 0x06) {file.write("  * Boot Sequence : EMAC1 -> SPI0 -> NAND -> NANDI2C" + newline);}
+if (boot_sequence == 0x07) {file.write("  * Boot Sequence : EMAC1 -> MMC0 -> XIP w/WAIT (MUX2) -> NAND" + newline);}
+if (boot_sequence == 0x08) {file.write("  * Boot Sequence : EMAC1 -> MMC0 -> XIP (MUX2) -> NANDI2C" + newline);}
+if (boot_sequence == 0x09) {file.write("  * Boot Sequence : EMAC1 -> XIP w/WAIT (MUX1) -> NAND -> MMC0" + newline);}
+if (boot_sequence == 0x0A) {file.write("  * Boot Sequence : EMAC1 -> XIP (MUX1) -> SPI0 -> NANDI2C" + newline);}
+if (boot_sequence == 0x0B) {file.write("  * Boot Sequence : USB0 -> NAND -> SPI0 -> MMC0" + newline);}
+if (boot_sequence == 0x0C) {file.write("  * Boot Sequence : USB0 -> NAND -> XIP (MUX2) -> NANDI2C" + newline);}
+if (boot_sequence == 0x0D) {file.write("  * Boot Sequence : USB0 -> NAND -> XIP (MUX1) -> SPI0" + newline);}
+if (boot_sequence == 0x0E) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}
+if (boot_sequence == 0x0F) {file.write("  * Boot Sequence : UART0 -> EMAC1 -> Reserved -> Reserved" + newline);}
+if (boot_sequence == 0x10) {file.write("  * Boot Sequence : XIP (MUX1) -> UART0 -> EMAC1 -> MMC0 " + newline);}
+if (boot_sequence == 0x11) {file.write("  * Boot Sequence : XIP w/WAIT (MUX1) -> UART0 -> EMAC1 -> MMC0" + newline);} 
+if (boot_sequence == 0x12) {file.write("  * Boot Sequence : NAND -> NANDI2C -> USB0 -> UART0" + newline);}
+if (boot_sequence == 0x13) {file.write("  * Boot Sequence : NAND -> NANDI2C -> MMC0 -> UART0" + newline);}
+if (boot_sequence == 0x14) {file.write("  * Boot Sequence : NAND -> NANDI2C -> SPI0 -> EMAC1" + newline);}
+if (boot_sequence == 0x15) {file.write("  * Boot Sequence : NANDI2C -> MMC0 -> EMAC1 -> UART0" + newline);}
+if (boot_sequence == 0x16) {file.write("  * Boot Sequence : SPI0 -> MMC0 -> UART0 -> EMAC1" + newline);}
+if (boot_sequence == 0x17) {file.write("  * Boot Sequence : MMC0 -> SPI0 -> UART0 -> USB0" + newline);}
+if (boot_sequence == 0x18) {file.write("  * Boot Sequence : SPI0 -> MMC0 -> USB0 -> UART0" + newline);}
+if (boot_sequence == 0x19) {file.write("  * Boot Sequence : SPI0 -> MMC0 -> EMAC1 -> UART0" + newline);}
+if (boot_sequence == 0x1A) {file.write("  * Boot Sequence : XIP (MUX2) -> UART0 -> SPI0 -> MMC0" + newline);}
+if (boot_sequence == 0x1B) {file.write("  * Boot Sequence : XIP w/WAIT (MUX2) -> UART0 -> SPI0 -> MMC0" + newline);}
+if (boot_sequence == 0x1C) {file.write("  * Boot Sequence : MMC1 -> MMC0 -> UART0 -> USB0" + newline);}
+if (boot_sequence == 0x1D) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}
+if (boot_sequence == 0x1E) {file.write("  * RESERVED BOOT SEQUENCE!" + newline);}
+if (boot_sequence == 0x1F) {file.write("  * Boot Sequence : Fast External Boot -> EMAC1 -> UART0 -> Reserved" + newline);}
+
+// ROM: Tracing Vector 1
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 1", 0x4030CE40);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [General] Passed the public reset vector" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [General] Entered main function" + newline);}
+if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [General] Running after the cold reset" + newline);}
+if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Boot] Main booting routine entered" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Memory booting started" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Peripheral Boot] Peripheral booting started" + newline);}
+if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [Boot] Booting loop reached last device" + newline);}
+if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Boot] GP header found" + newline);}
+if (reg_val & 1<<8  ) {file.write("  * Bit 8  : [Boot] Reserved" + newline);}
+if (reg_val & 1<<9  ) {file.write("  * Bit 9  : [Boot] Reserved" + newline);}
+if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<11 ) {file.write("  * Bit 11 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Peripheral Boot] Device initialized" + newline);}
+if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Peripheral Boot] ASIC ID sent" + newline);}
+if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Peripheral Boot] Image received" + newline);}
+if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Peripheral Boot] Peripheral booting failed" + newline);}
+if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Peripheral Boot] Booting Message not received (timeout)" + newline);}
+if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Image size not received (timeout)" + newline);}
+if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Image not received (timeout)" + newline);}
+if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}
+if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Configuration Header] CHSETTINGS found" + newline);}
+if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Configuration Header] CHSETTINGS executed" + newline);}
+if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Configuration Header] CHRAM executed" + newline);}
+if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Configuration Header] CHFLASH executed" + newline);}
+if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Configuration Header] CHMMCSD clocks executed" + newline);}
+if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Configuration Header] CHMMCSD bus width executed" + newline);}
+if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}
+if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}
+if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}
+if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}
+if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}
+if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}
+
+// ROM: Tracing Vector 2
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 1", 0x4030CE44);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [USB] USB connect" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [USB] USB configured state" + newline);}
+if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [USB] USB VBUS valid" + newline);}
+if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [USB] USB session valid" + newline);}
+if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}
+if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}
+if (reg_val & 1<<10 ) {file.write("  * Bit 10 : Reserved" + newline);}
+if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}
+if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Memory Boot] Memory booting trial 0" + newline);}
+if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Memory Boot] Memory booting trial 1" + newline);}
+if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Memory Boot] Memory booting trial 2" + newline);}
+if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Memory Boot] Memory booting trial 3" + newline);}
+if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Memory Boot] Execute GP image" + newline);}
+if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Start authentication of peripheral boot image" + newline);}
+if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Memory & Peripheral Boot] Jumping to Initial SW" + newline);}
+if (reg_val & 1<<19 ) {file.write("  * Bit 19 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Memory & Peripheral Boot] Start image authentication" + newline);}
+if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Memory & Peripheral Boot] Image authentication failed" + newline);}
+if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Memory & Peripheral Boot] Analyzing SpeedUp" + newline);}
+if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Memory & Peripheral Boot] SpeedUp failed" + newline);}
+if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<26 ) {file.write("  * Bit 26 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<27 ) {file.write("  * Bit 27 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<28 ) {file.write("  * Bit 28 : [Memory & Peripheral Boot] Authentication procedure failed" + newline);}
+if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}
+if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}
+if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}
+
+
+// ROM: Tracing Vector 3
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "ROM: Current tracing vector, word 1", 0x4030CE48);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Memory Boot] Memory booting device NULL" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Memory Boot] Memory booting device XIP" + newline);}
+if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Memory Boot] Memory booting device XIPWAIT" + newline);}
+if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Memory Boot] Memory booting device NAND" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Reserved" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Memory Boot] Memory booting device MMCSD0" + newline);}
+if (reg_val & 1<<6  ) {file.write("  * Bit 6  : Reserved" + newline);}
+if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Memory Boot] Memory booting device MMCSD1" + newline);}
+if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}
+if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}
+if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Memory Boot] Reserved" + newline);}
+if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}
+if (reg_val & 1<<12 ) {file.write("  * Bit 12 : Memory booting device SPI" + newline);}
+if (reg_val & 1<<13 ) {file.write("  * Bit 13 : Reserved" + newline);}
+if (reg_val & 1<<14 ) {file.write("  * Bit 14 : Reserved" + newline);}
+if (reg_val & 1<<15 ) {file.write("  * Bit 15 : Reserved" + newline);}
+if (reg_val & 1<<16 ) {file.write("  * Bit 16 : Peripheral booting device UART0" + newline);}
+if (reg_val & 1<<17 ) {file.write("  * Bit 17 : Reserved" + newline);}
+if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}
+if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Peripheral Boot] Peripheral booting device USB" + newline);}
+if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Peripheral Boot] Peripheral booting device GPGMAC0" + newline);}
+if (reg_val & 1<<23 ) {file.write("  * Bit 23 : Reserved" + newline);}
+if (reg_val & 1<<24 ) {file.write("  * Bit 24 : Peripheral booting device NULL" + newline);}
+if (reg_val & 1<<25 ) {file.write("  * Bit 25 : Reserved" + newline);}
+if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}
+if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}
+if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}
+if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}
+if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}
+if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}
+
+// ROM: Copy of PRM_RSTST
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "ROM: Current copy of PRM_RSTST", 0x4030CE4C);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0 : GLOBAL_COLD_RST" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1 : GLOBAL_WARM_RST" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4 : WDT1_RST" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5 : EXTERNAL_WARM_RST" + newline);}
+
+// ROM: Cold Reset Tracing Vector 1
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 1", 0x4030CE50);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [General] Passed the public reset vector" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [General] Entered main function" + newline);}
+if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [General] Running after the cold reset" + newline);}
+if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Boot] Main booting routine entered" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Memory booting started" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Peripheral Boot] Peripheral booting started" + newline);}
+if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [Boot] Booting loop reached last device" + newline);}
+if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Boot] GP header found" + newline);}
+if (reg_val & 1<<8  ) {file.write("  * Bit 8  : [Boot] Reserved" + newline);}
+if (reg_val & 1<<9  ) {file.write("  * Bit 9  : [Boot] Reserved" + newline);}
+if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<11 ) {file.write("  * Bit 11 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Peripheral Boot] Device initialized" + newline);}
+if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Peripheral Boot] ASIC ID sent" + newline);}
+if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Peripheral Boot] Image received" + newline);}
+if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Peripheral Boot] Peripheral booting failed" + newline);}
+if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Peripheral Boot] Booting Message not received (timeout)" + newline);}
+if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Image size not received (timeout)" + newline);}
+if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Image not received (timeout)" + newline);}
+if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}
+if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Configuration Header] CHSETTINGS found" + newline);}
+if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Configuration Header] CHSETTINGS executed" + newline);}
+if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Configuration Header] CHRAM executed" + newline);}
+if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Configuration Header] CHFLASH executed" + newline);}
+if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Configuration Header] CHMMCSD clocks executed" + newline);}
+if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Configuration Header] CHMMCSD bus width executed" + newline);}
+if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}
+if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}
+if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}
+if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}
+if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}
+if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}
+
+// ROM: Cold Reset Tracing Vector 2
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 1", 0x4030CE54);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Companion chip] Reserved" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [USB] USB connect" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [USB] USB configured state" + newline);}
+if (reg_val & 1<<6  ) {file.write("  * Bit 6  : [USB] USB VBUS valid" + newline);}
+if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [USB] USB session valid" + newline);}
+if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}
+if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}
+if (reg_val & 1<<10 ) {file.write("  * Bit 10 : Reserved" + newline);}
+if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}
+if (reg_val & 1<<12 ) {file.write("  * Bit 12 : [Memory Boot] Memory booting trial 0" + newline);}
+if (reg_val & 1<<13 ) {file.write("  * Bit 13 : [Memory Boot] Memory booting trial 1" + newline);}
+if (reg_val & 1<<14 ) {file.write("  * Bit 14 : [Memory Boot] Memory booting trial 2" + newline);}
+if (reg_val & 1<<15 ) {file.write("  * Bit 15 : [Memory Boot] Memory booting trial 3" + newline);}
+if (reg_val & 1<<16 ) {file.write("  * Bit 16 : [Memory Boot] Execute GP image" + newline);}
+if (reg_val & 1<<17 ) {file.write("  * Bit 17 : [Peripheral Boot] Start authentication of peripheral boot image" + newline);}
+if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Memory & Peripheral Boot] Jumping to Initial SW" + newline);}
+if (reg_val & 1<<19 ) {file.write("  * Bit 19 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Memory & Peripheral Boot] Start image authentication" + newline);}
+if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Memory & Peripheral Boot] Image authentication failed" + newline);}
+if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Memory & Peripheral Boot] Analyzing SpeedUp" + newline);}
+if (reg_val & 1<<23 ) {file.write("  * Bit 23 : [Memory & Peripheral Boot] SpeedUp failed" + newline);}
+if (reg_val & 1<<24 ) {file.write("  * Bit 24 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<25 ) {file.write("  * Bit 25 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<26 ) {file.write("  * Bit 26 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<27 ) {file.write("  * Bit 27 : [Memory & Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<28 ) {file.write("  * Bit 28 : [Memory & Peripheral Boot] Authentication procedure failed" + newline);}
+if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}
+if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}
+if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}
+
+// ROM: Cold Reset Tracing Vector 3
+file.write(newline);
+reg_val = printRegisterValue(debugSessionDAP, "ROM: Cold reset tracing vector, word 1", 0x4030CE58);
+if (reg_val & 1<<0  ) {file.write("  * Bit 0  : [Memory Boot] Memory booting device NULL" + newline);}
+if (reg_val & 1<<1  ) {file.write("  * Bit 1  : [Memory Boot] Memory booting device XIP" + newline);}
+if (reg_val & 1<<2  ) {file.write("  * Bit 2  : [Memory Boot] Memory booting device XIPWAIT" + newline);}
+if (reg_val & 1<<3  ) {file.write("  * Bit 3  : [Memory Boot] Memory booting device NAND" + newline);}
+if (reg_val & 1<<4  ) {file.write("  * Bit 4  : [Memory Boot] Reserved" + newline);}
+if (reg_val & 1<<5  ) {file.write("  * Bit 5  : [Memory Boot] Memory booting device MMCSD0" + newline);}
+if (reg_val & 1<<6  ) {file.write("  * Bit 6  : Reserved" + newline);}
+if (reg_val & 1<<7  ) {file.write("  * Bit 7  : [Memory Boot] Memory booting device MMCSD1" + newline);}
+if (reg_val & 1<<8  ) {file.write("  * Bit 8  : Reserved" + newline);}
+if (reg_val & 1<<9  ) {file.write("  * Bit 9  : Reserved" + newline);}
+if (reg_val & 1<<10 ) {file.write("  * Bit 10 : [Memory Boot] Reserved" + newline);}
+if (reg_val & 1<<11 ) {file.write("  * Bit 11 : Reserved" + newline);}
+if (reg_val & 1<<12 ) {file.write("  * Bit 12 : Memory booting device SPI" + newline);}
+if (reg_val & 1<<13 ) {file.write("  * Bit 13 : Reserved" + newline);}
+if (reg_val & 1<<14 ) {file.write("  * Bit 14 : Reserved" + newline);}
+if (reg_val & 1<<15 ) {file.write("  * Bit 15 : Reserved" + newline);}
+if (reg_val & 1<<16 ) {file.write("  * Bit 16 : Peripheral booting device UART0" + newline);}
+if (reg_val & 1<<17 ) {file.write("  * Bit 17 : Reserved" + newline);}
+if (reg_val & 1<<18 ) {file.write("  * Bit 18 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<19 ) {file.write("  * Bit 19 : Reserved" + newline);}
+if (reg_val & 1<<20 ) {file.write("  * Bit 20 : [Peripheral Boot] Peripheral booting device USB" + newline);}
+if (reg_val & 1<<21 ) {file.write("  * Bit 21 : [Peripheral Boot] Reserved" + newline);}
+if (reg_val & 1<<22 ) {file.write("  * Bit 22 : [Peripheral Boot] Peripheral booting device GPGMAC0" + newline);}
+if (reg_val & 1<<23 ) {file.write("  * Bit 23 : Reserved" + newline);}
+if (reg_val & 1<<24 ) {file.write("  * Bit 24 : Peripheral booting device NULL" + newline);}
+if (reg_val & 1<<25 ) {file.write("  * Bit 25 : Reserved" + newline);}
+if (reg_val & 1<<26 ) {file.write("  * Bit 26 : Reserved" + newline);}
+if (reg_val & 1<<27 ) {file.write("  * Bit 27 : Reserved" + newline);}
+if (reg_val & 1<<28 ) {file.write("  * Bit 28 : Reserved" + newline);}
+if (reg_val & 1<<29 ) {file.write("  * Bit 29 : Reserved" + newline);}
+if (reg_val & 1<<30 ) {file.write("  * Bit 30 : Reserved" + newline);}
+if (reg_val & 1<<31 ) {file.write("  * Bit 31 : Reserved" + newline);}
+
+
+debugSessionDAP.target.disconnect();
+
+
+debugSessionA8 = ds.openSession("*","CortxA8");
+debugSessionA8.target.connect();
+
+// Get value of ARM Program Counter
+value = debugSessionA8.memory.readRegister("PC");
+value_string = d2h(value);
+file.write(newline + "Cortex A8 Program Counter = 0x" + value_string + newline);
+
+file.write(newline);
+file.write("ROM Exception Vectors" + newline);
+file.write("  * 0x4030CE04 Undefined" + newline);
+file.write("  * 0x4030CE08 SWI" + newline);
+file.write("  * 0x4030CE0C Pre-fetch abort" + newline);
+file.write("  * 0x4030CE10 Data abort" + newline);
+file.write("  * 0x4030CE14 Unused" + newline);
+file.write("  * 0x4030CE18 IRQ" + newline);
+file.write("  * 0x4030CE1C FIQ" + newline);
+
+file.write(newline);
+file.write("ROM Dead Loops" + newline);
+file.write("  * 0x00020080 Undefined exception default handler" + newline);
+file.write("  * 0x00020084 SWI exception default handler" + newline);
+file.write("  * 0x00020088 Pre-fetch abort exception default handler" + newline);
+file.write("  * 0x0002008C Data exception default handler" + newline);
+file.write("  * 0x00020090 Unused exception default handler" + newline);
+file.write("  * 0x00020094 IRQ exception default handler" + newline);
+file.write("  * 0x00020098 FIQ exception default handler" + newline);
+file.write("  * 0x0002009C Validation test PASS" + newline);
+file.write("  * 0x000200A0 Validation test FAIL" + newline);
+file.write("  * 0x000200A4 Reserved" + newline);
+file.write("  * 0x000200A8 Image not executed or returned" + newline);
+file.write("  * 0x000200AC Reserved" + newline);
+file.write("  * 0x000200B0 Reserved" + newline);
+file.write("  * 0x000200B4 Reserved" + newline);
+file.write("  * 0x000200B8 Reserved" + newline);
+file.write("  * 0x000200BC Reserved" + newline);
+
+debugSessionA8.target.disconnect();
+file.close();
index f17c307a6666c4e7fac79ec4e12d37b68bf34e43..89d3794a1aca8ffb51841f340caaf995252a4846 100644 (file)
-/*\r
- * Copyright (c) 2006-2014, Texas Instruments Incorporated\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * *  Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- *\r
- * *  Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * *  Neither the name of Texas Instruments Incorporated nor the names of\r
- *    its contributors may be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-var ctt_registers = [\r
-       0x44e00000,\r
-       0x44e00004,\r
-       0x44e00008,\r
-       0x44e0000c,\r
-       0x44e00010,\r
-       0x44e00014,\r
-       0x44e00018,\r
-       0x44e0001c,\r
-       0x44e00020,\r
-       0x44e00024,\r
-       0x44e00028,\r
-       0x44e0002c,\r
-       0x44e00030,\r
-       0x44e00034,\r
-       0x44e00038,\r
-       0x44e0003c,\r
-       0x44e00040,\r
-       0x44e00044,\r
-       0x44e00048,\r
-       0x44e0004c,\r
-       0x44e00050,\r
-       0x44e00054,\r
-       0x44e00058,\r
-       0x44e00060,\r
-       0x44e00064,\r
-       0x44e00068,\r
-       0x44e0006c,\r
-       0x44e00070,\r
-       0x44e00074,\r
-       0x44e00078,\r
-       0x44e0007c,\r
-       0x44e00080,\r
-       0x44e00084,\r
-       0x44e00088,\r
-       0x44e0008c,\r
-       0x44e00090,\r
-       0x44e00094,\r
-       0x44e00098,\r
-       0x44e0009c,\r
-       0x44e000a0,\r
-       0x44e000a4,\r
-       0x44e000a8,\r
-       0x44e000ac,\r
-       0x44e000b0,\r
-       0x44e000b4,\r
-       0x44e000b8,\r
-       0x44e000bc,\r
-       0x44e000c0,\r
-       0x44e000c4,\r
-       0x44e000c8,\r
-       0x44e000cc,\r
-       0x44e000d0,\r
-       0x44e000d4,\r
-       0x44e000d8,\r
-       0x44e000dc,\r
-       0x44e000e0,\r
-       0x44e000e4,\r
-       0x44e000e8,\r
-       0x44e000ec,\r
-       0x44e000f0,\r
-       0x44e000f4,\r
-       0x44e000f8,\r
-       0x44e000fc,\r
-       0x44e00100,\r
-       0x44e00104,\r
-       0x44e0010c,\r
-       0x44e00110,\r
-       0x44e0011c,\r
-       0x44e00120,\r
-       0x44e00124,\r
-       0x44e00128,\r
-       0x44e0012c,\r
-       0x44e00130,\r
-       0x44e00134,\r
-       0x44e00138,\r
-       0x44e0013c,\r
-       0x44e00140,\r
-       0x44e00144,\r
-       0x44e00148,\r
-       0x44e0014c,\r
-       0x44e00150,\r
-       0x44e00400,\r
-       0x44e00404,\r
-       0x44e00408,\r
-       0x44e0040c,\r
-       0x44e00410,\r
-       0x44e00414,\r
-       0x44e00418,\r
-       0x44e0041c,\r
-       0x44e00420,\r
-       0x44e00424,\r
-       0x44e00428,\r
-       0x44e0042c,\r
-       0x44e00430,\r
-       0x44e00434,\r
-       0x44e00438,\r
-       0x44e0043c,\r
-       0x44e00440,\r
-       0x44e00444,\r
-       0x44e00448,\r
-       0x44e0044c,\r
-       0x44e00450,\r
-       0x44e00454,\r
-       0x44e00458,\r
-       0x44e0045c,\r
-       0x44e00460,\r
-       0x44e00464,\r
-       0x44e00468,\r
-       0x44e0046c,\r
-       0x44e00470,\r
-       0x44e00474,\r
-       0x44e00478,\r
-       0x44e0047c,\r
-       0x44e00480,\r
-       0x44e00484,\r
-       0x44e00488,\r
-       0x44e0048c,\r
-       0x44e00490,\r
-       0x44e00494,\r
-       0x44e00498,\r
-       0x44e0049c,\r
-       0x44e004a0,\r
-       0x44e004a4,\r
-       0x44e004a8,\r
-       0x44e004ac,\r
-       0x44e004b0,\r
-       0x44e004b4,\r
-       0x44e004b8,\r
-       0x44e004bc,\r
-       0x44e004c0,\r
-       0x44e004c4,\r
-       0x44e004c8,\r
-       0x44e004cc,\r
-       0x44e004d0,\r
-       0x44e004d4,\r
-       0x44e004d8,\r
-       0x44e00504,\r
-       0x44e00508,\r
-       0x44e0050c,\r
-       0x44e00510,\r
-       0x44e00514,\r
-       0x44e00518,\r
-       0x44e0051c,\r
-       0x44e00520,\r
-       0x44e00528,\r
-       0x44e0052c,\r
-       0x44e00530,\r
-       0x44e00534,\r
-       0x44e00538,\r
-       0x44e0053c,\r
-       0x44e00600,\r
-       0x44e00604,\r
-       0x44e00700,\r
-       0x44e00800,\r
-       0x44e00804,\r
-       0x44e00900,\r
-       0x44e00904,\r
-       0x44e00908,\r
-       0x44e0090c,\r
-       0x44e00910,\r
-       0x44e00914,\r
-       0x44e00a00,\r
-       0x44e00a20,\r
-       0x44e00b00,\r
-       0x44e00b04,\r
-       0x44e00b08,\r
-       0x44e00b0c,\r
-       0x44e00b10,\r
-       0x44e00c00,\r
-       0x44e00c04,\r
-       0x44e00c08,\r
-       0x44e00c0c,\r
-       0x44e00d00,\r
-       0x44e00d04,\r
-       0x44e00d08,\r
-       0x44e00d0c,\r
-       0x44e00e00,\r
-       0x44e00e04,\r
-       0x44e00e08,\r
-       0x44e00f00,\r
-       0x44e00f04,\r
-       0x44e00f08,\r
-       0x44e00f0c,\r
-       0x44e00f10,\r
-       0x44e00f14,\r
-       0x44e00f18,\r
-       0x44e00f1c,\r
-       0x44e01000,\r
-       0x44e01004,\r
-       0x44e01100,\r
-       0x44e01104,\r
-       0x44e01110,\r
-       0x44e01114,\r
-       0x44e01200,\r
-       0x44e01204,\r
-       0x44e10040];\r
-\r
-debugSessionDAP = ds.openSession("*","CS_DAP_M3");\r
-debugSessionDAP.target.connect();\r
-\r
-//Build a filename that includes date/time\r
-var today = new Date();\r
-var year4digit = today.getFullYear();\r
-var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
-var day2digit = ("0" + today.getDate()).slice(-2);\r
-var hour2digit = ("0" + today.getHours()).slice(-2);\r
-var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
-var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
-var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
-var userHomeFolder = System.getProperty("user.home");\r
-var filename = userHomeFolder + '/Desktop/' + 'am335x-ctt' + filename_date + '.rd1';\r
-\r
-file = new java.io.FileWriter(filename);\r
-file.write("DeviceName AM335x_SR2.x_SR1.0\n");\r
-\r
-// helper function to create 8-digit hex numbers in ascii format\r
-function d2h(d) {return ("00000000" + (+d).toString(16)).slice(-8);}\r
-\r
-// read CTT data from physical addresses\r
-for(i=0; i<ctt_registers.length; i++)\r
-{\r
-       value = debugSessionDAP.memory.readWord(0,ctt_registers[i],false);\r
-       value_string = d2h(value);\r
-       file.write('0x' + ("0000" + ctt_registers[i].toString(16)).slice(-8) + " 0x" + value_string + "\n");\r
-}\r
-print("Data collection complete.");\r
-\r
-file.close();\r
-debugSessionDAP.target.disconnect();\r
-print("Created file " + filename);\r
-\r
+/*
+ * Copyright (c) 2006-2014, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+var ctt_registers = [
+       0x44e00000,
+       0x44e00004,
+       0x44e00008,
+       0x44e0000c,
+       0x44e00010,
+       0x44e00014,
+       0x44e00018,
+       0x44e0001c,
+       0x44e00020,
+       0x44e00024,
+       0x44e00028,
+       0x44e0002c,
+       0x44e00030,
+       0x44e00034,
+       0x44e00038,
+       0x44e0003c,
+       0x44e00040,
+       0x44e00044,
+       0x44e00048,
+       0x44e0004c,
+       0x44e00050,
+       0x44e00054,
+       0x44e00058,
+       0x44e00060,
+       0x44e00064,
+       0x44e00068,
+       0x44e0006c,
+       0x44e00070,
+       0x44e00074,
+       0x44e00078,
+       0x44e0007c,
+       0x44e00080,
+       0x44e00084,
+       0x44e00088,
+       0x44e0008c,
+       0x44e00090,
+       0x44e00094,
+       0x44e00098,
+       0x44e0009c,
+       0x44e000a0,
+       0x44e000a4,
+       0x44e000a8,
+       0x44e000ac,
+       0x44e000b0,
+       0x44e000b4,
+       0x44e000b8,
+       0x44e000bc,
+       0x44e000c0,
+       0x44e000c4,
+       0x44e000c8,
+       0x44e000cc,
+       0x44e000d0,
+       0x44e000d4,
+       0x44e000d8,
+       0x44e000dc,
+       0x44e000e0,
+       0x44e000e4,
+       0x44e000e8,
+       0x44e000ec,
+       0x44e000f0,
+       0x44e000f4,
+       0x44e000f8,
+       0x44e000fc,
+       0x44e00100,
+       0x44e00104,
+       0x44e0010c,
+       0x44e00110,
+       0x44e0011c,
+       0x44e00120,
+       0x44e00124,
+       0x44e00128,
+       0x44e0012c,
+       0x44e00130,
+       0x44e00134,
+       0x44e00138,
+       0x44e0013c,
+       0x44e00140,
+       0x44e00144,
+       0x44e00148,
+       0x44e0014c,
+       0x44e00150,
+       0x44e00400,
+       0x44e00404,
+       0x44e00408,
+       0x44e0040c,
+       0x44e00410,
+       0x44e00414,
+       0x44e00418,
+       0x44e0041c,
+       0x44e00420,
+       0x44e00424,
+       0x44e00428,
+       0x44e0042c,
+       0x44e00430,
+       0x44e00434,
+       0x44e00438,
+       0x44e0043c,
+       0x44e00440,
+       0x44e00444,
+       0x44e00448,
+       0x44e0044c,
+       0x44e00450,
+       0x44e00454,
+       0x44e00458,
+       0x44e0045c,
+       0x44e00460,
+       0x44e00464,
+       0x44e00468,
+       0x44e0046c,
+       0x44e00470,
+       0x44e00474,
+       0x44e00478,
+       0x44e0047c,
+       0x44e00480,
+       0x44e00484,
+       0x44e00488,
+       0x44e0048c,
+       0x44e00490,
+       0x44e00494,
+       0x44e00498,
+       0x44e0049c,
+       0x44e004a0,
+       0x44e004a4,
+       0x44e004a8,
+       0x44e004ac,
+       0x44e004b0,
+       0x44e004b4,
+       0x44e004b8,
+       0x44e004bc,
+       0x44e004c0,
+       0x44e004c4,
+       0x44e004c8,
+       0x44e004cc,
+       0x44e004d0,
+       0x44e004d4,
+       0x44e004d8,
+       0x44e00504,
+       0x44e00508,
+       0x44e0050c,
+       0x44e00510,
+       0x44e00514,
+       0x44e00518,
+       0x44e0051c,
+       0x44e00520,
+       0x44e00528,
+       0x44e0052c,
+       0x44e00530,
+       0x44e00534,
+       0x44e00538,
+       0x44e0053c,
+       0x44e00600,
+       0x44e00604,
+       0x44e00700,
+       0x44e00800,
+       0x44e00804,
+       0x44e00900,
+       0x44e00904,
+       0x44e00908,
+       0x44e0090c,
+       0x44e00910,
+       0x44e00914,
+       0x44e00a00,
+       0x44e00a20,
+       0x44e00b00,
+       0x44e00b04,
+       0x44e00b08,
+       0x44e00b0c,
+       0x44e00b10,
+       0x44e00c00,
+       0x44e00c04,
+       0x44e00c08,
+       0x44e00c0c,
+       0x44e00d00,
+       0x44e00d04,
+       0x44e00d08,
+       0x44e00d0c,
+       0x44e00e00,
+       0x44e00e04,
+       0x44e00e08,
+       0x44e00f00,
+       0x44e00f04,
+       0x44e00f08,
+       0x44e00f0c,
+       0x44e00f10,
+       0x44e00f14,
+       0x44e00f18,
+       0x44e00f1c,
+       0x44e01000,
+       0x44e01004,
+       0x44e01100,
+       0x44e01104,
+       0x44e01110,
+       0x44e01114,
+       0x44e01200,
+       0x44e01204,
+       0x44e10040];
+
+debugSessionDAP = ds.openSession("*","CS_DAP_M3");
+debugSessionDAP.target.connect();
+
+//Build a filename that includes date/time
+var today = new Date();
+var year4digit = today.getFullYear();
+var month2digit = ("0" + (today.getMonth()+1)).slice(-2);
+var day2digit = ("0" + today.getDate()).slice(-2);
+var hour2digit = ("0" + today.getHours()).slice(-2);
+var minutes2digit = ("0" + today.getMinutes()).slice(-2);
+var seconds2digit = ("0" + today.getSeconds()).slice(-2);
+var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; 
+var userHomeFolder = System.getProperty("user.home");
+var filename = userHomeFolder + '/Desktop/' + 'am335x-ctt' + filename_date + '.rd1';
+
+file = new java.io.FileWriter(filename);
+file.write("DeviceName AM335x_SR2.x_SR1.0\n");
+
+// helper function to create 8-digit hex numbers in ascii format
+function d2h(d) {return ("00000000" + (+d).toString(16)).slice(-8);}
+
+// read CTT data from physical addresses
+for(i=0; i<ctt_registers.length; i++)
+{
+       value = debugSessionDAP.memory.readWord(0,ctt_registers[i],false);
+       value_string = d2h(value);
+       file.write('0x' + ("0000" + ctt_registers[i].toString(16)).slice(-8) + " 0x" + value_string + "\n");
+}
+print("Data collection complete.");
+
+file.close();
+debugSessionDAP.target.disconnect();
+print("Created file " + filename);
+
index 3aa739f7ed2a397ea5ef6ccc1f95875ad84d5c3b..a1950231ea18c45bc163e6c7f6bc98032aacc0a2 100644 (file)
-/*\r
- * Copyright (c) 2006-2014, Texas Instruments Incorporated\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * *  Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- *\r
- * *  Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * *  Neither the name of Texas Instruments Incorporated nor the names of\r
- *    its contributors may be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}\r
-\r
-function printRegisterValue(ds, name, addr)\r
-{\r
-       value = debugSessionDAP.memory.readWord(0,addr,false);\r
-       value_string = d2h(value);\r
-       file.write(name + " = 0x" + value_string + "\n");\r
-       return value; // return the register value for interrogation\r
-}\r
-\r
-function interpret_cmd_phy_macro(value, index)\r
-{\r
-       WD1 = (value >> (21+index)) & 1;\r
-       WD0 = (value >> (10+index)) & 1;\r
-       WD = (WD1 << 1) | WD0;\r
-       if (WD == 0) return_string = "Pullup/Pulldown disabled\n";\r
-       if (WD == 1) return_string = "Weak pullup enabled\n";\r
-       if (WD == 2) return_string = "Weak pulldown enabled\n";\r
-       if (WD == 3) return_string = "Weak keeper enabled\n"; \r
-       return return_string;\r
-}\r
-\r
-function interpret_data_phy_macro(value, index)\r
-{\r
-       WD1 = (value >> (20+index)) & 1;\r
-       WD0 = (value >> (10+index)) & 1;\r
-       WD = (WD1 << 1) | WD0;\r
-       if (WD == 0) return_string = "Pullup/Pulldown disabled\n";\r
-       if (WD == 1) return_string = "Weak pullup enabled\n";\r
-       if (WD == 2) return_string = "Weak pulldown enabled\n";\r
-       if (WD == 3) return_string = "Weak keeper enabled\n"; \r
-       return return_string;\r
-}\r
-\r
-// Build a filename that includes date/time\r
-var today = new Date();\r
-var year4digit = today.getFullYear();\r
-var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
-var day2digit = ("0" + today.getDate()).slice(-2);\r
-var hour2digit = ("0" + today.getHours()).slice(-2);\r
-var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
-var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
-var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
-var userHomeFolder = System.getProperty("user.home");\r
-var filename = userHomeFolder + '/Desktop/' + 'am335x-ddr-analysis' + filename_date + '.txt';\r
-\r
-debugSessionDAP = ds.openSession("*","CS_DAP_M3");\r
-\r
-try {\r
-       debugSessionDAP.target.connect();\r
-} catch (ex) {\r
-       print("\n ERROR: Could not connect to DAP_M3.\n");\r
-}\r
-\r
-var original_CM_WKUP_DEBUGSS_CLKCTRL = debugSessionDAP.memory.readWord(0,0x44e00414,false);\r
-var original_CM_PER_L3_CLKSTCTRL = debugSessionDAP.memory.readWord(0,0x44E0000C,false);\r
-\r
-file = new java.io.FileWriter(filename);\r
-\r
-// Only try to read EMIF registers if EMIF clock is enabled\r
-if (original_CM_PER_L3_CLKSTCTRL & 1<<2) {\r
-\r
-       // CM_WKUP_DEBUGSS_CLKCTRL[MODULEMODE] = ENABLED\r
-       debugSessionDAP.expression.evaluate(\r
-               "*((unsigned int*) 0x44e00414 ) |= 0x2;");\r
-\r
-       debugSessionDAP.target.disconnect();  // disconnect from DAP_M3\r
-       \r
-       // Connect to DAP_DebugSS for L3 visibility (EMIF regs)\r
-       debugSessionDAP = ds.openSession("*","CS_DAP_DebugSS");\r
-       debugSessionDAP.target.connect();\r
-       \r
-       var reg_val;\r
-       \r
-       // EMIF: SDRAM_CONFIG\r
-       reg_val = printRegisterValue(debugSessionDAP, "EMIF: SDRAM_CONFIG", 0x4C000008);\r
-\r
-       var is_ddr3=0;\r
-       var is_ddr2=0;\r
-       var is_lpddr=0;\r
-       if ( (reg_val & 0xE0000000) == (0 << 29) ) {file.write("  * ERROR! Unsupported memory type (DDR1)\n");}\r
-       if ( (reg_val & 0xE0000000) == (1 << 29) ) {is_lpddr=1;}\r
-       if ( (reg_val & 0xE0000000) == (2 << 29) ) {is_ddr2=1;}\r
-       if ( (reg_val & 0xE0000000) == (3 << 29) ) {is_ddr3=1;}\r
-       if (is_ddr3 == 1) {\r
-               file.write("  * Bits 26:24 (reg_ddr_term) set for ");\r
-               if ( (reg_val & 0x07000000) == (0 << 24) ) {file.write("termination disabled (000b)\n");}\r
-               if ( (reg_val & 0x07000000) == (1 << 24) ) {file.write("RZQ/4 (001b)\n");}\r
-               if ( (reg_val & 0x07000000) == (2 << 24) ) {file.write("RZQ/2 (010b)\n");}\r
-               if ( (reg_val & 0x07000000) == (3 << 24) ) {file.write("RZQ/6 (011b)\n");}\r
-               if ( (reg_val & 0x07000000) == (4 << 24) ) {file.write("RZQ/12 (100b)\n");}\r
-               if ( (reg_val & 0x07000000) == (5 << 24) ) {file.write("RZQ/8  (101b)\n");}\r
-               if ( (reg_val & 0x07000000) == (6 << 24) ) {file.write("ERROR\n");}\r
-               if ( (reg_val & 0x07000000) == (7 << 24) ) {file.write("ERROR\n");}\r
-       }\r
-       if (is_ddr2 == 1) {\r
-               file.write("  * Bits 26:24 (reg_ddr_term) set for ");\r
-               if ( (reg_val & 0x07000000) == (0 << 24) ) {file.write("termination disabled (000b)\n");}\r
-               if ( (reg_val & 0x07000000) == (1 << 24) ) {file.write("75 Ohm (001b)\n");}\r
-               if ( (reg_val & 0x07000000) == (2 << 24) ) {file.write("150 Ohm (010b)\n");}\r
-               if ( (reg_val & 0x07000000) == (3 << 24) ) {file.write("50 Ohm (011b)\n");}\r
-               if ( (reg_val & 0x07000000) == (4 << 24) ) {file.write("ERROR\n");}\r
-               if ( (reg_val & 0x07000000) == (5 << 24) ) {file.write("ERROR\n");}\r
-               if ( (reg_val & 0x07000000) == (6 << 24) ) {file.write("ERROR\n");}\r
-               if ( (reg_val & 0x07000000) == (7 << 24) ) {file.write("ERROR\n");}\r
-       }\r
-       if (is_ddr3 == 1) {\r
-               file.write("  * Bits 19:18 (reg_sdram_drive) set for ");\r
-               if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("RZQ/6 (00b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("RZQ/7 (01b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("ERROR (10b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("ERROR (11b)\n");}\r
-       }\r
-       if (is_ddr2 == 1) {\r
-               file.write("  * Bits 19:18 (reg_sdram_drive) set for ");\r
-               if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("normal drive (00b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("weak drive (01b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("ERROR (10b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("ERROR (11b)\n");}\r
-       }\r
-       if (is_lpddr == 1) {\r
-               file.write("  * Bits 19:18 (reg_sdram_drive) set for ");\r
-               if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("full strength (00b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("half strength (01b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("quarter strength (10b)\n");}\r
-               if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("eighth strength (11b)\n");}\r
-       }\r
-       \r
-       // EMIF: PWR_MGMT_CTRL\r
-       reg_val = printRegisterValue(debugSessionDAP, "EMIF: PWR_MGMT_CTRL", 0x4C000038);\r
-       if ( (reg_val & 0xF0) < 0x90 ) {\r
-               file.write(" * ERROR: Bits 7:4 (reg_sr_tim) are in violation of Maximum Self-Refresh Command Limit\n");\r
-               file.write(" * Please see the silicon errata for more details.\n");\r
-       }\r
-       \r
-       // DDR PHY: DDR_PHY_CTRL_1\r
-       reg_val = printRegisterValue(debugSessionDAP, "DDR PHY: DDR_PHY_CTRL_1", 0x4C0000E4);\r
-       if ( (reg_val & 1<<20) == 0 ) {file.write("  * WARNING: reg_phy_enable_dynamic_pwrdn disabled.\n");}\r
-       file.write("  * Bits 9:8 (reg_phy_rd_local_odt) configured as ");\r
-       if ( (reg_val & 0x300) == (0 << 8) ) {file.write("no termination (00b)\n");}\r
-       if ( (reg_val & 0x300) == (1 << 8) ) {file.write("no termination (01b)\n");}\r
-       if ( (reg_val & 0x300) == (2 << 8) ) {file.write("full thevenin termination\n");}\r
-       if ( (reg_val & 0x300) == (3 << 8) ) {file.write("half thevenin termination\n");}\r
-       \r
-       // Close (Main) DAP session and use M3 DAP to view Control Registers\r
-       debugSessionDAP.target.disconnect();\r
-       debugSessionDAP = ds.openSession("*","CS_DAP_M3");\r
-       debugSessionDAP.target.connect();\r
-       \r
-       // Restore CM_WKUP_DEBUGSS_CLKCTRL[MODULEMODE]\r
-       if ( (original_CM_WKUP_DEBUGSS_CLKCTRL & 3) == 0 ) {\r
-               debugSessionDAP.memory.writeWord(0,0x44e00414,original_CM_WKUP_DEBUGSS_CLKCTRL);\r
-       }\r
-} else {\r
-       file.write("Skipping read of EMIF registers since EMIF clock disabled.\n");\r
-       file.write(" * EMIF registers are not readable when in DS0 state\n");\r
-       file.write(" * If you are attempting to enter DS0 this is normal.\n");\r
-}\r
-\r
-// CONTROL: DDR_CMD0_IOCTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD0_IOCTRL", 0x44E11404);\r
-file.write("  * ddr_ba2 " + interpret_cmd_phy_macro(reg_val, 0));\r
-file.write("  * ddr_wen " + interpret_cmd_phy_macro(reg_val, 1));\r
-file.write("  * ddr_ba0 " + interpret_cmd_phy_macro(reg_val, 2));\r
-file.write("  * ddr_a5 " + interpret_cmd_phy_macro(reg_val, 3));\r
-file.write("  * ddr_ck " + interpret_cmd_phy_macro(reg_val, 4));\r
-file.write("  * ddr_ckn " + interpret_cmd_phy_macro(reg_val, 5));\r
-file.write("  * ddr_a3 " + interpret_cmd_phy_macro(reg_val, 6));\r
-file.write("  * ddr_a4 " + interpret_cmd_phy_macro(reg_val, 7));\r
-file.write("  * ddr_a8 " + interpret_cmd_phy_macro(reg_val, 8));\r
-file.write("  * ddr_a9 " + interpret_cmd_phy_macro(reg_val, 9));\r
-file.write("  * ddr_a6 " + interpret_cmd_phy_macro(reg_val, 10));\r
-file.write("  * Bits 9:5 control ddr_ck and ddr_ckn\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-file.write("  * Bits 4:0 control ddr_ba0, ddr_ba2, ddr_wen, ddr_a[9:8], ddr_a[6:3]\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-\r
-// CONTROL: DDR_CMD1_IOCTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD1_IOCTRL", 0x44E11408);\r
-file.write("  * ddr_a15 " + interpret_cmd_phy_macro(reg_val, 1));\r
-file.write("  * ddr_a2 " + interpret_cmd_phy_macro(reg_val, 2));\r
-file.write("  * ddr_a12 " + interpret_cmd_phy_macro(reg_val, 3));\r
-file.write("  * ddr_a7 " + interpret_cmd_phy_macro(reg_val, 4));\r
-file.write("  * ddr_ba1 " + interpret_cmd_phy_macro(reg_val, 5));\r
-file.write("  * ddr_a10 " + interpret_cmd_phy_macro(reg_val, 6));\r
-file.write("  * ddr_a0 " + interpret_cmd_phy_macro(reg_val, 7));\r
-file.write("  * ddr_a11 " + interpret_cmd_phy_macro(reg_val, 8));\r
-file.write("  * ddr_casn " + interpret_cmd_phy_macro(reg_val, 9));\r
-file.write("  * ddr_rasn " + interpret_cmd_phy_macro(reg_val, 10));\r
-file.write("  * Bits 4:0 control ddr_15, ddr_a[12:10], ddr_a7, ddr_a2, ddr_a0, ddr_ba1, ddr_casn, ddr_rasn\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-\r
-// CONTROL: DDR_CMD2_IOCTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD2_IOCTRL", 0x44E1140C);\r
-file.write("  * ddr_cke " + interpret_cmd_phy_macro(reg_val, 0));\r
-file.write("  * ddr_resetn " + interpret_cmd_phy_macro(reg_val, 1));\r
-file.write("  * ddr_odt " + interpret_cmd_phy_macro(reg_val, 2));\r
-file.write("  * ddr_a14 " + interpret_cmd_phy_macro(reg_val, 4));\r
-file.write("  * ddr_a13 " + interpret_cmd_phy_macro(reg_val, 5));\r
-file.write("  * ddr_csn0 " + interpret_cmd_phy_macro(reg_val, 6));\r
-file.write("  * ddr_a1 " + interpret_cmd_phy_macro(reg_val, 8));\r
-file.write("  * Bits 4:0 control ddr_cke, ddr_resetn, ddr_odt, ddr_csn0, ddr_[a14:13], ddr_a1\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-\r
-// CONTROL: DDR_DATA0_IOCTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_DATA0_IOCTRL", 0x44E11440);\r
-file.write("  * ddr_d8 " + interpret_data_phy_macro(reg_val, 0));\r
-file.write("  * ddr_d9 " + interpret_data_phy_macro(reg_val, 1));\r
-file.write("  * ddr_d10 " + interpret_data_phy_macro(reg_val, 2));\r
-file.write("  * ddr_d11 " + interpret_data_phy_macro(reg_val, 3));\r
-file.write("  * ddr_d12 " + interpret_data_phy_macro(reg_val, 4));\r
-file.write("  * ddr_d13 " + interpret_data_phy_macro(reg_val, 5));\r
-file.write("  * ddr_d14 " + interpret_data_phy_macro(reg_val, 6));\r
-file.write("  * ddr_d15 " + interpret_data_phy_macro(reg_val, 7));\r
-file.write("  * ddr_dqm1 " + interpret_data_phy_macro(reg_val, 8));\r
-file.write("  * ddr_dqs1 and ddr_dqsn1 " + interpret_data_phy_macro(reg_val, 9));\r
-file.write("  * Bits 9:5 control ddr_dqs1, ddr_dqsn1\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-file.write("  * Bits 4:0 control ddr_d[15:8], ddr_dqm1\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-\r
-// CONTROL: DDR_DATA1_IOCTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_DATA1_IOCTRL", 0x44E11444);\r
-file.write("  * ddr_d0 " + interpret_data_phy_macro(reg_val, 0));\r
-file.write("  * ddr_d1 " + interpret_data_phy_macro(reg_val, 1));\r
-file.write("  * ddr_d2 " + interpret_data_phy_macro(reg_val, 2));\r
-file.write("  * ddr_d3 " + interpret_data_phy_macro(reg_val, 3));\r
-file.write("  * ddr_d4 " + interpret_data_phy_macro(reg_val, 4));\r
-file.write("  * ddr_d5 " + interpret_data_phy_macro(reg_val, 5));\r
-file.write("  * ddr_d6 " + interpret_data_phy_macro(reg_val, 6));\r
-file.write("  * ddr_d7 " + interpret_data_phy_macro(reg_val, 7));\r
-file.write("  * ddr_dqm0 " + interpret_data_phy_macro(reg_val, 8));\r
-file.write("  * ddr_dqs0 and ddr_dqsn0 " + interpret_data_phy_macro(reg_val, 9));\r
-file.write("  * Bits 9:5 control ddr_dqs0, ddr_dqsn0\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-file.write("  * Bits 4:0 control ddr_d[7:0], dqm0\n");\r
-file.write("    - Slew ");\r
-if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
-if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
-if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
-if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
-var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
-file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
-\r
-// CONTROL: DDR_IO_CTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_IO_CTRL", 0x44E10E04);\r
-if ( (reg_val & (1 << 31)) == (1<<31) ) {\r
-       file.write("  * Bit 31: Overriding DDR_RESETn (expected for DS0).\n");\r
-} else {\r
-       file.write("  * Bit 31: DDR_RESETn controlled by EMIF.\n");\r
-}\r
-if ( (reg_val & (1 << 28)) == 0) {\r
-       file.write("  * Bit 28 (mddr_sel) configured for SSTL, i.e. DDR2/DDR3/DDR3L operation.\n");\r
-       if (is_lpddr == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}\r
-}\r
-else {\r
-       file.write("  * Bit 28 (mddr_sel) configured for LVCMOS, i.e. LPDDR/mDDR operation.\n");\r
-       if (is_ddr2 == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}\r
-       if (is_ddr3 == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}\r
-}\r
-\r
-// CONTROL: VTP_CTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: VTP_CTRL", 0x44E10E0C);\r
-if ( reg_val == 0 ) {\r
-       file.write("  * VTP disabled (expected in DS0).\n");\r
-} else {\r
-       file.write("  * VTP not disabled (expected in normal operation, but not DS0).\n");\r
-}\r
-\r
-// CONTROL: VREF_CTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: VREF_CTRL", 0x44E10E14);\r
-if ( (reg_val & 1) == 0 ) {\r
-       file.write("  * VREF supplied externally (typical).\n");\r
-} else {\r
-       file.write("  * Internal VREF (unusual).\n");\r
-}\r
-\r
-// CONTROL: DDR_CKE_CTRL\r
-reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CKE_CTRL", 0x44E1131C);\r
-if ( (reg_val & 1) == 0 ) {\r
-       file.write("  * CKE gated (forces pin low).\n");\r
-} else {\r
-       file.write("  * CKE controlled by EMIF (normal/ungated operation).\n");\r
-}\r
-\r
-file.close();\r
-print("Created file " + filename);\r
-debugSessionDAP.target.disconnect();\r
-\r
-\r
-\r
-//****************************************************************************\r
-// getErrorCode\r
-//****************************************************************************\r
-function getErrorCode(exception)\r
-{\r
-   var ex2 = exception.javaException;\r
-   if (ex2 instanceof Packages.com.ti.ccstudio.scripting.environment.ScriptingException)\r
-   {\r
-      return ex2.getErrorID();\r
-   }\r
-   return 0;\r
-}\r
+/*
+ * Copyright (c) 2006-2014, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}
+
+function printRegisterValue(ds, name, addr)
+{
+       value = debugSessionDAP.memory.readWord(0,addr,false);
+       value_string = d2h(value);
+       file.write(name + " = 0x" + value_string + "\n");
+       return value; // return the register value for interrogation
+}
+
+function interpret_cmd_phy_macro(value, index)
+{
+       WD1 = (value >> (21+index)) & 1;
+       WD0 = (value >> (10+index)) & 1;
+       WD = (WD1 << 1) | WD0;
+       if (WD == 0) return_string = "Pullup/Pulldown disabled\n";
+       if (WD == 1) return_string = "Weak pullup enabled\n";
+       if (WD == 2) return_string = "Weak pulldown enabled\n";
+       if (WD == 3) return_string = "Weak keeper enabled\n"; 
+       return return_string;
+}
+
+function interpret_data_phy_macro(value, index)
+{
+       WD1 = (value >> (20+index)) & 1;
+       WD0 = (value >> (10+index)) & 1;
+       WD = (WD1 << 1) | WD0;
+       if (WD == 0) return_string = "Pullup/Pulldown disabled\n";
+       if (WD == 1) return_string = "Weak pullup enabled\n";
+       if (WD == 2) return_string = "Weak pulldown enabled\n";
+       if (WD == 3) return_string = "Weak keeper enabled\n"; 
+       return return_string;
+}
+
+// Build a filename that includes date/time
+var today = new Date();
+var year4digit = today.getFullYear();
+var month2digit = ("0" + (today.getMonth()+1)).slice(-2);
+var day2digit = ("0" + today.getDate()).slice(-2);
+var hour2digit = ("0" + today.getHours()).slice(-2);
+var minutes2digit = ("0" + today.getMinutes()).slice(-2);
+var seconds2digit = ("0" + today.getSeconds()).slice(-2);
+var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; 
+var userHomeFolder = System.getProperty("user.home");
+var filename = userHomeFolder + '/Desktop/' + 'am335x-ddr-analysis' + filename_date + '.txt';
+
+debugSessionDAP = ds.openSession("*","CS_DAP_M3");
+
+try {
+       debugSessionDAP.target.connect();
+} catch (ex) {
+       print("\n ERROR: Could not connect to DAP_M3.\n");
+}
+
+var original_CM_WKUP_DEBUGSS_CLKCTRL = debugSessionDAP.memory.readWord(0,0x44e00414,false);
+var original_CM_PER_L3_CLKSTCTRL = debugSessionDAP.memory.readWord(0,0x44E0000C,false);
+
+file = new java.io.FileWriter(filename);
+
+// Only try to read EMIF registers if EMIF clock is enabled
+if (original_CM_PER_L3_CLKSTCTRL & 1<<2) {
+
+       // CM_WKUP_DEBUGSS_CLKCTRL[MODULEMODE] = ENABLED
+       debugSessionDAP.expression.evaluate(
+               "*((unsigned int*) 0x44e00414 ) |= 0x2;");
+
+       debugSessionDAP.target.disconnect();  // disconnect from DAP_M3
+       
+       // Connect to DAP_DebugSS for L3 visibility (EMIF regs)
+       debugSessionDAP = ds.openSession("*","CS_DAP_DebugSS");
+       debugSessionDAP.target.connect();
+       
+       var reg_val;
+       
+       // EMIF: SDRAM_CONFIG
+       reg_val = printRegisterValue(debugSessionDAP, "EMIF: SDRAM_CONFIG", 0x4C000008);
+
+       var is_ddr3=0;
+       var is_ddr2=0;
+       var is_lpddr=0;
+       if ( (reg_val & 0xE0000000) == (0 << 29) ) {file.write("  * ERROR! Unsupported memory type (DDR1)\n");}
+       if ( (reg_val & 0xE0000000) == (1 << 29) ) {is_lpddr=1;}
+       if ( (reg_val & 0xE0000000) == (2 << 29) ) {is_ddr2=1;}
+       if ( (reg_val & 0xE0000000) == (3 << 29) ) {is_ddr3=1;}
+       if (is_ddr3 == 1) {
+               file.write("  * Bits 26:24 (reg_ddr_term) set for ");
+               if ( (reg_val & 0x07000000) == (0 << 24) ) {file.write("termination disabled (000b)\n");}
+               if ( (reg_val & 0x07000000) == (1 << 24) ) {file.write("RZQ/4 (001b)\n");}
+               if ( (reg_val & 0x07000000) == (2 << 24) ) {file.write("RZQ/2 (010b)\n");}
+               if ( (reg_val & 0x07000000) == (3 << 24) ) {file.write("RZQ/6 (011b)\n");}
+               if ( (reg_val & 0x07000000) == (4 << 24) ) {file.write("RZQ/12 (100b)\n");}
+               if ( (reg_val & 0x07000000) == (5 << 24) ) {file.write("RZQ/8  (101b)\n");}
+               if ( (reg_val & 0x07000000) == (6 << 24) ) {file.write("ERROR\n");}
+               if ( (reg_val & 0x07000000) == (7 << 24) ) {file.write("ERROR\n");}
+       }
+       if (is_ddr2 == 1) {
+               file.write("  * Bits 26:24 (reg_ddr_term) set for ");
+               if ( (reg_val & 0x07000000) == (0 << 24) ) {file.write("termination disabled (000b)\n");}
+               if ( (reg_val & 0x07000000) == (1 << 24) ) {file.write("75 Ohm (001b)\n");}
+               if ( (reg_val & 0x07000000) == (2 << 24) ) {file.write("150 Ohm (010b)\n");}
+               if ( (reg_val & 0x07000000) == (3 << 24) ) {file.write("50 Ohm (011b)\n");}
+               if ( (reg_val & 0x07000000) == (4 << 24) ) {file.write("ERROR\n");}
+               if ( (reg_val & 0x07000000) == (5 << 24) ) {file.write("ERROR\n");}
+               if ( (reg_val & 0x07000000) == (6 << 24) ) {file.write("ERROR\n");}
+               if ( (reg_val & 0x07000000) == (7 << 24) ) {file.write("ERROR\n");}
+       }
+       if (is_ddr3 == 1) {
+               file.write("  * Bits 19:18 (reg_sdram_drive) set for ");
+               if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("RZQ/6 (00b)\n");}
+               if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("RZQ/7 (01b)\n");}
+               if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("ERROR (10b)\n");}
+               if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("ERROR (11b)\n");}
+       }
+       if (is_ddr2 == 1) {
+               file.write("  * Bits 19:18 (reg_sdram_drive) set for ");
+               if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("normal drive (00b)\n");}
+               if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("weak drive (01b)\n");}
+               if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("ERROR (10b)\n");}
+               if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("ERROR (11b)\n");}
+       }
+       if (is_lpddr == 1) {
+               file.write("  * Bits 19:18 (reg_sdram_drive) set for ");
+               if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("full strength (00b)\n");}
+               if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("half strength (01b)\n");}
+               if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("quarter strength (10b)\n");}
+               if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("eighth strength (11b)\n");}
+       }
+       
+       // EMIF: PWR_MGMT_CTRL
+       reg_val = printRegisterValue(debugSessionDAP, "EMIF: PWR_MGMT_CTRL", 0x4C000038);
+       if ( (reg_val & 0xF0) < 0x90 ) {
+               file.write(" * ERROR: Bits 7:4 (reg_sr_tim) are in violation of Maximum Self-Refresh Command Limit\n");
+               file.write(" * Please see the silicon errata for more details.\n");
+       }
+       
+       // DDR PHY: DDR_PHY_CTRL_1
+       reg_val = printRegisterValue(debugSessionDAP, "DDR PHY: DDR_PHY_CTRL_1", 0x4C0000E4);
+       if ( (reg_val & 1<<20) == 0 ) {file.write("  * WARNING: reg_phy_enable_dynamic_pwrdn disabled.\n");}
+       file.write("  * Bits 9:8 (reg_phy_rd_local_odt) configured as ");
+       if ( (reg_val & 0x300) == (0 << 8) ) {file.write("no termination (00b)\n");}
+       if ( (reg_val & 0x300) == (1 << 8) ) {file.write("no termination (01b)\n");}
+       if ( (reg_val & 0x300) == (2 << 8) ) {file.write("full thevenin termination\n");}
+       if ( (reg_val & 0x300) == (3 << 8) ) {file.write("half thevenin termination\n");}
+       
+       // Close (Main) DAP session and use M3 DAP to view Control Registers
+       debugSessionDAP.target.disconnect();
+       debugSessionDAP = ds.openSession("*","CS_DAP_M3");
+       debugSessionDAP.target.connect();
+       
+       // Restore CM_WKUP_DEBUGSS_CLKCTRL[MODULEMODE]
+       if ( (original_CM_WKUP_DEBUGSS_CLKCTRL & 3) == 0 ) {
+               debugSessionDAP.memory.writeWord(0,0x44e00414,original_CM_WKUP_DEBUGSS_CLKCTRL);
+       }
+} else {
+       file.write("Skipping read of EMIF registers since EMIF clock disabled.\n");
+       file.write(" * EMIF registers are not readable when in DS0 state\n");
+       file.write(" * If you are attempting to enter DS0 this is normal.\n");
+}
+
+// CONTROL: DDR_CMD0_IOCTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD0_IOCTRL", 0x44E11404);
+file.write("  * ddr_ba2 " + interpret_cmd_phy_macro(reg_val, 0));
+file.write("  * ddr_wen " + interpret_cmd_phy_macro(reg_val, 1));
+file.write("  * ddr_ba0 " + interpret_cmd_phy_macro(reg_val, 2));
+file.write("  * ddr_a5 " + interpret_cmd_phy_macro(reg_val, 3));
+file.write("  * ddr_ck " + interpret_cmd_phy_macro(reg_val, 4));
+file.write("  * ddr_ckn " + interpret_cmd_phy_macro(reg_val, 5));
+file.write("  * ddr_a3 " + interpret_cmd_phy_macro(reg_val, 6));
+file.write("  * ddr_a4 " + interpret_cmd_phy_macro(reg_val, 7));
+file.write("  * ddr_a8 " + interpret_cmd_phy_macro(reg_val, 8));
+file.write("  * ddr_a9 " + interpret_cmd_phy_macro(reg_val, 9));
+file.write("  * ddr_a6 " + interpret_cmd_phy_macro(reg_val, 10));
+file.write("  * Bits 9:5 control ddr_ck and ddr_ckn\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}
+if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}
+if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}
+if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+file.write("  * Bits 4:0 control ddr_ba0, ddr_ba2, ddr_wen, ddr_a[9:8], ddr_a[6:3]\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+
+// CONTROL: DDR_CMD1_IOCTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD1_IOCTRL", 0x44E11408);
+file.write("  * ddr_a15 " + interpret_cmd_phy_macro(reg_val, 1));
+file.write("  * ddr_a2 " + interpret_cmd_phy_macro(reg_val, 2));
+file.write("  * ddr_a12 " + interpret_cmd_phy_macro(reg_val, 3));
+file.write("  * ddr_a7 " + interpret_cmd_phy_macro(reg_val, 4));
+file.write("  * ddr_ba1 " + interpret_cmd_phy_macro(reg_val, 5));
+file.write("  * ddr_a10 " + interpret_cmd_phy_macro(reg_val, 6));
+file.write("  * ddr_a0 " + interpret_cmd_phy_macro(reg_val, 7));
+file.write("  * ddr_a11 " + interpret_cmd_phy_macro(reg_val, 8));
+file.write("  * ddr_casn " + interpret_cmd_phy_macro(reg_val, 9));
+file.write("  * ddr_rasn " + interpret_cmd_phy_macro(reg_val, 10));
+file.write("  * Bits 4:0 control ddr_15, ddr_a[12:10], ddr_a7, ddr_a2, ddr_a0, ddr_ba1, ddr_casn, ddr_rasn\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+
+// CONTROL: DDR_CMD2_IOCTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD2_IOCTRL", 0x44E1140C);
+file.write("  * ddr_cke " + interpret_cmd_phy_macro(reg_val, 0));
+file.write("  * ddr_resetn " + interpret_cmd_phy_macro(reg_val, 1));
+file.write("  * ddr_odt " + interpret_cmd_phy_macro(reg_val, 2));
+file.write("  * ddr_a14 " + interpret_cmd_phy_macro(reg_val, 4));
+file.write("  * ddr_a13 " + interpret_cmd_phy_macro(reg_val, 5));
+file.write("  * ddr_csn0 " + interpret_cmd_phy_macro(reg_val, 6));
+file.write("  * ddr_a1 " + interpret_cmd_phy_macro(reg_val, 8));
+file.write("  * Bits 4:0 control ddr_cke, ddr_resetn, ddr_odt, ddr_csn0, ddr_[a14:13], ddr_a1\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+
+// CONTROL: DDR_DATA0_IOCTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_DATA0_IOCTRL", 0x44E11440);
+file.write("  * ddr_d8 " + interpret_data_phy_macro(reg_val, 0));
+file.write("  * ddr_d9 " + interpret_data_phy_macro(reg_val, 1));
+file.write("  * ddr_d10 " + interpret_data_phy_macro(reg_val, 2));
+file.write("  * ddr_d11 " + interpret_data_phy_macro(reg_val, 3));
+file.write("  * ddr_d12 " + interpret_data_phy_macro(reg_val, 4));
+file.write("  * ddr_d13 " + interpret_data_phy_macro(reg_val, 5));
+file.write("  * ddr_d14 " + interpret_data_phy_macro(reg_val, 6));
+file.write("  * ddr_d15 " + interpret_data_phy_macro(reg_val, 7));
+file.write("  * ddr_dqm1 " + interpret_data_phy_macro(reg_val, 8));
+file.write("  * ddr_dqs1 and ddr_dqsn1 " + interpret_data_phy_macro(reg_val, 9));
+file.write("  * Bits 9:5 control ddr_dqs1, ddr_dqsn1\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}
+if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}
+if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}
+if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+file.write("  * Bits 4:0 control ddr_d[15:8], ddr_dqm1\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+
+// CONTROL: DDR_DATA1_IOCTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_DATA1_IOCTRL", 0x44E11444);
+file.write("  * ddr_d0 " + interpret_data_phy_macro(reg_val, 0));
+file.write("  * ddr_d1 " + interpret_data_phy_macro(reg_val, 1));
+file.write("  * ddr_d2 " + interpret_data_phy_macro(reg_val, 2));
+file.write("  * ddr_d3 " + interpret_data_phy_macro(reg_val, 3));
+file.write("  * ddr_d4 " + interpret_data_phy_macro(reg_val, 4));
+file.write("  * ddr_d5 " + interpret_data_phy_macro(reg_val, 5));
+file.write("  * ddr_d6 " + interpret_data_phy_macro(reg_val, 6));
+file.write("  * ddr_d7 " + interpret_data_phy_macro(reg_val, 7));
+file.write("  * ddr_dqm0 " + interpret_data_phy_macro(reg_val, 8));
+file.write("  * ddr_dqs0 and ddr_dqsn0 " + interpret_data_phy_macro(reg_val, 9));
+file.write("  * Bits 9:5 control ddr_dqs0, ddr_dqsn0\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}
+if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}
+if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}
+if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+file.write("  * Bits 4:0 control ddr_d[7:0], dqm0\n");
+file.write("    - Slew ");
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");
+
+// CONTROL: DDR_IO_CTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_IO_CTRL", 0x44E10E04);
+if ( (reg_val & (1 << 31)) == (1<<31) ) {
+       file.write("  * Bit 31: Overriding DDR_RESETn (expected for DS0).\n");
+} else {
+       file.write("  * Bit 31: DDR_RESETn controlled by EMIF.\n");
+}
+if ( (reg_val & (1 << 28)) == 0) {
+       file.write("  * Bit 28 (mddr_sel) configured for SSTL, i.e. DDR2/DDR3/DDR3L operation.\n");
+       if (is_lpddr == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}
+}
+else {
+       file.write("  * Bit 28 (mddr_sel) configured for LVCMOS, i.e. LPDDR/mDDR operation.\n");
+       if (is_ddr2 == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}
+       if (is_ddr3 == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}
+}
+
+// CONTROL: VTP_CTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: VTP_CTRL", 0x44E10E0C);
+if ( reg_val == 0 ) {
+       file.write("  * VTP disabled (expected in DS0).\n");
+} else {
+       file.write("  * VTP not disabled (expected in normal operation, but not DS0).\n");
+}
+
+// CONTROL: VREF_CTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: VREF_CTRL", 0x44E10E14);
+if ( (reg_val & 1) == 0 ) {
+       file.write("  * VREF supplied externally (typical).\n");
+} else {
+       file.write("  * Internal VREF (unusual).\n");
+}
+
+// CONTROL: DDR_CKE_CTRL
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CKE_CTRL", 0x44E1131C);
+if ( (reg_val & 1) == 0 ) {
+       file.write("  * CKE gated (forces pin low).\n");
+} else {
+       file.write("  * CKE controlled by EMIF (normal/ungated operation).\n");
+}
+
+file.close();
+print("Created file " + filename);
+debugSessionDAP.target.disconnect();
+
+
+
+//****************************************************************************
+// getErrorCode
+//****************************************************************************
+function getErrorCode(exception)
+{
+   var ex2 = exception.javaException;
+   if (ex2 instanceof Packages.com.ti.ccstudio.scripting.environment.ScriptingException)
+   {
+      return ex2.getErrorID();
+   }
+   return 0;
+}
index 474d4b49a3936e8264250dbf8885537197c99038..07fb7208b903a99fa145e34b63d141abe4acacf1 100644 (file)
-/*\r
- * Copyright (c) 2006-2014, Texas Instruments Incorporated\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * *  Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- *\r
- * *  Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * *  Neither the name of Texas Instruments Incorporated nor the names of\r
- *    its contributors may be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}\r
-\r
-function printRegisterValue(ds, name, addr)\r
-{\r
-       value = ds.memory.readWord(0,addr,false);\r
-       value_string = d2h(value);\r
-       file.write(name + " = 0x" + value_string + "\n");\r
-       return value; // return the register value for interrogation\r
-}\r
-\r
-function getRegisterValue(ds, addr)\r
-{\r
-       return ds.memory.readWord(0,addr,false);\r
-}\r
-\r
-// Build a filename that includes date/time\r
-var today = new Date();\r
-var year4digit = today.getFullYear();\r
-var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
-var day2digit = ("0" + today.getDate()).slice(-2);\r
-var hour2digit = ("0" + today.getHours()).slice(-2);\r
-var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
-var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
-var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
-var userHomeFolder = System.getProperty("user.home");\r
-var filename = userHomeFolder + '/Desktop/' + 'am335x-ds0-analysis' + filename_date + '.txt';\r
-\r
-debugSessionDAP = ds.openSession("*","CS_DAP_M3");\r
-\r
-try {\r
-       debugSessionDAP.target.connect();\r
-} catch (ex) {\r
-       print("\n ERROR: Could not connect to DAP_M3.\n");\r
-}\r
-\r
-file = new java.io.FileWriter(filename);\r
-\r
-\r
-var reg_val;\r
-\r
-// PRM_MPU: PM_MPU_PWRSTST \r
-reg_val = printRegisterValue(debugSessionDAP, "PRM_MPU: PM_MPU_PWRSTST", 0x44E00E04);\r
-if ( reg_val == 0 ) {\r
-       file.write("  * Cortex A8 is OFF.\n");\r
-} else {\r
-       file.write("  * ERROR: Cortex A8 is still on!\n");\r
-}\r
-\r
-// PRM_GFX: PM_GFX_PWRSTST\r
-reg_val = printRegisterValue(debugSessionDAP, "PRM_GFX: PM_GFX_PWRSTST", 0x44E01110);\r
-if ( reg_val == 0 ) {\r
-       file.write("  * SGX530 is OFF.\n");\r
-} else {\r
-       file.write("  * ERROR: SGX530 is still on!\n");\r
-}\r
-\r
-// PRM_PER: PM_PER_PWRSTST\r
-reg_val = printRegisterValue(debugSessionDAP, "PRM_PER: PM_PER_PWRSTST", 0x44E00C08);\r
-if ( reg_val == 0x00200001 ) {\r
-       file.write(" * PER domain in retention (OCMC RAM retained).\n");\r
-} else if ( reg_val&3 == 3) {\r
-       file.write("  * ERROR: PER domain still on!\n");\r
-       \r
-       // CM_PER: CM_PER_L4LS_CLKSTCTRL\r
-       reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L4LS_CLKSTCTRL", 0x44E00000);\r
-       if ( reg_val & 1<<28 ) {file.write("  * ERROR: TIMER6 active!\n");}\r
-       if ( reg_val & 1<<27 ) {file.write("  * ERROR: TIMER5 active!\n");}\r
-       if ( reg_val & 1<<25 ) {file.write("  * ERROR: SPI active!\n");}\r
-       if ( reg_val & 1<<24 ) {file.write("  * ERROR: I2C active!\n");}\r
-       if ( reg_val & 1<<21 ) {file.write("  * ERROR: GPIO3 active!\n");}\r
-       if ( reg_val & 1<<20 ) {file.write("  * ERROR: GPIO2 active!\n");}\r
-       if ( reg_val & 1<<19 ) {file.write("  * ERROR: GPIO1 active!\n");}\r
-       if ( reg_val & 1<<17 ) {file.write("  * ERROR: LCDC active!\n");}\r
-       if ( reg_val & 1<<16 ) {file.write("  * ERROR: TIMER4 active!\n");}\r
-       if ( reg_val & 1<<15 ) {file.write("  * ERROR: TIMER3 active!\n");}\r
-       if ( reg_val & 1<<14 ) {file.write("  * ERROR: TIMER2 active!\n");}\r
-       if ( reg_val & 1<<13 ) {file.write("  * ERROR: TIMER7 active!\n");}\r
-       if ( reg_val & 1<<11 ) {file.write("  * ERROR: CAN active!\n");}\r
-       if ( reg_val & 1<<10 ) {file.write("  * ERROR: UART active!\n");}\r
-       if ( reg_val & 1<<8 ) {file.write("  * ERROR: L4LS active!\n");}\r
-       \r
-       // CM_PER: CM_PER_L3_CLKSTCTRL\r
-       reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L3_CLKSTCTRL", 0x44E0000C);               \r
-       if ( reg_val & 1<<7 ) {file.write("  * ERROR: MCASP active!\n");}\r
-       if ( reg_val & 1<<6 ) {file.write("  * ERROR: CPTS_RFT active!\n");}    \r
-       if ( reg_val & 1<<4 ) {file.write("  * ERROR: L3 active!\n");}\r
-       if ( reg_val & 1<<3 ) {file.write("  * ERROR: MMC active!\n");}\r
-       if ( reg_val & 1<<2 ) {file.write("  * ERROR: EMIF active!\n");}\r
-} else {\r
-       file.write("  * ERROR:  Manually inspect PER domain.  Unexpected combo.\n");\r
-}\r
-\r
-file.close();\r
-print("Created file " + filename);\r
-\r
-/***************************************************************************************\r
-Create CSV File that dumps out padconf data for use\r
-in conjunction with the spreadsheet from:\r
-http://processors.wiki.ti.com/index.php/Optimizing_AM335x_IO_Power_in_DeepSleep0\r
-****************************************************************************************/\r
-\r
-\r
-\r
-var filename = userHomeFolder + '/Desktop/' + 'am335x-ds0-padconf' + filename_date + '.csv';\r
-file = new java.io.FileWriter(filename);\r
-\r
-var ds0_padconf_regs = [\r
-       0x44E10800,\r
-       0x44E10804,\r
-       0x44E10808,\r
-       0x44E1080c,\r
-       0x44E10810,\r
-       0x44E10814,\r
-       0x44E10818,\r
-       0x44E1081c,\r
-       0x44E10820,\r
-       0x44E10824,\r
-       0x44E10828,\r
-       0x44E1082c,\r
-       0x44E10830,\r
-       0x44E10834,\r
-       0x44E10838,\r
-       0x44E1083c,\r
-       0x44E10840,\r
-       0x44E10844,\r
-       0x44E10848,\r
-       0x44E1084c,\r
-       0x44E10850,\r
-       0x44E10854,\r
-       0x44E10858,\r
-       0x44E1085c,\r
-       0x44E10860,\r
-       0x44E10864,\r
-       0x44E10868,\r
-       0x44E1086c,\r
-       0x44E10870,\r
-       0x44E10874,\r
-       0x44E10878,\r
-       0x44E1087c,\r
-       0x44E10880,\r
-       0x44E10884,\r
-       0x44E10888,\r
-       0x44E1088c,\r
-       0x44E10890,\r
-       0x44E10894,\r
-       0x44E10898,\r
-       0x44E1089c,\r
-       0x44E108a0,\r
-       0x44E108a4,\r
-       0x44E108a8,\r
-       0x44E108ac,\r
-       0x44E108b0,\r
-       0x44E108b4,\r
-       0x44E108b8,\r
-       0x44E108bc,\r
-       0x44E108c0,\r
-       0x44E108c4,\r
-       0x44E108c8,\r
-       0x44E108cc,\r
-       0x44E108d0,\r
-       0x44E108d4,\r
-       0x44E108d8,\r
-       0x44E108dc,\r
-       0x44E108e0,\r
-       0x44E108e4,\r
-       0x44E108e8,\r
-       0x44E108ec,\r
-       0x44E108f0,\r
-       0x44E108f4,\r
-       0x44E108f8,\r
-       0x44E108fc,\r
-       0x44E10900,\r
-       0x44E10904,\r
-       0x44E10908,\r
-       0x44E1090c,\r
-       0x44E10910,\r
-       0x44E10914,\r
-       0x44E10918,\r
-       0x44E1091c,\r
-       0x44E10920,\r
-       0x44E10924,\r
-       0x44E10928,\r
-       0x44E1092c,\r
-       0x44E10930,\r
-       0x44E10934,\r
-       0x44E10938,\r
-       0x44E1093c,\r
-       0x44E10940,\r
-       0x44E10944,\r
-       0x44E10948,\r
-       0x44E1094c,\r
-       0x44E10950,\r
-       0x44E10954,\r
-       0x44E10958,\r
-       0x44E1095c,\r
-       0x44E10960,\r
-       0x44E10964,\r
-       0x44E10968,\r
-       0x44E1096c,\r
-       0x44E10970,\r
-       0x44E10974,\r
-       0x44E10978,\r
-       0x44E1097c,\r
-       0x44E10980,\r
-       0x44E10984,\r
-       0x44E10988,\r
-       0x44E1098c,\r
-       0x44E10990,\r
-       0x44E10994,\r
-       0x44E10998,\r
-       0x44E1099c,\r
-       0x44E109a0,\r
-       0x44E109a4,\r
-       0x44E109a8,\r
-       0x44E109ac,\r
-       0x44E109b0,\r
-       0x44E109b4,\r
-       0x44E109b8,\r
-       0x44E109bc,\r
-       0x44E109c0,\r
-       0x44E109c4,\r
-       0x44E109c8,\r
-       0x44E109d0,\r
-       0x44E109d4,\r
-       0x44E109d8,\r
-       0x44E109dc,\r
-       0x44E109e0,\r
-       0x44E109e4,\r
-       0x44E109e8,\r
-       0x44E109ec,\r
-       0x44E109f0,\r
-       0x44E109f8,\r
-       0x44E10a00,\r
-       0x44E109f4,\r
-       0x44E10a04,\r
-       0x44E10a08,\r
-       0x44E10a0c,\r
-       0x44E10a10,\r
-       0x44E10a14,\r
-       0x44E10a18,\r
-       0x44E10a1c,\r
-       0x44E10a20,\r
-       0x44E10a24,\r
-       0x44E10a28,\r
-       0x44E10a2c,\r
-       0x44E10a30,\r
-       0x44E10a34];\r
-\r
-// Column Headers for CSV\r
-file.write("Address,dts offset,Raw Reg Val,Mux Mode,Pull,RxActive,Slew\r\n");\r
-\r
-// Fill out one line per loop iteration\r
-for (i=0; i<ds0_padconf_regs.length; i++)\r
-{\r
-       reg_val = getRegisterValue(debugSessionDAP, ds0_padconf_regs[i]);\r
-       file.write("0x" + d2h(ds0_padconf_regs[i])); // Address\r
-       file.write(",0x" + d2h(ds0_padconf_regs[i]-0x44e10800)); // dts offset\r
-       file.write(",0x" + d2h(reg_val)); // Raw Reg Val\r
-       file.write("," + (reg_val & 7) ); // Mux Mode\r
-\r
-       // Pullup/Pulldown Decoding\r
-       if ( (reg_val & (1<<3)) == 0 )\r
-       {\r
-               if( (reg_val & (1<<4)) == 0 )\r
-                       file.write(",pulldown");\r
-               else\r
-                       file.write(",pullup");\r
-       }\r
-       else\r
-       {\r
-               file.write(",no pull");\r
-       }\r
-\r
-       // RxActive\r
-       if( (reg_val & (1<<5)) )\r
-               file.write(",enabled");\r
-       else\r
-               file.write(",disabled");\r
-\r
-       // Slew \r
-       if( (reg_val & (1<<6)) )\r
-               file.write(",slow");\r
-       else\r
-               file.write(",fast");\r
-\r
-       file.write("\r\n");  // CSV specifies CR/LF for line endings\r
-\r
-}\r
-\r
-file.close();\r
-print("Created file " + filename);\r
-\r
-debugSessionDAP.target.disconnect();\r
-\r
+/*
+ * Copyright (c) 2006-2014, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}
+
+function printRegisterValue(ds, name, addr)
+{
+       value = ds.memory.readWord(0,addr,false);
+       value_string = d2h(value);
+       file.write(name + " = 0x" + value_string + "\n");
+       return value; // return the register value for interrogation
+}
+
+function getRegisterValue(ds, addr)
+{
+       return ds.memory.readWord(0,addr,false);
+}
+
+// Build a filename that includes date/time
+var today = new Date();
+var year4digit = today.getFullYear();
+var month2digit = ("0" + (today.getMonth()+1)).slice(-2);
+var day2digit = ("0" + today.getDate()).slice(-2);
+var hour2digit = ("0" + today.getHours()).slice(-2);
+var minutes2digit = ("0" + today.getMinutes()).slice(-2);
+var seconds2digit = ("0" + today.getSeconds()).slice(-2);
+var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; 
+var userHomeFolder = System.getProperty("user.home");
+var filename = userHomeFolder + '/Desktop/' + 'am335x-ds0-analysis' + filename_date + '.txt';
+
+debugSessionDAP = ds.openSession("*","CS_DAP_M3");
+
+try {
+       debugSessionDAP.target.connect();
+} catch (ex) {
+       print("\n ERROR: Could not connect to DAP_M3.\n");
+}
+
+file = new java.io.FileWriter(filename);
+
+
+var reg_val;
+
+// PRM_MPU: PM_MPU_PWRSTST 
+reg_val = printRegisterValue(debugSessionDAP, "PRM_MPU: PM_MPU_PWRSTST", 0x44E00E04);
+if ( reg_val == 0 ) {
+       file.write("  * Cortex A8 is OFF.\n");
+} else {
+       file.write("  * ERROR: Cortex A8 is still on!\n");
+}
+
+// PRM_GFX: PM_GFX_PWRSTST
+reg_val = printRegisterValue(debugSessionDAP, "PRM_GFX: PM_GFX_PWRSTST", 0x44E01110);
+if ( reg_val == 0 ) {
+       file.write("  * SGX530 is OFF.\n");
+} else {
+       file.write("  * ERROR: SGX530 is still on!\n");
+}
+
+// PRM_PER: PM_PER_PWRSTST
+reg_val = printRegisterValue(debugSessionDAP, "PRM_PER: PM_PER_PWRSTST", 0x44E00C08);
+if ( reg_val == 0x00200001 ) {
+       file.write(" * PER domain in retention (OCMC RAM retained).\n");
+} else if ( reg_val&3 == 3) {
+       file.write("  * ERROR: PER domain still on!\n");
+       
+       // CM_PER: CM_PER_L4LS_CLKSTCTRL
+       reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L4LS_CLKSTCTRL", 0x44E00000);
+       if ( reg_val & 1<<28 ) {file.write("  * ERROR: TIMER6 active!\n");}
+       if ( reg_val & 1<<27 ) {file.write("  * ERROR: TIMER5 active!\n");}
+       if ( reg_val & 1<<25 ) {file.write("  * ERROR: SPI active!\n");}
+       if ( reg_val & 1<<24 ) {file.write("  * ERROR: I2C active!\n");}
+       if ( reg_val & 1<<21 ) {file.write("  * ERROR: GPIO3 active!\n");}
+       if ( reg_val & 1<<20 ) {file.write("  * ERROR: GPIO2 active!\n");}
+       if ( reg_val & 1<<19 ) {file.write("  * ERROR: GPIO1 active!\n");}
+       if ( reg_val & 1<<17 ) {file.write("  * ERROR: LCDC active!\n");}
+       if ( reg_val & 1<<16 ) {file.write("  * ERROR: TIMER4 active!\n");}
+       if ( reg_val & 1<<15 ) {file.write("  * ERROR: TIMER3 active!\n");}
+       if ( reg_val & 1<<14 ) {file.write("  * ERROR: TIMER2 active!\n");}
+       if ( reg_val & 1<<13 ) {file.write("  * ERROR: TIMER7 active!\n");}
+       if ( reg_val & 1<<11 ) {file.write("  * ERROR: CAN active!\n");}
+       if ( reg_val & 1<<10 ) {file.write("  * ERROR: UART active!\n");}
+       if ( reg_val & 1<<8 ) {file.write("  * ERROR: L4LS active!\n");}
+       
+       // CM_PER: CM_PER_L3_CLKSTCTRL
+       reg_val = printRegisterValue(debugSessionDAP, "CM_PER: CM_PER_L3_CLKSTCTRL", 0x44E0000C);               
+       if ( reg_val & 1<<7 ) {file.write("  * ERROR: MCASP active!\n");}
+       if ( reg_val & 1<<6 ) {file.write("  * ERROR: CPTS_RFT active!\n");}    
+       if ( reg_val & 1<<4 ) {file.write("  * ERROR: L3 active!\n");}
+       if ( reg_val & 1<<3 ) {file.write("  * ERROR: MMC active!\n");}
+       if ( reg_val & 1<<2 ) {file.write("  * ERROR: EMIF active!\n");}
+} else {
+       file.write("  * ERROR:  Manually inspect PER domain.  Unexpected combo.\n");
+}
+
+file.close();
+print("Created file " + filename);
+
+/***************************************************************************************
+Create CSV File that dumps out padconf data for use
+in conjunction with the spreadsheet from:
+http://processors.wiki.ti.com/index.php/Optimizing_AM335x_IO_Power_in_DeepSleep0
+****************************************************************************************/
+
+
+
+var filename = userHomeFolder + '/Desktop/' + 'am335x-ds0-padconf' + filename_date + '.csv';
+file = new java.io.FileWriter(filename);
+
+var ds0_padconf_regs = [
+       0x44E10800,
+       0x44E10804,
+       0x44E10808,
+       0x44E1080c,
+       0x44E10810,
+       0x44E10814,
+       0x44E10818,
+       0x44E1081c,
+       0x44E10820,
+       0x44E10824,
+       0x44E10828,
+       0x44E1082c,
+       0x44E10830,
+       0x44E10834,
+       0x44E10838,
+       0x44E1083c,
+       0x44E10840,
+       0x44E10844,
+       0x44E10848,
+       0x44E1084c,
+       0x44E10850,
+       0x44E10854,
+       0x44E10858,
+       0x44E1085c,
+       0x44E10860,
+       0x44E10864,
+       0x44E10868,
+       0x44E1086c,
+       0x44E10870,
+       0x44E10874,
+       0x44E10878,
+       0x44E1087c,
+       0x44E10880,
+       0x44E10884,
+       0x44E10888,
+       0x44E1088c,
+       0x44E10890,
+       0x44E10894,
+       0x44E10898,
+       0x44E1089c,
+       0x44E108a0,
+       0x44E108a4,
+       0x44E108a8,
+       0x44E108ac,
+       0x44E108b0,
+       0x44E108b4,
+       0x44E108b8,
+       0x44E108bc,
+       0x44E108c0,
+       0x44E108c4,
+       0x44E108c8,
+       0x44E108cc,
+       0x44E108d0,
+       0x44E108d4,
+       0x44E108d8,
+       0x44E108dc,
+       0x44E108e0,
+       0x44E108e4,
+       0x44E108e8,
+       0x44E108ec,
+       0x44E108f0,
+       0x44E108f4,
+       0x44E108f8,
+       0x44E108fc,
+       0x44E10900,
+       0x44E10904,
+       0x44E10908,
+       0x44E1090c,
+       0x44E10910,
+       0x44E10914,
+       0x44E10918,
+       0x44E1091c,
+       0x44E10920,
+       0x44E10924,
+       0x44E10928,
+       0x44E1092c,
+       0x44E10930,
+       0x44E10934,
+       0x44E10938,
+       0x44E1093c,
+       0x44E10940,
+       0x44E10944,
+       0x44E10948,
+       0x44E1094c,
+       0x44E10950,
+       0x44E10954,
+       0x44E10958,
+       0x44E1095c,
+       0x44E10960,
+       0x44E10964,
+       0x44E10968,
+       0x44E1096c,
+       0x44E10970,
+       0x44E10974,
+       0x44E10978,
+       0x44E1097c,
+       0x44E10980,
+       0x44E10984,
+       0x44E10988,
+       0x44E1098c,
+       0x44E10990,
+       0x44E10994,
+       0x44E10998,
+       0x44E1099c,
+       0x44E109a0,
+       0x44E109a4,
+       0x44E109a8,
+       0x44E109ac,
+       0x44E109b0,
+       0x44E109b4,
+       0x44E109b8,
+       0x44E109bc,
+       0x44E109c0,
+       0x44E109c4,
+       0x44E109c8,
+       0x44E109d0,
+       0x44E109d4,
+       0x44E109d8,
+       0x44E109dc,
+       0x44E109e0,
+       0x44E109e4,
+       0x44E109e8,
+       0x44E109ec,
+       0x44E109f0,
+       0x44E109f8,
+       0x44E10a00,
+       0x44E109f4,
+       0x44E10a04,
+       0x44E10a08,
+       0x44E10a0c,
+       0x44E10a10,
+       0x44E10a14,
+       0x44E10a18,
+       0x44E10a1c,
+       0x44E10a20,
+       0x44E10a24,
+       0x44E10a28,
+       0x44E10a2c,
+       0x44E10a30,
+       0x44E10a34];
+
+// Column Headers for CSV
+file.write("Address,dts offset,Raw Reg Val,Mux Mode,Pull,RxActive,Slew\r\n");
+
+// Fill out one line per loop iteration
+for (i=0; i<ds0_padconf_regs.length; i++)
+{
+       reg_val = getRegisterValue(debugSessionDAP, ds0_padconf_regs[i]);
+       file.write("0x" + d2h(ds0_padconf_regs[i])); // Address
+       file.write(",0x" + d2h(ds0_padconf_regs[i]-0x44e10800)); // dts offset
+       file.write(",0x" + d2h(reg_val)); // Raw Reg Val
+       file.write("," + (reg_val & 7) ); // Mux Mode
+
+       // Pullup/Pulldown Decoding
+       if ( (reg_val & (1<<3)) == 0 )
+       {
+               if( (reg_val & (1<<4)) == 0 )
+                       file.write(",pulldown");
+               else
+                       file.write(",pullup");
+       }
+       else
+       {
+               file.write(",no pull");
+       }
+
+       // RxActive
+       if( (reg_val & (1<<5)) )
+               file.write(",enabled");
+       else
+               file.write(",disabled");
+
+       // Slew 
+       if( (reg_val & (1<<6)) )
+               file.write(",slow");
+       else
+               file.write(",fast");
+
+       file.write("\r\n");  // CSV specifies CR/LF for line endings
+
+}
+
+file.close();
+print("Created file " + filename);
+
+debugSessionDAP.target.disconnect();
+