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 FTDI chips with MPSSE are supported)
drv = ebyst.drivers.MPSSE(ebyst.drivers.MPSSE.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.MPSSE(ebyst.drivers.MPSSE.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

Tracing

Generate .vcd traces for selected pins;

    pins = {
        'MDC':      dev.pinmap["IO_Y12"],
        'MDIO':     dev.pinmap["IO_Y13"],
    }
    ctl.trace("mdio.vcd", **pins)
    mdio = MDIO(ctl, **pins)

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.2.2.tar.gz (71.8 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.2.2-py3-none-any.whl (27.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ebyst-0.2.2.tar.gz
  • Upload date:
  • Size: 71.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for ebyst-0.2.2.tar.gz
Algorithm Hash digest
SHA256 efacc93f5e00bb180a2a8ba44483dd2a900328cf57feaae54d025cc8c156a46e
MD5 1f2ffa94fc754421b22173cf55eb3a0f
BLAKE2b-256 04f8e0603a4def2e851a54609839bac1ddd83a4261543ac952c815352dfb6ec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ebyst-0.2.2.tar.gz:

Publisher: publish-to-pypi.yml on swolix/ebyst

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: ebyst-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 27.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for ebyst-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 51a8b070dd12813f3656b49b05a1cc9e55f5414b9614179c007b335b73383aac
MD5 92e8ce811b137a92c30ef0468980e0fa
BLAKE2b-256 53a1daf5b3186d68157f4153a448b34b61f4c66196925a596bb7fa6155a9ad4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ebyst-0.2.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on swolix/ebyst

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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