Ejemplo n.º 1
0
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")
Ejemplo n.º 2
0
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.")
Ejemplo n.º 3
0
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.")
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
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.")
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
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.")
Ejemplo n.º 9
0
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()