SPI Loopback test
# SPI Loopback Test - tlfong01 2019may29
# Using two SPI ports simultaneously on Raspberry Pi 0 W - Asked 2019may29, Viewed 385 times
# https://raspberrypi.stackexchange.com/questions/99079/using-two-spi-ports-simultaneously-on-raspberry-pi-0-w
# spi_loopback_onebyte_v44_2019may3001 tlfong01 2019may30hkt1958 ***
# Rpi3B+ stretch 2019apr08, IDLE python 3.5.3
# Test - loopBackTest - SPI port send and receive one byte/two bytes/three bytes.
# Function - Send one byte/two bytes/three bytes to MOSI and read it back from MISO.
# Setup - Connet MOSI pin to MISO pin to form a loop.
# /boot/config.txt dtoverlay setting
# dtparam=i2c_arm=on
# dtparam=spi=on
# dtoverlay=spi1-3cs
# /dev/spi listing
# ls -l /dev/spi*
# should show the following:
# 1. /dev/spidev0.0
# 2. /dev/spidev0.1
# 3. /dev/spidev1.0
# 4. /dev/spidev1.1
# 5. /dev/spidev1.2
from time import sleep
import spidev
# *** SPI Channel 0 Config ***
spiPort00 = spidev.SpiDev()
spiPort00.open(0,0)
spiPort00.max_speed_hz = 100000
spiPort01 = spidev.SpiDev()
spiPort01.open(0,1)
spiPort01.max_speed_hz = 100000
# *** SPI Channel 1 Config ***
spiPort10 = spidev.SpiDev()
spiPort10.open(1,0)
spiPort10.max_speed_hz = 100000
spiPort11 = spidev.SpiDev()
spiPort11.open(1,1)
spiPort11.max_speed_hz = 100000
spiPort12 = spidev.SpiDev()
spiPort12.open(1,2)
spiPort12.max_speed_hz = 100000
# *** SPI Send/Receive OneByte/TwoBytes/ThreeBytes ***
def spiSendRecvOneByte(spiPort, sendByte):
sendByteArray = [sendByte]
recvByteArray = spiPort.xfer(sendByteArray)
return recvByteArray
# *** Loopback OneByte/TwoBytes/ThreeBytes ***
def loopbackOneByte(spiPort, sendByte):
recvByteArray = spiSendRecvOneByte(spiPort, sendByte)
recvByte = recvByteArray[0]
print('\n Begin loopbackOneByte(),....')
#print('')
print(' sendByte = ', hex(sendByte))
print(' recvByte = ', hex(recvByte))
#print('')
print(' End loopbackOneByte(),....', end = '')
return
# *** Tests to loopback SPI Channel 0 ***
def testLoopbackOneByteSpiPort0():
print('\nBegin loopbackOneByteSpiPort0(),....', end = '')
loopbackOneByte(spiPort00, 0x5b)
print('\nEnd loopbackOneByteSpiPort0(),....', end = '')
return
# *** Tests to loopback SPI Channel 1 ***
def testLoopbackOneByteSpiPort1():
print('\nBegin loopbackOneByteSpiPort1(),....', end = '')
loopbackOneByte(spiPort10, 0x5b)
print('\nEnd loopbackOneByteSpiPort1(),....', end = '')
return
# *** Main Tests ***
# *** Loopback Tests ***
#testLoopbackOneByteSpiPort0()
testLoopbackOneByteSpiPort1()
# *** Sample Output ***
''' Smple output
Begin loopbackOneByteSpiPort0(),....
Begin loopbackOneByte(),....
sendByte = 0x5b
recvByte = 0x5b
End loopbackOneByte(),....
End loopbackOneByteSpiPort0(),....
'''
''' Smple output
Begin loopbackOneByteSpiPort1(),....
Begin loopbackOneByte(),....
sendByte = 0x5b
recvByte = 0x5b
End loopbackOneByte(),....
End loopbackOneByteSpiPort1(),....
'''
# *** End ***
The above is a python program to do SPI loopback test. I usually don’t like to use bash program and prefer to use this python program to check that SPI is working OK.
.END
Related
Categories: Uncategorized
