974 lines
31 KiB
XML
974 lines
31 KiB
XML
<?xml version = "1.0" encoding="iso-8859-1" standalone="yes"?>
|
|
<?xml-stylesheet type="text/xsl" href="plaintext.xsl"?>
|
|
<website>
|
|
|
|
<language lang="Norsk">
|
|
|
|
<page lang="eng">
|
|
<outfile>index.tcl</outfile>
|
|
<menutext>Config Target</menutext>
|
|
<menulink>index.tcl</menulink>
|
|
<pageheading>OpenOCD debugger</pageheading>
|
|
<level2parent>index.tcl</level2parent>
|
|
<level2menu href="index.tcl" title="Target Status" titlestyle="color:#4e6627;">
|
|
</level2menu>
|
|
<!--
|
|
<level2menu href="terminal.tcl" title="UART forwarding" titlestyle="color:#4e6627;">
|
|
</level2menu>
|
|
-->
|
|
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
|
|
<table>
|
|
<tr><td style="height:10px;width:535px;"> </td></tr>
|
|
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr>
|
|
<tr><td style="height:5px;width:535px;"> </td></tr>
|
|
</table>
|
|
|
|
<H1>Target Status</H1>
|
|
|
|
<table>
|
|
<tr>
|
|
<td class="fontbigger">
|
|
<tcl>
|
|
set form_address [formfetch form_address]
|
|
set form_action [formfetch form_action]
|
|
|
|
if {[string compare $form_action "Halt"]==0} {
|
|
append console [encode [capture_catch "halt"]]
|
|
}
|
|
if {[string compare $form_action "Resume"]==0} {
|
|
append console [encode [capture_catch "resume"]]
|
|
}
|
|
|
|
if {[string compare $form_action "Reset and run"]==0} {
|
|
append console [encode [capture_catch "reset run"]]
|
|
}
|
|
|
|
if {[string compare $form_action "Power on"]==0} {
|
|
append console [encode [capture_catch "power on"]]
|
|
}
|
|
if {[string compare $form_action "Power off"]==0} {
|
|
append console [encode [capture_catch "power off"]]
|
|
}
|
|
</tcl>
|
|
|
|
<tcl>append console [encode [capture_catch poll]]</tcl>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<form action="index.tcl" method="post">
|
|
<table><tr>
|
|
<td><input type="submit" name="form_action" value="Reset and run"></td>
|
|
<td class="buttonspacesmall"></td><td><input type="submit" name="form_action" value="Halt"></td>
|
|
<td class="buttonspacesmall"></td><td><input type="submit" name="form_action" value="Resume"></td>
|
|
<td style="width:50px;"></td><td><input type="submit" name="form_action" value="Power on"></td>
|
|
<td class="buttonspacesmall"></td><td><input type="submit" name="form_action" value="Power off"></td>
|
|
</tr></table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
<p>
|
|
</form>
|
|
]]></markup_code>
|
|
<right_column>
|
|
<markup_code><![CDATA[
|
|
<p>Target status shows that status of the connected target. </p>
|
|
<p><b>Current target</b> - selected target configuration. <br>
|
|
<p><b>Startup</b> - whether or not the target script ran to completion. Note
|
|
that even if the target is disconnected, powered down or unresponsive, the
|
|
startup script will still run to completion. Startup - OK does not mean
|
|
that the target is fully operational, simply that the configuration script
|
|
did not contain syntax errors for instance.
|
|
See log for details. <br>
|
|
<p><b>Target power</b> - Detects power on target. <br>
|
|
If the JTAG cable is not connected, or the target has no power, then no target power will be detected.</p>
|
|
<p>Type "help power" in telnet for command to control power relay.</p>
|
|
]]></markup_code>
|
|
</right_column>
|
|
|
|
</pagetext>
|
|
</page>
|
|
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>targets.tcl</outfile>
|
|
<level2parent>documentation.tcl</level2parent>
|
|
<pageheading>Target config quick start guide</pageheading>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
A target needs an openocd.cfg file. This config file sets up
|
|
the CPU, flash and reset init script. Either OpenOCD ships with an
|
|
openocd.cfg file for your target or you need to take an existing
|
|
config file and modify it for your needs.
|
|
<p>
|
|
The reset init script is crucial. It will set up e.g. MMU, chip
|
|
select registers, etc. after a reset. The init.cfg (reset init script)
|
|
is embedded into the openocd.cfg file in the sampls OpenOCD provides.
|
|
<p>
|
|
Writing an openocd.cfg from scratch is a non-trivial exercise, but
|
|
fortunally it only has to be done once for a target and afterwards it
|
|
rarely if ever needs to be changed.
|
|
|
|
|
|
]]></markup_code>
|
|
<right_column>
|
|
|
|
Quick start guide on how to configure a target.
|
|
</right_column>
|
|
</pagetext>
|
|
|
|
|
|
</page>
|
|
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>flashinfo.tcl</outfile>
|
|
<menutext>Flash</menutext>
|
|
<menulink>flashinfo.tcl</menulink>
|
|
<pageheading>Flash Information</pageheading>
|
|
<level2parent>flashinfo.tcl</level2parent>
|
|
<level2menu href="flashinfo.tcl" title="Info" titlestyle="color:#4e6627;">
|
|
</level2menu>
|
|
<level2menu href="erase.tcl" title="Erase" titlestyle="color:#4e6627;">
|
|
</level2menu>
|
|
<level2menu href="flash.tcl" title="Program / Verify" titlestyle="color:#4e6627;">
|
|
</level2menu>
|
|
<level2menu href="production.tcl" title="Production" titlestyle="color:#4e6627;">
|
|
</level2menu>
|
|
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
<div style="font-size:14px;">Configured flash banks:</div>
|
|
<p>
|
|
<code style="white-space: nowrap;">
|
|
<tcl>
|
|
set flash_return [ocd_flash_banks]
|
|
if {[llength $flash_return]!=0} {
|
|
append buffer [encode [flash banks]]
|
|
|
|
set form_action [formfetch form_action]
|
|
if {[string compare $form_action "Reset CPU and probe flash"]==0} {
|
|
append console [encode [capture_catch "reset init"]]
|
|
append buffer [encode [capture_catch "flash probe 0"]]
|
|
append buffer [encode [capture_catch "flash info 0"]]
|
|
}
|
|
} else {
|
|
append buffer "No flash bank configured."
|
|
}
|
|
</tcl>
|
|
<p>
|
|
<form action="flashinfo.tcl" method="post">
|
|
<input type="submit" name="form_action" value="Reset CPU and probe flash">
|
|
</form>
|
|
<tcl>
|
|
foreach a [ocd_flash_banks] {
|
|
append buffer "Flash bank at [format "0x%08x size 0x%08x" $a(base) $a(size)]: "
|
|
</tcl>
|
|
<form action="downloadmem.tcl" method="post">
|
|
<input type="hidden" name="form_address" value="<tcl>append buffer [format "0x%08x" $a(base)]</tcl>">
|
|
<input type="hidden" name="form_length" value="<tcl>append buffer [format "0x%08x" $a(size)]</tcl>">
|
|
|
|
<input type="submit" value="Download" name="form_action">
|
|
<br>
|
|
</form>
|
|
<tcl>
|
|
}
|
|
</tcl>
|
|
</code>
|
|
|
|
|
|
]]></markup_code>
|
|
<right_column>
|
|
<![CDATA[
|
|
<p>Here you will find information about the flash chips that you have
|
|
in your configuration.<p/>
|
|
<p><b>Reset CPU and probe flash</b> - This will reset the CPU and show
|
|
you more detailed information about your flash. This includes information about
|
|
the different sectors in the flash, and the flash driver used.</p>
|
|
]]>
|
|
</right_column>
|
|
|
|
</pagetext>
|
|
</page>
|
|
|
|
<page lang="eng">
|
|
<outfile>flash.tcl</outfile>
|
|
<level2parent>flashinfo.tcl</level2parent>
|
|
<pageheading>Program / Verify Flash</pageheading>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
<tcl>
|
|
|
|
set form_offset [formfetch form_offset]
|
|
set form_action [formfetch form_action]
|
|
set form_type [formfetch form_type]
|
|
|
|
|
|
set post ""
|
|
catch {set post $post_data} err
|
|
|
|
if {[string compare $form_offset ""]==0} {
|
|
set form_offset 0
|
|
}
|
|
if {[string compare $form_type ""]==0} {
|
|
set form_type ""
|
|
}
|
|
|
|
</tcl><code style="white-space: nowrap;"><tcl>
|
|
|
|
set data ""
|
|
append buffer {<form enctype="multipart/form-data" action="flash.tcl" method="post">}
|
|
|
|
set action_reset [expr {[string length $form_action]!=0}]
|
|
set action_flash [expr {[string compare $form_action "Flash"]==0 || [string compare $form_action "Flash and verify"]==0}]
|
|
set action_verify [expr {[string compare $form_action "Verify"]==0 || [string compare $form_action "Flash and verify"]==0}]
|
|
|
|
if {$action_reset} {
|
|
append console [encode [capture_catch "reset init"]]
|
|
}
|
|
</tcl>
|
|
</code><tcl>
|
|
|
|
append buffer {<table>}
|
|
append buffer {<tr><td class="formtext">File</td><td><input type="file" name="form_filecontent"></td></tr>}
|
|
append buffer "<tr><td class=\"formtext\" >Offset</td><td><input type=\"text\" name=\"form_offset\" value=\"$form_offset\"></td></tr>"
|
|
|
|
</tcl>
|
|
<tr><td class="formtext" style="padding-top:1px;">Type</td><td>
|
|
<select name="form_type">
|
|
<option
|
|
<tcl>if {[string compare $form_type ""]==0} { append buffer {selected="selected"} } </tcl>
|
|
value ="">auto</option>
|
|
<option
|
|
<tcl>if {[string compare $form_type "elf"]==0} { append buffer {selected="selected"} } </tcl>
|
|
value ="elf">elf</option>
|
|
<option
|
|
<tcl>if {[string compare $form_type "bin"]==0} { append buffer {selected="selected"} } </tcl>
|
|
value ="bin">binary</option>
|
|
<option
|
|
<tcl>if {[string compare $form_type "ihex"]==0} { append buffer {selected="selected"} } </tcl>
|
|
value ="ihex">ihex</option>
|
|
<!-- broken <option value ="s19">s19</option> -->
|
|
</select>
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
|
|
</table>
|
|
|
|
<table>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
</table>
|
|
|
|
<table><tr>
|
|
<td><input type="submit" name="form_action" value="Flash" ></td>
|
|
<td class="buttonspacesmall"></td><td><input type="submit" name="form_action" value="Flash and verify" ></td>
|
|
<td class="buttonspacesmall"></td><td><input type="submit" name="form_action" value="Verify" ></td>
|
|
</tr></table>
|
|
|
|
<p>
|
|
<tcl>
|
|
|
|
if {$action_flash||$action_verify} {
|
|
catch {writeform form_filecontent $upload_filename} result
|
|
append console [encode $result]
|
|
}
|
|
append buffer "<br>"
|
|
if {$action_flash} {
|
|
append console [encode [capture_catch "halt"]]
|
|
append buffer "<b>"
|
|
if {[catch {capture_catch {eval "flash write_image erase $upload_filename $form_offset $form_type"}} result]} {
|
|
append buffer "Flash write failed<br>"
|
|
append console [encode $result]
|
|
} else {
|
|
append buffer [encode $result]
|
|
append buffer "Flash write succeed<br>"
|
|
}
|
|
append buffer "</b>"
|
|
}
|
|
if {$action_verify} {
|
|
append console [encode [capture_catch "halt"]]
|
|
append buffer "<b>"
|
|
if {[catch {capture_catch {eval "verify_image $upload_filename $form_offset $form_type"}} result]} {
|
|
append buffer "Verify failed<br>"
|
|
append console [encode $result]
|
|
} else {
|
|
append buffer [encode $result]
|
|
append buffer "Verify succeed<br>"
|
|
}
|
|
append buffer "</b>"
|
|
}
|
|
</tcl>
|
|
|
|
</form>
|
|
|
|
]]></markup_code>
|
|
|
|
<right_column>
|
|
<![CDATA[
|
|
<p>Program and/or verify the flash on your target.</p>
|
|
<p><b>Flash</b> - Halt CPU, automatically erase flash if required and program flash with image.</p>
|
|
<p><b>Flash and verify</b> - Programs the flash and verifies the programmed flash content is correct.</p>
|
|
<p><b>Verify</b> - Halt CPU and verify image in flash or RAM.</p>
|
|
<p><b>Offset</b> - This value is added to the address of the image.<br>
|
|
Binary images start at address 0 by default, whereas elf and ihex have addresses encoded into the image.<br>
|
|
Typically 0 for elf/ihex and the address to write the image to for binary files.</p>
|
|
]]>
|
|
</right_column>
|
|
|
|
|
|
</pagetext>
|
|
|
|
</page>
|
|
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>production.tcl</outfile>
|
|
<level2parent>flashinfo.tcl</level2parent>
|
|
<pageheading>Production</pageheading>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
<tcl>
|
|
set form_action [formfetch form_action]
|
|
set form_serialnumber [formfetch form_serialnumber]
|
|
append buffer [production_info]
|
|
</tcl>
|
|
|
|
<form enctype="multipart/form-data" action="production.tcl" method="post">
|
|
<code style="white-space: nowrap;">
|
|
<tcl>
|
|
if {[string compare $form_action "Upload firmware"]==0} {
|
|
set wrotedata [catch {writeform form_filecontent $upload_filename} result]
|
|
append buffer [encode $result]
|
|
if {$wrotedata==0} {
|
|
append buffer "<br>Running production procedure<p>"
|
|
append buffer "<br>Reset and init: <br>"
|
|
|
|
append console [encode [capture_catch {catch "production $upload_filename $form_serialnumber"}]]
|
|
}
|
|
}
|
|
if {[string compare $form_action "Test"]==0} {
|
|
append buffer "<br>Running production test. Output from first 10 seconds printed below. <p>"
|
|
|
|
append console [encode [capture_catch {catch production_test}]]
|
|
}
|
|
if {[string compare $form_action "Power on"]==0} {
|
|
append console [encode [capture_catch "power on"]]
|
|
}
|
|
if {[string compare $form_action "Power off"]==0} {
|
|
append console [encode [capture_catch "power off"]]
|
|
}
|
|
</tcl>
|
|
</code>
|
|
<tcl>
|
|
append buffer {<p class="formtext">Firmware file(raw binary) <input type="file" name="form_filecontent"><p>}
|
|
append buffer {<p class="formtext">Serial number <input type="text" name="form_serialnumber"><p>}
|
|
</tcl>
|
|
|
|
<table>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
</table>
|
|
|
|
<table><tr>
|
|
<td><input type="submit" name="form_action" value="Upload firmware" ></td>
|
|
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Test"></td>
|
|
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Power on"></td>
|
|
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Power off">
|
|
</tr></table>
|
|
</form>
|
|
|
|
]]></markup_code>
|
|
|
|
<right_column>
|
|
<![CDATA[
|
|
The target script can implement the "production", "production_info" and "production_test" tcl proc's. These procedures
|
|
are used on this page. There are default implementations that do nothing.
|
|
|
|
<p><b>Upload firmware</b> - Power cycle target, reset target and program raw binary file to flash bank 0, offset 0 and verify flash programming. Leave target powered on.</p>
|
|
<p><b>Test</b> - Power up target, run 10 second target test. Output is provided via the DCC output channel. </p>
|
|
<p><b>Power on</b> - Power on target.</p>
|
|
<p><b>Power off</b> - Power off target.</p>
|
|
<p><b>Serial number</b> - A target script can use this string in the production procedure. Type "help production" for more info.</p>
|
|
]]>
|
|
</right_column>
|
|
|
|
|
|
</pagetext>
|
|
|
|
</page>
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>erase.tcl</outfile>
|
|
<menulink>erase.tcl</menulink>
|
|
<pageheading>Erase Flash</pageheading>
|
|
<level2parent>flashinfo.tcl</level2parent>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
|
|
|
|
<tcl>
|
|
|
|
set form_address [formfetch form_address]
|
|
set form_length [formfetch form_length]
|
|
set form_action [formfetch form_action]
|
|
|
|
if {[string compare $form_length ""]==0} {
|
|
set form_length 0x10000
|
|
}
|
|
if {[string compare $form_address ""]==0} {
|
|
if {[catch {[first_flash_base]} result]==0} {
|
|
set form_address "0x[tohex $result]"
|
|
}
|
|
}
|
|
|
|
|
|
if {[string compare $form_address ""]!=0} {
|
|
if {[string compare $form_action "Erase"]==0} {
|
|
append buffer "<code style=\"white-space: nowrap;\">"
|
|
append console [encode [capture_catch {
|
|
reset init
|
|
flash erase_address $form_address $form_length}]]
|
|
append buffer </code>
|
|
}
|
|
}
|
|
|
|
|
|
</tcl>
|
|
|
|
<form action="erase.tcl" method="post">
|
|
<table>
|
|
<tr><td class="formtext" style="padding-right:10px;">Address</td><td><input type="text" name="form_address" value="<tcl>append buffer $form_address</tcl>"></td></tr>
|
|
<tr><td class="formtext">Length</td><td><input type="text" name="form_length" value="<tcl>append buffer $form_length</tcl>"></td></tr>
|
|
</td></tr>
|
|
</table>
|
|
<table>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
</table>
|
|
|
|
<input type="submit" name="form_action" value="Erase"><br>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
]]></markup_code>
|
|
<right_column>
|
|
<![CDATA[
|
|
<p>Note that flash programming will erase flash if required.<p/>
|
|
<p>Reset and init CPU, then erase address range.</p>
|
|
<p>The length field is specified in number of bytes.</p>
|
|
]]>
|
|
</right_column>
|
|
|
|
</pagetext>
|
|
</page>
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>run.tcl</outfile>
|
|
<menulink>run.tcl</menulink>
|
|
<pageheading>Run program</pageheading>
|
|
<level2parent>flashinfo.tcl</level2parent>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
|
|
|
|
<tcl>
|
|
|
|
set form_address [formfetch form_address]
|
|
set form_action [formfetch form_action]
|
|
|
|
if {[string compare $form_action "Run from address"]==0} {
|
|
append console [encode [capture_catch "halt"]]
|
|
append console [encode [capture_catch "wait_halt"]]
|
|
append console [encode [capture_catch "resume $form_address"]]
|
|
}
|
|
|
|
if {[string compare $form_action "Halt"]==0} {
|
|
append console [encode [capture_catch "halt"]]
|
|
append console [encode [capture_catch "wait_halt"]]
|
|
}
|
|
|
|
if {[string compare $form_action "Reset and run"]==0} {
|
|
append console [encode [capture_catch "reset run"]]
|
|
}
|
|
|
|
if {[string compare $form_action "Reset and init"]==0} {
|
|
append console [encode [capture_catch "reset init"]]
|
|
}
|
|
|
|
append console [encode [capture_catch poll]]
|
|
|
|
</tcl>
|
|
|
|
<form action="run.tcl" method="post">
|
|
<table>
|
|
<tr><td class="formtext" style="padding-right:10px;">Address</td><td><input type="text" name="form_address" value="<tcl>append buffer $form_address</tcl>"></td></tr>
|
|
</td></tr>
|
|
</table>
|
|
<table>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
</table>
|
|
|
|
<input type="submit" name="form_action" value="Reset and run"> <input type="submit" name="form_action" value="Run from address"> <input type="submit" name="form_action" value="Halt"><input type="submit" name="form_action" value="Reset and init"><br>
|
|
</form>
|
|
|
|
|
|
|
|
]]></markup_code>
|
|
<right_column>
|
|
<![CDATA[
|
|
<p>Reset and run - reset CPU and let it run.</p>
|
|
<p>Halt - halt CPU.</p>
|
|
<p>Run from address - halt CPU and resume from address. Default is resume from current address.</p>
|
|
<p>Reset and init - reset CPU and run init script.</p>
|
|
]]>
|
|
</right_column>
|
|
|
|
</pagetext>
|
|
</page>
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>browsemem.tcl</outfile>
|
|
<menutext>Memory</menutext>
|
|
<menulink>browsemem.tcl</menulink>
|
|
<pageheading>Browse / Edit Memory</pageheading>
|
|
<level2parent>browsemem.tcl</level2parent>
|
|
<level2menu href="browsemem.tcl" title="Browse / Edit" titlestyle="color:#4e6627;">
|
|
<![CDATA[
|
|
Browse and edit memory.
|
|
]]>
|
|
</level2menu>
|
|
<level2menu href="downloadmem.tcl" title="Download" titlestyle="color:#4e6627;">
|
|
<![CDATA[
|
|
Copy memory range to developer machine
|
|
]]>
|
|
</level2menu>
|
|
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
|
|
|
|
<tcl>
|
|
|
|
set form_address [formfetch form_address]
|
|
set form_length [formfetch form_length]
|
|
set form_type [formfetch form_type]
|
|
set form_action [formfetch form_action]
|
|
set form_value [formfetch form_value]
|
|
|
|
if {[string compare $form_length ""]==0} {
|
|
set form_length 0
|
|
}
|
|
if {$form_length<=0} {
|
|
set form_length 0x80
|
|
}
|
|
if {$form_length>0x1000} {
|
|
set form_length 0x1000
|
|
}
|
|
|
|
if {[string compare $form_type ""]==0} {
|
|
set form_type mdw
|
|
}
|
|
|
|
if {[string compare $form_type "mdw"]==0} {
|
|
set wordsize 4
|
|
set modify_cmd mww
|
|
}
|
|
if {[string compare $form_type "mdh"]==0} {
|
|
set wordsize 2
|
|
set modify_cmd mwh
|
|
}
|
|
if {[string compare $form_type "mdb"]==0} {
|
|
set wordsize 1
|
|
set modify_cmd mwb
|
|
}
|
|
|
|
|
|
|
|
|
|
if {[string compare $form_address ""]!=0} {
|
|
if {[string compare $form_action "Previous"]==0} {
|
|
# Kludge! Work around problems parsing hex in Jim Tcl expressions
|
|
incr form_address ; set form_address [expr $form_address-1]
|
|
if {$form_address-$form_length>0} {
|
|
set form_address "0x[tohex [expr $form_address-$form_length]]"
|
|
} else {
|
|
set form_address "0x0"
|
|
}
|
|
}
|
|
if {[string compare $form_action "Next"]==0} {
|
|
# Kludge! Work around problems parsing hex in Jim Tcl expressions
|
|
incr form_address ; set form_address [expr $form_address-1]
|
|
set form_address "0x[tohex [expr $form_address+$form_length]]"
|
|
}
|
|
if {[string compare $form_action "Modify"]==0} {
|
|
append console [capture_catch "$modify_cmd $form_address $form_value"]
|
|
}
|
|
if {[string compare $form_action "Fill"]==0} {
|
|
append console [capture_catch "$modify_cmd $form_address $form_value $form_length"]
|
|
}
|
|
}
|
|
|
|
|
|
</tcl>
|
|
|
|
<form action="browsemem.tcl" method="post">
|
|
<table>
|
|
<tr><td class="formtext">Address</td><td><input type="text" name="form_address" value="<tcl>append buffer $form_address</tcl>"></td></tr>
|
|
<tr><td class="formtext">Length</td><td><input type="text" name="form_length" value="<tcl>append buffer "0x[tohex $form_length]"</tcl>"></td></tr>
|
|
<tr><td class="formtext">Value</td><td><input type="text" name="form_value" value="<tcl>append buffer $form_value</tcl>"></td>
|
|
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Modify"></td>
|
|
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Fill"></td></tr>
|
|
<tr><td class="formtext">Type</td><td style="padding-top:1px;">
|
|
<select name="form_type">
|
|
<option
|
|
<tcl>if {[string compare $form_type "mdb"]==0} { append buffer {selected="selected"} } </tcl> value ="mdb">8 bit
|
|
</option>
|
|
<option
|
|
<tcl>if {[string compare $form_type "mdh"]==0} { append buffer {selected="selected"} } </tcl> value ="mdh">16 bit
|
|
</option>
|
|
<option
|
|
<tcl>if {[string compare $form_type "mdw"]==0} { append buffer {selected="selected"} } </tcl>value ="mdw">32 bit
|
|
</option>
|
|
</select>
|
|
|
|
</td></tr>
|
|
</table>
|
|
<table>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
</table>
|
|
|
|
<table><tr>
|
|
<td><input type="submit" name="form_action" value="Refresh"></td>
|
|
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Previous" ></td>
|
|
<td class="buttonspacesmall"> </td><td><input type="submit" name="form_action" value="Next" ></td>
|
|
</tr></table>
|
|
<br>
|
|
|
|
</form>
|
|
<p>
|
|
<div class="fontbigger">Memory:</div><p>
|
|
<code style="white-space: nowrap; font-size:11px;font:courier new;">
|
|
<tcl>
|
|
if {[string compare $form_address ""]!=0} {
|
|
append console [encode [capture_catch halt]]
|
|
append buffer [encode [capture_catch "$form_type $form_address [expr $form_length]"]]
|
|
}
|
|
</tcl>
|
|
</code>
|
|
|
|
|
|
|
|
|
|
|
|
]]></markup_code>
|
|
<right_column>
|
|
<![CDATA[
|
|
<p>Browse and edit target memory.<br>
|
|
Length is in bytes, maximum 4096 bytes.</p>
|
|
<p>An error message is shown when trying to browse or edit memory which cases a CPU fault.</p>
|
|
<p>CPU will be halted if required.</p>
|
|
<p><b>Modify</b> - Will modify only one byte, half-word or word starting at Address.</p>
|
|
<p><b>Fill</b> - Will fill the specified region with the specified value.</p>
|
|
<p><b>Refresh</b> - Display the content of the specified memory area.</p>
|
|
]]>
|
|
</right_column>
|
|
|
|
</pagetext>
|
|
</page>
|
|
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>downloadmem.tcl</outfile>
|
|
<level2parent>browsemem.tcl</level2parent>
|
|
<pageheading>Download Memory Range</pageheading>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
<tcl>
|
|
set form_address [formfetch form_address]
|
|
set form_length [formfetch form_length]
|
|
set form_action [formfetch form_action]
|
|
</tcl>
|
|
<form action="downloadmem.tcl" method="post">
|
|
<table>
|
|
<tr><td class="formtext">Address</td><td><input type="text" name="form_address" value="<tcl>append buffer $form_address</tcl>"></td></tr>
|
|
<tr><td class="formtext">Length</td><td><input type="text" name="form_length" value="<tcl>append buffer $form_length</tcl>"></td></tr>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<table>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
<tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr>
|
|
<tr><td style="height:15px;width:535px;"> </td></tr>
|
|
</table>
|
|
|
|
<input type="submit" value="Download" name="form_action">
|
|
|
|
|
|
</form>
|
|
<tcl>
|
|
if {[string compare $form_action "Download"]==0} {
|
|
append console [encode [capture_catch "reset init"]]
|
|
append console [encode [capture_catch "dump_image /tmp/dump.bin $form_address $form_length"]]
|
|
</tcl>
|
|
<form action="../dump.bin" target="_blank">
|
|
<input type="submit" name="form_action" value="Save downloaded memory">
|
|
</form>
|
|
<tcl>
|
|
}
|
|
|
|
</tcl>
|
|
|
|
|
|
|
|
]]></markup_code>
|
|
<right_column>
|
|
<![CDATA[
|
|
Download memory from target. <br>
|
|
<b>Note</b> that download memory can take
|
|
a long time(potentially minutes for megabytes at low JTAG clk speeds).
|
|
<p/>
|
|
Once the memory is downloaded a link is available on the page to download
|
|
the file to your PC.
|
|
]]>
|
|
</right_column>
|
|
</pagetext>
|
|
|
|
</page>
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>openocd.tcl</outfile>
|
|
<menutext>OpenOCD</menutext>
|
|
<menulink>openocd.tcl</menulink>
|
|
<pageheading>Run Command</pageheading>
|
|
<level2parent>openocd.tcl</level2parent>
|
|
<level2menu href="openocd.tcl" title="Run Command" titlestyle="color:#4e6627;">
|
|
</level2menu>
|
|
<level2menu href="guiupload.tcl" title="Upload File" titlestyle="color:#4e6627;">
|
|
<![CDATA[
|
|
Upload file
|
|
]]>
|
|
</level2menu>
|
|
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
<tcl>
|
|
set form_command [formfetch form_command]
|
|
|
|
set form_edittext ""
|
|
if {[string length $form_command]>0} {
|
|
set form_edittext [capture_catch {eval $form_command}]
|
|
}
|
|
|
|
append buffer {<form action="openocd.tcl" method="post">} "\n"
|
|
append buffer {Command<br>}
|
|
append buffer {<textarea style="overflow:auto;" rows="5" cols="65" name="form_command" wrap="off">}
|
|
append buffer [to_textarea $form_command]
|
|
append buffer {</textarea><br>}
|
|
append buffer {<input type="submit" value="Run" name="form_action" ><br>}
|
|
append buffer {<textarea style="overflow:auto;" rows="21" cols="65" name="form_edittext" readonly=1 wrap="off">}
|
|
append buffer [to_textarea $form_edittext]
|
|
append buffer {</textarea><br>}
|
|
|
|
append buffer {</form>} "\n"
|
|
|
|
</tcl>
|
|
|
|
]]></markup_code>
|
|
|
|
<right_column>
|
|
<![CDATA[
|
|
<p>Run tcl statement(s). Add "ocd_" prefix to OpenOCD commands otherwise
|
|
there will be no output, e.g. "reset init" use "ocd_reset init".
|
|
<p/>
|
|
<p><a href="/ram/log">Click here to download log</a>.</p>
|
|
<p>To download log you can also use commands like "wget http://<tcl>append buffer [ip]</tcl>/ram/log", or
|
|
point your web browser to said address.</p>
|
|
<p>
|
|
You can also execute tcl commands using curl from your developer PC:
|
|
</p>
|
|
<code>
|
|
curl --form form_command=ocd_version <tcl>append buffer [ip]</tcl>runtcl.tcl
|
|
</code>
|
|
|
|
]]>
|
|
</right_column>
|
|
</pagetext>
|
|
</page>
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>guiupload.tcl</outfile>
|
|
<level2parent>openocd.tcl</level2parent>
|
|
<pageheading>Upload File</pageheading>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
<tcl>
|
|
set form_filename [formfetch form_filename];
|
|
set form_action [formfetch form_action];
|
|
#set form_filecontent [formfetch form_filecontent];
|
|
|
|
append buffer {<form enctype="multipart/form-data" action="guiupload.tcl" method="post">}
|
|
append buffer <br>
|
|
if {[string compare $form_action "Upload"]==0} {
|
|
if {[catch {writeform form_filecontent $form_filename} result]==0} {
|
|
append buffer [encode $result]
|
|
} else {
|
|
append buffer Wrote $form_filename
|
|
}
|
|
}
|
|
|
|
append buffer {<table style="padding:0px;border-collapse:collapse;"><tr><td class="formtext">Filename on OpenOCD machine</td><td><input type="text" name="form_filename"></td></tr>}
|
|
append buffer {<td class="formtext">File to upload</td><td><input type="file" name="form_filecontent"></td></tr></table>}
|
|
append buffer {<table><tr><td style="height:15px;width:535px;"> </td></tr><tr><td style="height:1px;width:535px;background-color:#a2c5d1;"></td></tr><tr><td style="height:15px;width:535px;"> </td></tr></table>}
|
|
append buffer {<input type="submit" name="form_action" value="Upload" ><br> }
|
|
append buffer {</form>}
|
|
|
|
</tcl>
|
|
|
|
]]></markup_code>
|
|
</pagetext>
|
|
|
|
</page>
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<outfile>targets.tcl</outfile>
|
|
<level2parent>documentation.tcl</level2parent>
|
|
<pageheading>Target config quick start guide</pageheading>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
|
|
A target needs an openocd.cfg file. This config file sets up
|
|
the CPU, flash and reset init script. Either OpenOCD ships with an
|
|
openocd.cfg file for your target or you need to take an existing
|
|
config file and modify it for your needs.
|
|
<p>
|
|
The reset init script is crucial. It will set up e.g. MMU, chip
|
|
select registers, etc. after a reset. The init.cfg (reset init script)
|
|
is embedded into the openocd.cfg file in the sampls OpenOCD provides.
|
|
<p>
|
|
Writing an openocd.cfg from scratch is a non-trivial exercise, but
|
|
fortunally it only has to be done once for a target and afterwards it
|
|
rarely if ever needs to be changed.
|
|
|
|
|
|
]]></markup_code>
|
|
<right_column>
|
|
|
|
Quick start guide on how to configure a target.
|
|
</right_column>
|
|
</pagetext>
|
|
|
|
|
|
</page>
|
|
|
|
|
|
|
|
|
|
|
|
<page lang="eng">
|
|
<menulink>index.tcl</menulink>
|
|
<level2parent>index.tcl</level2parent>
|
|
<outfile>terminal.tcl</outfile>
|
|
<pageheading>UART forwarding</pageheading>
|
|
<pagetext>
|
|
<markup_code><![CDATA[
|
|
<tcl>
|
|
set form_baudrate [formfetch form_baudrate]
|
|
if {[string length $form_baudrate]==0} {
|
|
set form_baudrate [ocd_uart]
|
|
set form_baudrate [string range $form_baudrate 0 [expr [string length $form_baudrate]-2]]
|
|
}
|
|
set form_action [formfetch form_action]
|
|
</tcl>
|
|
<form action="terminal.tcl" method="post">
|
|
Target baudrate:
|
|
<select name="form_baudrate">
|
|
<tcl>
|
|
foreach i {9600 19200 38400 57600 115200} {
|
|
</tcl>
|
|
<option <tcl>if {[string compare $form_baudrate $i]==0} { append buffer {selected="selected"} } </tcl>
|
|
value ="<tcl>append buffer $i</tcl>"><tcl>append buffer $i</tcl></option>
|
|
<tcl>
|
|
}
|
|
</tcl>
|
|
</select>
|
|
|
|
<p>
|
|
<input type="submit" name="form_action" value="Set baudrate" >
|
|
</form>
|
|
<tcl>
|
|
if {[string compare $form_action "Set baudrate"]==0} {
|
|
append console [encode [ocd_uart $form_baudrate]]
|
|
}
|
|
</tcl>
|
|
|
|
<h2>Simple UART</h2>
|
|
This terminal window is purely for illustrative purposes. Use telnet or a terminal program
|
|
to talk to the target over TCP/IP for anything but trivial case of reading/writing a few
|
|
lines of texts in simple tests.
|
|
<p>
|
|
]]></markup_code>
|
|
<right_column>
|
|
<![CDATA[
|
|
Serial port data to target is forwarded(both directions) in the simple terminal window
|
|
to the left. Alternatively you can <b>telnet <tcl>append buffer [ip]</tcl> 5555</b>
|
|
or connect via TCP/IP from e.g. HyperTerminal.
|
|
<p>
|
|
Type "help uart" in telnet for information on how to set uart speed for target. Normally
|
|
the uart speed is set from the target configuration script by adding an "uart N", where
|
|
N is the baudrate.
|
|
]]>
|
|
</right_column>
|
|
</pagetext>
|
|
|
|
</page>
|
|
|
|
|
|
|
|
</language>
|
|
|
|
</website>
|