I2C Trigger
I2C triggers allows you to trigger a waveform capture form an I2C data source. This can be very useful when debugging communication between an I2C host and device. Or if you want to capture a waveform but have the trigger be based on data in an I2C data packet.
Trigger On Start
This allows you to trigger a waveform capture on the start bit of an I2C sequence.
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_trigger_on_start()
~ lager analog I2C.SDA trigger i2c --trigger-on start --dut 1
Trigger On Restart
This allows you to trigger a waveform capture on the restart bit of an I2C sequence.
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_trigger_on_restart()
~ lager analog I2C.SDA trigger i2c --trigger-on restart --dut 1
Trigger On Stop
This allows you to trigger a waveform capture on the stop bit of an I2C sequence.
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_trigger_on_stop()
~ lager analog I2C.SDA trigger i2c --trigger-on stop --dut 1
Trigger On NACK
This allows you to trigger a waveform capture if the slave device responds with a NACK.
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_trigger_on_nack()
~ lager analog I2C.SDA trigger i2c --trigger-on nack --dut 1
Trigger On Address
This allows you to trigger a waveform capture on a transmission to a specific slave device address.
from lager import Net, NetType, TriggerI2CDirection
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_trigger_on_address(bits=7, direction=TriggerI2CDirection.Write, address=0x10)
~ lager analog I2C.SDA trigger i2c --trigger-on address --addr-width 7 --direction write --address 16 --dut 1
Trigger On Data
This allows you to trigger a waveform capture on a specific data value.
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_trigger_on_data(width=1, 88)
~ lager analog I2C.SDA trigger i2c --trigger-on data --data-width 1 --data 88 --dut 1
Trigger On Address and Data
This allows you to trigger a waveform capture on a specific data value to a specific slave device address.
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_trigger_on_addr_data(bits=7, direction=TriggerI2CDirection.Write, address=0x10, width=1, data=88)
~ lager analog I2C.SDA trigger i2c --trigger-on addr_data --data-width 1 --data 88 --dut 1
Level
The Level parameter sets the voltage threshold for triggering on an I2C signal.
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_scl_trigger_level(1.8)
sda.trigger_settings.i2c.set_sda_trigger_level(1.8)
~ lager analog I2C.SDA trigger i2c --level-scl 1.8 --level-sda 1.8 --dut 1
Source
from lager import Net, NetType
sda = Net.get('I2C.SDA',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
scl = Net.get('I2C.SCL',
type=NetType.Analog,
setup_function=setup_nets,
teardown_function=teardown_nets)
sda.trigger_settings.i2c.set_source(net_scl=scl, net_sda=sda)
~ lager analog I2C.SDA trigger i2c --source-scl I2C.SCL --source-sda I2C.SDA --dut 1