Skip to main content

Boundary scan test library

Project description

EByST

Boundary scan test framework for board validation

Basic example

# initialize JTAG interface driver (currently only FT2232H is supported)
drv = ebyst.drivers.FT2232H(ebyst.drivers.FT2232H.list_devices()[0])
ctl = ebyst.TapController(drv)
ctl.detect_chain()

# Add device(s) to chain
dev = ebyst.Device.from_bsdl("bsdl/BSDLLCMXO2-256HCQFN32.BSM")
ctl.add_device(dev)
ctl.validate_chain()

# Start test
ctl.extest()

# Loopback test (assuming loopback on pins
dev.pinmap['O'].output_enable(True)
dev.pinmap['I'].output_enable(False)
dev.pinmap['O'].set_value(1)
await ctl.cycle() # drive output
await ctl.cycle() # sample input
print(dev.pinmap['I'].get_value())
dev.pinmap['O'].set_value(0)
await ctl.cycle() # drive output
await ctl.cycle() # sample input
print(dev.pinmap['I'].get_value())

# I2C test
i2c = ebyst.interfaces.I2C(ctl, dev.pinmap['PB9A'], dev.pinmap['PB4B'])
await i2c.init()
dev_address = 0xa0
reg_address = 0x10
data = 0xa5
print(f"Writing {dev_address:02x}:{reg_address:02x} <= {data:02x}")
await i2c.write(0xa0, 0x10, 0xa5)
print(f"Reading {dev_address:02x}:{reg_address:02x} => ", end='')
await x = i2c.read(0xa0, 0x10)
print(f"{x:02x}")

ctl.reset()

Async

The library uses asyncio to allow running multiple tests in parallel. When the loopback test and I2C test above are put in different tasks, they share the same boundary scan cycles, meaning they run completely parallel (Note that this only works when they are not using different pins, if pins are shared between tests, make sure to schedule them appropriately)

Example;

async def main():
    drv = ebyst.drivers.FT2232H(ebyst.drivers.FT2232H.list_devices()[0])
    dev = ebyst.Device.from_bsdl("bsdl/BSDLLCMXO2-256HCQFN32.BSM")
    ctl = ebyst.TapController(drv)
    ctl.detect_chain()
    ctl.add_device(dev)
    ctl.validate_chain()
    ctl.extest()
    async with asyncio.TaskGroup() as tg:
        tg.create_task(loopback_test(ctl, dev.pinmap['PB2C'], dev.pinmap['PB2A']))
        tg.create_task(loopback_test(ctl, dev.pinmap['PB4C'], dev.pinmap['PB4D']))

if __name__ == "__main__":
    logging.basicConfig()
    logging.getLogger().setLevel(logging.INFO)
    asyncio.run(main())

see also tests/test_async.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ebyst-0.1.0.tar.gz (472.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ebyst-0.1.0-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file ebyst-0.1.0.tar.gz.

File metadata

  • Download URL: ebyst-0.1.0.tar.gz
  • Upload date:
  • Size: 472.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.7

File hashes

Hashes for ebyst-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a58a3aa70121ed53250eb1844cd257e0a26d0d90086e094bbe50b5f48745c73c
MD5 0b82300b7ce5c488bfd078cca1cf2fa8
BLAKE2b-256 55a9b067bd5d06007d794a30e0ec993f701c9b0a8ff39b4f1b1d0a46e4ba55bc

See more details on using hashes here.

File details

Details for the file ebyst-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ebyst-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.7

File hashes

Hashes for ebyst-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6942cd4024d7b9ebfc5ab7656edac0c85cecc0c909a396079ef1a2af14a244d1
MD5 e8f68042d18e96851c5fc16a3c512804
BLAKE2b-256 e5c0a92e54b3835c1924b8ff491dad6ed6df29351990797c6efa56579ac9087f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page