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.

trigger_on_i2c_start.py
 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()
Trigger On I2C Start Bit
 ~  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.

trigger_on_i2c_restart.py
 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()
Trigger On I2C Restart Bit
 ~  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.

trigger_on_i2c_stop.py
 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()
Trigger On I2C Stop Bit
 ~  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.

trigger_on_i2c_nack.py
 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()
Trigger On I2C NACK Bit
 ~  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.

trigger_on_i2c_address.py
 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)
Trigger On I2C Address
 ~  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.

trigger_on_i2c_data.py
 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)
Trigger On I2C Data
 ~  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.

trigger_on_i2c_address_and_data.py
 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)
Trigger On I2C Address And Data
 ~  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.

set_i2c_levels.py
 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)
Set I2C Voltage Levels
 ~  lager analog I2C.SDA trigger i2c --level-scl 1.8 --level-sda 1.8 --dut 1

Source

set_i2c_trigger_sources.py
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)
Set I2C Trigger Sources
 ~  lager analog I2C.SDA trigger i2c --source-scl I2C.SCL --source-sda I2C.SDA --dut 1