tcl: add memory testing functions for board diagnostics

This is a tcl implementation of public domain tests by Michael Barr,
http://www.barrgroup.com/Embedded-Systems/How-To/Memory-Test-Suite-C

The initial porting is done by Shane Volpe and posted to the mailing
list:
http://www.mail-archive.com/openocd-development@lists.berlios.de/msg16676.html

This patch includes some cosmetic amendments plus hardcodes 32bit word
size (as the code depends on memread32/memwrite32 anyway) which fixes
original code's issue of testing only the first quarter of the
specified nBytes.

Change-Id: I5f3a66f1f16fc4082c7a5a6aba338430646ed21c
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/1455
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-by: Mathias Küster <kesmtp@freenet.de>
This commit is contained in:
Paul Fertser
2013-06-22 01:16:41 +04:00
committed by Spencer Oliver
parent d4e195ad1b
commit b16a7f9f6e
2 changed files with 237 additions and 0 deletions

View File

@@ -79,6 +79,7 @@ Free Documentation License''.
* Architecture and Core Commands:: Architecture and Core Commands
* JTAG Commands:: JTAG Commands
* Boundary Scan Commands:: Boundary Scan Commands
* Utility Commands:: Utility Commands
* TFTP:: TFTP
* GDB and OpenOCD:: Using GDB and OpenOCD
* Tcl Scripting API:: Tcl Scripting API
@@ -7926,6 +7927,53 @@ If @emph{xsvfdump} shows a file is using those opcodes, it
probably will not be usable with other XSVF tools.
@node Utility Commands
@chapter Utility Commands
@cindex Utility Commands
@section RAM testing
@cindex RAM testing
There is often a need to stress-test random access memory (RAM) for
errors. OpenOCD comes with a Tcl implementation of well-known memory
testing procedures allowing to detect all sorts of issues with
electrical wiring, defective chips, PCB layout and other common
hardware problems.
To use them you usually need to initialise your RAM controller first,
consult your SoC's documentation to get the recommended list of
register operations and translate them to the corresponding
@command{mww}/@command{mwb} commands.
Load the memory testing functions with
@example
source [find tools/memtest.tcl]
@end example
to get access to the following facilities:
@deffn Command {memTestDataBus} address
Test the data bus wiring in a memory region by performing a walking
1's test at a fixed address within that region.
@end deffn
@deffn Command {memTestAddressBus} baseaddress size
Perform a walking 1's test on the relevant bits of the address and
check for aliasing. This test will find single-bit address failures
such as stuck-high, stuck-low, and shorted pins.
@end deffn
@deffn Command {memTestDevice} baseaddress size
Test the integrity of a physical memory device by performing an
increment/decrement test over the entire region. In the process every
storage bit in the device is tested as zero and as one.
@end deffn
@deffn Command {runAllMemTests} baseaddress size
Run all of the above tests over a specified memory region.
@end deffn
@node TFTP
@chapter TFTP
@cindex TFTP