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.0.1.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.0.1-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ebyst-0.0.1.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.0.1.tar.gz
Algorithm Hash digest
SHA256 d9ff94c4c2ec5c10e1151f002025dd56fc5d72e8b7277478c7dd34e5b9d96585
MD5 9210527062882d4704f20483040844e4
BLAKE2b-256 8560a5dfba3c11044cac8f5ebf9bf3fcc64067bb2c5d21cee83fe166f2ceae9d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ebyst-0.0.1-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.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3a17429a0b86babe635626754094b3e61e3c8afa6118720f9dfdfa45f7e74f64
MD5 e55c1556bf7a3706f585f7f53c8c0338
BLAKE2b-256 287fcc420465abf3e2914b72a7b32176476353fa8de4b857f005c4aacb3880f5

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