def test_arguments(): ptest() # Invalid mode with AssertRaises("invalid mode", ValueError): periphery.SPI("/dev/spidev0.0", 4, int(1e6)) # Invalid bit order with AssertRaises("invalid bit order", ValueError): periphery.SPI("/dev/spidev0.0", 4, int(1e6), bit_order="blah")
def test_arguments(): print("Starting arguments test...") # Invalid mode with AssertRaises(ValueError): periphery.SPI(spi_device, 4, int(1e6)) # Invalid bit order with AssertRaises(ValueError): periphery.SPI(spi_device, 4, int(1e6), bit_order="blah") print("Arguments test passed.")
def test_interactive(): print("Starting interactive test...") spi = periphery.SPI(spi_device, 0, 100000) print("Starting interactive test. Get out your logic analyzer, buddy!") raw_input("Press enter to continue...") # Mode 0 transfer raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") assert raw_input( "SPI transfer speed <= 100KHz, mode 0 occurred? y/n ") == "y" # Mode 1 transfer spi.mode = 1 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") assert raw_input( "SPI transfer speed <= 100KHz, mode 1 occurred? y/n ") == "y" # Mode 2 transfer spi.mode = 2 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") assert raw_input( "SPI transfer speed <= 100KHz, mode 2 occurred? y/n ") == "y" # Mode 3 transfer spi.mode = 3 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") assert raw_input( "SPI transfer speed <= 100KHz, mode 3 occurred? y/n ") == "y" spi.mode = 0 # 500KHz transfer spi.max_speed = 500000 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") assert raw_input( "SPI transfer speed <= 500KHz, mode 0 occurred? y/n ") == "y" # 1MHz transfer spi.max_speed = 1000000 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") assert raw_input( "SPI transfer speed <= 1MHz, mode 0 occurred? y/n ") == "y" spi.close() print("Interactive test passed.")
def configure_device(self, spi_mode, order, bits): """ Configure the SPI device and GPIOs for communication with target """ self.reset_pin = periphery.GPIO(self.gpio_reset, 'out') self.wake_pin = periphery.GPIO(self.gpio_wake, 'out') self.irq_pin = periphery.GPIO(self.gpio_irq, 'in') self.spi = periphery.SPI(self.spi_device, spi_mode, self.spi_speed * 1e6) self.spi.bit_order = order self.spi.bits_per_word = bits print('Configured SPI %s for %s.' % (self.spi_device, self.name)) print('Configured GPIO %d for %s Reset.' % (self.gpio_reset, self.name)) print('Configured GPIO %d for %s Wake.' % (self.gpio_wake, self.name)) print('Configured GPIO %d for %s IRQ.' % (self.gpio_irq, self.name))
def test_loopback(): ptest() spi = periphery.SPI(spi_device, 0, 100000) # Try list transfer buf_in = list(range(256)) * 4 buf_out = spi.transfer(buf_in) passert("compare readback", buf_out == buf_in) # Try bytearray transfer buf_in = bytearray(buf_in) buf_out = spi.transfer(buf_in) passert("compare readback", buf_out == buf_in) # Try bytes transfer buf_in = bytes(bytearray(buf_in)) buf_out = spi.transfer(buf_in) passert("compare readback", buf_out == buf_in) spi.close()
def test_open_close(): print("Starting open/close test...") # Normal open (mode=1, max_speed = 100000) spi = periphery.SPI(spi_device, 1, 100000) # Confirm fd and defaults assert spi.fd > 0 assert spi.mode == 1 assert spi.max_speed == 100000 assert spi.bit_order == "msb" assert spi.bits_per_word == 8 assert spi.extra_flags == 0 # Not going to try different bit order or bits per word, because not # all SPI controllers support them # Try modes 0, 1, 2, 3 spi.mode = 0 assert spi.mode == 0 spi.mode = 1 assert spi.mode == 1 spi.mode = 2 assert spi.mode == 2 spi.mode = 3 assert spi.mode == 3 # Try max speeds 100Khz, 500KHz, 1MHz, 2MHz spi.max_speed = 100000 assert spi.max_speed == 100000 spi.max_speed = 500000 assert spi.max_speed == 500000 spi.max_speed = 1000000 assert spi.max_speed == 1000000 spi.max_speed = 2e6 assert spi.max_speed == 2000000 spi.close() print("Open/close test passed.")
def test_open_close(): ptest() # Normal open (mode=1, max_speed = 100000) spi = periphery.SPI(spi_device, 1, 100000) # Confirm fd and defaults passert("fd > 0", spi.fd > 0) passert("mode is 1", spi.mode == 1) passert("max speed is 100000", spi.max_speed == 100000) passert("default bit_order is msb", spi.bit_order == "msb") passert("default bits_per_word is 8", spi.bits_per_word == 8) passert("default extra_flags is 0", spi.extra_flags == 0) # Not going to try different bit order or bits per word, because not # all SPI controllers support them # Try modes 0, 1, 2, 3 spi.mode = 0 passert("spi mode is 0", spi.mode == 0) spi.mode = 1 passert("spi mode is 1", spi.mode == 1) spi.mode = 2 passert("spi mode is 2", spi.mode == 2) spi.mode = 3 passert("spi mode is 3", spi.mode == 3) # Try max speeds 100Khz, 500KHz, 1MHz, 2MHz spi.max_speed = 100000 passert("max speed is 100KHz", spi.max_speed == 100000) spi.max_speed = 500000 passert("max speed is 500KHz", spi.max_speed == 500000) spi.max_speed = 1000000 passert("max speed is 1MHz", spi.max_speed == 1000000) spi.max_speed = 2e6 passert("max speed is 2MHz", spi.max_speed == 2000000) spi.close()
def test_loopback(): print("Starting loopback test...") spi = periphery.SPI(spi_device, 0, 100000) # Try list transfer buf_in = list(range(256)) * 4 buf_out = spi.transfer(buf_in) assert buf_out == buf_in # Try bytearray transfer buf_in = bytearray(buf_in) buf_out = spi.transfer(buf_in) assert buf_out == buf_in # Try bytes transfer buf_in = bytes(bytearray(buf_in)) buf_out = spi.transfer(buf_in) assert buf_out == buf_in spi.close() print("Loopback test passed.")
def test_interactive(): ptest() spi = periphery.SPI(spi_device, 0, 100000) print("Starting interactive test. Get out your logic analyzer, buddy!") raw_input("Press enter to continue...") # Check tostring print("SPI description: {}".format(str(spi))) passert("interactive success", raw_input("SPI description looks ok? y/n ") == "y") # Mode 0 transfer raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") passert( "interactive success", raw_input("SPI transfer speed <= 100KHz, mode 0 occurred? y/n ") == "y") # Mode 1 transfer spi.mode = 1 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") passert( "interactive success", raw_input("SPI transfer speed <= 100KHz, mode 1 occurred? y/n ") == "y") # Mode 2 transfer spi.mode = 2 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") passert( "interactive success", raw_input("SPI transfer speed <= 100KHz, mode 2 occurred? y/n ") == "y") # Mode 3 transfer spi.mode = 3 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") passert( "interactive success", raw_input("SPI transfer speed <= 100KHz, mode 3 occurred? y/n ") == "y") spi.mode = 0 # 500KHz transfer spi.max_speed = 500000 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") passert( "interactive success", raw_input("SPI transfer speed <= 500KHz, mode 0 occurred? y/n ") == "y") # 1MHz transfer spi.max_speed = 1000000 raw_input("Press enter to start transfer...") spi.transfer([0x55, 0xaa, 0x0f, 0xf0]) print("SPI data 0x55, 0xaa, 0x0f, 0xf0") passert( "interactive success", raw_input("SPI transfer speed <= 1MHz, mode 0 occurred? y/n ") == "y") spi.close()