From 18178e4a716cbeca85d4612b38d12a46914ac793 Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Sun, 26 May 2019 13:31:36 +0800 Subject: [PATCH] jig: sync with nearly-final version This is nearly the final version of the factory test jig. Signed-off-by: Sean Cross --- jig/README.md | 20 +++++++ jig/bin/led-interface.sh | 78 ++++++++++++++++++++++----- jig/bin/validate-spi.sh | 41 ++++++++++++++ jig/config/load-tester-bitstream.test | 3 +- jig/config/validate-spi.test | 5 ++ jig/exclave.service | 22 ++++++++ 6 files changed, 154 insertions(+), 15 deletions(-) create mode 100644 jig/bin/validate-spi.sh create mode 100644 jig/config/validate-spi.test create mode 100644 jig/exclave.service diff --git a/jig/README.md b/jig/README.md index d8e664b..7b25ed9 100644 --- a/jig/README.md +++ b/jig/README.md @@ -4,3 +4,23 @@ Install wiringpi to get the `gpio` command: ``` apt install wiringpi ``` + +There are five LEDs on the front. The indicate which subsystems work. + +1: An error occurred +2: Test Error +3: Test Error +4: Test Error +5: Tester is IDLE (also, tester is READY) + +LEDs 2, 3, and 4 form a pattern that indicate which test failed: + +Test name | 2 (Green) | 3 (Blue) | 4 (White) | Reason for Failure | +====================+===========+===========+===========+====================+ +SPI Valid | | x | x | The SPI flash was not found, or was not the correct model | +USB Communication | x | | | The FPGA isn't assembled correctly, the USB pullup isn't correct, or the crystal is bad | +Load Test Bitstream | | | | The FPGA isn't assembled correctly | +Test SPI | | x | | Not all four wires are connected between the FPGA and the SPI | +Test RGB | x | x | | TOUCH2 or the RGB LED are not assembled correctly | +Test Touch | | x | x | TOUCH1, TOUCH3, or TOUCH4 are not assembled correctly | +Final Bitstream | | | x | The final program could not be loaded | diff --git a/jig/bin/led-interface.sh b/jig/bin/led-interface.sh index 067c094..1477088 100644 --- a/jig/bin/led-interface.sh +++ b/jig/bin/led-interface.sh @@ -1,13 +1,17 @@ #!/bin/sh -green_led=11 -yellow_led=9 -red_led=10 +led_1=19 +led_2=13 +led_3=6 +led_4=5 +led_5=0 all_off() { - gpio -g write ${green_led} 0 - gpio -g write ${yellow_led} 0 - gpio -g write ${red_led} 0 + gpio -g write ${led_1} 0 + gpio -g write ${led_2} 0 + gpio -g write ${led_3} 0 + gpio -g write ${led_4} 0 + gpio -g write ${led_5} 0 } green_on() { @@ -29,11 +33,49 @@ red_also_on() { gpio -g write ${red_led} 1 } +led_on() { + case $1 in + 1) gpio -g write ${led_1} on ;; + 2) gpio -g write ${led_2} on ;; + 3) gpio -g write ${led_3} on ;; + 4) gpio -g write ${led_4} on ;; + 5) gpio -g write ${led_5} on ;; + esac +} + +led_off() { + case $1 in + 1) gpio -g write ${led_1} off ;; + 2) gpio -g write ${led_2} off ;; + 3) gpio -g write ${led_3} off ;; + 4) gpio -g write ${led_4} off ;; + 5) gpio -g write ${led_5} off ;; + esac +} + gpio_setup() { - gpio -g mode ${green_led} out - gpio -g mode ${yellow_led} out - gpio -g mode ${red_led} out - green_on + gpio -g mode ${led_1} out + gpio -g mode ${led_2} out + gpio -g mode ${led_3} out + gpio -g mode ${led_4} out + gpio -g mode ${led_5} out + all_off + led_on 5 +} + +fail_test() { + case $1 in + load-tester-bitstream) ;; + run-all-tests) led_on 2 ;; + validate-spi) led_on 3 ; led_on 4 ;; + test-spi) led_on 3 ;; + test-rgbg) led_on 2 ; led_on 3 ;; + test-rgbb) led_on 2 ; led_on 3 ;; + test-rgbr) led_on 2 ; led_on 3 ;; + test-touch) led_on 3 ; led_on 4 ;; + load-final-bitstream) led_on 4 ;; + verify-final-bitstream) led_on 4 ;; + esac } gpio_setup @@ -43,21 +85,29 @@ while read line do if echo "${line}" | grep -iq '^start' then - yellow_on + all_off + failures=0 elif echo "${line}" | grep -iq '^fail' then - red_also_on + if [ $failures -ne 1 ] + then + failures=1 + fail_test $(echo "${line}" | awk '{print $2}') + fi + led_on 1 elif echo "${line}" | grep -iq '^finish' then + led_on 5 result=$(echo ${line} | awk '{print $3}') if [ ${result} -ge 200 -a ${result} -lt 300 ] then - green_on + led_on 5 else - red_on + led_on 1 fi elif echo "${line}" | grep -iq '^exit' then + all_off exit 0 fi done diff --git a/jig/bin/validate-spi.sh b/jig/bin/validate-spi.sh new file mode 100644 index 0000000..06fa97f --- /dev/null +++ b/jig/bin/validate-spi.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +infofile=/tmp/spi-info.txt +rm -f $infofile +fomu-flash -i | tee $infofile + +# Manufacturer ID: Macronix (c2) +# Memory model: MX25R1635F (28) +# Memory size: 16 Mbit (15) +# Device ID: 15 + +error_count=0 +if ! grep -q 'Manufacturer ID: Macronix (c2)' $infofile +then + echo -n "Unrecognized SPI manufacturer: " + grep 'Manufacturer ID: ' $infofile + error_count=$(($error_count+1)) +fi + +if ! grep -q 'Memory model: MX25R1635F (28)' $infofile +then + echo -n "Unrecognized memory model: " + grep 'Memory model: ' $infofile + error_count=$(($error_count+1)) +fi + +if ! grep -q 'Memory size: 16 Mbit (15)' $infofile +then + echo -n "Unrecognized memory size: " + grep 'Memory size: ' $infofile + error_count=$(($error_count+1)) +fi + +if ! grep -q 'Device ID: 15' $infofile +then + echo -n "Unrecognized device id: " + grep 'Device ID: ' $infofile + error_count=$(($error_count+1)) +fi + +exit $error_count diff --git a/jig/config/load-tester-bitstream.test b/jig/config/load-tester-bitstream.test index 720d168..f22c054 100644 --- a/jig/config/load-tester-bitstream.test +++ b/jig/config/load-tester-bitstream.test @@ -1,5 +1,6 @@ [Test] -ExecStart=fomu-flash -f evt-tester-bitstream.bin +ExecStart=fomu-flash -f pvt-tester-bitstream.bin Name=Load Tester Bitstream Description=Use fomu-flash to load the tester bitstream +Requires=validate-spi Timeout=1 diff --git a/jig/config/validate-spi.test b/jig/config/validate-spi.test new file mode 100644 index 0000000..b6ae53b --- /dev/null +++ b/jig/config/validate-spi.test @@ -0,0 +1,5 @@ +[Test] +ExecStart=./validate-spi.sh +Name=Validate SPI +Description=Validate that the SPI part number is what we expect +Timeout=1 diff --git a/jig/exclave.service b/jig/exclave.service new file mode 100644 index 0000000..9405e8c --- /dev/null +++ b/jig/exclave.service @@ -0,0 +1,22 @@ +# copy this file to /etc/systemd/system +# then run: +# sudo systemctl start exclave +# sudo systemctl stop exclave +# sudo systemctl enable exclave + +[Unit] +Description=Exclave tester automation framework service +After=network.target +After=systemd-user-sessions.service + +[Service] +User=pi +ExecStart=/home/pi/code/netv2-tests/run_exclave.sh +#Restart=always +#TimeoutSec=60 # I have no idea how to tell systemd the script has started... +#RestartSec=10 +#StartTimeLimitInterval=60 +#StartLimitBurst=10 + +[Install] +WantedBy=multi-user.target