aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbnewbold <bnewbold@robocracy.org>2010-07-28 01:11:02 +0000
committerbnewbold <bnewbold@robocracy.org>2010-07-28 01:11:02 +0000
commit4ea0ab7abfdcb69b2c16b9d3187f2598ff610a07 (patch)
tree1984c6a19ae4a811a7cdb60d2eae7440c339ebfb
parent922b5e0e7029cc0bc56cafc8dd6ecc2b6880e42f (diff)
Added testing/QA procedures
-rw-r--r--test-procedures/header-short.jpgbin0 -> 480360 bytes
-rw-r--r--test-procedures/jumpers.jpgbin0 -> 662748 bytes
-rw-r--r--test-procedures/maple-test-procedures.lyx965
-rw-r--r--test-procedures/maple-test-procedures.pdfbin0 -> 2740592 bytes
-rw-r--r--test-procedures/overheated-reset-button.jpgbin0 -> 443347 bytes
-rw-r--r--test-procedures/serial-bootloader.jpgbin0 -> 260268 bytes
-rw-r--r--test-procedures/shield-bottom.jpgbin0 -> 118967 bytes
-rw-r--r--test-procedures/test-shield-attached.jpgbin0 -> 107329 bytes
-rw-r--r--test-procedures/tests34
-rw-r--r--test-procedures/unmelted-solder.jpgbin0 -> 512557 bytes
10 files changed, 999 insertions, 0 deletions
diff --git a/test-procedures/header-short.jpg b/test-procedures/header-short.jpg
new file mode 100644
index 0000000..a62144c
--- /dev/null
+++ b/test-procedures/header-short.jpg
Binary files differ
diff --git a/test-procedures/jumpers.jpg b/test-procedures/jumpers.jpg
new file mode 100644
index 0000000..eee89dd
--- /dev/null
+++ b/test-procedures/jumpers.jpg
Binary files differ
diff --git a/test-procedures/maple-test-procedures.lyx b/test-procedures/maple-test-procedures.lyx
new file mode 100644
index 0000000..b9abac4
--- /dev/null
+++ b/test-procedures/maple-test-procedures.lyx
@@ -0,0 +1,965 @@
+#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
+\lyxformat 345
+\begin_document
+\begin_header
+\textclass article
+\use_default_options true
+\language english
+\inputencoding auto
+\font_roman default
+\font_sans default
+\font_typewriter default
+\font_default_family default
+\font_sc false
+\font_osf false
+\font_sf_scale 100
+\font_tt_scale 100
+
+\graphics default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry true
+\use_amsmath 1
+\use_esint 1
+\cite_engine basic
+\use_bibtopic false
+\paperorientation portrait
+\leftmargin 2cm
+\topmargin 2cm
+\rightmargin 2cm
+\bottommargin 2cm
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\author ""
+\author ""
+\end_header
+
+\begin_body
+
+\begin_layout Title
+LeafLabs Maple QA and Preparation Procedures
+\end_layout
+
+\begin_layout Date
+Last modified 07/27/2010
+\end_layout
+
+\begin_layout Author
+Bryan Newbold <bnewbold@leaflabs.com>
+\end_layout
+
+\begin_layout Standard
+There are several degrees of quality assurance testing to be done on newly
+ fabricated Maple boards.
+ First, after any design change, there is in-depth electrical characterization
+ and feature testing to be done.
+ Second, with any new batch of boards produced (especially by a new manufacturer
+ or alternative components) there is a comprehensive electrical checklist.
+ Finally, every single board that is sold must be flashed with a bootloader
+ and initial program, then run through a rapid electrical test.
+ This document describes the steps for the later two; characterization of
+ new features or design changes is a more subtle task for an engineer.
+\end_layout
+
+\begin_layout Standard
+See the end of this document for a per-board testing checklist.
+\end_layout
+
+\begin_layout Section*
+Per-batch Electrical Testing Instructions
+\end_layout
+
+\begin_layout Standard
+The intent of this testing is to ensure that the boards work
+\begin_inset Quotes eld
+\end_inset
+
+as advertised
+\begin_inset Quotes erd
+\end_inset
+
+ with the manufacturing techniques and sourced components that are usually
+ in some way unique to a given batch of boards.
+ For example, if a cheaper oscillator crystal with all the same specifications
+ from a different source is used, all the functionality of the board needs
+ to be tested.
+
+\end_layout
+
+\begin_layout Standard
+This testing isn't as straight forward as the per-board directions below.
+ It's up to the technician/engineer to be a detective and search out problems;
+ we usually spend an hour or two running these tests and writing up the
+ results.
+ Tests should be run on at least 2-3 boards randomly selected from the batch,
+ with at least one NOT from the top or bottom sheet.
+ Common tests are:
+\end_layout
+
+\begin_layout Itemize
+Test EXT power up to the rated voltage (maximum and minimum)
+\end_layout
+
+\begin_layout Itemize
+SerialUSB and USART read/write at maximum speeds, looking for corruption
+ or dropped data
+\end_layout
+
+\begin_layout Itemize
+Look at PWM and communications waveforms with an oscilloscope; check for
+ excess noise/ringing/crosstalk
+\end_layout
+
+\begin_layout Itemize
+Test power consumption
+\end_layout
+
+\begin_layout Itemize
+Test battery charging circuit and status LEDs
+\end_layout
+
+\begin_layout Itemize
+Inspect the
+\begin_inset Formula $V_{cc}$
+\end_inset
+
+ and
+\begin_inset Formula $V_{analog}$
+\end_inset
+
+ regulated voltages for accuracy and USB and USART crosstalk using an oscillosco
+pe.
+\end_layout
+
+\begin_layout Itemize
+Test PWM on all pins labeled as such
+\end_layout
+
+\begin_layout Itemize
+Test ADC input on all pins labeled as such with GND, ~1.5v (battery), and
+
+\begin_inset Formula $V_{cc}$
+\end_inset
+
+.
+ All pins should make statistically comparable readings.
+\end_layout
+
+\begin_layout Itemize
+Check GPIO read/write on all pins
+\end_layout
+
+\begin_layout Itemize
+Look at the oscillator waveform on an oscilloscope
+\end_layout
+
+\begin_layout Itemize
+Let the board crunch numbers, charge battery, and USB read/write for a couple
+ minutes and make sure no components get hot
+\end_layout
+
+\begin_layout Standard
+Testing ADC noise and accuracy is the most ambiguous; it's tricky to do
+ without an communications channel running which will increase crosstalk
+ noise, and we haven't researched the STM32 ADC peripheral enough to distinguish
+ between systematic noise in our design and improper sampling technique
+ (eg, mismatched impedance).
+\end_layout
+
+\begin_layout Standard
+After all this testing, the first 10 boards that go through the per-board
+ testing may turn up additional issues, so it's helpful to get those prepared
+ at the same time to catch all problems as soon as possible.
+
+\end_layout
+
+\begin_layout Section*
+Per-board Preparation and Testing Instructions
+\end_layout
+
+\begin_layout Standard
+These tests should be run on every single Maple board that will be shipped.
+ When the customer receives the board it should be in a static baggie labeled
+ with the revision number and instructions (or a URL to instructions) on
+ it, the board should have two jumpers on the power select header (battery
+ charge
+\begin_inset Quotes eld
+\end_inset
+
+open
+\begin_inset Quotes erd
+\end_inset
+
+), and the board should be programmed with both the bootloader and a recent
+ version of the interactive test program.
+
+\end_layout
+
+\begin_layout Standard
+In preparation, you'll need:
+\end_layout
+
+\begin_layout Itemize
+a partially charged 3.3v LiPo battery with a compatible connector
+\end_layout
+
+\begin_layout Itemize
+a computer with all the required software
+\end_layout
+
+\begin_layout Itemize
+Mini-B USB cable
+\end_layout
+
+\begin_layout Itemize
+Serial-USB adapter (FTDI) with jumper wires to connect to Maple USART
+\end_layout
+
+\begin_layout Itemize
+a supply of header jumpers (2x per board)
+\end_layout
+
+\begin_layout Itemize
+a
+\begin_inset Quotes eld
+\end_inset
+
+test shield
+\begin_inset Quotes erd
+\end_inset
+
+ (a modified Maple board with different headers; instructions below)
+\end_layout
+
+\begin_layout Standard
+This entire process goes better as an assembly line with one person at a
+ computer doing software and another person doing the more mechanical tests
+ and attaching/removing the test shield.
+ For speed we usually put aside any board that seems suspicious at all with
+ a post-it note or tape attached explaining the issue; we then revisit these
+ boards at the end or pass them off to an engineer for investigation or
+ repair.
+ We average something like 1 in 12 boards being flakey for any reason; some
+ of these may even be due to human error during testing (eg, twitchy hands,
+ keyboard typos, paranoia, whatever).
+ These boards are still appropriate for software development or internal
+ projects, so we retest or fix them quickly by hand but never ship them.
+ Any errors on the part of the manufacturer are noted and communicated as
+ feedback to help them with their QA/process.
+\end_layout
+
+\begin_layout Standard
+Note that the Maple rev4 is identical to the rev3 except for silkscreen
+ fixes.
+ The rev3 needed part of the silkscreen erased or sharpied over during preparati
+on.
+\end_layout
+
+\begin_layout Subsection*
+
+\series bold
+Brief visual inspection of board
+\end_layout
+
+\begin_layout Standard
+This first step doesn't make much sense until you pick up a board and notice
+ that one of the buttons just isn't there or that the silkscreen is out
+ of focus, or that two headers are soldered together, etc.
+ The care that should be taken depends on how much the batch is trusted
+ as a whole: things to look out for should be identified in the per-patch
+ inspection.
+ The most common things we have trouble with are the buttons (give them
+ firm nudge and make sure they don't pop off), shorts between STM32 pins,
+ bad soldering on the female headers, and big solder lumps on the barrel
+ jack connector.
+
+\end_layout
+
+\begin_layout Standard
+For the first 10 boards in a batch it's worth spending 30 seconds a board
+ and perhaps using a loupe or microscope.
+ After that it's usually a 10 second glance to check the silkscreen and
+ any large issues.
+ The later testing steps should catch most other problems.
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Float figure
+placement h
+wide false
+sideways false
+status collapsed
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename unmelted-solder.jpg
+ lyxscale 10
+ height 5cm
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename header-short.jpg
+ lyxscale 10
+ height 5cm
+
+\end_inset
+
+
+\begin_inset Graphics
+ filename overheated-reset-button.jpg
+ lyxscale 10
+ height 5cm
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+A selection of defective Maple boards: solder shorts (left), un-melted solder
+ paste (top), and an overheated Reset button (right)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection*
+Attach Jumpers
+\end_layout
+
+\begin_layout Standard
+Usually the power select jumpers are not attached during production and
+ are added at this stage.
+ The power select jumper should be on USB and the battery charger should
+ be half attached.
+
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Float figure
+placement H
+wide false
+sideways false
+status collapsed
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename jumpers.jpg
+ width 8cm
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Proper jumper configuration: USB power selected and battery charger jumper
+ attached but
+\begin_inset Quotes eld
+\end_inset
+
+open
+\begin_inset Quotes erd
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+This half-attachment is a bit controversial..
+ the connection could be closed with no real problem except that charging
+ LEDs have undefined state and could be confusing to the user.
+ The jumper could also be floating in the static bag, but then it could
+ be lost or forgotten.
+\end_layout
+
+\begin_layout Subsection*
+Flash bootloader
+\end_layout
+
+\begin_layout Standard
+The bootloader can be flashed either over JTAG or via the hardware serial
+ bootloader interface.
+ The JTAG header is not populated by default and using the serial bootloader
+ tests that feature, so we usually use that.
+
+\end_layout
+
+\begin_layout Standard
+You can get the stm32loader.py script from our maple-bootloader git repository
+ at
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+http://github.com/leaflabs/maple-bootloader
+\end_layout
+
+\end_inset
+
+; this script (written by a third party) requires the PySerial library as
+ well as a python runtime installed.
+
+\end_layout
+
+\begin_layout Standard
+The most recent version of the bootloader is from the 9c5f8e...
+ git revision of the maple-bootloader reporisory.
+ For safety we always use the same compiled binary file, when can be downloaded
+ from
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+http://static.leaflabs.com/pub/leaflabs/maple-bootloader/maple_boot-rev3-9c5f8e.bin
+\end_layout
+
+\end_inset
+
+.
+ Using this file you should not have to checkout or recompile the bootloader;
+ you will need to compile the interactive test session program (below).
+\end_layout
+
+\begin_layout Standard
+On linux with an FTDI device as /dev/ttyUSB0, the command is usually something
+ like:
+\end_layout
+
+\begin_layout Verse
+
+\family typewriter
+stm32loader.py -p /dev/ttyUSB0 -evw maple_boot-rev3-9c5f8e.bin
+\end_layout
+
+\begin_layout Standard
+The procedure is to connect both an FTDI chip and the Maple to a computer
+ via USB; note that the Maple status light will not light up because there
+ is no bootloader installed.
+ Then connect the FTDI chip to the Serial1 USART device, which has TX1 on
+ pin 7 and RX1 on pin 8; wiring Ground to the header between pins 13 and
+ 14 makes the wiring easy:
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Float figure
+placement H
+wide false
+sideways false
+status collapsed
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename serial-bootloader.jpg
+ width 8cm
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Serial1-to-FTDI wiring example for hardware serial bootloader uploading
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Once wired up, you can enter hardware serial bootloader mode by holding
+ the BUT button all the way down, pressing the Reset button for a second
+ or two and release while keeping BUT down, then release BUT a couple seconds
+ later.
+ There will still be no sign of life from the Maple, so this can take a
+ couple tries at first.
+ Finally the above command can be run; the command output should show a
+ long scroll of memory writes, and then an equally long set of verifications,
+ then success.
+ At this point you can reset the Maple and the blue status LED should blink
+ perpetually (the board is in regular perpetual bootloader mode because
+ there is no user program to run).
+ If the board is not in hardware serial bootloader mode then the command
+ will pause for several seconds before giving up; check the FTDI TX LED
+ to make sure it is trying to write and that all the ports are configured
+ correctly on the computer.
+\end_layout
+
+\begin_layout Standard
+If the upload fails at any point after it has successfully started (eg,
+ a verification failure) then that microcontroller is questionable and should
+ NOT be shipped even if a second attempt is successful.
+ If this happens with many boards then there may be a problem with the FTDI
+ device, wiring, or USB voltage levels.
+\end_layout
+
+\begin_layout Subsection*
+Upload test program
+\end_layout
+
+\begin_layout Standard
+Next is to upload a recent version of the
+\begin_inset Quotes eld
+\end_inset
+
+interactive test session
+\begin_inset Quotes erd
+\end_inset
+
+ program.
+ This program can be connected to over SerialUSB and allows a number of
+ tests to be run; it's helpful for the next testing steps and is also a
+ nice thing to have preloaded on the board for users to play with.
+
+\end_layout
+
+\begin_layout Standard
+We always recompile and upload this program from the 'master' branch of
+ the libmaple git repository (link above) and then use the 'screen' program
+ to interact over SerialUSB.
+ The preferred version is that bundled with v0.0.6; you can checkout exactly
+ this tag from the git repository.
+ See
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+http://leaflabs.com/docs/libmaple/unix-toolchain/
+\end_layout
+
+\end_inset
+
+ for directions on getting the unix toolchain set up on Linux; then from
+ the libmaple top level directory copy ./examples/test-session.cpp to ./main.cpp
+ and 'make flash'.
+ It should also be possible to use the
+\begin_inset Quotes eld
+\end_inset
+
+Example
+\begin_inset Quotes erd
+\end_inset
+
+ version bundled with the IDE, but this is less convenient because the IDE
+ recompiles the program every time.
+ Either way, make sure the program is uploaded to FLASH, not RAM (it wouldn't
+ fit in RAM anyways).
+ Also make sure that the COMM variable in the source code is set to SerialUSB,
+ not Serial2.
+\end_layout
+
+\begin_layout Standard
+To upload the program run 'make install' or press the upload button with
+ the Maple still plugged in and in perpetual bootloader mode.
+ Then attach to the SerialUSB device with 'screen /dev/ttyACM0' or the serial
+ monitor window in the IDE.
+ You'll usually miss the pretty welcome banner graphics, but you can press
+ spacebar or send 'h' to see some text thrown back to make sure that the
+ connection is working.
+
+\end_layout
+
+\begin_layout Subsection*
+Test buttons
+\end_layout
+
+\begin_layout Standard
+\begin_inset Quotes eld
+\end_inset
+
+Sticky
+\begin_inset Quotes erd
+\end_inset
+
+ buttons have been a huge QA issue.
+ This is probably due to overheating of the buttons, bad button quality,
+ and/or melted plastic inside the button.
+ The real problem is that it can be hard to detect a partially-working button,
+ but then very frustrating for the user down the line.
+ It's possible that a button can work for the first few presses but then
+ stop working.
+ It's also common for the button to get electrically
+\begin_inset Quotes eld
+\end_inset
+
+stuck
+\begin_inset Quotes erd
+\end_inset
+
+ in the pressed state even when it has noticeably disengaged mechanically.
+ Some sticky buttons feel
+\begin_inset Quotes eld
+\end_inset
+
+mushy
+\begin_inset Quotes erd
+\end_inset
+
+, while some feel just fine and still have intermittent issues.
+ Vigilance is required at this step! It is also not unheard of for the button
+ to completely
+\emph on
+fall off the board
+\emph default
+.
+\end_layout
+
+\begin_layout Standard
+With the interactive test program running, press 'r' to enter GPIO readout
+ mode; in this mode all pins are in INPUT_PULLDOWN
+\begin_inset Foot
+status collapsed
+
+\begin_layout Plain Layout
+
+\emph on
+Note: older versions of the test program used INPUT or INPUT_FLOATING mode
+ and then reported continuous state changes on random pins (especially when
+ the board is touched).
+ Make sure to get the latest version of the test program before uploading
+ it!
+\end_layout
+
+\end_inset
+
+ mode and any changes of state are printed out.
+ Press the BUT button repeatedly and the program should report transitions
+ between HIGH and LOW.
+ Carefully watch the output while pressing and releasing the button a dozen
+ times or so and make sure the state changes every time and that there isn't
+ a significant delay between the physical act and the software update.
+\end_layout
+
+\begin_layout Standard
+To test the RESET button, detach the serial monitoring program and press
+ RESET repeatedly.
+ The blue status LED should turn off and then turn back on and blink every
+ time.
+ For efficiency, this step could be performed a little earlier in the QA
+ assembly line, but be sure both buttons get tested on every board!
+\end_layout
+
+\begin_layout Subsection*
+Test pins with
+\begin_inset Quotes eld
+\end_inset
+
+Test Shield
+\begin_inset Quotes erd
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+The test shield is a second Maple board which toggles every GPIO pin in
+ a round robin manner and reports any problems.
+ This modified board gets it's power from the board being tested and runs
+ a passive program which responds to the '+' mode of the interactive test
+ program.
+
+\end_layout
+
+\begin_layout Standard
+The test shield is constructed by removing all the female headers from the
+ top of a Maple and soldering on male connectors to the bottom.
+ All of the GPIO pins plus the Ground and
+\begin_inset Formula $V_{in}$
+\end_inset
+
+ pins must be connected; the only pins can NOT be connected are the power
+ select header (which should still be on top and in EXT power mode), RESET,
+ and the
+\begin_inset Formula $V_{cc}$
+\end_inset
+
+ pins.
+ It's probably easiest to solder male headers for all the female headers
+ and then break off the
+\begin_inset Formula $V_{cc}$
+\end_inset
+
+ and RESET pins with pliers.
+ Here's a photo; this particular shield got a lot of use/abuse and one or
+ two of the male pins have fallen off:
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Float figure
+placement H
+wide false
+sideways false
+status collapsed
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename shield-bottom.jpg
+ height 4cm
+
+\end_inset
+
+
+\begin_inset Graphics
+ filename test-shield-attached.jpg
+ height 4cm
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Test Shield underside and attached; note that this shield was constructed
+ from a broken rev1 Maple that needed skywiring and has some missing male
+ pins on the bottom.
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Once the board is built and has the bootloader flashed, compile and upload
+ the ./examples/qa-slave-shield.cpp program from the libmaple git repository
+ (you'll put the power select jumper to USB for program upload, then back
+ to EXT for use).
+\end_layout
+
+\begin_layout Standard
+For each board being tested, press on the shield, which should power up
+ and have the status LED blink.
+ Enter the interactive test program and send '+'.
+ It may take a couple seconds to load, but then the program should list
+ all of the pins and a test status for each.
+ If the program fails at any pin, or even pauses for a noticeable period
+ before continuing, there's a problem with that pin.
+
+\end_layout
+
+\begin_layout Standard
+The most frequent problem is a shorted or open solder connection at the
+ headers or at the STM32 pads.
+ Another problem is that attaching and removing the shield stresses the
+ male header pins (though NOT the female pins)
+\end_layout
+
+\begin_layout Standard
+The '+' program is not 100% perfect and may rarely report false failures;
+ if you think it's not correct or needs tweaking please contact me.
+ The program fails most frequently at pins 15 and 16.
+ Also feel free to come up with your own mechanical design; perhaps thinner
+ male headers or
+\begin_inset Quotes eld
+\end_inset
+
+pogo-pins
+\begin_inset Quotes erd
+\end_inset
+
+ a la
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=138
+\end_layout
+
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Subsection*
+Test battery features
+\end_layout
+
+\begin_layout Standard
+The last step is to test the power select and battery charging circuits.
+ The most common failure here is the battery charging status LEDs (surface
+ mount, red and green).
+ This involves moving the power select jumpers around, the following is
+ the quickest method we came up with.
+\end_layout
+
+\begin_layout Standard
+With the Maple powered by USB, close the battery charger jumper with no
+ battery connected: the state of the circuit is undefined in this configuration,
+ but after a second or two the green (
+\begin_inset Quotes eld
+\end_inset
+
+charged
+\begin_inset Quotes erd
+\end_inset
+
+) LED usually lights up.
+ The order that the red and green LEDs light up varies from board to board
+ and is unimportant.
+ Next attach a not-fully-charged battery: the red charging LED should light
+ up.
+ Leaving the battery plugged in, put the charging jumper back in the half-attach
+ed configuration, then move the power select jumper to BAT: the blue status
+ LED should stop blinking when power is detached, then turn back on and
+ start blinking again.
+ If all is well, move the jumper back to USB and unplug the battery.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Newpage pagebreak
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section*
+Per-board Preparation and Testing Checklist for LeafLabs Maple (rev4)
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Brief visual inspection of board
+\series default
+ for missing components or silkscreen smudges
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Attach 2 jumpers to power select header:
+\series default
+ USB (closed) and Battery Charge (hanging)
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Flash bootloader
+\series default
+ via hardware Serial Bootloader function (attach USB for power, connect
+ RX, TX, and GND to FTDI device, upload and verify with stm32loader.py, reset
+ and check for blinky)
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Upload Test Program to FLASH via USB
+\series default
+using perpetual bootloader mode
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Test Reset and BUT Buttons with 10 pushes each
+\series default
+ by watching the status LED for Reset and using the interactive test program
+ 'r' mode for BUT
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Run the GPIO test program
+\series default
+ with the test shield attached and the board being tested running the interactiv
+e test session in '+' mode
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Test Battery power circuit and charging LEDs
+\series default
+ by setting the charger jumper with no battery (green LED flickers), attaching
+ a half-charged battery (red LED), insetting charger jumper (no LEDs), moving
+ power select to Battery (blue status blinks), then moving power select
+ back to USB.
+\end_layout
+
+\begin_layout Enumerate
+
+\series bold
+Put board in a static bag
+\series default
+ and update any database/spreadsheet.
+ It's ready to ship!
+\end_layout
+
+\end_body
+\end_document
diff --git a/test-procedures/maple-test-procedures.pdf b/test-procedures/maple-test-procedures.pdf
new file mode 100644
index 0000000..4ee215d
--- /dev/null
+++ b/test-procedures/maple-test-procedures.pdf
Binary files differ
diff --git a/test-procedures/overheated-reset-button.jpg b/test-procedures/overheated-reset-button.jpg
new file mode 100644
index 0000000..303dad5
--- /dev/null
+++ b/test-procedures/overheated-reset-button.jpg
Binary files differ
diff --git a/test-procedures/serial-bootloader.jpg b/test-procedures/serial-bootloader.jpg
new file mode 100644
index 0000000..1455f1c
--- /dev/null
+++ b/test-procedures/serial-bootloader.jpg
Binary files differ
diff --git a/test-procedures/shield-bottom.jpg b/test-procedures/shield-bottom.jpg
new file mode 100644
index 0000000..d2ef580
--- /dev/null
+++ b/test-procedures/shield-bottom.jpg
Binary files differ
diff --git a/test-procedures/test-shield-attached.jpg b/test-procedures/test-shield-attached.jpg
new file mode 100644
index 0000000..3a8cf0b
--- /dev/null
+++ b/test-procedures/test-shield-attached.jpg
Binary files differ
diff --git a/test-procedures/tests b/test-procedures/tests
new file mode 100644
index 0000000..98b2e1d
--- /dev/null
+++ b/test-procedures/tests
@@ -0,0 +1,34 @@
+ADC:
+ statistics on a GND and constant (1.5v?) measurement
+ comparison of static voltages vs. a multimeter
+
+GENERAL NOISE:
+ measurements
+ - scope GND, Vcc, analog, USB data, GPIO output
+ - ADC read statistic
+ cases
+ - GPIO toggling
+ - USB read/write
+ - USART read/write
+ - nothing
+ - PWM output
+
+BATTERY:
+ reverse voltage
+
+POWER:
+ lowest voltage cutout
+ power consumption (max)
+ reverse 5v on input
+
+PWM:
+ test one pin with servo
+
+OTHER:
+ serial bootloader button
+ button functionality (both)
+ measure oscillator frequency at various voltages
+
+JTAG:
+ basic flash/debug session
+
diff --git a/test-procedures/unmelted-solder.jpg b/test-procedures/unmelted-solder.jpg
new file mode 100644
index 0000000..a0bb995
--- /dev/null
+++ b/test-procedures/unmelted-solder.jpg
Binary files differ