You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							187 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							187 lines
						
					
					
						
							4.0 KiB
						
					
					
				#!/bin/bash | 
						|
# | 
						|
# pintest | 
						|
#	Test the Pi's GPIO port | 
						|
# Copyright (c) 2013-2015 Gordon Henderson | 
						|
################################################################################# | 
						|
# This file is part of wiringPi: | 
						|
#	A "wiring" library for the Raspberry Pi | 
						|
# | 
						|
#    wiringPi is free software: you can redistribute it and/or modify | 
						|
#    it under the terms of the GNU Lesser General Public License as published by | 
						|
#    the Free Software Foundation, either version 3 of the License, or | 
						|
#    (at your option) any later version. | 
						|
# | 
						|
#    wiringPi is distributed in the hope that it will be useful, | 
						|
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
						|
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
						|
#    GNU Lesser General Public License for more details. | 
						|
# | 
						|
#    You should have received a copy of the GNU Lesser General Public License | 
						|
#    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>. | 
						|
################################################################################# | 
						|
 | 
						|
 | 
						|
# logErr pin, expected got | 
						|
################################################################################ | 
						|
 | 
						|
logErr () | 
						|
{ | 
						|
  if [ $errs = 0 ]; then | 
						|
    echo "" | 
						|
  fi | 
						|
  echo " --> Pin $1 failure. Expected $2, got $3" | 
						|
  let errs+=1 | 
						|
} | 
						|
 | 
						|
 | 
						|
# printErrorCount | 
						|
################################################################################ | 
						|
 | 
						|
printErrCount() | 
						|
{ | 
						|
  if [ $errs = 0 ]; then | 
						|
    echo "No faults detected." | 
						|
  elif [ $errs = 1 ]; then | 
						|
    echo "One fault detected." | 
						|
  else | 
						|
    echo "$errs faults detected" | 
						|
  fi | 
						|
} | 
						|
 | 
						|
 | 
						|
# testPins start end | 
						|
################################################################################ | 
						|
 | 
						|
testPins() | 
						|
{ | 
						|
  start=$1 | 
						|
    end=$2 | 
						|
   errs=0 | 
						|
 | 
						|
  printf "%30s %2d:%2d: "  "$3" $1 $2 | 
						|
 | 
						|
# Set range to inputs | 
						|
 | 
						|
  for i in `seq $start $end`; do | 
						|
    gpio mode $i in | 
						|
  done | 
						|
 | 
						|
# Enable internal pull-ups and expect to read high | 
						|
 | 
						|
  for i in `seq $start $end`; do | 
						|
    gpio mode $i up | 
						|
    if [ `gpio read $i` = 0 ]; then | 
						|
      logErr $i 1 0 | 
						|
    fi | 
						|
  done | 
						|
 | 
						|
# Enable internal pull-downs and expect to read low | 
						|
 | 
						|
  for i in `seq $start $end`; do | 
						|
    gpio mode $i down | 
						|
    if [ `gpio read $i` = 1 ]; then | 
						|
      echo "Pin $i failure - expected 0, got 1" | 
						|
      let errs+=1 | 
						|
    fi | 
						|
  done | 
						|
 | 
						|
# Remove the internal pull up/downs | 
						|
 | 
						|
  for i in `seq $start $end`; do | 
						|
    gpio mode $i tri | 
						|
  done | 
						|
 | 
						|
  if [ $errs = 0 ]; then | 
						|
    echo " OK" | 
						|
  else | 
						|
    printErrCount | 
						|
  fi | 
						|
 | 
						|
  let totErrs+=errs | 
						|
} | 
						|
 | 
						|
 | 
						|
intro() | 
						|
{ | 
						|
  cat <<EOF | 
						|
PinTest | 
						|
======= | 
						|
 | 
						|
This is a simple utility to test the GPIO pins on your Raspberry Pi. | 
						|
 | 
						|
NOTE: All GPIO peripherals must be removed to perform this test. This | 
						|
  includes serial, I2C and SPI connections. You may get incorrect results | 
						|
  if something is connected and it interferes with the test. | 
						|
 | 
						|
This test can only test the input side of things. It uses the internal | 
						|
pull-up and pull-down resistors to simulate inputs. It does not test | 
						|
the output drivers. | 
						|
 | 
						|
You will need to reboot your Pi after this test if you wish to use the  | 
						|
serial port as it will be left in GPIO mode rather than serial mode. | 
						|
 | 
						|
This test only tests the original pins present on the Rev A and B. It | 
						|
does not test the extra pins on the Revision A2, B2 nor the A+ or B+ | 
						|
 | 
						|
Please make sure everything is removed and press the ENTER key to continue, | 
						|
EOF | 
						|
 | 
						|
  echo -n "or Control-C to abort... " | 
						|
  read a | 
						|
} | 
						|
 | 
						|
 | 
						|
# Start here | 
						|
################################################################################ | 
						|
 | 
						|
intro | 
						|
gpio unexportall | 
						|
 | 
						|
   errs=0 | 
						|
totErrs=0 | 
						|
 | 
						|
echo "" | 
						|
 | 
						|
# Main pins | 
						|
 | 
						|
testPins 0 7 "The main 8 GPIO pins" | 
						|
 | 
						|
# SPI | 
						|
 | 
						|
testPins 10 14 "The 5 SPI pins" | 
						|
 | 
						|
# Serial | 
						|
 | 
						|
testPins 15 16 "The serial pins" | 
						|
 | 
						|
# I2C - Needs somewhat different testing | 
						|
#	due to the on-board pull-up's | 
						|
 | 
						|
echo -n "                  The I2C pins  8: 9: " | 
						|
errs=0 | 
						|
gpio mode 8 in | 
						|
gpio mode 9 in | 
						|
 | 
						|
if [ `gpio read 8` = 0 ]; then | 
						|
  echo "Pin 8 failure - expected 1, got 0" | 
						|
  let errs+=1 | 
						|
fi | 
						|
 | 
						|
if [ `gpio read 9` = 0 ]; then | 
						|
  echo "Pin 9 failure - expected 1, got 0" | 
						|
  let errs+=1 | 
						|
fi | 
						|
 | 
						|
if [ $errs = 0 ]; then | 
						|
  echo " OK" | 
						|
else | 
						|
  printErrCount | 
						|
fi | 
						|
 | 
						|
echo "" | 
						|
if [ $totErrs != 0 ]; then | 
						|
  echo "" | 
						|
  echo "Faults detected! Output of 'readall':" | 
						|
  gpio readall | 
						|
fi
 | 
						|
 |